#include "net_video_rec.h" #include "video_rec.h" #include "server/ctp_server.h" #include "server/net_server.h" #include "json_c/json.h" #include "json_c/json_tokener.h" #include "server/server_core.h" #include "system/app_core.h" #include "action.h" #include "storage_device.h" #include "app_config.h" #include "fs/fs.h" #include "app_database.h" #include "http/http_server.h" #include "server/net_server.h" #include "ctp.h" #include "cdp.h" #include "os/os_api.h" #include "action.h" #include "wifi/wifi_connect.h" #include "time.h" #include "event/key_event.h" #define CTP_CMD_HEADER "{\"errno\":%d,\"op\":\"%s\",\"param\":{" #define CTP_CMD_HEADER_WITHOUT_ERR "{\"op\":\"%s\",\"param\":{" #define CTP_CMD_END "}}" #define CTP_ERR_MESSAGE "{\"errno\":%d}" #define WIFI_RT_STREAM 1 static char file_name[64]; static int app_online_timer; extern void net_video_rec_post_msg(const char *msg, ...);//更新UI /************************************/ /*tiny code*/ extern int db_select(const char *name); extern int db_update(const char *name, u32 value); /************************************/ static struct ctp_arg info; int app_rtsp_use_ffmpeg(void) { return (info.num > 0 ? 1 : 0); } struct ctp_cmd_struct { u16 topic_len; char topic[64]; u32 content_len; char content[512]; }; int ctp_cmd_response(void *hdl, const char *cmd/*,u16 cmd_len*/, const char *content /*, u32 content_len*/) { int ret; char msg[512] = {0}; struct tutk_client_info *tutk_hdl = (struct tutk_client_info *)hdl; if (cmd == NULL || content == NULL) { printf("cmd == NULL || content == NULL\n"); return -1; } u16 cmd_len = strlen(cmd); u32 content_len = strlen(content); memcpy(msg, "CTP:", strlen("CTP:")); memcpy(msg + strlen("CTP:"), &cmd_len, 2); memcpy(msg + strlen("CTP:") + 2, cmd, cmd_len); memcpy(msg + strlen("CTP:") + 2 + cmd_len, &content_len, 4); memcpy(msg + strlen("CTP:") + 2 + cmd_len + 4, content, content_len); printf("msg:%s\n", msg + strlen("CTP:") + 2 + cmd_len + 4); /* return 0; */ extern int tutk_noitfy_cli(void *hdl, char *msg, int msg_len); return tutk_noitfy_cli(hdl, msg, sizeof(msg)); } //线程跑的 void __cmd_pro(void *cli, const char *content) { struct ctp_cmd_struct ctp = {0}; char buf[256]; content = strstr(content, "CTP:"); if (!content) { printf("\ncontent err,content is %s\n", content); return; } memcpy(&ctp.topic_len, content + strlen("CTP:"), 2); printf("ctp.topic_len=%d\n", ctp.topic_len); memcpy(ctp.topic, content + strlen("CTP:") + 2, ctp.topic_len); printf("ctp.topic=%s\n", ctp.topic); memcpy(&ctp.content_len, content + strlen("CTP:") + 2 + ctp.topic_len, 4); printf("ctp.content_len=%d\n", ctp.content_len); memcpy(ctp.content, content + strlen("CTP:") + 2 + ctp.topic_len + 4, ctp.content_len); printf("ctp.content=%s\n", ctp.content); ctp_cmd_analysis(ctp.topic, ctp.content, cli); } int send_ctp_string(int cmd_type, char *buf, const char *_req, void *priv) { return ctp_cmd_response(priv, _req/*,u16 cmd_len*/, buf /*, u32 content_len*/); } //param: //字符串集合类似"res:720p,mic:on,par:off"中的以逗号分隔 static inline int _CTP_CMD_COMBINED(int cmd_type, void *priv, u32 err, const char *_req, const char *mothod, char *str) { char *buf = NULL; int ret; int id = 0; char tmp[64]; char *tmp1 = NULL; buf = (char *)malloc(512); if (buf == NULL) { printf("%s %d mem is fail \n", __func__, __LINE__); return -1; } if (err) { ret = snprintf(buf, 512, CTP_CMD_HEADER, err, mothod); } else { ret = snprintf(buf, 512, CTP_CMD_HEADER_WITHOUT_ERR, mothod); } char *key; char *value; if (!err && str != NULL) { while (1) { key = strtok_r(str, ":", &tmp1); //这函数会改数组,不能用const value = strtok_r(NULL, ",", &tmp1); if (key == NULL || value == NULL) { break; } ret = sprintf(tmp, "\"%s\":\"%s\",", key, value); tmp[ret] = '\0'; ret = snprintf(buf, 512, "%s%s", buf, tmp); str = NULL; } buf[ret - 1] = '\0';//主要是去掉最后的逗号 ret = snprintf(buf, 512, "%s%s", buf, CTP_CMD_END); } else { snprintf(buf, 512, "{\"op\":\"NOTIFY\",\"errno\":%d,\"param\":{%s}}", err, str); } //打开ctp_server // void *cli = NULL; if (!strcmp(_req, info.topic) || !priv) { cli = info.cli; } else { cli = priv; } if (send_ctp_string(cmd_type, buf, _req, cli) < 0) { free(buf); return -1; } return 0; } int CTP_CMD_COMBINED(void *priv, u32 err, const char *_req, const char *mothod, char *str) { return _CTP_CMD_COMBINED(CTP_NOTIFY_COMMAND, priv, err, _req, mothod, str); } static void __all_get_cmd_run(void *priv, char *content) { const struct ctp_map_entry *map = NULL; list_for_ctp_mapping_tab(map) { if (map->get != NULL) { map->get(priv, content); //执行map中所有get命令 } } } /*CTP命令解析*/ /*耗时CTP命令,尽量创建线程处理,防止app_core线程taskq full*/ int ctp_cmd_analysis(const char *topic, char *content, void *priv) { struct ctp_map_entry *map = NULL; struct application *app = NULL; char buf[128]; struct intent it; int ret = -1; if (strlen(topic) <= 0 || strlen(content) <= 0) { printf("%s %d err....\n", __func__, __LINE__); return -1; } strcpy(info.topic, topic); info.content = NULL; info.cli = priv; list_for_ctp_mapping_tab(map) { if (!strcmp(topic, map->ctp_command)) { if (strstr(content, "PUT") && map->put != NULL) { /* if (map->sync != true) { */ /* map->sync = true; //防止APP多次发送重发命令 */ //保存priv ret = map->put(priv, content); if (map->dev_cmd != NULL) { int data = db_select(map->dev_cmd); data = data > 0 ? data : 0; snprintf(buf, sizeof(buf), "%s:%d", map->dev_cmd, data); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, map->ctp_command, "NOTIFY", buf); /* db_flush(); */ } /* } else { */ /* printf("Warnning CTP<%s> is doing now\n", map->ctp_command); */ /* ret = 0; */ /* } */ } else if (strstr(content, "GET") && map->get != NULL) { /* if (map->sync != true) { */ /* map->sync = true; */ ret = map->get(priv, content); /* } else { */ /* printf("Warnning CTP<%s> is doing now\n", map->ctp_command); */ /* ret = 0; */ /* } */ } else { puts("content is error \n\n"); } } if (ret != -1) { return ret; } } CTP_CMD_COMBINED(priv, CTP_NO_TOPIC, topic, "NOTIFY", CTP_NO_TOPIC_MSG); printf("%s %d not find it or cb is NULL\n", __func__, __LINE__); return -1; } /*小机主界面UI切换*/ static void net_switch_ui(const char *app_name) { struct intent it; struct application *app = NULL; init_intent(&it); app = get_current_app(); if (app) { if (!strcmp(app->name, "usb_app")) { puts("IN USB MODE\n"); return; } printf("set app:%s get app:%s\n", app_name, app->name); /*if (strcmp(app_name, app->name)) {*/ if (!strstr(app->name, app_name)) { it.action = ACTION_BACK; start_app(&it); it.name = app_name; if (!strcmp("video_rec", app_name)) { it.action = ACTION_VIDEO_REC_MAIN; } if (!strcmp("video_photo", app_name)) { it.action = ACTION_PHOTO_TAKE_MAIN; } /* sys_key_event_takeover(false, false); */ start_app(&it); } } } static int sys_key_touch_disable_scan(void *p) { /* int ret; */ /* ret = sys_key_event_disable_get(); */ /* if (!ret) { //使能需要禁用 */ /* sys_key_event_disable(); */ /* } */ key_event_disable(); /* ret = sys_touch_event_disable_get(); */ /* if (!ret) { //使能需要禁用 */ /* sys_touch_event_disable(); */ /* } */ return 0; } //添加命令回调 int cmd_put_app_access(void *priv, char *content) { json_object *new_obj = NULL; // json_object *parm = NULL; json_object *key = NULL; struct application *app; struct intent it = {0}; const int access_num = 0; char buf[128]; //分解content字段 puts("\n\n APP_ACCESS \n"); printf("app_accept_num : %d \n", info.num); /*sys_key_event_disable();*/ /*sys_touch_event_disable();*/ /*app_online_timer = sys_timer_add(NULL, sys_key_touch_disable_scan, 2 * 1000);//添加检查按键和触屏使能*/ new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); key = json_object_object_get(parm, "type"); const char *type = json_object_get_string(key); if (atoi(type)) { puts("phone : iOS\n"); } else { puts("phone : Andriod\n"); } //版本是否匹配 key = json_object_object_get(parm, "ver"); const char *ver = json_object_get_string(key); printf("version : %s\n", ver); app = get_current_app(); if (app && !strcmp(app->name, "usb_app") && dev_online("usb0")) { CTP_CMD_COMBINED(priv, CTP_IN_USB, "APP_ACCESS", "NOTIFY", CTP_IN_USB_MSG); ctp_srv_disconnect_cli(priv); goto err; } else if (!app || !app->name || !strstr(app->name, "video_rec")) { if (app && app->name) { init_intent(&it); it.name = app->name; it.action = ACTION_BACK; start_app(&it); } init_intent(&it); it.name = "net_video_rec";//不录卡net_video_rec,录卡video_rec it.action = ACTION_VIDEO_REC_MAIN; start_app(&it); } printf("access_num : ctp %d , cdp %d \n\n", ctp_srv_get_cli_cnt(), cdp_srv_get_cli_cnt()); if ((ctp_srv_get_cli_cnt() > ACCESS_NUM || cdp_srv_get_cli_cnt() > ACCESS_NUM) || (ctp_srv_get_cli_cnt() == ACCESS_NUM && cdp_srv_get_cli_cnt() == ACCESS_NUM)) { CTP_CMD_COMBINED(priv, CTP_ACCESS_RFU, "APP_ACCESS", "NOTIFY", CTP_ACCESS_RFU_MSG); ctp_srv_disconnect_cli(priv); goto err; } snprintf(buf, sizeof(buf), "type:%s,ver:%s", type, ver); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "APP_ACCESS", "NOTIFY", buf); //app_access命令完成后,随后发送所有get命令 __all_get_cmd_run(priv, content); err: json_object_put(new_obj); return 0; } int cmd_get_sd_status(void *priv, char *content) { char buf[16]; snprintf(buf, sizeof(buf), "online:%d", storage_device_ready()); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "SD_STATUS", "NOTIFY", buf); return 0; } int cmd_get_keep_alive_interval(void *priv, char *content) { int timeout; char buf[16]; //分解content字段 timeout = ctp_srv_get_keep_alive_timeout(); snprintf(buf, sizeof(buf), "timeout:%d", timeout); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "KEEP_ALIVE_INTERVAL", "NOTIFY", buf); return 0; } int cmd_get_bat_status(void *priv, char *content) { char buf[32]; //分解content字段 snprintf(buf, sizeof(buf), "level:%d", 4); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BAT_STATUS", "NOTIFY", buf); //目前没有电池状态,先写充电中 4 return 0; } int cmd_get_uuid(void *priv, char *content) { u8 temp; int i, j; char buf[128] = {0}; u8 mac[6]; wifi_get_mac(mac); snprintf(buf, sizeof(buf), "uuid:%s%02x%02x%02x%02x%02x%02x", "f2dd3cd7-b026-40aa-aaf4-", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); /*printf("\n\nUUID : %s \n\n",buf);*/ CTP_CMD_COMBINED(priv, CTP_NO_ERR, "UUID", "NOTIFY", buf); return 0; } int cmd_get_video_param(void *priv, char *content) { char buf[128]; int res = db_select("res"); switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:0,fps:%d,rate:%d", 1280, 720, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:0,fps:%d,rate:%d", 640, 480, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:0,fps:%d,rate:%d", 640, 480, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:0,fps:%d,rate:%d", 1280, 720, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; } printf("buf -> %s\n", buf); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_PARAM", "NOTIFY", buf); return 0; } int cmd_put_video_param(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *h = NULL; struct intent it; char buf[128]; const char *height, *width, *format; //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); h = json_object_object_get(parm, "h"); height = json_object_get_string(h); printf("height : %s\n", height); if (strstr(height, "480")) { db_update("res", VIDEO_RES_720P); } else if (strstr(height, "720")) { db_update("res", VIDEO_RES_1080P); } else { db_update("res", VIDEO_RES_1080P); } int res = db_select("res"); #ifdef CONFIG_UI_ENABLE net_video_rec_post_msg("changeRES"); #endif switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 1280, 720, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 1280, 720, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; } printf("buf -> %s\n", buf); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_PARAM", "NOTIFY", buf); json_object_put(new_obj); return 0; } int cmd_get_pull_video_param(void *priv, char *content) { struct intent it; char buf[128]; int res = db_select("res2"); res = res > 0 ? res : 0; switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 1280, 720, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; } printf("buf -> %s\n", buf); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PULL_VIDEO_PARAM", "NOTIFY", buf); return 0; } int cmd_put_pull_video_param(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *h = NULL; struct intent it; char buf[128]; const char *height, *width, *format; //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); h = json_object_object_get(parm, "h"); height = json_object_get_string(h); printf("height : %s\n", height); if (strstr(height, "480")) { db_update("res2", VIDEO_RES_VGA); } else if (strstr(height, "720")) { db_update("res2", VIDEO_RES_720P); } else { db_update("res2", VIDEO_RES_1080P); } int res = db_select("res2"); res = res > 0 ? res : 0; printf("res->%d \n", res); /* #if defined CONFIG_UI_STYLE_LY_ENABLE */ /* ui_text_show_index_by_id(TEXT_RES_REC, res); */ /* #endif */ switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 1280, 720, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 0, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PULL_VIDEO_PARAM", "NOTIFY", buf); json_object_put(new_obj); return 0; } int cmd_put_video_cyc_savefile(void *priv, char *content) { char buf[128]; struct intent it; struct application *app = NULL; if (storage_device_ready() == 0) { CTP_CMD_COMBINED(priv, CTP_SD_OFFLINE, "VIDEO_CYC_SAVEFILE", "NOTIFY", CTP_SD_OFFLINE_MSG); } else { app = get_current_app(); init_intent(&it); /*if (!strcmp(app->name, "video_rec")) {*/ if (strstr(app->name, "video_rec")) { it.name = "net_video_rec"; it.action = ACTION_VIDEO_CYC_SAVEFILE; start_app(&it); } else { /* CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CYC_SAVEFILE", "NOTIFY", CTP_NO_ERR_MSG); */ CTP_CMD_COMBINED(priv, CTP_REQUEST, "VIDEO_CYC_SAVEFILE", "NOTIFY", CTP_REQUEST_MSG); } } return 0; } #ifdef CONFIG_NET_SCR static int cmd_get_net_scr(void *priv, char *content) { char buf[128]; u8 status; status = get_net_scr_status(); snprintf(buf, sizeof(buf), "status:%d", status); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "NET_SCR", "NOTIFY", buf); return 0; } #endif int cmd_get_video_ctrl(void *priv, char *content) { struct intent it; char buf[128]; init_intent(&it); u32 status; const char *path = NULL; net_switch_ui("video_rec"); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; // status = *((u32 *)it.data); if (rec_handler) { status = rec_handler->state; } else { status = 0; } if (status == VIDREC_STA_START) { snprintf(buf, sizeof(buf), "status:%d", 1); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CTRL", "NOTIFY", buf); } else { snprintf(buf, sizeof(buf), "status:%d", 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CTRL", "NOTIFY", buf); } return 0; } int cmd_put_video_ctrl(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; struct json_object *sta = NULL; struct intent it; char buf[128]; const char *status; u32 status1 = 0; u32 status2 = 0; char *path = NULL; init_intent(&it); //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); sta = json_object_object_get(parm, "status"); /*printf("cmd_put_video_ctrl : %s \n",content);*/ status = json_object_get_string(sta); status2 = atoi(status); net_switch_ui("video_rec"); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; if (rec_handler) { status1 = rec_handler->state; } else { status1 = 0; } if (status1 == VIDREC_STA_START || status1 == VIDREC_STA_STARTING) { if (status2) { snprintf(buf, sizeof(buf), "status:%d", 1); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CTRL", "NOTIFY", buf); } else { printf("ctp open video \n\n"); it.action = ACTION_VIDEO_REC_CONCTRL; start_app(&it); } } else { if (status2) { printf("ctp open video \n\n"); it.action = ACTION_VIDEO_REC_CONCTRL; start_app(&it); } else { snprintf(buf, sizeof(buf), "status:%d", 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CTRL", "NOTIFY", buf); } } json_object_put(new_obj); return 0; } int cmd_get_video_finish(void *priv, char *content) { struct intent it; char buf[128]; init_intent(&it); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; if (rec_handler && rec_handler->state == VIDREC_STA_START) { snprintf(buf, sizeof(buf), "status:%d", 1); } else { snprintf(buf, sizeof(buf), "status:%d", 0); } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_FINISH", "NOTIFY", buf); return 0; } int cmd_get_photo_reso(void *priv, char *content) { char buf[32]; struct intent it; init_intent(&it); /* it.action = ACTION_BACK; */ /* start_app(&it); */ int pres = db_select("pres"); pres = pres > 0 ? pres : 0; switch (pres) { case PHOTO_RES_VGA: snprintf(buf, sizeof(buf), "res:0"); break; case PHOTO_RES_1M: snprintf(buf, sizeof(buf), "res:1"); break; case PHOTO_RES_2M: snprintf(buf, sizeof(buf), "res:2"); break; case PHOTO_RES_3M: snprintf(buf, sizeof(buf), "res:3"); break; case PHOTO_RES_5M: snprintf(buf, sizeof(buf), "res:4"); break; case PHOTO_RES_8M: snprintf(buf, sizeof(buf), "res:5"); break; case PHOTO_RES_10M: snprintf(buf, sizeof(buf), "res:6"); break; case PHOTO_RES_12M: snprintf(buf, sizeof(buf), "res:7"); break; default: break; } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_RESO", "NOTIFY", buf); return 0; } int cmd_put_photo_reso(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *res = NULL; u32 pres = 0; char buf[128]; //设置参数 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); res = json_object_object_get(parm, "res"); const char *photo_res_value = json_object_get_string(res); printf("ctp photo reso %s \n", photo_res_value); switch (atoi(photo_res_value)) { case 0: pres = PHOTO_RES_VGA; break; case 1: pres = PHOTO_RES_1M; break; case 2: pres = PHOTO_RES_2M; break; case 3: pres = PHOTO_RES_3M; break; case 4: pres = PHOTO_RES_5M; break; case 5: pres = PHOTO_RES_8M; break; case 6: pres = PHOTO_RES_10M; break; case 7: pres = PHOTO_RES_12M; break; default: break; } if (pres > PHOTO_RES_2M) { //DV15 , 拍照不能大于3M,分辨率<=1280*720 pres = PHOTO_RES_2M; } db_update("pres", pres); snprintf(buf, sizeof(buf), "res:%d", atoi(photo_res_value)); printf("buf->%s\n", buf); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_RESO", "NOTIFY", buf); json_object_put(new_obj); return 0; } static void take_photo_thread(void *arg) { struct intent it; init_intent(&it); it.name = "video_photo"; it.action = ACTION_PHOTO_TAKE_CONTROL; os_time_dly(50); start_app(&it); } int cmd_put_photo_ctrl(void *priv, char *content) { char buf[128]; struct intent it; struct application *app = NULL; if (storage_device_ready() == 0) { //CTP_ERR(CTP_SD_OFFLINE); CTP_CMD_COMBINED(priv, CTP_SD_OFFLINE, "PHOTO_CTRL", "NOTIFY", CTP_SD_OFFLINE_MSG); } else { app = get_current_app(); init_intent(&it); /*if (!strcmp(app->name, "video_rec")) {*/ if (strstr(app->name, "video_rec")) { it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); struct net_video_hdl *net_handler = (struct net_video_hdl *)it.exdata; struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; /*if (net_handler->net_state == VIDREC_STA_START*/ /*|| net_handler->net_state1 == VIDREC_STA_START*/ /*|| rec_handler->state == VIDREC_STA_START) {*/ /*printf("rec_handler->state:%d\n", rec_handler->state);*/ it.action = ACTION_VIDEO_TAKE_PHOTO; start_app(&it); /*}*/ /*else {*/ /*net_switch_ui("video_photo");*/ /*thread_fork("take_photo_thread", 10, 0x1000, 0, 0, take_photo_thread, NULL);*/ /*}*/ } /*else if (!strcmp(app->name, "video_dec")) {*/ /*net_switch_ui("video_photo");*/ /*thread_fork("take_photo_thread", 10, 0x1000, 0, 0, take_photo_thread, NULL);*/ /*} else {*/ /*it.name = "video_photo";*/ /*it.action = ACTION_PHOTO_TAKE_CONTROL;*/ /*start_app(&it);*/ /*}*/ } return 0; } int cmd_get_self_timer(void *priv, char *content) { char buf[32]; int phm = db_select("phm"); snprintf(buf, sizeof(buf), "phm:%d", phm > 0 ? phm : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "SELF_TIMER", "NOTIFY", buf); return 0; } int cmd_put_self_timer(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *phm = NULL; char buf[128]; //设置参数 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); phm = json_object_object_get(parm, "phm"); const char *photo_phm_value = json_object_get_string(phm); printf("ctp self timer %s \n", photo_phm_value); db_update("phm", atoi(photo_phm_value)); json_object_put(new_obj); return 0; } int cmd_get_burst_shot(void *priv, char *content) { char buf[32]; int cyt = db_select("cyt"); snprintf(buf, sizeof(buf), "cyt:%d", cyt > 0 ? cyt : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BURST_SHOT", "NOTIFY", buf); return 0; } int cmd_put_burst_shot(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *cyt = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); cyt = json_object_object_get(parm, "cyt"); const char *photo_cyt_value = json_object_get_string(cyt); printf("ctp burst_shot %s \n", photo_cyt_value); db_update("cyt", atoi(photo_cyt_value)); json_object_put(new_obj); return 0; } int cmd_get_key_voice(void *priv, char *content) { char buf[32]; int kvo = db_select("kvo"); snprintf(buf, sizeof(buf), "kvo:%d", kvo > 0 ? kvo : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "KEY_VOICE", "NOTIFY", buf); return 0; } int cmd_put_key_voice(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *kvo = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); kvo = json_object_object_get(parm, "kvo"); const char *photo_kvo_value = json_object_get_string(kvo); db_update("kvo", atoi(photo_kvo_value)); json_object_put(new_obj); return 0; } int cmd_get_board_voice(void *priv, char *content) { char buf[32]; int bvo = db_select("bvo"); snprintf(buf, sizeof(buf), "bvo:%d", bvo > 0 ? bvo : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BOARD_VOICE", "NOTIFY", buf); return 0; } int cmd_put_board_voice(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *bvo = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); bvo = json_object_object_get(parm, "bvo"); const char *bvo_value = json_object_get_string(bvo); db_update("bvo", atoi(bvo_value)); json_object_put(new_obj); return 0; } int cmd_get_light_fre(void *priv, char *content) { char buf[32]; int fre = db_select("fre"); snprintf(buf, sizeof(buf), "fre:%d", fre > 0 ? fre : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "LIGHT_FRE", "NOTIFY", buf); return 0; } int cmd_put_light_fre(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *fre = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); fre = json_object_object_get(parm, "fre"); const char *light_fre_value = json_object_get_string(fre); db_update("fre", atoi(light_fre_value)); json_object_put(new_obj); return 0; } int cmd_get_auto_stutdown(void *priv, char *content) { char buf[32]; int aff = db_select("aff"); snprintf(buf, sizeof(buf), "aff:%d", aff > 0 ? aff : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "AUTO_STUTDOWN", "NOTIFY", buf); return 0; } int cmd_put_auto_stutdown(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *aff = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); aff = json_object_object_get(parm, "aff"); const char *aff_value = json_object_get_string(aff); printf("ctp aff %s \n", aff_value); db_update("aff", atoi(aff_value)); json_object_put(new_obj); return 0; } int cmd_get_screen_pro(void *priv, char *content) { char buf[32]; int pro = db_select("pro"); snprintf(buf, sizeof(buf), "pro:%d", pro > 0 ? pro : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "SCREEN_PRO", "NOTIFY", buf); return 0; } int cmd_put_screen_pro(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *pro = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); pro = json_object_object_get(parm, "pro"); const char *pro_value = json_object_get_string(pro); printf("ctp pro %s \n", pro_value); db_update("pro", atoi(pro_value)); json_object_put(new_obj); return 0; } int cmd_get_tv_mode(void *priv, char *content) { char buf[32]; int tvm = db_select("tvm"); snprintf(buf, sizeof(buf), "tvm:%d", tvm > 0 ? tvm : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "TV_MODE", "NOTIFY", buf); return 0; } int cmd_put_tv_mode(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tvm = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tvm = json_object_object_get(parm, "tvm"); const char *tvm_value = json_object_get_string(tvm); printf("ctp pro %s \n", tvm_value); db_update("tvm", atoi(tvm_value)); json_object_put(new_obj); return 0; } int cmd_get_sd_size(void *priv, char *content) { char buf[32]; u32 space; struct vfs_partition *part; if (storage_device_ready() == 0) { CTP_CMD_COMBINED(priv, CTP_SD_OFFLINE, "TF_CAP", "NOTIFY", CTP_SD_OFFLINE_MSG); } else { part = fget_partition(CONFIG_ROOT_PATH); fget_free_space(CONFIG_ROOT_PATH, &space); snprintf(buf, sizeof(buf), "left:%d,total:%d", space / 1024, part->total_size / 1024); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "TF_CAP", "NOTIFY", buf); } return 0; } int cmd_put_format(void *priv, char *content) { char buf[64]; int err; if (storage_device_ready()) { err = f_format(CONFIG_ROOT_PATH, "fat", 32 * 1024); if (err != 0) { CTP_CMD_COMBINED(priv, CTP_SDCARD, "FORMAT", "NOTIFY", CTP_SDCARD_MSG); return -EFAULT; } } else { err = f_format(SDX_DEV, "fat", 32 * 1024); if (err != 0) { CTP_CMD_COMBINED(priv, CTP_SDCARD, "FORMAT", "NOTIFY", CTP_SDCARD_MSG); return -EFAULT; } } #if defined CONFIG_ENABLE_VLIST FILE_DELETE(NULL, 1); #endif snprintf(buf, sizeof(buf), "frm:1"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORMAT", "NOTIFY", buf); return 0; } int cmd_get_system_default(void *priv, char *content) { char buf[32]; return 0; } int cmd_put_system_default(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *def = NULL; char buf[128]; char ssid[32]; char pwd[64]; u8 mac_addr[6]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); def = json_object_object_get(parm, "def"); const char *def_value = json_object_get_string(def); printf("ctp pro %s \n", def_value); if (atoi(def_value)) { #if defined (WIFI_CAM_SUFFIX) sprintf(ssid, AP_WIFI_CAM_PREFIX WIFI_CAM_SUFFIX); #else wifi_get_mac(mac_addr); sprintf(ssid, AP_WIFI_CAM_PREFIX"%02x%02x%02x%02x%02x%02x" , mac_addr[0] , mac_addr[1] , mac_addr[2] , mac_addr[3] , mac_addr[4] , mac_addr[5]); #endif wifi_store_mode_info(AP_MODE, ssid, AP_WIFI_CAM_WIFI_PWD); snprintf(buf, sizeof(buf), "def:1"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "SYSTEM_DEFAULT", "NOTIFY", buf); os_time_dly(200); cpu_reset(); } json_object_put(new_obj); return 0; } int cmd_get_language(void *priv, char *content) { char buf[32]; int lag = db_select("lag"); snprintf(buf, sizeof(buf), "lag:%d", lag > 0 ? lag : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "LANGUAGE", "NOTIFY", buf); return 0; } int cmd_put_language(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *lag = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); lag = json_object_object_get(parm, "lag"); const char *lag_value = json_object_get_string(lag); printf("cmd_put_language :ctp pro %s \n", lag_value); db_update("lag", atoi(lag_value)); /*lag_set_function(atoi(lag_value));*/ json_object_put(new_obj); return 0; } int cmd_get_double_video(void *priv, char *content) { char buf[32]; int two = db_select("two"); snprintf(buf, sizeof(buf), "two:%d", two > 0 ? two : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "DOUBLE_VIDEO", "NOTIFY", buf); return 0; } int cmd_put_double_video(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "two"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("two", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_video_loop(void *priv, char *content) { char buf[32]; int cyc = db_select("cyc"); snprintf(buf, sizeof(buf), "cyc:%d", cyc > 0 ? cyc : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_LOOP", "NOTIFY", buf); return 0; } int cmd_put_video_loop(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("cyc", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_video_wdr(void *priv, char *content) { char buf[32]; int wdr = db_select("wdr"); snprintf(buf, sizeof(buf), "wdr:%d", wdr > 0 ? wdr : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_WDR", "NOTIFY", buf); return 0; } int cmd_put_video_wdr(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "wdr"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); u32 wdr = db_update("wdr", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_video_exp(void *priv, char *content) { char buf[32]; int exp = db_select("exp"); snprintf(buf, sizeof(buf), "exp:%d", exp > 0 ? exp : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_EXP", "NOTIFY", buf); return 0; } int cmd_put_video_exp(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "exp"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("exp", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_video_move_check(void *priv, char *content) { char buf[32]; int exp = db_select("mot"); snprintf(buf, sizeof(buf), "mot:%d", exp > 0 ? exp : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "MOVE_CHECK", "NOTIFY", buf); return 0; } int cmd_put_video_move_check(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "mot"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("mot", atoi(tmp_value)); #ifdef CONFIG_UI_ENABLE /*net_video_rec_post_msg("changeMOT");*/ #endif json_object_put(new_obj); return 0; } int cmd_get_video_mic(void *priv, char *content) { char buf[32]; int mic = db_select("mic"); snprintf(buf, sizeof(buf), "mic:%d", mic > 0 ? mic : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_MIC", "NOTIFY", buf); return 0; } int cmd_put_video_mic(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "mic"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("mic", atoi(tmp_value)); json_object_put(new_obj); #ifdef CONFIG_UI_ENABLE if (atoi(tmp_value)) { net_video_rec_post_msg("onMIC"); } else { net_video_rec_post_msg("offMIC"); } #endif return 0; } int cmd_get_video_date(void *priv, char *content) { char buf[32]; int dat = db_select("dat"); snprintf(buf, sizeof(buf), "dat:%d", dat > 0 ? dat : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_DATE", "NOTIFY", buf); return 0; } int cmd_get_rt_stream0_res(void *priv, char *content) { char buf[32]; int dat = db_select("rtf"); snprintf(buf, sizeof(buf), "rtf:%d", dat > 0 ? dat : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "RTF_RES", "NOTIFY", buf); return 0; } int cmd_get_rt_stream1_res(void *priv, char *content) { char buf[32]; int dat = db_select("rtb"); snprintf(buf, sizeof(buf), "rtb:%d", dat > 0 ? dat : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "RTB_RES", "NOTIFY", buf); return 0; } /*extern int lab_set_function(u32 parm);*/ int cmd_put_video_date(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "dat"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("dat", atoi(tmp_value)); /*lab_set_function(atoi(tmp_value));*/ json_object_put(new_obj); return 0; } int cmd_get_video_car_num(void *priv, char *content) { char buf[32]; int num = db_select("num"); snprintf(buf, sizeof(buf), "num:%d", num > 0 ? num : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_CAR_NUM", "NOTIFY", buf); return 0; } int cmd_put_video_car_num(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "num"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("num", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_gra_sen(void *priv, char *content) { char buf[32]; int gra = db_select("gra"); snprintf(buf, sizeof(buf), "gra:%d", gra > 0 ? gra : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "GRA_SEN", "NOTIFY", buf); return 0; } int cmd_put_gra_sen(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "gra"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("gra", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_video_par_car(void *priv, char *content) { char buf[32]; int par = db_select("par"); snprintf(buf, sizeof(buf), "par:%d", par > 0 ? par : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_PAR_CAR", "NOTIFY", buf); return 0; } int cmd_put_video_par_car(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "par"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("par", atoi(tmp_value)); json_object_put(new_obj); #ifdef CONFIG_UI_ENABLE net_video_rec_post_msg("changePAR"); #endif return 0; } int cmd_get_video_inv(void *priv, char *content) { char buf[32]; int gap = db_select("gap"); snprintf(buf, sizeof(buf), "gap:%d", gap > 0 ? gap : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_INV", "NOTIFY", buf); return 0; } int cmd_put_video_inv(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "gap"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("gap", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_quality(void *priv, char *content) { char buf[32]; int qua = db_select("qua"); snprintf(buf, sizeof(buf), "qua:%d", qua > 0 ? qua : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_QUALITY", "NOTIFY", buf); return 0; } int cmd_put_photo_quality(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "qua"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("qua", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_sharpness(void *priv, char *content) { char buf[32]; int acu = db_select("acu"); snprintf(buf, sizeof(buf), "acu:%d", acu > 0 ? acu : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_SHARPNESS", "NOTIFY", buf); return 0; } int cmd_put_photo_sharpness(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "acu"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("acu", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_white_balance(void *priv, char *content) { char buf[32]; int wbl = db_select("wbl"); snprintf(buf, sizeof(buf), "wbl:%d", wbl > 0 ? wbl : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WHITE_BALANCE", "NOTIFY", buf); return 0; } int cmd_put_white_balance(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "wbl"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("wbl", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_iso(void *priv, char *content) { char buf[32]; int iso = db_select("iso"); snprintf(buf, sizeof(buf), "iso:%d", iso > 0 ? iso : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_ISO", "NOTIFY", buf); return 0; } int cmd_put_photo_iso(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; tmp = json_object_object_get(parm, "iso"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("iso", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_exp(void *priv, char *content) { char buf[32]; int pexp = db_select("pexp"); snprintf(buf, sizeof(buf), "exp:%d", pexp > 0 ? pexp : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_EXP", "NOTIFY", buf); return 0; } int cmd_put_photo_exp(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "exp"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("pexp", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_anti_tremor(void *priv, char *content) { char buf[32]; int sok = db_select("sok"); snprintf(buf, sizeof(buf), "sok:%d", sok > 0 ? sok : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "ANTI_TREMOR", "NOTIFY", buf); return 0; } int cmd_put_anti_tremor(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "sok"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("sok", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_date(void *priv, char *content) { char buf[32]; int dat = db_select("dat"); snprintf(buf, sizeof(buf), "dat:%d", dat > 0 ? dat : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_DATE", "NOTIFY", buf); return 0; } int cmd_put_photo_date(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "dat"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("pdat", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_fast_sca(void *priv, char *content) { char buf[32]; int sca = db_select("sca"); snprintf(buf, sizeof(buf), "sca:%d", sca > 0 ? sca : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FAST_SCA", "NOTIFY", buf); return 0; } int cmd_put_fast_sca(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "sca"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("sca", atoi(tmp_value)); json_object_put(new_obj); return 0; } int cmd_get_photo_color(void *priv, char *content) { char buf[32]; int col = db_select("col"); snprintf(buf, sizeof(buf), "col:%d", col > 0 ? col : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "PHOTO_COLOR", "NOTIFY", buf); return 0; } int cmd_put_photo_color(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "col"); const char *tmp_value = json_object_get_string(tmp); printf("ctp pro %s \n", tmp_value); db_update("col", atoi(tmp_value)); json_object_put(new_obj); return 0; } #if WIFI_RT_STREAM int cmd_put_open_rt_stream(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *h, *w, *format, *fps; //切换UI,禁止key /* sys_key_event_disable(); */ net_switch_ui("video_rec"); struct intent it; init_intent(&it); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO0_OPEN_RT_STREAM; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); h = json_object_get_string(json_object_object_get(parm, "h")); w = json_object_get_string(json_object_object_get(parm, "w")); format = json_object_get_string(json_object_object_get(parm, "format")); fps = json_object_get_string(json_object_object_get(parm, "fps")); mark = 2; struct rt_stream_app_info info; if (w && h) { info.width = atoi(w); info.height = atoi(h); } else { info.width = 1920; info.height = 1080; } if (info.width == 1920) { db_update("rtf", VIDEO_RES_1080P); } else if (info.width == 1280) { db_update("rtf", VIDEO_RES_720P); } else if (info.width == 640) { db_update("rtf", VIDEO_RES_VGA); } /* db_flush(); */ info.fps = atoi(fps); info.fps = 15; if (atoi(format) == 1) { info.type = NET_VIDEO_FMT_MOV; } else if (atoi(format) == 0) { info.type = NET_VIDEO_FMT_AVI; } else { info.type = NET_VIDEO_FMT_MOV; printf("undefined info.type ,default use H264\n"); } info.priv = priv; it.data = (const char *)&mark;//打开视频 it.exdata = (u32) &info; //视频参数 start_app(&it); json_object_put(new_obj); return 0; } int cmd_put_open_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); /* json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *format, *rate, *width, *channel; struct intent it; init_intent(&it); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO0_OPEN_RT_STREAM; new_obj = json_tokener_parse(content);parm = json_object_object_get(new_obj, "param"); rate = json_object_get_string(json_object_object_get(parm, "rate")); width = json_object_get_string(json_object_object_get(parm, "width")); format = json_object_get_string(json_object_object_get(parm, "format")); channel = json_object_get_string(json_object_object_get(parm, "channel")); snprintf(buf, sizeof(buf), "width:%s,rate:%s,format:%s,channel:%s\n", width, rate, format, channel); mark = 0; it.data = (const char *)&mark;//打开音频 it.exdata = buf; //音频参数 start_app(&it); json_object_put(new_obj); */ return 0; } int cmd_put_open_pull_rt_stream(void *priv, char *content) { #if defined (CONFIG_VIDEO1_ENABLE) || defined (CONFIG_VIDEO2_ENABLE) #ifdef CONFIG_VIDEO1_ENABLE #ifndef CONFIG_SPI_VIDEO_ENABLE if (!dev_online("video1.*")) { CTP_CMD_COMBINED(NULL, CTP_PULL_OFFLINE, "OPEN_PULL_RT_STREAM", "NOTIFY", CTP_PULL_OFFLINE_MSG); return 0; } #endif #endif #ifdef CONFIG_VIDEO2_ENABLE if (!dev_online("uvc")) { CTP_CMD_COMBINED(NULL, CTP_PULL_OFFLINE, "OPEN_PULL_RT_STREAM", "NOTIFY", CTP_PULL_OFFLINE_MSG); return 0; } #endif json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *h, *w, *format, *fps; struct intent it; init_intent(&it); net_switch_ui("video_rec"); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO1_OPEN_RT_STREAM; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); h = json_object_get_string(json_object_object_get(parm, "h")); w = json_object_get_string(json_object_object_get(parm, "w")); format = json_object_get_string(json_object_object_get(parm, "format")); fps = json_object_get_string(json_object_object_get(parm, "fps")); struct rt_stream_app_info info; info.width = atoi(w); info.height = atoi(h); info.fps = atoi(fps); if (atoi(format) == 1) { info.type = NET_VIDEO_FMT_MOV; } else if (atoi(format) == 0) { info.type = NET_VIDEO_FMT_AVI; } else { info.type = NET_VIDEO_FMT_MOV; printf("undefined info.type ,default use H264\n"); } info.priv = priv; if (info.width == 1920) { db_update("rtb", VIDEO_RES_1080P); } else if (info.width == 1280) { db_update("rtb", VIDEO_RES_720P); } else if (info.width == 640) { db_update("rtb", VIDEO_RES_VGA); } /* db_flush(); */ mark = 2; it.data = (const char *)&mark;//打开视频 it.exdata = (u32) &info; //视频参数 start_app(&it); json_object_put(new_obj); #else CTP_CMD_COMBINED(priv, CTP_PULL_NOSUPPORT, "OPEN_PULL_RT_STREAM", "NOTIFY", CTP_PULL_NOSUPPORT_MSG); #endif return 0; } int cmd_put_open_pull_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); /* json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *format, *rate, *width, *channel; struct intent it; init_intent(&it); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO1_OPEN_RT_STREAM; new_obj = json_tokener_parse(content);parm = json_object_object_get(new_obj, "param"); rate = json_object_get_string(json_object_object_get(parm, "rate")); width = json_object_get_string(json_object_object_get(parm, "width")); format = json_object_get_string(json_object_object_get(parm, "format")); channel = json_object_get_string(json_object_object_get(parm, "channel")); //printf("ctp pro %s \n", h); snprintf(buf, sizeof(buf), "width:%s,rate:%s,format:%s,channel:%s\n", width, rate, format, channel); mark = 0; it.data = (const char *)&mark;//打开音频 it.exdata = buf; //音频参数 start_app(&it); json_object_put(new_obj); */ return 0; } void close_rt_stream(struct sockaddr_in *dest) { struct intent it; u8 mark = 2; if (!ctp_srv_get_cli_cnt()) { //打开key ,切换UI(录像模式) net_switch_ui("video_rec"); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); struct net_video_hdl *net_rec_handler = (struct net_video_hdl *)it.exdata; if (net_rec_handler && net_rec_handler->net_video0_vrt_on) { puts("all rt0 stream close\n"); it.action = ACTION_VIDEO0_CLOSE_RT_STREAM; it.data = (char *)&mark; start_app(&it); } if (net_rec_handler && net_rec_handler->net_video1_vrt_on) { puts("all rt1 stream close\n"); it.action = ACTION_VIDEO1_CLOSE_RT_STREAM; it.data = (char *)&mark; start_app(&it); } } } static int cmd_put_close_rt_stream(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *status = NULL; struct intent it; init_intent(&it); net_switch_ui("video_rec"); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO0_CLOSE_RT_STREAM; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_get_string(json_object_object_get(parm, "status")); if (atoi(status)) { mark = 2; it.data = (const char *)&mark; //close video param start_app(&it); } json_object_put(new_obj); return 0; } int cmd_put_close_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); return 0; } int cmd_put_close_pull_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); return 0; } int cmd_put_close_pull_rt_stream(void *priv, char *content) { #if defined (CONFIG_VIDEO1_ENABLE) || defined (CONFIG_VIDEO2_ENABLE) #ifdef CONFIG_VIDEO1_ENABLE #ifndef CONFIG_SPI_VIDEO_ENABLE if (!dev_online("video1.*")) { CTP_CMD_COMBINED(NULL, CTP_PULL_OFFLINE, "CLOSE_PULL_RT_STREAM", "NOTIFY", CTP_PULL_OFFLINE_MSG); return 0; } #endif #endif #ifdef CONFIG_VIDEO2_ENABLE if (!dev_online("uvc")) { CTP_CMD_COMBINED(NULL, CTP_PULL_OFFLINE, "CLOSE_PULL_RT_STREAM", "NOTIFY", CTP_PULL_OFFLINE_MSG); return 0; } #endif json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; u8 mark; const char *status = NULL; struct intent it; /* sys_key_event_enable(); */ init_intent(&it); net_switch_ui("video_rec"); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO1_CLOSE_RT_STREAM; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_get_string(json_object_object_get(parm, "status")); if (atoi(status)) { mark = 2; it.data = (const char *)&mark; //close video param start_app(&it); } json_object_put(new_obj); #else CTP_CMD_COMBINED(priv, CTP_PULL_NOSUPPORT, "CLOSE_PULL_RT_STREAM", "NOTIFY", CTP_PULL_NOSUPPORT_MSG); #endif return 0; } int cmd_get_close_rt_stream(void *priv, char *content) { struct intent it; char buf[128]; init_intent(&it); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); /* struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; */ struct net_video_hdl *rec_handler = (struct net_video_hdl *)it.exdata; if (rec_handler && rec_handler->net_video0_vrt_on == 1) { strcpy(buf, "status:1"); } else { strcpy(buf, "status:0"); } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "CLOSE_RT_STREAM", "NOTIFY", buf); return 0; } int cmd_get_close_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); /* struct intent it; char buf[128]; init_intent(&it); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; if(rec_handler && rec_handler->net_video0_art_on == 1) { strcpy(buf, "status:1"); } else { strcpy(buf, "status:0"); } CTP_CMD_COMBINED(priv ,CTP_NO_ERR,"CLOSE_AUDIO_RT_STREAM", "NOTIFY", buf); */ return 0; } int cmd_get_close_pull_audio_rt_stream(void *priv, char *content) { printf("no set %s function\n", __func__); /* struct intent it; char buf[128]; init_intent(&it); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; if(rec_handler && rec_handler->net_video1_art_on == 1) { strcpy(buf, "status:1"); } else { strcpy(buf, "status:0"); } CTP_CMD_COMBINED(priv ,CTP_NO_ERR,"CLOSE_PULL_AUDIO_RT_STREAM", "NOTIFY", buf); */ return 0; } int cmd_get_close_pull_rt_stream(void *priv, char *content) { #if defined (CONFIG_VIDEO1_ENABLE) || defined (CONFIG_VIDEO2_ENABLE) struct intent it; char buf[128]; init_intent(&it); it.name = "net_video_rec"; it.action = ACTION_VIDEO_REC_GET_APP_STATUS; start_app(&it); /* struct video_rec_hdl *rec_handler = (struct video_rec_hdl *)it.data; */ struct net_video_hdl *rec_handler = (struct net_video_hdl *)it.data; if (rec_handler && rec_handler->net_video1_vrt_on == 1) { strcpy(buf, "status:1"); } else { strcpy(buf, "status:0"); } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "CLOSE_PULL_RT_STREAM", "NOTIFY", buf); #else CTP_CMD_COMBINED(priv, CTP_PULL_NOSUPPORT, "CLOSE_PULL_RT_STREAM", "NOTIFY", CTP_PULL_NOSUPPORT_MSG); #endif return 0; } #endif #if 1 static int cmd_put_make_forward_files_list(void *priv, char *content) { char buf[128]; char path[64]; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char type = 0; u32 file_num = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "type"); const char *tmp_value = json_object_get_string(tmp); tmp = json_object_object_get(parm, "num"); if (tmp != NULL) { const char *num = json_object_get_string(tmp); if (num != NULL && atoi(num) != 0) { file_num = atoi(num); } } if (tmp_value == NULL) { type = VID_JPG; } else { type = atoi(tmp_value); } /*printf("11-----ctp type %s , file_num = %d \n\n", tmp_value, file_num);*/ switch (type) { case -1 : CTP_CMD_COMBINED(priv, CTP_SD_OFFLINE, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", CTP_SD_OFFLINE_MSG); break; case NONE: /*snprintf(buf, sizeof(buf), "type:0,path:%s", CONFIG_REC_PATH_1"vf_list.txt");*/ snprintf(buf, sizeof(buf), "type:0,path:%s", CONFIG_REC_PATH_0"vf_list.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", buf); break; case VID_JPG: if (!file_num) { #if defined CONFIG_ENABLE_VLIST if (!FILE_INITIND_CHECK()) { FILE_GEN(); /*snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_1"vf_list.txt");*/ snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_0"vf_list.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", buf); } else { CTP_CMD_COMBINED(priv, CTP_REQUEST, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", CTP_REQUEST_MSG); } } else { FILE_LIST_INIT_SMALL(file_num); /*snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_1"vf_list_small.txt");*/ snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_0"vf_list_small.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", buf); #endif } break; case VIDEO: vf_list(type, 1, path); snprintf(buf, sizeof(buf), "type:2,path:%s", path); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", buf); break; case JPG: vf_list(type, 1, path); snprintf(buf, sizeof(buf), "type:3,path:%s", path); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FORWARD_MEDIA_FILES_LIST", "NOTIFY", buf); break; default: break; } json_object_put(new_obj); return 0; } static int cmd_put_make_behind_files_list(void *priv, char *content) { char buf[128]; char path[64]; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char type = 0; u32 file_num = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "type"); const char *tmp_value = json_object_get_string(tmp); printf("ctp type %s \n", tmp_value); tmp = json_object_object_get(parm, "num"); if (tmp != NULL) { const char *num = json_object_get_string(tmp); if (num != NULL && atoi(num) != 0) { file_num = atoi(num); } } if (tmp_value == NULL) { type = VID_JPG; } else { type = atoi(tmp_value); } switch (type) { case -1 : CTP_CMD_COMBINED(priv, CTP_SD_OFFLINE, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", CTP_SD_OFFLINE_MSG); break; case NONE: snprintf(buf, sizeof(buf), "type:0,path:%s", CONFIG_REC_PATH_2"vf_list.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", buf); break; case VID_JPG: if (!file_num) { #if defined CONFIG_ENABLE_VLIST if (!FILE_INITIND_CHECK()) { FILE_GEN(); snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_2"vf_list.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", buf); } else { CTP_CMD_COMBINED(priv, CTP_REQUEST, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", CTP_REQUEST_MSG); } } else { FILE_LIST_INIT_SMALL(file_num); snprintf(buf, sizeof(buf), "type:1,path:%s", CONFIG_REC_PATH_2"vf_list_small.txt"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", buf); #endif } break; case VIDEO: vf_list(type, 0, path); snprintf(buf, sizeof(buf), "type:2,path:%s", path); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", buf); break; case JPG: vf_list(type, 0, path); snprintf(buf, sizeof(buf), "type:3,path:%s", path); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "BEHIND_MEDIA_FILES_LIST", "NOTIFY", buf); break; default: break; } json_object_put(new_obj); return 0; } #endif static int cmd_get_firmware_upgrade_ready(void *priv, char *content) { char buf[128]; u8 status; status = 1; snprintf(buf, sizeof(buf), "status:%d", status); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FIRMWARE_UPGRADE_READY", "status", buf); return 0; } static int cmd_put_firmware_file_send_end(void *priv, char *content) { CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FIRMWARE_FILE_SEND_END", "NOTIFY", NULL); return 0; } static int cmd_get_rt_talk_ctl(void *priv, char *content) { char buf[128]; /*extern u8 get_rt_talk_status(void);*/ /*snprintf(buf, sizeof(buf), "status:%d", get_rt_talk_status());*/ /*CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "RT_TALK_CTL", "NOTIFY", buf);*/ return 0; } static int cmd_put_rt_talk_ctl(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; const char *s_str; u8 status; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "status"); s_str = json_object_get_string(tmp); printf("\n------%s------\n", s_str); status = atoi(s_str); printf("\n-----status is %d-------\n", status); snprintf(buf, sizeof(buf), "status:%d", status); /*if (status == 1) {*/ /*extern int rt_talk_net_init(void);*/ /*rt_talk_net_init();*/ /*} else if (status == 0) {*/ /*extern int rt_talk_net_uninit(void);*/ /*rt_talk_net_uninit();*/ /*}*/ snprintf(buf, sizeof(buf), "status:%d", status); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "RT_TALK_CTL", "NOTIFY", buf); return 0; } static int cmd_get_voice_talk_ctl(void *priv, char *content) { char buf[256 ] = {0}; snprintf(buf, sizeof(buf), CONFIG_ROOT_PATH); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "VOICE_TALK_CTL", "NOTIFY", buf); return 0; } static int cmd_put_voice_talk_ctl(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[256 ] = {0}; const char *s_str; u8 status; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "status"); s_str = json_object_get_string(tmp); status = atoi(s_str); printf("\n-----status is %d-------\n", status); snprintf(buf, sizeof(buf), "status:%d", status); if (status == 1) { tmp = json_object_object_get(parm, "PATH"); s_str = json_object_get_string(tmp); printf("\n %s \n", s_str); /*extern void play_voice_file(const char *file_name);*/ /*play_voice_file(s_str);*/ } else { } CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "VOICE_TALK_CTL", "NOTIFY", buf); return 0; } static int cmd_put_files_delete(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[256 ] = {0}; u32 i = 0; char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); while (1) { sprintf(filename, "path_%d", i); tmp = json_object_object_get(parm, filename); if (tmp == NULL) { break; } const char *tmp_value = json_object_get_string(tmp); printf("filename %s \n", tmp_value); if (fdelete_by_name(tmp_value)) { printf("fdelete by name\n"); ret = snprintf(buf, sizeof(buf), "status:%d,path:%s", 0, tmp_value); CTP_CMD_COMBINED(priv, CTP_OPEN_FILE, "FILES_DELETE", "NOTIFY", buf); } else { #if defined CONFIG_ENABLE_VLIST FILE_DELETE(tmp_value, 1); #endif snprintf(buf, sizeof(buf), "status:%d,path:%s", 1, tmp_value); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FILES_DELETE", "NOTIFY", buf); } i++; } json_object_put(new_obj); return 0; } static int cmd_put_multi_cover_figure(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; u32 i = 0; char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); char (*file_name_array)[64] = calloc(1, 51 * 64); if (file_name_array == NULL) { CTP_CMD_COMBINED(priv, CTP_REQUEST, "MULTI_COVER_FIGURE", "NOTIFY", CTP_REQUEST_MSG); return 0; } while (1) { sprintf(filename, "path_%d", i); tmp = json_object_object_get(parm, filename); if (tmp == NULL) { break; } if (i > 50) { printf("path is too many\n"); CTP_CMD_COMBINED(priv, CTP_REQUEST, "MULTI_COVER_FIGURE", "NOTIFY", CTP_REQUEST_MSG); break; } const char *tmp_value = json_object_get_string(tmp); strcpy(file_name_array[i], tmp_value); /* printf("%d filename %s \n", i, file_name_array[i]); */ i++; } if (!i) { free(file_name_array); file_name_array = NULL; CTP_CMD_COMBINED(priv, CTP_REQUEST, "MULTI_COVER_FIGURE", "NOTIFY", CTP_REQUEST_MSG); json_object_put(new_obj); return 0; } struct net_req req; memset(&req, 0, sizeof(struct net_req)); req.pre.type = PREVIEW; req.pre.filename = file_name_array; /*if (video_preview_post_msg(&req)) {*/ /*CTP_CMD_COMBINED(priv, CTP_REQUEST, "MULTI_COVER_FIGURE", "NOTIFY", CTP_REQUEST_MSG);*/ /*json_object_put(new_obj);*/ /*return 0;*/ /*}*/ json_object_put(new_obj); return 0; } static int cmd_put_thunbails(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; u32 i = 0; char buf[128]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "path"); const char *path = json_object_get_string(tmp); tmp = json_object_object_get(parm, "offset"); const char *offset = json_object_get_string(tmp); tmp = json_object_object_get(parm, "num"); const char *num = json_object_get_string(tmp); tmp = json_object_object_get(parm, "timeinv"); const char *timeinv = json_object_get_string(tmp); printf("path -> %s offset-> %s num->%s timeinv->%s\n" , path , offset , num , timeinv); struct net_req req; memset(&req, 0, sizeof(struct net_req)); strcpy(file_name, path); req.pre.type = THUS; char (*filename)[64]; req.pre.filename = (char (*)[64])file_name; if (num == NULL) { req.pre.num = 0; } else { req.pre.num = atoi(num); } req.pre.offset = atoi(offset); req.pre.timeinv = atoi(timeinv); /*if (video_preview_post_msg(&req)) {*/ /*CTP_CMD_COMBINED(priv, CTP_REQUEST, "THUMBNAILS", "NOTIFY", CTP_REQUEST_MSG);*/ /*json_object_put(new_obj);*/ /*return 0;*/ /*}*/ json_object_put(new_obj); return 0; } static int cmd_put_thunbails_ctrl(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; u32 i = 0; char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "status"); const char *status = json_object_get_string(tmp); printf("status -> %s\n", status); if (ctp_srv_get_cli_addr(priv)) { /*video_cli_slide(ctp_srv_get_cli_addr(priv), atoi(status));*/ } else { /*video_cli_slide(cdp_srv_get_cli_addr(priv), atoi(status));*/ } snprintf(buf, sizeof(buf), "status:%s", status); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "THUMBNAILS_CTRL", "NOTIFY", buf); json_object_put(new_obj); return 0; } static int cmd_put_time_axis_play(void *priv, char *content) { struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; u32 i = 0; char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "path"); const char *file_name = json_object_get_string(tmp); tmp = json_object_object_get(parm, "offset"); const char *msec = json_object_get_string(tmp); printf("filename :%s msec:%s\n", file_name, msec); struct net_req req; memset(&req, 0, sizeof(struct net_req)); strcpy(req.playback.file_name, file_name); req.playback.msec = atoi(msec); /*if (video_playback_post_msg(&req)) {*/ /*CTP_CMD_COMBINED(priv, CTP_REQUEST, "TIME_AXIS_PLAY", "NOTIFY", CTP_REQUEST_MSG);*/ /*json_object_put(new_obj);*/ /*return 0;*/ /*}*/ json_object_put(new_obj); return 0; } #define PLAY_VIDEO_CONTINUE 0 #define PLAY_VIDEO_PAUSE 1 #define PLAY_VIDEO_STOP 2 static int cmd_put_time_axis_play_ctrl(void *priv, char *content) { char buf[128]; struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; u32 i = 0; char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "status"); const char *status = json_object_get_string(tmp); struct sockaddr_in *dst_addr = ctp_srv_get_cli_addr(priv); printf("status:%s\n", status); switch (atoi(status)) { case PLAY_VIDEO_CONTINUE: /*ret = playback_cli_continue(dst_addr);*/ break; case PLAY_VIDEO_PAUSE: /*ret = playback_cli_pause(dst_addr);*/ break; case PLAY_VIDEO_STOP: /*ret = playback_disconnect_cli(dst_addr);*/ break; default: ret = -1; break; } if (!ret) { snprintf(buf, sizeof(buf), "status:%s", status); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "TIME_AXIS_PLAY_CTRL", "NOTIFY", buf); } else { CTP_CMD_COMBINED(priv, CTP_REQUEST, "TIME_AXIS_PLAY_CTRL", "NOTIFY", CTP_REQUEST_MSG); } json_object_put(new_obj); return 0; } static int cmd_put_time_axis_fast_play(void *priv, char *content) { char buf[128]; struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; u32 i = 0; u32 speed = 0; // x2 x4 x8 x16 x32 x64 char filename[8]; u32 ret = 0; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "level"); const char *level = json_object_get_string(tmp); struct sockaddr_in *dst_addr = ctp_srv_get_cli_addr(priv); printf("level:%s\n", level); if (atoi(level)) { speed = (1 << (atoi(level) - 1)) * 32; } else { speed = 0; } /*playback_cli_fast_play(dst_addr, speed);*/ if (!ret) { snprintf(buf, sizeof(buf), "level:%s", level); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "TIME_AXIS_FAST_PLAY", "NOTIFY", buf); } else { CTP_CMD_COMBINED(priv, CTP_REQUEST, "TIME_AXIS_FAST_PLAY", "NOTIFY", CTP_REQUEST_MSG); } json_object_put(new_obj); return 0; } static int cmd_get_wind_velocity(void *priv, char *content) //cdp { char buf[32]; snprintf(buf, sizeof(buf), "wind_velocity:%d", 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WIND_VELOCITY", "NOTIFY", buf); return 0; } static int cmd_put_device_direction(void *priv, char *content) //cdp { json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; char buf[128]; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "device_direction"); const char *tmp_value = json_object_get_string(tmp); printf(">>>device_direction:%s\n", tmp_value); snprintf(buf, sizeof(buf), "device_direction:%s", tmp_value); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "DEVICE_DIRECTION_CONTROL", "NOTIFY", buf); json_object_put(new_obj); return 0; } static int cmd_get_date_time(void *priv, char *content) { struct sys_time time; char buf[128]; void *rtc_fd = NULL; rtc_fd = dev_open("rtc", NULL); if (!rtc_fd) { printf("rtc open err !!\n\n"); return 0; } dev_ioctl(rtc_fd, IOCTL_GET_SYS_TIME, (u32)&time); dev_close(rtc_fd); snprintf(buf, sizeof(buf), "date:%04d%02d%02d%02d%02d%02d", time.year, time.month, time.day, time.hour, time.min, time.sec); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "DATE_TIME", "NOTIFY", buf); return 0; } static void date_time(const char *date, struct sys_time *tm) { char *f = NULL; char *b = NULL; char buf[5] = {0}; memcpy(buf, date, 4); tm->year = atoi(buf); memcpy(buf, date + 4, 2); buf[2] = '\0'; tm->month = atoi(buf); memcpy(buf, date + 6, 2); buf[2] = '\0'; tm->day = atoi(buf); memcpy(buf, date + 8, 2); buf[2] = '\0'; tm->hour = atoi(buf); memcpy(buf, date + 10, 2); buf[2] = '\0'; tm->min = atoi(buf); memcpy(buf, date + 12, 2); buf[2] = '\0'; tm->sec = atoi(buf); } static int cmd_put_date_time(void *priv, char *content) { char buf[128]; struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; struct sys_time time; void *rtc_fd = NULL; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "date"); const char *date = json_object_get_string(tmp); printf("date:%s\n", date); if (date != NULL) { date_time(date, &time); } printf("date->year:%04d month:%02d day:%02d hour:%02d min:%02d sec:%02d", time.year, time.month, time.day, time.hour, time.min, time.sec); rtc_fd = dev_open("rtc", NULL); if (!rtc_fd) { printf("open rtd err \n\n"); json_object_put(new_obj); return 0; } dev_ioctl(rtc_fd, IOCTL_SET_SYS_TIME, (u32)&time); dev_close(rtc_fd); snprintf(buf, sizeof(buf), "date:%04d%02d%02d%02d%02d%02d", time.year, time.month, time.day, time.hour, time.min, time.sec); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "DATE_TIME", "NOTIFY", buf); json_object_put(new_obj); return 0; } static int cmd_get_ap_ssid_info(void *priv, char *content) { char buf[128]; struct wifi_mode_info info; info.mode = AP_MODE; wifi_get_mode_cur_info(&info); printf("ap get ssid:%s pwd:%s \n", info.ssid, info.pwd); snprintf(buf, sizeof(buf), "ssid:%s,pwd:%s", info.ssid, info.pwd); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "AP_SSID_INFO", "NOTIFY", buf); return 0; } static int cmd_put_ap_ssid_info(void *priv, char *content) { char buf[128]; struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; struct sys_time time; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "ssid"); const char *ssid = json_object_get_string(tmp); tmp = json_object_object_get(parm, "pwd"); const char *pwd = json_object_get_string(tmp); tmp = json_object_object_get(parm, "status"); const char *status = json_object_get_string(tmp); printf("cmd_put_ap_ssid_info : ssid:%s pwd:%s \n%s\n", ssid, pwd, content); if (strlen(pwd) == 0) { snprintf(buf, sizeof(buf), "ssid:%s,status:%s", ssid, status); } else { snprintf(buf, sizeof(buf), "ssid:%s,pwd:%s,status:%s", ssid, pwd, status); } if (ssid == NULL || (strlen(pwd) > 0 && strlen(pwd) < 8) || strlen(ssid) >= 32) { printf("ssid is null or pwd is less than 7\n"); CTP_CMD_COMBINED(priv, CTP_REQUEST, "AP_SSID_INFO", "NOTIFY", buf); return 0; } struct wifi_mode_info info; if (!strcmp("", ssid)) { info.mode = AP_MODE; wifi_get_mode_cur_info(&info); } else { info.ssid = (char *)ssid; info.pwd = (char *)pwd; } wifi_store_mode_info(AP_MODE, info.ssid, info.pwd); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "AP_SSID_INFO", "NOTIFY", buf); if (atoi(status)) { os_time_dly(300);//重启太快,没回复 cpu_reset(); } json_object_put(new_obj); return 0; } static int cmd_get_sta_ssid_info(void *priv, char *content) { char buf[128]; struct wifi_mode_info info; info.mode = STA_MODE; wifi_get_mode_cur_info(&info); printf("sta get ssid:%s pwd:%s \n", info.ssid, info.pwd); snprintf(buf, sizeof(buf), "ssid:%s,pwd:%s", info.ssid, info.pwd); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "STA_SSID_INFO", "NOTIFY", buf); return 0; } static int cmd_put_sta_ssid_info(void *priv, char *content) { char buf[128]; struct server *net = NULL; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; struct sys_time time; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "ssid"); const char *ssid = json_object_get_string(tmp); tmp = json_object_object_get(parm, "pwd"); const char *pwd = json_object_get_string(tmp); tmp = json_object_object_get(parm, "status"); const char *status = json_object_get_string(tmp); printf("ssid:%s pwd:%s \n", ssid, pwd); if (strlen(pwd) == 0) { snprintf(buf, sizeof(buf), "ssid:%s,status:%s", ssid, status); } else { snprintf(buf, sizeof(buf), "ssid:%s,pwd:%s,status:%s", ssid, pwd, status); } if (ssid == NULL || (strlen(pwd) > 0 && strlen(pwd) < 8)) { printf("ssid is null or pwd is less than 7\n"); CTP_CMD_COMBINED(priv, CTP_REQUEST, "STA_SSID_INFO", "NOTIFY", CTP_REQUEST_MSG); return 0; } CTP_CMD_COMBINED(priv, CTP_NO_ERR, "STA_SSID_INFO", "NOTIFY", buf); //断开所有客户端 ctp_srv_disconnect_all_cli(); info.dest_addr = NULL; if (atoi(status)) { wifi_store_mode_info(STA_MODE, ssid, pwd); } //切换WIFI模式到STA模式,切换成功后设备自行连接上热点 wifi_enter_sta_mode(ssid, pwd); //选择是否保存当前WIFI模式信息 json_object_put(new_obj); return 0; } static int cmd_put_soft_reset(void *priv, char *content) { int cnt = 0; #if 1 extern char net_update_request(void); while (net_update_request()) { cnt++; os_time_dly(20);//200ms if (cnt > 100) { //20s break; } } #endif os_time_dly(200); cpu_reset(); return 0; } static int cmd_put_file_lock(void *priv, char *content) { char buf[32]; json_object *new_obj = NULL; json_object *parm = NULL; json_object *tmp = NULL; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); tmp = json_object_object_get(parm, "path"); const char *path = json_object_get_string(tmp); tmp = json_object_object_get(parm, "status"); const char *status = json_object_get_string(tmp); FILE *file = fopen(path, "r"); if (file == NULL) { CTP_CMD_COMBINED(priv, CTP_OPEN_FILE, "FILE_LOCK", "NOTIFY", CTP_OPEN_FILE_MSG); return 0; } int attr; fget_attr(file, &attr); if (atoi(status)) { attr |= F_ATTR_RO; #if defined CONFIG_ENABLE_VLIST FILE_CHANGE_ATTR(path, '2'); #endif } else { #if defined CONFIG_ENABLE_VLIST FILE_CHANGE_ATTR(path, '1'); #endif attr &= ~F_ATTR_RO; } fset_attr(file, attr); fclose(file); snprintf(buf, sizeof(buf), "status:%d", atoi(status)); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "FILE_LOCK", "NOTIFY", buf); return 0; } static int cmd_put_generic_cmd(void *priv, char *content) { char buf[32]; snprintf(buf, sizeof(buf), "status:%d", 1); printf("GENERIC_CMD PUT\n"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "GENERIC_CMD", "NOTIFY", buf); return 0; } static int cmd_get_generic_cmd(void *priv, char *content) { char buf[32]; snprintf(buf, sizeof(buf), "status:%d", 1); printf("GENERIC_CMD GET\n"); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "GENERIC_CMD", "NOTIFY", buf); return 0; } static int cmd_put_ctp_cli_connected(void *priv, char *content) { return 0; } static int cmd_put_ctp_cli_disconnect(void *priv, char *content) { puts("|CLI_DISCONNECT OVER...\n\n\n\n"); return 0; } extern int net_critical_video_send(void); static int cmd_put_video_bumping(void *priv, char *content) { #ifdef CRITICAL_VIDEO_EN char buf[128]; snprintf(buf, sizeof(buf), "w:%d,h:%d,fps:%d,rate:%d,t:%d", 640, 480, net_video_rec_get_fps(), net_video_rec_get_audio_rate(), 10); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_BUMPING", "NOTIFY", buf); msleep(500); net_critical_video_send(); #endif #ifdef CRITICAL_VIDEO_EN_DOUBLE char buf[128]; snprintf(buf, sizeof(buf), "w:%d,h:%d,fps:%d,rate:%d,t:%d", 1280, 720, net_video_rec_get_fps(), net_video_rec_get_audio_rate(), 10); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_BUMPING", "NOTIFY", buf); msleep(500); net_critical_video_send(); #endif #ifndef CRITICAL_VIDEO_EN #ifndef CRITICAL_VIDEO_EN_DOUBLE CTP_CMD_COMBINED(priv, CTP_REQUEST, "VIDEO_BUMPING", "NOTIFY", CTP_REQUEST_MSG); #endif #endif return 0; } static int cmd_get_video_bumping(void *priv, char *content) { #ifdef CRITICAL_VIDEO_EN char buf[128]; snprintf(buf, sizeof(buf), "w:%d,h:%d,fps:%d,rate:%d,t:%d", 640, 480, net_video_rec_get_fps(), net_video_rec_get_audio_rate(), 10); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_BUMPING", "NOTIFY", buf); #endif #ifdef CRITICAL_VIDEO_EN_DOUBLE char buf[128]; snprintf(buf, sizeof(buf), "w:%d,h:%d,fps:%d,rate:%d,t:%d", 1280, 720, net_video_rec_get_fps(), net_video_rec_get_audio_rate(), 10); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "VIDEO_BUMPING", "NOTIFY", buf); #endif return 0; } static int cmd_get_gen_chk(void *priv, char *content) { return 0; } #include "video_rec.h" static int cmd_get_pull_video_status(void *priv, char *content) { char buf[128]; int res = db_select("res2"); res = res > 0 ? res : 0; switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 1280, 720, 1, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 1, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 1, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "w:%d,h:%d,format:%d,fps:%d,rate:%d", 640, 480, 1, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; } #ifdef CONFIG_VIDEO1_ENABLE #ifdef CONFIG_SPI_VIDEO_ENABLE extern int spi_camera_width_get(void); extern int spi_camera_height_get(void); snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", spi_camera_height_get(), spi_camera_width_get(), 15, net_video_rec_get_audio_rate()); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "PULL_VIDEO_STATUS", "NOTIFY", buf); return 0; #endif if (dev_online("video1.*")) { switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 720, 1280, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 480, 640, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 480, 640, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 720, 1280, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); // CTP_ERR(CTP_REQUEST); break; } CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "PULL_VIDEO_STATUS", "NOTIFY", buf); } else { strcpy(buf, "status:0"); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "PULL_VIDEO_STATUS", "NOTIFY", buf); } #endif #ifdef CONFIG_VIDEO2_ENABLE if (dev_online("uvc")) { printf("UVC ON LINE \n\n"); switch (res) { case VIDEO_RES_1080P: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 720, 1280, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_720P: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 480, 640, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; case VIDEO_RES_VGA: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 480, 640, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); break; default: snprintf(buf, sizeof(buf), "status:1,h:%d,w:%d,fps:%d,rate:%d,format:1", 480, 640, net_video_rec_get_fps(), net_video_rec_get_audio_rate()); // CTP_ERR(CTP_REQUEST); break; } CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "PULL_VIDEO_STATUS", "NOTIFY", buf); } else { strcpy(buf, "status:0"); printf("UVC OFF LINE \n\n"); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "PULL_VIDEO_STATUS", "NOTIFY", buf); } #endif return 0; } /*************************************************************************** 功能:查看设备wifi支持模式、改变设备wifi运行模式 命令描述 Topic: "WIFI_MODE" errno: 参考设备错误列表, op: 操作类型("GET","PUT","NOTIFY") status: wifi模式(0:2.4G, 1:5G) GET : "op":"GET" 2.4G回复说明 :{"op":"NOTIFY", "param":{ "status":"0" } 支持5G回复说明 :{"op":"NOTIFY", "param":{ "status":"1" } 设置2.4G模式:"status":"0" PUT : "op":"PUT", "param":{ "status":"0"} 回复说明:{"op":"NOTIFY","param":{ "status":"0"} 设置5G模式:"status":"1" PUT : "op":"PUT", "param":{ "status":"1"} 回复说明:{"op":"NOTIFY","param":{ "status":"1"} wifi模块运行模式获取 Topic: "WIFI_RUN_MODE" 2.4G回复说明:{"op":"NOTIFY", "param":{ "status":"0" } 5G回复说明 :{"op":"NOTIFY", "param":{ "status":"1" } 出错则APP收到CTP_REQUEST_MSG消息,即"errno":4, "op":"NOTIFY","param":{ "msg":"CTP_REQUEST_MSG"} ***************************************************************************/ int __attribute__((weak)) get_wifi_module_support_mode(void) { #ifdef USE_5G2G_TOW_CHANNEL return 1; #else return 0; #endif } static int cmd_put_wifi_change_mode(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *status = NULL; char *val_str; int val; char buf[64]; int wifi_run_mode; /*extern int set_hostapd_config_file_normol_mode(void);*/ /*extern int set_hostapd_config_file_5g_mode(void);*/ //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_object_get(parm, "status"); val_str = (char *)json_object_get_string(status); val = atoi(val_str) & 0x1; wifi_run_mode = db_select("wfmode"); wifi_run_mode = wifi_run_mode > 0 ? wifi_run_mode : 0; if (wifi_run_mode == val) { snprintf(buf, sizeof(buf), "status:%d", wifi_run_mode); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WIFI_MODE", "NOTIFY", buf); } else { if (get_wifi_module_support_mode()) { db_update("wfmode", val); /* db_flush(); */ wifi_run_mode = val; printf(" cmd_put_wifi_change_mode val : %d \n", val); if (val) { /*set_hostapd_config_file_5g_mode();*/ } else { /*set_hostapd_config_file_normol_mode();*/ } snprintf(buf, sizeof(buf), "status:%d", wifi_run_mode); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WIFI_MODE", "NOTIFY", buf); os_time_dly(50); wifi_off(); os_time_dly(20); wifi_on(); } } json_object_put(new_obj); return 0; } static int cmd_get_wifi_supprt_mode(void *priv, char *content) { char buf[64]; snprintf(buf, sizeof(buf), "status:%d", get_wifi_module_support_mode()); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WIFI_MODE", "NOTIFY", buf); return 0; } static int cmd_get_wifi_run_mode(void *priv, char *content) { char buf[64]; int wfmode = db_select("wfmode"); snprintf(buf, sizeof(buf), "status:%d", wfmode > 0 ? wfmode : 0); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "WIFI_RUN_MODE", "NOTIFY", buf); return 0; } static int cmd_put_net_ota(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *status = NULL; char *val_str; char val; char buf[64]; printf("content = %s\n", content); //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_object_get(parm, "status"); val_str = (char *)json_object_get_string(status); val = atoi(val_str); json_object_put(new_obj); val = !!val; #if 0 //(CONFIG_DOUBLE_BANK_ENABLE == 0) if (val) { printf("cmd_put_net_ota\n"); int net_ota_single_back_init(void); if (net_ota_single_back_init()) { val = 0; printf("cmd_put_net_ota err\n\n"); } } snprintf(buf, sizeof(buf), "status:%d", val); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "NET_OTA_SINGLE", "NOTIFY", buf); #else strcpy(buf, "status:0"); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "NET_OTA_SINGLE", "NOTIFY", buf); #endif return 0; } int cmd_take_photo_ctl(char start) { char buf[64]; snprintf(buf, sizeof(buf), "status:%d", start); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "APP_TAKE_PHOTO", "NOTIFY", buf); return 0; } static char app_video_rec = -1; int cmd_video_rec_ctl(char start) { char buf[64]; start &= 0x1; if (start == app_video_rec) { return app_video_rec; } snprintf(buf, sizeof(buf), "status:%d", start); CTP_CMD_COMBINED(NULL, CTP_NO_ERR, "APP_VIDEO_REC", "NOTIFY", buf);//请求录像 app_video_rec = start; #if 0 int to = 3000;//5s超时 app_video_rec = !start; while (app_video_rec != start && to > 0) { //等待APP返回录像结果 os_time_dly(1); to -= 10; } if (!to) { return -1; } #else os_time_dly(10); #endif // 0 return app_video_rec; } static int cmd_put_app_video_rec(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; json_object *status = NULL; char *val_str; char val; char buf[64]; static char wifi_run_mode = 0; extern int set_hostapd_config_file_normol_mode(void); extern int set_hostapd_config_file_5g_mode(void); //分解content字段 new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_object_get(parm, "status"); val_str = (char *)json_object_get_string(status); val = atoi(val_str); app_video_rec = val & 0x1; json_object_put(new_obj); return 0; } static int cmd_get_app_video_rec(void *priv, char *content) { #if 0 char buf[64]; app_video_rec = 1; snprintf(buf, sizeof(buf), "status:%d", 1); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "APP_VIDEO_REC", "NOTIFY", buf);//上电不请求APP录像 #endif // 0 return 0; } int cmd_put_open_speak_stream(void *priv, char *content) { printf("cmd_put_open_speak_stream\n"); json_object *new_obj = NULL; json_object *parm = NULL; char buf[256]; int ret = 0; const char *format = NULL, *rate = NULL; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); format = json_object_get_string(json_object_object_get(parm, "format")); rate = json_object_get_string(json_object_object_get(parm, "rate")); u32 rate1, format1; if (rate) { rate1 = atoi(rate); } else { rate1 = 0; } if (format && atoi(format) == 1) { format1 = 1; } else if (format && atoi(format) == 0) { format1 = 0; } else { format1 = 0; printf("undefined info.type ,default use pcm\n"); } printf("rate:%d format:%d\n", rate1, format1); extern int open_audio_channel(void *arg); ret = open_audio_channel(priv); if (ret < 0) { CTP_CMD_COMBINED(priv, CTP_RT_OPEN_FAIL, "OPEN_SPEAK_STREAM", "NOTIFY", CTP_RT_OPEN_FAIL_MSG); } else { int len = sprintf(buf, "format:%d,rate:%d", format1, rate1); printf("buf=>%s len:%d\n", buf, len); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "OPEN_SPEAK_STREAM", "NOTIFY", buf); } json_object_put(new_obj); return 0; } static int cmd_put_close_speak_stream(void *priv, char *content) { json_object *new_obj = NULL; json_object *parm = NULL; char buf[128]; int ret = 0; const char *status = NULL; new_obj = json_tokener_parse(content); parm = json_object_object_get(new_obj, "param"); status = json_object_get_string(json_object_object_get(parm, "status")); if (atoi(status)) { extern int close_audio_channel(void *arg); ret = close_audio_channel(priv); if (ret < 0) { CTP_CMD_COMBINED(priv, CTP_REQUEST, "CLOSE_SPEAK_STREAM", "NOTIFY", CTP_REQUEST_MSG); } else { sprintf(buf, "status:%d", 1); CTP_CMD_COMBINED(priv, CTP_NO_ERR, "CLOSE_SPEAK_STREAM", "NOTIFY", buf); } } printf("cmd_put_close_speak_stream\n"); json_object_put(new_obj); return 0; } //添加命令和相应的回调 //前GET后PUT // // /*视频系列命令*/ const struct ctp_map_entry ctp_video_cmd_tab[] SEC_USED(.ctp_video_cmd) = { {NULL, "VIDEO_PARAM", cmd_get_video_param, cmd_put_video_param}, {NULL, "VIDEO_CTRL", cmd_get_video_ctrl, cmd_put_video_ctrl}, {NULL, "VIDEO_FINISH", NULL, NULL}, //特殊命令,只有回复,用于录像完成 {NULL, "APP_VIDEO_REC", cmd_get_app_video_rec, cmd_put_app_video_rec}, {"mic", "VIDEO_MIC", cmd_get_video_mic, cmd_put_video_mic}, {"mot", "MOVE_CHECK", cmd_get_video_move_check, cmd_put_video_move_check}, {"dat", "VIDEO_DATE", cmd_get_video_date, cmd_put_video_date}, {"rtf", "RTF_RES", cmd_get_rt_stream0_res, NULL}, {"rtb", "RTB_RES", cmd_get_rt_stream1_res, NULL}, #if 0 {"two", "DOUBLE_VIDEO", cmd_get_double_video, cmd_put_double_video}, {"cyc", "VIDEO_LOOP", cmd_get_video_loop, cmd_put_video_loop}, {"wdr", "VIDEO_WDR", cmd_get_video_wdr, cmd_put_video_wdr}, {"exp", "VIDEO_EXP", cmd_get_video_exp, cmd_put_video_exp}, {"num", "VIDEO_CAR_NUM", cmd_get_video_car_num, cmd_put_video_car_num}, #endif {"gra", "GRA_SEN", cmd_get_gra_sen, cmd_put_gra_sen}, {"par", "VIDEO_PAR_CAR", cmd_get_video_par_car, cmd_put_video_par_car}, {"gap", "VIDEO_INV", cmd_get_video_inv, cmd_put_video_inv}, {NULL, "THUMBNAILS", NULL, cmd_put_thunbails}, {NULL, "THUMBNAILS_CTRL", NULL, cmd_put_thunbails_ctrl}, {NULL, "TIME_AXIS_PLAY", NULL, cmd_put_time_axis_play}, {NULL, "TIME_AXIS_PLAY_CTRL", NULL, cmd_put_time_axis_play_ctrl}, {NULL, "TIME_AXIS_FAST_PLAY", NULL, cmd_put_time_axis_fast_play}, #if WIFI_RT_STREAM {NULL, "OPEN_RT_STREAM", NULL, cmd_put_open_rt_stream}, {NULL, "CLOSE_RT_STREAM", cmd_get_close_rt_stream, cmd_put_close_rt_stream}, {NULL, "OPEN_AUDIO_RT_STREAM", NULL, cmd_put_open_audio_rt_stream}, {NULL, "CLOSE_AUDIO_RT_STREAM", cmd_get_close_audio_rt_stream, cmd_put_close_audio_rt_stream}, {NULL, "OPEN_PULL_RT_STREAM", NULL, cmd_put_open_pull_rt_stream}, {NULL, "CLOSE_PULL_RT_STREAM", cmd_get_close_pull_rt_stream, cmd_put_close_pull_rt_stream}, {NULL, "OPEN_PULL_AUDIO_RT_STREAM", NULL, cmd_put_open_pull_audio_rt_stream}, {NULL, "CLOSE_PULL_AUDIO_RT_STREAM", cmd_get_close_pull_audio_rt_stream, cmd_put_close_pull_audio_rt_stream}, {NULL, "OPEN_SPEAK_STREAM", NULL, cmd_put_open_speak_stream}, {NULL, "CLOSE_SPEAK_STREAM", NULL, cmd_put_close_speak_stream}, #endif {NULL, "VIDEO_BUMPING", cmd_get_video_bumping, cmd_put_video_bumping}, {NULL, "PULL_VIDEO_STATUS", cmd_get_pull_video_status, NULL}, {NULL, "PULL_VIDEO_PARAM", cmd_get_pull_video_param, cmd_put_pull_video_param}, {NULL, "VIDEO_CYC_SAVEFILE", NULL, cmd_put_video_cyc_savefile}, #ifdef CONFIG_NET_SCR {NULL, "NET_SCR", cmd_get_net_scr, cmd_put_net_scr}, #endif }; /*系统系列命令*/ const struct ctp_map_entry ctp_system_cmd_tab[] SEC_USED(.ctp_system_cmd) = { {"kep", "KEEP_ALIVE_INTERVAL", cmd_get_keep_alive_interval, NULL}, {NULL, "APP_ACCESS", NULL, cmd_put_app_access}, {"sd", "SD_STATUS", cmd_get_sd_status, NULL}, {"bat", "BAT_STATUS", cmd_get_bat_status, NULL}, {"uuid", "UUID", cmd_get_uuid, NULL}, {"fp", "TF_CAP", cmd_get_sd_size, NULL}, #if 0 {"bvo", "BOARD_VOICE", cmd_get_board_voice, cmd_put_board_voice}, {"kvo", "KEY_VOICE", cmd_get_key_voice, cmd_put_key_voice}, {"fre", "LIGHT_FRE", cmd_get_light_fre, cmd_put_light_fre}, {"aff", "AUTO_SHUTDOWN", cmd_get_auto_stutdown, cmd_put_auto_stutdown}, {"pro", "SCREEN_PRO", cmd_get_screen_pro, cmd_put_screen_pro}, {"tvm", "TV_MODE", cmd_get_tv_mode, cmd_put_tv_mode}, {"lag", "LANGUAGE", cmd_get_language, cmd_put_language}, #endif {NULL, "FORMAT", NULL, cmd_put_format}, {"def", "SYSTEM_DEFAULT", cmd_get_system_default, cmd_put_system_default}, #if defined CONFIG_ENABLE_VLIST {NULL, "FORWARD_MEDIA_FILES_LIST", NULL, cmd_put_make_forward_files_list}, {NULL, "BEHIND_MEDIA_FILES_LIST", NULL, cmd_put_make_behind_files_list}, #endif {NULL, "FILES_DELETE", NULL, cmd_put_files_delete}, {NULL, "MULTI_COVER_FIGURE", NULL, cmd_put_multi_cover_figure}, {NULL, "DATE_TIME", cmd_get_date_time, cmd_put_date_time}, {NULL, "AP_SSID_INFO", cmd_get_ap_ssid_info, cmd_put_ap_ssid_info}, {NULL, "STA_SSID_INFO", cmd_get_sta_ssid_info, cmd_put_sta_ssid_info}, {NULL, "RESET", NULL, cmd_put_soft_reset}, {NULL, "CTP_CLI_DISCONNECT", NULL, cmd_put_ctp_cli_disconnect}, {NULL, "CTP_CLI_CONNECTED", NULL, cmd_put_ctp_cli_connected}, {NULL, "GEN_CHK", cmd_get_gen_chk, NULL}, #if 1 {NULL, "RT_TALK_CTL", cmd_get_rt_talk_ctl, cmd_put_rt_talk_ctl}, {NULL, "VOICE_TALK_CTL", cmd_get_voice_talk_ctl, cmd_put_voice_talk_ctl}, #endif {NULL, "FILE_LOCK", NULL, cmd_put_file_lock}, {NULL, "GENERIC_CMD", cmd_get_generic_cmd, cmd_put_generic_cmd}, /** CDP控制命令,NULL类型的命令需要自己回复,系统级的命令就不管,已经做好了处理 */ {NULL, "WIND_VELOCITY", cmd_get_wind_velocity, NULL}, //获取风速等级 {NULL, "DEVICE_DIRECTION_CONTROL", NULL, cmd_put_device_direction}, //控制设备飞行方向 /* * 2.4G 和 5G切换 */ {NULL, "WIFI_MODE", cmd_get_wifi_supprt_mode, cmd_put_wifi_change_mode}, {NULL, "WIFI_RUN_MODE", cmd_get_wifi_run_mode, NULL}, {NULL, "NET_OTA_SINGLE", NULL, cmd_put_net_ota}, }; /*照片系列命令*/ const struct ctp_map_entry ctp_photo_cmd_tab[] SEC_USED(.ctp_photo_cmd) = { {NULL, "PHOTO_RESO", cmd_get_photo_reso, cmd_put_photo_reso}, {"qua", "PHOTO_QUALITY", cmd_get_photo_quality, cmd_put_photo_quality}, {NULL, "PHOTO_CTRL", NULL, cmd_put_photo_ctrl}, #if 0 {"phm", "SELF_TIMER", cmd_get_self_timer, cmd_put_self_timer}, {"cyt", "BURST_SHOT", cmd_get_burst_shot, cmd_put_burst_shot}, {"acu", "PHOTO_SHARPNESS", cmd_get_photo_sharpness, cmd_put_photo_sharpness}, {"wbl", "WHITE_BALANCE", cmd_get_white_balance, cmd_put_white_balance}, {"iso", "PHOTO_ISO", cmd_get_photo_iso, cmd_put_photo_iso}, {"pexp", "PHOTO_EXP", cmd_get_photo_exp, cmd_put_photo_exp}, {"sok", "ANTI_TREMOR", cmd_get_anti_tremor, cmd_put_anti_tremor}, {"pdat", "PHOTO_DATE", cmd_get_photo_date, cmd_put_photo_date}, {"sca", "FAST_SCA", cmd_get_fast_sca, cmd_put_fast_sca }, {"col", "PHOTO_COLOR", cmd_get_photo_color, cmd_put_photo_color}, #endif }; int user_open_rt_stream(void) { char buf[128]; u8 mark; const char *h, *w, *format, *fps; //切换UI,禁止key /* sys_key_event_disable(); */ net_switch_ui("video_rec"); struct intent it; init_intent(&it); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO0_OPEN_RT_STREAM; mark = 2; struct rt_stream_app_info info; info.width = 640; info.height = 480; if (info.width == 1920) { db_update("rtf", VIDEO_RES_1080P); } else if (info.width == 1280) { db_update("rtf", VIDEO_RES_720P); } else if (info.width == 640) { db_update("rtf", VIDEO_RES_VGA); } /* db_flush(); */ info.fps = NET_VIDEO_REC_FPS0;//NET_VIDEO_REC_FPS1 info.type = NET_VIDEO_FMT_AVI; info.priv = 0; it.data = (const char *)&mark;//打开视频 it.exdata = (u32) &info; //视频参数 start_app(&it); return 0; } int user_close_rt_stream(void) { u8 mark; const char *status = NULL; struct intent it; init_intent(&it); net_switch_ui("video_rec"); it.name = "net_video_rec"; //设置参数 it.action = ACTION_VIDEO0_CLOSE_RT_STREAM; mark = 2; it.data = (const char *)&mark; //close video param start_app(&it); return 0; }