1、添加virfat备份与恢复;
2、修复sensorhub低功耗越界问题; 3、修复rcsp传输相关问题; 4、更新flash_params_v3.bin; 5、修复摄像头、科大讯飞相关问题;
This commit is contained in:
@@ -1027,6 +1027,8 @@ void __attribute__((weak)) app_common_device_event_handler(int *msg)
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
extern void hidden_file(u8 flag);
|
||||
extern const int FATFS_BACKUP_ENABLE; //文件系统安全备份功能使能
|
||||
extern void fatfs_backup_clear_null_dir();
|
||||
static void dev_manager_task(void *p)
|
||||
{
|
||||
int res;
|
||||
@@ -1081,6 +1083,10 @@ static void dev_manager_task(void *p)
|
||||
#if TCFG_VIRFAT_FLASH_ENABLE
|
||||
dev_manager_add("virfat_flash");
|
||||
dev_manager_set_valid_by_logo("virfat_flash", 0);///将设备设置为无效设备
|
||||
//安全备份删除异常断电存留下来的空文件
|
||||
if (FATFS_BACKUP_ENABLE) {
|
||||
fatfs_backup_clear_null_dir();
|
||||
}
|
||||
|
||||
#endif
|
||||
#if (TCFG_SDFILE_INSERT_FLASH_ENABLE||TCFG_SDFILE_EXTERN_FLASH_ENABLE)
|
||||
|
||||
@@ -1802,6 +1802,8 @@ int uvc_host_camera_out(const usb_dev usb_id)
|
||||
if (!host_dev) {
|
||||
return 0;
|
||||
}
|
||||
//前移,防止free buf到设置变量期间来中断
|
||||
hdl->open = 0;
|
||||
if (uvc->offline) {
|
||||
uvc->offline(uvc->priv);
|
||||
}
|
||||
@@ -1829,7 +1831,7 @@ int uvc_host_camera_out(const usb_dev usb_id)
|
||||
|
||||
free(uvc);
|
||||
uvc_host_inf[usb_id].dev.uvc = NULL;
|
||||
hdl->open = 0;
|
||||
/* hdl->open = 0; */
|
||||
atomic_set(&(device->ref), 0);
|
||||
device->private_data = NULL;
|
||||
return 0;
|
||||
|
||||
@@ -359,6 +359,245 @@ static int virfat_ioctl(void *fd, u32 cmd, u32 arg)
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////sdfile_fat 备份fat表和目录项/////////////////////////////////////////////////
|
||||
#define BACKUPS_SPACE ((virfat_flash.database - virfat_flash.fatbase) * 512)
|
||||
#define DIR_ENTRY_DEV_ADDR ((virfat_flash.dirbase - virfat_flash.fatbase) * 512)
|
||||
//sdfile_fat的fat表和目录项都是4K对齐的地址和长度
|
||||
#define BK_BUF_LEN 4096
|
||||
|
||||
//记入VM,序号需要整理成独立的
|
||||
/* #define CFG_FATFS_BACKUP_FLAG 145 */
|
||||
|
||||
extern const int FATFS_BACKUP_ENABLE; //文件系统安全备份功能使能
|
||||
static u8 backup_record_flag = 0;
|
||||
|
||||
|
||||
typedef enum {
|
||||
BK_OK = 0,
|
||||
BK_DATA_IS_FF,
|
||||
BK_DATA_LEN_ISNOT_ALIGN,
|
||||
BK_FATFS_DATA_IS_WRONG,
|
||||
BK_ALREADY_RECORD,
|
||||
BK_NOT_RECORD,
|
||||
|
||||
BK_DEV_READ_DATA_ERROR = 8,
|
||||
BK_DEV_ERASE_DATA_ERROR,
|
||||
BK_DEV_WRITE_DATA_ERROR,
|
||||
|
||||
BK_FATFS_NOT_USED = 0xFF,
|
||||
} BK_RESULT;
|
||||
|
||||
static u8 bk_check_is_FF(u8 *data, u32 len)
|
||||
{
|
||||
u8 is_ff_flag = 0;
|
||||
int sub_len = len / 32;
|
||||
if (len % 32) {
|
||||
return BK_DATA_LEN_ISNOT_ALIGN;
|
||||
}
|
||||
for (int j = 0; j < sub_len; j++) {
|
||||
is_ff_flag = 1;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
if (data[i] != 0xFF) {
|
||||
is_ff_flag = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (is_ff_flag) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return is_ff_flag;
|
||||
}
|
||||
|
||||
static int virfat_flash_backups_fat_dir_data()
|
||||
{
|
||||
u8 *buf = zalloc(BK_BUF_LEN);
|
||||
ASSERT(buf);
|
||||
int ret = BK_OK;
|
||||
for (int offset = 0; offset < BACKUPS_SPACE; offset += BK_BUF_LEN) {
|
||||
int rw_len;
|
||||
rw_len = virfat_read(fd, buf, BACKUPS_SPACE + offset, BK_BUF_LEN);
|
||||
if (rw_len != BK_BUF_LEN) {
|
||||
ret = BK_DEV_READ_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
if (bk_check_is_FF(buf, BK_BUF_LEN)) {
|
||||
ret = BK_DATA_IS_FF;
|
||||
goto __exit;
|
||||
}
|
||||
//check fat table data
|
||||
if (offset == 0) {
|
||||
if (buf[0] != 0xF8 || buf[1] != 0xFF) {
|
||||
ret = BK_FATFS_DATA_IS_WRONG;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
//check dir entry data
|
||||
/* if (offset == DIR_ENTRY_DEV_ADDR) { */
|
||||
/* } */
|
||||
ret = virfat_ioctl(fd, IOCTL_ERASE_SECTOR, offset);
|
||||
if (ret) {
|
||||
ret = BK_DEV_ERASE_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
rw_len = virfat_write(fd, buf, offset, BK_BUF_LEN);
|
||||
if (rw_len != BK_BUF_LEN) {
|
||||
ret = BK_DEV_WRITE_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
//VM 标记放在备份后面
|
||||
u8 bk_info = 1;
|
||||
syscfg_write(CFG_FATFS_BACKUP_FLAG, &bk_info, sizeof(u8));
|
||||
y_printf(">>>[test]:write bk_info = 0x%x\n", bk_info);
|
||||
__exit:
|
||||
y_printf("\n >>>[test]:func = %s,line= %d, ret = %d\n", __FUNCTION__, __LINE__, ret);
|
||||
if (buf) {
|
||||
free(buf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int virfat_flash_resume_fat_dir_data()
|
||||
{
|
||||
u8 *buf = zalloc(BK_BUF_LEN);
|
||||
ASSERT(buf);
|
||||
int ret = BK_OK;
|
||||
for (int offset = 0; offset < BACKUPS_SPACE; offset += BK_BUF_LEN) {
|
||||
int rw_len;
|
||||
rw_len = virfat_read(fd, buf, offset, BK_BUF_LEN);
|
||||
if (rw_len != BK_BUF_LEN) {
|
||||
ret = BK_DEV_READ_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
/* y_printf(">>>[test]:offset = %d, fd = 0x%p, buf = 0x%p\n", offset, fd, buf); */
|
||||
/* put_buf(buf, rw_len); */
|
||||
if (bk_check_is_FF(buf, BK_BUF_LEN)) {
|
||||
ret = BK_DATA_IS_FF;
|
||||
goto __exit;
|
||||
}
|
||||
//check fat table data
|
||||
if (offset == 0) {
|
||||
if (buf[0] != 0xF8 || buf[1] != 0xFF) {
|
||||
ret = BK_FATFS_DATA_IS_WRONG;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
ret = virfat_ioctl(fd, IOCTL_ERASE_SECTOR, BACKUPS_SPACE + offset);
|
||||
if (ret) {
|
||||
ret = BK_DEV_ERASE_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
/* y_printf(">>>[test]:offset = %d, fd = 0x%p, buf = 0x%p\n", offset, fd, buf); */
|
||||
rw_len = virfat_write(fd, buf, BACKUPS_SPACE + offset, BK_BUF_LEN);
|
||||
if (rw_len != BK_BUF_LEN) {
|
||||
ret = BK_DEV_WRITE_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
//清VM 标记放在还原后面
|
||||
u8 bk_info = 0;
|
||||
syscfg_write(CFG_FATFS_BACKUP_FLAG, (void *)&bk_info, sizeof(u8));
|
||||
y_printf(">>>[test]:write bk_info = 0x%x\n", bk_info);
|
||||
__exit:
|
||||
y_printf("\n >>>[test]:func = %s,line= %d, ret = %d\n", __FUNCTION__, __LINE__, ret);
|
||||
if (buf) {
|
||||
free(buf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int virfat_flash_check_resume_flag()
|
||||
{
|
||||
//: fatfs 需要预留区域增加备份还原标志, sdfile_fat不需要,使用VM备份标志处理
|
||||
int ret;
|
||||
u8 *buf = zalloc(BK_BUF_LEN);
|
||||
ASSERT(buf);
|
||||
u8 bk_info;
|
||||
syscfg_read(CFG_FATFS_BACKUP_FLAG, (void *)&bk_info, sizeof(u8));
|
||||
y_printf(">>>[test]:read bk_info = 0x%x\n", bk_info);
|
||||
y_printf(">>>[test]:BACKUPS_SPACE = %d\n", BACKUPS_SPACE);
|
||||
u8 resume_flag = 0;
|
||||
for (int offset = 0; offset < BACKUPS_SPACE; offset += BK_BUF_LEN) {
|
||||
ret = virfat_read(fd, buf, BACKUPS_SPACE + offset, BK_BUF_LEN);
|
||||
if (ret != BK_BUF_LEN) {
|
||||
ret = BK_DEV_READ_DATA_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
if (bk_check_is_FF(buf, BK_BUF_LEN)) {
|
||||
resume_flag = 1;
|
||||
break;
|
||||
}
|
||||
//check fat table data
|
||||
if (offset == 0) {
|
||||
if (buf[0] != 0xF8 || buf[1] != 0xFF) {
|
||||
resume_flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
r_printf(">>>[test]:bk_info, resume_flag = 0x%x, 0x%x\n", bk_info, resume_flag);
|
||||
if (bk_info || resume_flag) {
|
||||
ret = virfat_flash_resume_fat_dir_data();
|
||||
}
|
||||
__exit:
|
||||
if (buf) {
|
||||
free(buf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int fatfs_sdfile_fat_backup_fat_dir_data()
|
||||
{
|
||||
if (backup_record_flag) {
|
||||
return BK_ALREADY_RECORD;
|
||||
}
|
||||
int ret = virfat_flash_backups_fat_dir_data();
|
||||
if (ret == BK_OK) {
|
||||
backup_record_flag = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int fatfs_backup_flag_clear()
|
||||
{
|
||||
printf("\n >>>[test]:func = %s,line= %d\n", __FUNCTION__, __LINE__);
|
||||
if (!backup_record_flag) {
|
||||
return BK_NOT_RECORD;
|
||||
}
|
||||
backup_record_flag = 0;
|
||||
u8 bk_info = 0;
|
||||
syscfg_write(CFG_FATFS_BACKUP_FLAG, (void *)&bk_info, sizeof(u8));
|
||||
y_printf(">>>[test]:write bk_info = 0x%x\n", bk_info);
|
||||
return BK_OK;
|
||||
}
|
||||
|
||||
void fatfs_backup_clear_null_dir()
|
||||
{
|
||||
backup_record_flag = 1; //避免此时刻进行备份
|
||||
struct vfscan *fs = fscan("storage/virfat_flash/C/", "-r -tALL -sn ", 4);
|
||||
r_printf(">>>[test]:all filenum = %d\n", fs->file_number);
|
||||
for (int i = fs->file_number; i >= 1; i--) {
|
||||
FILE *fd = fselect(fs, FSEL_BY_NUMBER, i);
|
||||
if (fd) {
|
||||
struct vfs_attr attr;
|
||||
fget_attrs(fd, &attr);
|
||||
//空文件进行删除
|
||||
if (0 == attr.sclust || 0 == attr.fsize) {
|
||||
fdelete(fd);
|
||||
} else {
|
||||
fclose(fd);
|
||||
}
|
||||
backup_record_flag = 1; //避免此时刻进行备份
|
||||
}
|
||||
}
|
||||
fscan_release(fs);
|
||||
backup_record_flag = 0;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
AT_VOLATILE_RAM_CODE
|
||||
static u32 virfat_flash_read(void *buf, u32 addr_sec, u32 len)
|
||||
{
|
||||
@@ -425,6 +664,16 @@ static u32 virfat_flash_write(void *buf, u32 addr_sec, u32 len)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//backup deal
|
||||
if (FATFS_BACKUP_ENABLE && (addr_sec >= virfat_flash.fatbase) && (addr_sec < virfat_flash.database)) {
|
||||
u8 ret = fatfs_sdfile_fat_backup_fat_dir_data();
|
||||
if (ret != BK_OK && ret != BK_ALREADY_RECORD) {
|
||||
wlen = 0;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (addr_sec == 0) {
|
||||
wlen = len;
|
||||
goto __exit;
|
||||
@@ -564,6 +813,16 @@ u32 virfat_flash_write_watch(void *buf, u32 addr_sec, u32 len)
|
||||
{
|
||||
u32 wlen;
|
||||
u32 real_addrsec = 0;
|
||||
|
||||
|
||||
//backup deal
|
||||
if (FATFS_BACKUP_ENABLE && (addr_sec >= virfat_flash.fatbase) && (addr_sec < virfat_flash.database)) {
|
||||
u8 ret = fatfs_sdfile_fat_backup_fat_dir_data();
|
||||
if (ret != BK_OK && ret != BK_ALREADY_RECORD) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (addr_sec == 0) {
|
||||
return len;
|
||||
} else if (addr_sec < 4096) {
|
||||
@@ -642,35 +901,6 @@ u32 virfat_flash_get_real_capacity() //获取实际flash容量
|
||||
return jlfat_capacity;
|
||||
}
|
||||
|
||||
#define BACKUPS_SPACE 8192
|
||||
void virfat_flash_backups_fat_dir_data()
|
||||
{
|
||||
u8 *buf = zalloc(4096);
|
||||
ASSERT(buf);
|
||||
for (int offset = 0; offset < BACKUPS_SPACE; offset += 4096) {
|
||||
virfat_flash_read_watch(buf, 4096 + BACKUPS_SPACE + offset, 4096);
|
||||
virfat_flash_erase_watch(IOCTL_ERASE_SECTOR, 4096 + offset);
|
||||
virfat_flash_write_watch(buf, 4096 + offset, 4096);
|
||||
}
|
||||
if (buf) {
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
|
||||
void virfat_flash_resume_fat_dir_data()
|
||||
{
|
||||
u8 *buf = zalloc(4096);
|
||||
ASSERT(buf);
|
||||
for (int offset = 0; offset < BACKUPS_SPACE; offset += 4096) {
|
||||
virfat_flash_read_watch(buf, 4096 + offset, 4096);
|
||||
virfat_flash_erase_watch(IOCTL_ERASE_SECTOR, 4096 + BACKUPS_SPACE + offset);
|
||||
virfat_flash_write_watch(buf, 4096 + BACKUPS_SPACE + offset, 4096);
|
||||
}
|
||||
if (buf) {
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/** @brief:
|
||||
@param:
|
||||
@@ -841,6 +1071,10 @@ static int flash_virfat_open(const char *name, struct device **device, void *arg
|
||||
ASSERT(fd);
|
||||
virfat_flash_init();
|
||||
|
||||
if (FATFS_BACKUP_ENABLE) {
|
||||
virfat_flash_check_resume_flag();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#if 0
|
||||
@@ -961,6 +1195,9 @@ static int flash_virfat_ioctrl(struct device *device, u32 cmd, u32 arg)
|
||||
/* y_printf("\n >>>[test]:func = %s,line= %d\n",__FUNCTION__, __LINE__); */
|
||||
virfat_flash_flush();
|
||||
virfat_ioctl(fd, IOCTL_FLUSH, arg);
|
||||
if (FATFS_BACKUP_ENABLE) {
|
||||
fatfs_backup_flag_clear();
|
||||
}
|
||||
break;
|
||||
case IOCTL_CMD_RESUME:
|
||||
break;
|
||||
@@ -1137,6 +1374,7 @@ const struct device_operations private_sfc_dev_ops = {
|
||||
.ioctl = private_sfc_ioctrl,
|
||||
.close = private_sfc_close,
|
||||
};
|
||||
|
||||
#else
|
||||
void virfat_flash_get_dirinfo(void *file_buf, u32 *file_num)
|
||||
{
|
||||
|
||||
@@ -162,6 +162,11 @@ static JL_PRO_CB bt_rcsp_callback = {
|
||||
.wait_resp_timeout = NULL,
|
||||
};
|
||||
|
||||
void rcsp_clear_all_buffer(void)
|
||||
{
|
||||
JL_protocol_dev_switch(&bt_rcsp_callback);
|
||||
}
|
||||
|
||||
void rcsp_init(void)
|
||||
{
|
||||
if (__this) {
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include "debug.h"
|
||||
|
||||
extern u8 is_bredr_close(void);
|
||||
|
||||
extern void rcsp_clear_all_buffer(void);
|
||||
extern void rcsp_resume(void);
|
||||
extern void rcsp_find_device_reset(void);
|
||||
extern void sport_data_func_init(void);
|
||||
@@ -253,6 +253,9 @@ static void rcsp_ble_disconnect(void)
|
||||
#endif
|
||||
sport_data_func_release();
|
||||
rcsp_timer_contrl(0);
|
||||
|
||||
// 防止上一次接收长度太长且未接收完成就中断,影响到下一次连接后的交互
|
||||
rcsp_clear_all_buffer();
|
||||
}
|
||||
|
||||
static void rcsp_ble_connect(void)
|
||||
|
||||
+1
-1
@@ -414,7 +414,7 @@ void rcsp_browser_start(u8 *data, u16 len)
|
||||
return ;
|
||||
}
|
||||
///解析数据
|
||||
memcpy((u8 *)browser, data, sizeof(struct __browser));
|
||||
memcpy((u8 *)browser, data, len);
|
||||
browser->start_num = app_ntohs(browser->start_num);
|
||||
browser->dev_handle = app_ntohl(browser->dev_handle);
|
||||
browser->path_len = app_ntohs(browser->path_len);
|
||||
|
||||
+173
-93
@@ -789,12 +789,12 @@ static int rcsp_extra_flash_opt_dial_backgroud_set(u8 *file_path, u16 *data_len)
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 通过路径获取表盘背景
|
||||
@param file_path:文件路径(也用作出参),file_path_len:路径长度
|
||||
@param resp_buf:用作出参; file_path:文件路径; file_path_len:路径长度
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_opt_dial_backgroud_get(u8 *data, u8 *file_path, u16 *data_len)
|
||||
static int rcsp_extra_flash_opt_dial_backgroud_get(u8 **resp_buf, u8 *file_path, u16 *data_len)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_opt_dial_backgroud_get, %s\n", file_path);
|
||||
int result = 0;
|
||||
@@ -809,28 +809,41 @@ static int rcsp_extra_flash_opt_dial_backgroud_get(u8 *data, u8 *file_path, u16
|
||||
int watch_item = watch_get_style_by_name(watch);
|
||||
if (watch_item < 0) {
|
||||
// 找不到
|
||||
memcpy(data, "null", sizeof("null"));
|
||||
*resp_buf = zalloc(sizeof("null"));
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(*resp_buf, "null", sizeof("null"));
|
||||
} else {
|
||||
char *bgp = watch_bgp_get_related(watch_item);
|
||||
if (bgp) {
|
||||
memcpy(data, bgp, strlen((const char *)bgp) + 1);
|
||||
*resp_buf = zalloc(strlen((const char *)bgp) + 1);
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(*resp_buf, bgp, strlen((const char *)bgp) + 1);
|
||||
} else {
|
||||
memcpy(data, "null", sizeof("null"));
|
||||
*resp_buf = zalloc(sizeof("null"));
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(*resp_buf, "null", sizeof("null"));
|
||||
}
|
||||
}
|
||||
*data_len = strlen((const char *)data) + 1;
|
||||
|
||||
*data_len = strlen((const char *)(*resp_buf)) + 1;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取表盘版本号操作
|
||||
@param file_path:文件路径(也用作出参),file_path_len:路径长度
|
||||
@param resp_buf:用作出参; file_path:文件路径; file_path_len:路径长度
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_opt_dial_version_get(u8 *data, u8 *file_path, u16 *data_len)
|
||||
static int rcsp_extra_flash_opt_dial_version_get(u8 **resp_buf, u8 *file_path, u16 *data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
rcsp_printf("rcsp_extra_flash_opt_dial_version_get, %s\n", file_path);
|
||||
@@ -853,22 +866,27 @@ static int rcsp_extra_flash_opt_dial_version_get(u8 *data, u8 *file_path, u16 *d
|
||||
goto _end;
|
||||
}
|
||||
|
||||
*resp_buf = zalloc(DIAL_PRJ_UUDI_LEN + DIAL_VERSION_ID);
|
||||
if (*resp_buf == NULL) {
|
||||
ret = -1;
|
||||
goto _end;
|
||||
}
|
||||
// 获取version
|
||||
ret = watch_get_version(watch, (char *)data + offset);
|
||||
ret = watch_get_version(watch, (char *)*resp_buf + offset);
|
||||
if (!ret) {
|
||||
offset += strlen((const char *)data + offset) + 1;
|
||||
offset += strlen((const char *)*resp_buf + offset) + 1;
|
||||
}
|
||||
|
||||
// 获取uuid
|
||||
ret = watch_get_uuid(watch, (char *)data + offset);
|
||||
ret = watch_get_uuid(watch, (char *)*resp_buf + offset);
|
||||
if (!ret) {
|
||||
offset += strlen((const char *)data + offset) + 1;
|
||||
offset += strlen((const char *)*resp_buf + offset) + 1;
|
||||
}
|
||||
|
||||
// 填充分隔符
|
||||
for (u8 i = 0; i < offset; i++) {
|
||||
if ((i + 1 != offset) && 0 == data[i]) {
|
||||
data[i] = ',';
|
||||
if ((i + 1 != offset) && 0 == (*resp_buf)[i]) {
|
||||
(*resp_buf)[i] = ',';
|
||||
}
|
||||
}
|
||||
_end:
|
||||
@@ -999,12 +1017,12 @@ static u16 rcsp_extra_flash_opt_data_fill(u8 *desc, u8 *src, u8 len)
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取当前表盘操作
|
||||
@param buffer:获取结果存放的buffer,data_len:获取结果的长度(出参)
|
||||
@param resp_buf:获取结果存放的buffer,data_len:获取结果的长度(出参)
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_opt_dial_get(u8 *buffer, u16 *data_len)
|
||||
static int rcsp_extra_flash_opt_dial_get(u8 **resp_buf, u16 *data_len)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_opt_dial_get\n");
|
||||
int result = 0;
|
||||
@@ -1023,7 +1041,12 @@ static int rcsp_extra_flash_opt_dial_get(u8 *buffer, u16 *data_len)
|
||||
if (result) {
|
||||
goto __end;
|
||||
}
|
||||
memcpy(buffer + offset, file_path, file_path_size);
|
||||
*resp_buf = zalloc(file_path_size);
|
||||
if (*resp_buf == NULL) {
|
||||
result = -1;
|
||||
goto __end;
|
||||
}
|
||||
memcpy(*resp_buf + offset, file_path, file_path_size);
|
||||
offset += file_path_size;
|
||||
}
|
||||
|
||||
@@ -1362,12 +1385,12 @@ static u8 rcsp_extra_flash_op_state_get(u8 state)
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 读数据操作
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_read_opt(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_read_opt(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
@@ -1375,8 +1398,12 @@ static int rcsp_extra_flash_read_opt(u8 *data, u16 *data_len, u8 offset, u8 stat
|
||||
*data_len = (data[offset + 4] << (8 * 1)) | data[offset + 5];
|
||||
|
||||
state = rcsp_extra_flash_op_state_get(state);
|
||||
result = rcsp_extra_flash_opt_read(data + 1, *data_len, start_addr, state);
|
||||
data[0] = result;
|
||||
*resp_buf = zalloc(*data_len);
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
result = rcsp_extra_flash_opt_read(*resp_buf, *data_len, start_addr, state);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1403,7 +1430,6 @@ static int rcsp_extra_flash_write_opt(u8 *data, u16 *data_len, u8 offset, u8 sta
|
||||
} else {
|
||||
result = rcsp_extra_flash_write_no_resp(data + offset, *data_len, start_addr);
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1421,50 +1447,61 @@ static int rcsp_extra_flash_insert_opt(u8 *data, u16 *data_len, u8 offset, u8 st
|
||||
u32 start_addr = (data[offset + 0] << (8 * 3)) | (data[offset + 1] << (8 * 2)) | (data[offset + 2] << (8 * 1)) | data[offset + 3];
|
||||
offset += 4;
|
||||
*data_len -= offset;
|
||||
data[offset + *data_len] = 0;
|
||||
result = rcsp_extra_flash_opt_insert_start(data + offset, *data_len, start_addr);
|
||||
u8 *path = zalloc(*data_len + 1);
|
||||
if (path == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(path, &data[offset], *data_len);
|
||||
result = rcsp_extra_flash_opt_insert_start(path, *data_len, start_addr);
|
||||
free(path);
|
||||
} else {
|
||||
result = rcsp_extra_flash_opt_insert_stop();
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 表盘操作
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_dial_opt(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_dial_opt(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
int result = 0;
|
||||
u8 *path = NULL;
|
||||
if (state) {
|
||||
*data_len -= offset;
|
||||
data[*data_len + offset] = 0;
|
||||
path = zalloc(*data_len + 1);
|
||||
if (path == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(path, &data[offset], *data_len);
|
||||
} else {
|
||||
*data_len = 0;
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
result = rcsp_extra_flash_opt_dial_get(data + 1, data_len);
|
||||
result = rcsp_extra_flash_opt_dial_get(resp_buf, data_len);
|
||||
break;
|
||||
case 1:
|
||||
result = rcsp_extra_flash_opt_dial_set(data + offset, data_len);
|
||||
result = rcsp_extra_flash_opt_dial_set(path, data_len);
|
||||
break;
|
||||
case 3:
|
||||
result = rcsp_extra_flash_opt_dial_version_get(data + 1, data + offset, data_len);
|
||||
result = rcsp_extra_flash_opt_dial_version_get(resp_buf, path, data_len);
|
||||
break;
|
||||
case 4:
|
||||
result = rcsp_extra_flash_opt_dial_backgroud_set(data + offset, data_len);
|
||||
result = rcsp_extra_flash_opt_dial_backgroud_set(path, data_len);
|
||||
break;
|
||||
case 5:
|
||||
result = rcsp_extra_flash_opt_dial_backgroud_get(data + 1, data + offset, data_len);
|
||||
result = rcsp_extra_flash_opt_dial_backgroud_get(resp_buf, path, data_len);
|
||||
break;
|
||||
}
|
||||
data[0] = result;
|
||||
if (path) {
|
||||
free(path);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1481,7 +1518,6 @@ static int rcsp_extra_flash_erase_opt(u8 *data, u16 *data_len, u8 offset, u8 sta
|
||||
u32 start_addr = (data[offset + 0] << (8 * 3)) | (data[offset + 1] << (8 * 2)) | (data[offset + 2] << (8 * 1)) | data[offset + 3];
|
||||
*data_len = (data[offset + 4] << (8 * 1)) | data[offset + 5];
|
||||
result = rcsp_extra_flash_opt_erase(start_addr, (*data_len) * 256);
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1497,12 +1533,16 @@ static int rcsp_extra_flash_delete_opt(u8 *data, u16 *data_len, u8 offset, u8 st
|
||||
int result = 0;
|
||||
if (state) {
|
||||
*data_len -= offset;
|
||||
data[offset + *data_len] = 0;
|
||||
result = rcsp_extra_flash_opt_delete_start(data + offset, *data_len);
|
||||
u8 *path = zalloc(*data_len + 1);
|
||||
if (path == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(path, &data[offset], *data_len);
|
||||
result = rcsp_extra_flash_opt_delete_start(path, *data_len);
|
||||
free(path);
|
||||
} else {
|
||||
result = rcsp_extra_flash_opt_delete_end();
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1524,7 +1564,6 @@ static int rcsp_extra_flash_update_fat_opt(u8 *data, u16 *data_len, u8 offset, u
|
||||
result = rcsp_extra_flash_opt_update_fat_begin();
|
||||
break;
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1539,18 +1578,17 @@ static int rcsp_extra_flash_update_ui_opt(u8 *data, u16 *data_len, u8 offset, u8
|
||||
{
|
||||
int result = 0;
|
||||
result = rcsp_extra_flash_opt_update_ui_opt(state);
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief app获取状态指令
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_update_state_to_app(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_update_state_to_app(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_update_state_to_app\n");
|
||||
int result = 0;
|
||||
@@ -1565,12 +1603,15 @@ static int rcsp_extra_flash_update_state_to_app(u8 *data, u16 *data_len, u8 offs
|
||||
// 回复buffer剩余大小
|
||||
if (state) {
|
||||
u16 recieve_max = rcsp_packet_write_alloc_len() - 13;
|
||||
data[1] = ((u8 *)&recieve_max)[1];
|
||||
data[2] = ((u8 *)&recieve_max)[0];
|
||||
*resp_buf = zalloc(sizeof(recieve_max));
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
(*resp_buf)[0] = ((u8 *)&recieve_max)[1];
|
||||
(*resp_buf)[1] = ((u8 *)&recieve_max)[0];
|
||||
*data_len = sizeof(recieve_max);
|
||||
}
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1600,7 +1641,6 @@ static int rcsp_extra_flash_ota_update_state(u8 *data, u16 *data_len, u8 offset,
|
||||
} else {
|
||||
result = 1;
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1618,12 +1658,12 @@ static int rcsp_extra_flash_restore(u8 *data, u16 *data_len, u8 offset, u8 state
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取文件信息命令
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_file_info_get(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_file_info_get(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_file_info_get, file_len %d, file_name :", *data_len);
|
||||
log_info_hexdump(data + offset, *data_len - offset);
|
||||
@@ -1633,11 +1673,15 @@ static int rcsp_extra_flash_file_info_get(u8 *data, u16 *data_len, u8 offset, u8
|
||||
char *root_path = watch_get_root_path();
|
||||
char watch[64] = {0};
|
||||
|
||||
u8 *data_ptr = data + 1;
|
||||
|
||||
ASCII_ToUpper(data + offset, *data_len - offset);
|
||||
strcpy(watch, root_path);
|
||||
strncpy(&watch[strlen((const char *)root_path)], (const char *)data + offset + 1, *data_len - offset - 1);
|
||||
|
||||
u8 *tmp_buf = zalloc(256);
|
||||
if (tmp_buf == NULL) {
|
||||
result = -1;
|
||||
goto __rcsp_extra_flash_file_info_get_err;
|
||||
}
|
||||
file = fopen(watch, "r");
|
||||
if (NULL == file) {
|
||||
result = -1;
|
||||
@@ -1650,50 +1694,61 @@ static int rcsp_extra_flash_file_info_get(u8 *data, u16 *data_len, u8 offset, u8
|
||||
wdt_clear();
|
||||
u32 crc_len = (file_len - crc_offset) > 256 ? 256 : (file_len - crc_offset);
|
||||
fseek(file, crc_offset, SEEK_SET);
|
||||
if (crc_len != fread(data, crc_len, 1, file)) {
|
||||
if (crc_len != fread(tmp_buf, crc_len, 1, file)) {
|
||||
log_error("err : read fail, %s, %d\n", watch, crc_offset);
|
||||
result = -1;
|
||||
goto __rcsp_extra_flash_file_info_get_err;
|
||||
}
|
||||
file_crc = CRC16_with_initval(data, crc_len, file_crc);
|
||||
file_crc = CRC16_with_initval(tmp_buf, crc_len, file_crc);
|
||||
crc_offset += crc_len;
|
||||
}
|
||||
|
||||
*data_len = 0;
|
||||
|
||||
*resp_buf = zalloc(sizeof(file_len) + sizeof(file_crc));
|
||||
if (*resp_buf == NULL) {
|
||||
result = -1;
|
||||
goto __rcsp_extra_flash_file_info_get_err;
|
||||
}
|
||||
// 文件长度
|
||||
for (u8 i = 0; i < sizeof(file_len); i++, data_ptr++, (*data_len)++) {
|
||||
*data_ptr = ((u8 *)&file_len)[sizeof(file_len) - i - 1];
|
||||
for (u8 i = 0; i < sizeof(file_len); i++, (*resp_buf)++, (*data_len)++) {
|
||||
*(*resp_buf) = ((u8 *)&file_len)[sizeof(file_len) - i - 1];
|
||||
}
|
||||
|
||||
// 还需要获取文件crc
|
||||
for (u8 i = 0; i < sizeof(file_crc); i++, data_ptr++, (*data_len)++) {
|
||||
*data_ptr = ((u8 *)&file_crc)[sizeof(file_crc) - i - 1];
|
||||
for (u8 i = 0; i < sizeof(file_crc); i++, (*resp_buf)++, (*data_len)++) {
|
||||
*(*resp_buf) = ((u8 *)&file_crc)[sizeof(file_crc) - i - 1];
|
||||
}
|
||||
|
||||
__rcsp_extra_flash_file_info_get_err:
|
||||
if (tmp_buf) {
|
||||
free(tmp_buf);
|
||||
}
|
||||
if (file) {
|
||||
fclose(file);
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取FLASH剩余空间命令
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_remain_space(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_remain_space(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_remain_space");
|
||||
int result = 0;
|
||||
char *root_path = watch_get_root_path();
|
||||
u32 space = 0;
|
||||
*data_len = 0;
|
||||
u8 *data_ptr = data + 1;
|
||||
*resp_buf = zalloc(sizeof(space));
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if (CONFIG_REUSABLE_RESERVE)
|
||||
result = reusable_area_flash_space(NULL, &space);
|
||||
#elif (CONFIG_RESFS_UPDATE_ENABLE)
|
||||
@@ -1703,38 +1758,39 @@ static int rcsp_extra_flash_remain_space(u8 *data, u16 *data_len, u8 offset, u8
|
||||
printf("err : get flash space fail\n");
|
||||
result = -1;
|
||||
} else {
|
||||
for (u8 i = 0; i < sizeof(space); i++, data_ptr++, (*data_len)++) {
|
||||
*data_ptr = ((u8 *)&space)[sizeof(space) - i - 1];
|
||||
for (u8 i = 0; i < sizeof(space); i++, (*resp_buf)++, (*data_len)++) {
|
||||
*(*resp_buf) = ((u8 *)&space)[sizeof(space) - i - 1];
|
||||
}
|
||||
result = 0;
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取FLASH剩余空间命令
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型
|
||||
@param data:数据, data_len:数据长度(也用作出参),offset:遍历数据时的偏移量,state:操作类型, resp_buf:用作出参
|
||||
@return 0-成功,其他-失败
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int rcsp_extra_flash_res_space(u8 *data, u16 *data_len, u8 offset, u8 state)
|
||||
static int rcsp_extra_flash_res_space(u8 *data, u16 *data_len, u8 offset, u8 state, u8 **resp_buf)
|
||||
{
|
||||
rcsp_printf("rcsp_extra_flash_res_space");
|
||||
int result = 0;
|
||||
u32 space = 0;
|
||||
*data_len = 0;
|
||||
u8 *data_ptr = data + 1;
|
||||
*resp_buf = zalloc(sizeof(space));
|
||||
if (*resp_buf == NULL) {
|
||||
return -1;
|
||||
}
|
||||
#if (CONFIG_REUSABLE_RESERVE)
|
||||
space = reusable_area_flash_space(NULL, NULL);
|
||||
#elif (CONFIG_RESFS_UPDATE_ENABLE)
|
||||
space = resfs_area_flash_space(NULL, NULL);
|
||||
#endif
|
||||
for (u8 i = 0; i < sizeof(space); i++, data_ptr++, (*data_len)++) {
|
||||
*data_ptr = ((u8 *)&space)[sizeof(space) - i - 1];
|
||||
for (u8 i = 0; i < sizeof(space); i++, (*resp_buf)++, (*data_len)++) {
|
||||
*(*resp_buf) = ((u8 *)&space)[sizeof(space) - i - 1];
|
||||
}
|
||||
data[0] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1752,61 +1808,78 @@ int rcsp_extra_flash_opt(u8 *param, u16 len, u8 OpCode, u8 OpCode_SN)
|
||||
u8 offset = 0;
|
||||
u8 opt_flag = param[offset++];
|
||||
u8 state = param[offset++];
|
||||
u8 *resp_buf = zalloc(100);
|
||||
if (!resp_buf) {
|
||||
return -1;
|
||||
}
|
||||
ASSERT(len <= 100);
|
||||
memcpy(resp_buf, param, len);
|
||||
u8 *resp_buf = NULL;
|
||||
u8 *resp_data = NULL;
|
||||
|
||||
switch (opt_flag) {
|
||||
case CURR_SYSTEM_OPT_READ:
|
||||
result = rcsp_extra_flash_read_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_read_opt(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_WRITE:
|
||||
result = rcsp_extra_flash_write_opt(resp_buf, &len, offset, state, OpCode);
|
||||
result = rcsp_extra_flash_write_opt(param, &len, offset, state, OpCode);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_INSERT:
|
||||
result = rcsp_extra_flash_insert_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_insert_opt(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_DIAL:
|
||||
result = rcsp_extra_flash_dial_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_dial_opt(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_ERASE:
|
||||
result = rcsp_extra_flash_erase_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_erase_opt(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_DELETE:
|
||||
result = rcsp_extra_flash_delete_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_delete_opt(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_UPDATE_FAT:
|
||||
result = rcsp_extra_flash_update_fat_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_update_fat_opt(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_UPDATE_UI:
|
||||
result = rcsp_extra_flash_update_ui_opt(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_update_ui_opt(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_TRAN_REPLY:
|
||||
result = rcsp_extra_flash_update_state_to_app(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_update_state_to_app(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_UPDATE_FLAG:
|
||||
result = rcsp_extra_flash_ota_update_state(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_ota_update_state(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_RESTORE:
|
||||
result = rcsp_extra_flash_restore(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_restore(param, &len, offset, state);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_FILE_INFO_GET:
|
||||
result = rcsp_extra_flash_file_info_get(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_file_info_get(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_REMAIN_SPACE:
|
||||
result = rcsp_extra_flash_remain_space(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_remain_space(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
case CURR_SYSTEM_OPT_RES_SPACE:
|
||||
result = rcsp_extra_flash_res_space(resp_buf, &len, offset, state);
|
||||
result = rcsp_extra_flash_res_space(param, &len, offset, state, &resp_buf);
|
||||
break;
|
||||
}
|
||||
|
||||
u16 resp_len = rcsp_extra_flash_opt_resp_data_get(resp_buf + 1, len, opt_flag, state) + 1;
|
||||
rcsp_extra_flash_opt_resp(0, OpCode, OpCode_SN, resp_buf, resp_len);
|
||||
free(resp_buf);
|
||||
if (result < 0) {
|
||||
goto __end;
|
||||
}
|
||||
|
||||
u16 resp_len = rcsp_extra_flash_opt_resp_data_get(resp_buf, len, opt_flag, state) + 1;
|
||||
resp_data = zalloc(resp_len);
|
||||
if (resp_data == NULL) {
|
||||
result = -1;
|
||||
goto __end;
|
||||
}
|
||||
resp_data[0] = result;
|
||||
if (resp_len > 1) {
|
||||
memcpy(&resp_data[1], resp_buf, len);
|
||||
}
|
||||
|
||||
rcsp_extra_flash_opt_resp(0, OpCode, OpCode_SN, resp_data, resp_len);
|
||||
|
||||
__end:
|
||||
if (resp_buf) {
|
||||
free(resp_buf);
|
||||
}
|
||||
if (resp_data) {
|
||||
free(resp_data);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1886,7 +1959,11 @@ void rcsp_extra_flash_opt_dial_backgroud_nodify(void)
|
||||
data[offset++] = state;
|
||||
|
||||
u16 get_len = 0;
|
||||
rcsp_extra_flash_opt_dial_backgroud_get((u8 *)data + offset, (u8 *)file_path, &get_len);
|
||||
u8 *path_buf = NULL;
|
||||
rcsp_extra_flash_opt_dial_backgroud_get(&path_buf, (u8 *)file_path, &get_len);
|
||||
if (path_buf) {
|
||||
memcpy((u8 *)data + offset, path_buf, get_len);
|
||||
}
|
||||
log_info("cur dial_backgroud path:%s", data + offset);
|
||||
len = get_len + offset;
|
||||
|
||||
@@ -1894,6 +1971,9 @@ void rcsp_extra_flash_opt_dial_backgroud_nodify(void)
|
||||
if (data) {
|
||||
free(data);
|
||||
}
|
||||
if (path_buf) {
|
||||
free(path_buf);
|
||||
}
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
|
||||
+4
@@ -3,6 +3,10 @@
|
||||
#include "typedef.h"
|
||||
#include "system/event.h"
|
||||
|
||||
#define DIAL_PRJ_UUDI_LEN (36+1) //Example: "c0f95f48-14fd-4344-9fbf-effbb701473c"
|
||||
#define DIAL_VERSION_ID (4+1) //Example: "W003"
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 外部flash操作函数
|
||||
@param param:数据, len:数据长度,OpCode:命令号,OpCode_SN:数据包序列号
|
||||
|
||||
+13
-1
@@ -11,6 +11,7 @@
|
||||
#include "rcsp_browser.h"
|
||||
#include "rcsp_config.h"
|
||||
|
||||
#include "res_config.h"
|
||||
#include "rcsp_extra_flash_opt.h"
|
||||
#include "JL_rcsp_protocol.h"
|
||||
#include "ascii.h"
|
||||
@@ -634,7 +635,18 @@ void rcsp_file_transfer_file_rename(u8 status, u8 *data, u16 len)
|
||||
if (err) {
|
||||
rcsp_file_transfer_close();
|
||||
}
|
||||
dev_manager_set_valid(ftp_d->dev, 1);
|
||||
char *watch_ptr = (char *)data;
|
||||
/* printf("%s name:%s",__func__,watch_ptr); */
|
||||
if ((!strncmp(watch_ptr, WATCH_RES_NAME, strlen(WATCH_RES_NAME))) ||
|
||||
(!strncmp(watch_ptr, WATCH_RES_NAME_SMALL, strlen(WATCH_RES_NAME_SMALL))) ||
|
||||
(!strncmp(watch_ptr, BGP_RES_NAME, strlen(BGP_RES_NAME))) ||
|
||||
(!strncmp(watch_ptr, BGP_RES_NAME_SMALL, strlen(BGP_RES_NAME_SMALL)))
|
||||
) {
|
||||
//表盘相关操作,不设置active
|
||||
/* printf("%s %d",__func__,__LINE__); */
|
||||
} else {
|
||||
dev_manager_set_valid(ftp_d->dev, 1);
|
||||
}
|
||||
file_transfer_watch_opt(2, 0);
|
||||
} else {
|
||||
//有重名的, 重新获取新名称, 如:“xxx_n.mp3”,n为数字
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
#ifndef UI_TOOL_ENAME
|
||||
#define UI_TOOL_ENAME
|
||||
|
||||
@@ -562,7 +563,7 @@
|
||||
#define BASEFORM_1355 0XA61000
|
||||
#define BASEFORM_1356 0XA60C00
|
||||
#define BASEFORM_1357 0XA63000
|
||||
#define BASEFORM_1358 0XA83002
|
||||
#define BASEFORM_1358 0XA83001
|
||||
#define BASEFORM_1359 0X7C0C0D
|
||||
#define BASEFORM_136 0X4A3C12
|
||||
#define BASEFORM_1360 0X7C3002
|
||||
@@ -1725,17 +1726,14 @@
|
||||
#define DISCONN_QR_BUTTON 0X303004
|
||||
#define DISCONN_QR_LAYOUT 0X300C01
|
||||
#define DISCONN_YES_BUTTON 0X302001
|
||||
#define DUER_BASEFORM_ERROR 0XA80C00
|
||||
#define DUER_BASEFORM_RECORD 0XA80C03
|
||||
#define DUER_BASEFORM_RESPONSE 0XA80C01
|
||||
#define DUER_BASEFORM_THINK 0XA80C02
|
||||
#define DUER_ERROR_NOTE 0XA83000
|
||||
#define DUER_BASEFORM_NOTE 0XA80C00
|
||||
#define DUER_BASEFORM_RECORD 0XA80C02
|
||||
#define DUER_BASEFORM_THINK 0XA80C01
|
||||
#define DUER_NOTE 0XA83000
|
||||
#define DUER_RECORD_BUTTON 0XA81C00
|
||||
#define DUER_RECORD_TIME 0XA83C00
|
||||
#define DUER_RECORD_TXT 0XA83003
|
||||
#define DUER_RESPONSE_TTS 0XA82000
|
||||
#define DUER_RESPONSE_TXT 0XA83001
|
||||
#define DUER_THINKING 0XA82001
|
||||
#define DUER_RECORD_TXT 0XA83002
|
||||
#define DUER_THINKING 0XA82000
|
||||
#define ENGINEERING_MODE_VLIST 0X8A1400
|
||||
#define FACE_INDEX 0X803C00
|
||||
#define FINDMY_BINDING 0X942002
|
||||
@@ -2568,7 +2566,7 @@
|
||||
#define TIME_UNDISTURB_MODE_START_TIME 0X102800
|
||||
#define TRANSIT_LOADING_PIC 0X22200C
|
||||
#define UI_ROTATE 0X0
|
||||
#define UI_VERSION 0X74A92D3
|
||||
#define UI_VERSION 0X55236CC
|
||||
#define UNDISTURB_MODE_ESETTING_BACK_BUTTON 0X102004
|
||||
#define UNDISTURB_MODE_ESETTING_HOUR_VLIST 0X101401
|
||||
#define UNDISTURB_MODE_ESETTING_LAYOUT 0X100C05
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
#define CFG_VBG_TRIM 47 //保存VBG配置参数id
|
||||
|
||||
#define CFG_DIAL_TYPE_SEL 48 //保存VBG配置参数id
|
||||
#define CFG_DUER_ACCESS_TOKEN 49 //小度token
|
||||
|
||||
//#MAX 50
|
||||
//=================================================================================//
|
||||
|
||||
@@ -70,7 +70,7 @@ const int UI_RES_FLASH_TAB_OFFSET = 0x0;
|
||||
const int config_jpeg_isr_delay_us = 50; //参考值100,最小50
|
||||
const int JLJPEG_STREAM_ENABLE = 1;
|
||||
#if TCFG_HOST_UVC_ENABLE
|
||||
const int config_jpeg_sync_wait_in_irq = 1; //在中断同步等待,效率低
|
||||
const int config_jpeg_sync_wait_in_irq = 0; //在中断同步等待,效率低
|
||||
const int config_jpeg_ff_rst_enable = 1; //支持带DRI标志的图片,部分摄像头只输出这种类型的图片
|
||||
#else
|
||||
const int config_jpeg_sync_wait_in_irq = 0; //在中断同步等待
|
||||
|
||||
@@ -23,16 +23,18 @@ const int CONFIG_LWIP_NET_ENABLE = 1;
|
||||
set 0-----use ram mem
|
||||
*/
|
||||
|
||||
#define LWIP_MEM_USE_PSRAM 1 //lwip内存分配
|
||||
#define HTTP_MEM_USE_PSRAM 1 //http内存分配
|
||||
#define HTTPS_MEM_USE_PSRAM 1 //https内存分配
|
||||
#define NET_AUDIO_MEM_USE_PSRAM 1 //net_audio内存分配
|
||||
#define MBEDTLS_MEM_USE_PSRAM 1 //mbedtls库内存分配
|
||||
#define WEBSOCKET_API_USE_PSRAM 1 //websocket使用psram
|
||||
/*注意:libmpeg、net_audio、net_down的分配介质需保持一致*/
|
||||
#define JL_LWIP_USE_PSRAM 0 //lwip使用psram
|
||||
#define JL_HTTP_USE_PSRAM 0 //http使用psram
|
||||
#define JL_HTTPS_USE_PSRAM 0 //https使用psram
|
||||
#define JL_NET_AUDIO_USE_PSRAM 0 //net_audio使用psram
|
||||
#define JL_MBEDTLS_USE_PSRAM 0 //mbedtls库使用psram
|
||||
#define JL_WEBSOCKET_USE_PSRAM 0 //websocket使用psram
|
||||
#define JL_MPEG_USE_PSRAM 0 //libmpeg使用psram
|
||||
#define JL_NET_DOWN_USE_PSRAM 0 //net_download使用psram
|
||||
|
||||
extern void *realloc_psram(void *pv, size_t size);
|
||||
|
||||
#if LWIP_MEM_USE_PSRAM
|
||||
#if JL_LWIP_USE_PSRAM
|
||||
#define LWIP_ALLOC(size) malloc_psram(size)
|
||||
#define LWIP_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
@@ -63,9 +65,7 @@ void lwip_free(void *pv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#if HTTP_MEM_USE_PSRAM
|
||||
#if JL_HTTP_USE_PSRAM
|
||||
#define HTTP_MALLOC(size) malloc_psram(size)
|
||||
#define HTTP_REALLOC(ptr,size) realloc_psram(ptr,size)
|
||||
#define HTTP_FREE(ptr) free_psram(ptr)
|
||||
@@ -75,17 +75,17 @@ void lwip_free(void *pv)
|
||||
#define HTTP_FREE(ptr) free(ptr)
|
||||
#endif
|
||||
|
||||
void *http_malloc(size_t size)
|
||||
void *jl_http_malloc(size_t size)
|
||||
{
|
||||
return HTTP_MALLOC(size);
|
||||
}
|
||||
|
||||
void *http_realloc(void *ptr, size_t size)
|
||||
void *jl_http_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return HTTP_REALLOC(ptr, size);
|
||||
}
|
||||
|
||||
void http_free(void *pv)
|
||||
void jl_http_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
HTTP_FREE(pv);
|
||||
@@ -93,11 +93,7 @@ void http_free(void *pv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if HTTPS_MEM_USE_PSRAM
|
||||
#if JL_HTTPS_USE_PSRAM
|
||||
#define HTTPS_ALLOC(size) malloc_psram(size)
|
||||
#define HTTPS_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
@@ -106,12 +102,12 @@ void http_free(void *pv)
|
||||
#endif
|
||||
|
||||
|
||||
void *https_malloc(size_t size)
|
||||
void *jl_https_malloc(size_t size)
|
||||
{
|
||||
return HTTPS_ALLOC(size);
|
||||
}
|
||||
|
||||
void *https_calloc(unsigned long count, unsigned long size)
|
||||
void *jl_https_calloc(unsigned long count, unsigned long size)
|
||||
{
|
||||
size_t total_size = count * size;
|
||||
void *p = HTTPS_ALLOC(total_size);
|
||||
@@ -122,7 +118,7 @@ void *https_calloc(unsigned long count, unsigned long size)
|
||||
}
|
||||
|
||||
|
||||
void https_free(void *pv)
|
||||
void jl_https_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
HTTPS_FREE(pv);
|
||||
@@ -132,8 +128,7 @@ void https_free(void *pv)
|
||||
|
||||
|
||||
|
||||
|
||||
#if NET_AUDIO_MEM_USE_PSRAM
|
||||
#if JL_NET_AUDIO_USE_PSRAM
|
||||
#define NET_AUDIO_ALLOC(size) malloc_psram(size)
|
||||
#define NET_AUDIO_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
@@ -142,21 +137,24 @@ void https_free(void *pv)
|
||||
#endif
|
||||
|
||||
|
||||
void *net_audio_malloc(size_t size)
|
||||
void *jl_net_audio_malloc(size_t size)
|
||||
{
|
||||
printf(">>>zwz info: %s %d %s\n", __FUNCTION__, __LINE__, __FILE__);
|
||||
void *p = NET_AUDIO_ALLOC(size);
|
||||
return p;
|
||||
}
|
||||
|
||||
void net_audio_free(void *pv)
|
||||
void jl_net_audio_free(void *pv)
|
||||
{
|
||||
printf(">>>zwz info: %s %d %s\n", __FUNCTION__, __LINE__, __FILE__);
|
||||
if (pv != NULL) {
|
||||
NET_AUDIO_FREE(pv);
|
||||
}
|
||||
}
|
||||
|
||||
void *net_audio_calloc(unsigned long count, unsigned long size)
|
||||
void *jl_net_audio_calloc(unsigned long count, unsigned long size)
|
||||
{
|
||||
printf(">>>zwz info: %s %d %s\n", __FUNCTION__, __LINE__, __FILE__);
|
||||
size_t total = count * size;
|
||||
void *p = NET_AUDIO_ALLOC(total);
|
||||
if (p) {
|
||||
@@ -165,7 +163,11 @@ void *net_audio_calloc(unsigned long count, unsigned long size)
|
||||
return p;
|
||||
}
|
||||
|
||||
#if MBEDTLS_MEM_USE_PSRAM
|
||||
|
||||
|
||||
|
||||
|
||||
#if JL_MBEDTLS_USE_PSRAM
|
||||
#define MBEDTLS_MALLOC(size) malloc_psram(size)
|
||||
#define MBEDTLS_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
@@ -191,44 +193,33 @@ void *jl_mbedtls_calloc(unsigned long count, unsigned long size)
|
||||
return p;
|
||||
}
|
||||
|
||||
#if WEBSOCKET_API_USE_PSRAM
|
||||
|
||||
|
||||
|
||||
#if JL_WEBSOCKET_USE_PSRAM
|
||||
#define WEBSOCKET_API_MALLOC(size) malloc_psram(size)
|
||||
#define WEBSOCKET_API_REALLOC(ptr, size) realloc_psram(ptr, size)
|
||||
#define WEBSOCKET_API_REALLOC(ptr,size) realloc_psram(ptr,size)
|
||||
#define WEBSOCKET_API_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
#define WEBSOCKET_API_MALLOC(size) malloc(size)
|
||||
#define WEBSOCKET_API_REALLOC(ptr, size) realloc(ptr, size)
|
||||
#define WEBSOCKET_API_REALLOC(ptr,size) realloc(ptr,size)
|
||||
#define WEBSOCKET_API_FREE(ptr) free(ptr)
|
||||
#endif
|
||||
|
||||
|
||||
void websocket_api_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
WEBSOCKET_API_FREE(pv);
|
||||
}
|
||||
}
|
||||
|
||||
void *websocket_api_malloc(size_t size)
|
||||
{
|
||||
void *p = WEBSOCKET_API_MALLOC(size);
|
||||
if (p) {
|
||||
memset(p, 0, size);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
void jl_websocket_api_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
WEBSOCKET_API_FREE(pv);
|
||||
pv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void *jl_websocket_api_malloc(size_t size)
|
||||
{
|
||||
void *p = WEBSOCKET_API_MALLOC(size);
|
||||
if (p) {
|
||||
memset(p, 0, size);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -245,6 +236,113 @@ void *jl_websocket_api_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return WEBSOCKET_API_REALLOC(ptr, size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if JL_MPEG_USE_PSRAM
|
||||
#define MPEG_API_MALLOC(size) malloc_psram(size)
|
||||
#define MPEG_API_REALLOC(ptr,size) realloc_psram(ptr,size)
|
||||
#define MPEG_API_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
#define MPEG_API_MALLOC(size) malloc(size)
|
||||
#define MPEG_API_REALLOC(ptr,size) realloc(ptr,size)
|
||||
#define MPEG_API_FREE(ptr) free(ptr)
|
||||
#endif
|
||||
|
||||
void jl_mpeg_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
MPEG_API_FREE(pv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void *jl_mpeg_malloc(size_t size)
|
||||
{
|
||||
return MPEG_API_MALLOC(size);
|
||||
}
|
||||
|
||||
|
||||
void *jl_mpeg_calloc(unsigned long count, unsigned long size)
|
||||
{
|
||||
size_t total = count * size;
|
||||
void *p = MPEG_API_MALLOC(total);
|
||||
if (p) {
|
||||
memset(p, 0, total);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
void *jl_mpeg_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return MPEG_API_REALLOC(ptr, size);
|
||||
}
|
||||
|
||||
|
||||
void *jl_mpeg_zalloc(size_t size)
|
||||
{
|
||||
void *ptr = MPEG_API_MALLOC(size);
|
||||
if (ptr != NULL) {
|
||||
memset(ptr, 0, size);
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if JL_NET_DOWN_USE_PSRAM
|
||||
#define NET_DOWN_MALLOC(size) malloc_psram(size)
|
||||
#define NET_DOWN_REALLOC(ptr,size) realloc_psram(ptr,size)
|
||||
#define NET_DOWN_FREE(ptr) free_psram(ptr)
|
||||
#else
|
||||
#define NET_DOWN_MALLOC(size) malloc(size)
|
||||
#define NET_DOWN_REALLOC(ptr,size) realloc(ptr,size)
|
||||
#define NET_DOWN_FREE(ptr) free(ptr)
|
||||
#endif
|
||||
|
||||
void *jl_net_down_malloc(size_t size)
|
||||
{
|
||||
return NET_DOWN_MALLOC(size);
|
||||
}
|
||||
|
||||
void *jl_net_down_calloc(unsigned long count, unsigned long size)
|
||||
{
|
||||
size_t total_size = count * size;
|
||||
void *p = NET_DOWN_MALLOC(total_size);
|
||||
if (p) {
|
||||
memset(p, 0, count * size);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
void *jl_net_down_zalloc(size_t size)
|
||||
{
|
||||
void *ptr = NET_DOWN_MALLOC(size);
|
||||
if (ptr) {
|
||||
memset(ptr, 0, size);
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void *jl_net_down_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return NET_DOWN_REALLOC(ptr, size);
|
||||
}
|
||||
|
||||
void jl_net_down_free(void *pv)
|
||||
{
|
||||
if (pv != NULL) {
|
||||
NET_DOWN_FREE(pv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#else
|
||||
const int CONFIG_LWIP_NET_ENABLE = 0;
|
||||
#endif
|
||||
|
||||
@@ -161,6 +161,8 @@ const int FATFS_SUPPORT_DEV_READ_SUCCESSION = 0; //是否保存非对齐读时
|
||||
|
||||
const int SDFILE_STORAGE_ENABLE = 1; //sdfile做设备接入VFS,扫描功能使能
|
||||
|
||||
const int FATFS_BACKUP_ENABLE = 0; //文件系统安全备份功能使能
|
||||
|
||||
const int VIRFAT_FLASH_ENABLE = 0; //精简jifat代码,不使用。
|
||||
|
||||
|
||||
|
||||
@@ -91,6 +91,13 @@ __check:
|
||||
u8 *packet = frame.packet;
|
||||
|
||||
seqn = (packet[2] << 8) | packet[3];
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
if (app_in_mode(APP_MODE_VIDEO)) {
|
||||
a2dp_media_free_packet(detect->file, packet);
|
||||
printf("%s curr mode is video\n", __func__);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 不检测,一直丢包
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.section .sys.version, "ax"
|
||||
|
||||
.long 314161597
|
||||
.asciz "-@20251215-$2aa6cfb6"
|
||||
.long 315125570
|
||||
.asciz "-@20251226-$5dad1964"
|
||||
|
||||
@@ -44,7 +44,7 @@ REGISTER_UI_STYLE(STYLE_NAME)
|
||||
|
||||
|
||||
|
||||
|
||||
#define DEV_LOGO "sd0"
|
||||
#define DEV_ROOT "storage/sd0/C/"
|
||||
#define PHOTO_DIR "PHOTO/"
|
||||
#define VIDEO_DIR "VIDEO/"
|
||||
@@ -110,8 +110,9 @@ static void camera_dec_flush(void)
|
||||
struct element *elm;
|
||||
elm = ui_core_get_element_by_id(CAM_CAMERA_LAYOUT);
|
||||
if (elm != NULL) {
|
||||
/* printf(">>>>>>elm != NULL"); */
|
||||
/* printf("CAM_CAMERA_LAYOUT REDRAW_ENTER"); */
|
||||
ui_redraw(CAM_CAMERA_LAYOUT);
|
||||
/* printf("CAM_CAMERA_LAYOUT REDRAW_EXIT"); */
|
||||
}
|
||||
}
|
||||
static void camera_rec_err()
|
||||
@@ -180,7 +181,7 @@ static int cam_ctrl_view_video(int enable)
|
||||
}
|
||||
static void cam_camera_photo_savc_cb(char *path)
|
||||
{
|
||||
if (jljpeg_stream_src_data_get()) {
|
||||
if (!jljpeg_stream_src_data_get()) {
|
||||
return;
|
||||
}
|
||||
jljpeg_stream_src_data_save_to_file(path);
|
||||
@@ -264,16 +265,20 @@ static int cam_file_handler_open(int show_temp, char *dir, char *ext_name)
|
||||
{
|
||||
cam_file_handler_close();
|
||||
if (!dev_manager_get_total(1)) {// 获取有效可播放设备数量
|
||||
log_error("%s %d", __func__, __LINE__);
|
||||
return -1;
|
||||
}
|
||||
struct __dev *dev = dev_manager_find_active(1);//在有效设备中获取活跃设备
|
||||
/* struct __dev *dev = dev_manager_find_active(1);//在有效设备中获取活跃设备 */
|
||||
struct __dev *dev = dev_manager_check_by_logo(DEV_LOGO);
|
||||
if (!dev) {
|
||||
log_error("%s %d", __func__, __LINE__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
log_debug("dev_root:%s dir:%s ext:%s \n", dev_manager_get_root_path(dev), dir, ext_name);
|
||||
//活跃分区 与目标一致
|
||||
if (!strstr(dev_manager_get_root_path(dev), DEV_ROOT)) {
|
||||
log_error("%s dev:%s %d", __func__, dev_manager_get_root_path(dev), __LINE__);
|
||||
return -1;
|
||||
}
|
||||
char path[64] = {0};
|
||||
|
||||
@@ -693,6 +693,7 @@ static void music_status_check(void *p)
|
||||
ui_pic_show_image_by_id(SPORTING_MUSIC_PAUSE_START_PIC, 0);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
|
||||
@@ -133,12 +133,19 @@ static int ui_ifly_vad_event_cb(ifly_vad_event_enum evt, void *param)
|
||||
sys_timeout_del(ifly_ui->vad_recv_timer);
|
||||
ifly_ui->vad_recv_timer = 0;
|
||||
}
|
||||
ui_ifly_vad_button_touch(0);
|
||||
break;
|
||||
case IFLY_VAD_EVT_NETWORK_RECV_ERROR:
|
||||
if (ifly_ui->vad_recv_timer) {
|
||||
sys_timeout_del(ifly_ui->vad_recv_timer);
|
||||
ifly_ui->vad_recv_timer = 0;
|
||||
}
|
||||
UI_MSG_POST("vad_network_recv_error");
|
||||
break;
|
||||
case IFLY_VAD_EVT_NETWORK_FAIL:
|
||||
if (ifly_ui->vad_recv_timer) {
|
||||
sys_timeout_del(ifly_ui->vad_recv_timer);
|
||||
ifly_ui->vad_recv_timer = 0;
|
||||
}
|
||||
UI_MSG_POST("vad_network_fail");
|
||||
break;
|
||||
case IFLY_VAD_EVT_EXIT:
|
||||
@@ -427,7 +434,6 @@ static void vad_recv_timer_handler(void *priv)
|
||||
sys_timeout_del(ifly_ui->vad_recv_timer);
|
||||
ifly_ui->vad_recv_timer = 0;
|
||||
}
|
||||
ui_ifly_vad_button_touch(0);
|
||||
}
|
||||
|
||||
static int ifly_vad_button_ontouch(void *ctr, struct element_touch_event *e)
|
||||
@@ -538,7 +544,11 @@ static int no_connect_ontouch(void *ctr, struct element_touch_event *e)
|
||||
case ELM_EVENT_TOUCH_R_MOVE:
|
||||
if (ifly_ui && ifly_ui->cur_layout) {
|
||||
ui_hide(IFLY_LAYOUT_NO_CONNECT);
|
||||
ui_show(ifly_ui->cur_layout);
|
||||
if (ifly_ui->cur_layout != IFLY_LAYOUT_TTS) {
|
||||
ui_show(IFLY_LAYOUT_VAD);
|
||||
} else {
|
||||
ui_show(IFLY_LAYOUT_TTS);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@@ -654,6 +664,7 @@ static int vad_no_content()
|
||||
ifly_ui->cur_layout = IFLY_LAYOUT_VAD;
|
||||
ifly_ui->show_layout = IFLY_LAYOUT_NO_CONTENT;
|
||||
ifly_no_content(IFLY_VAD_NO_DATA_CNT_MAX);
|
||||
ui_ifly_vad_button_touch(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -663,7 +674,7 @@ static int vad_network_fail()
|
||||
ifly_ui->cur_layout = IFLY_LAYOUT_CONNECTTING;
|
||||
ifly_ui->show_layout = IFLY_LAYOUT_CONNECT_FAIL;
|
||||
ifly_no_content(IFLY_VAD_NO_CONN_CNT_MAX);
|
||||
ui_ifly_vad_button_touch(1);
|
||||
ui_ifly_vad_button_touch(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -673,7 +684,7 @@ static int vad_network_recv_error()
|
||||
ifly_ui->cur_layout = IFLY_LAYOUT_VAD;
|
||||
ifly_ui->show_layout = IFLY_LAYOUT_CONNECT_FAIL;
|
||||
ifly_no_content(IFLY_VAD_NO_CONN_CNT_MAX);
|
||||
ui_ifly_vad_button_touch(1);
|
||||
ui_ifly_vad_button_touch(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -691,6 +702,7 @@ static int ai_think()
|
||||
{
|
||||
ui_hide(IFLY_LAYOUT_VAD);
|
||||
ui_show(IFLY_LAYOUT_AI);
|
||||
ui_ifly_vad_button_touch(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -112,6 +112,11 @@ static int ui_key_event_prob_handle(void *arg)
|
||||
struct key_event *key = (struct key_event *)arg;
|
||||
u16 key_event;
|
||||
log_debug("[%s] key->event:%d, key->value:%d", __func__, key->event, key->value);
|
||||
if (app_get_current_mode_name() == APP_MODE_UPDATE ||
|
||||
app_get_current_mode_name() == APP_MODE_RCSP) {
|
||||
log_info("%s return", __func__);
|
||||
return 0; // 传输的时候不处理
|
||||
}
|
||||
key_event = jlui_key_event_remap(key, jlui_key_watch_event_table);
|
||||
|
||||
if (__this->send_event_cb) {
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
#include "audio_config.h"
|
||||
#include "gpio.h"
|
||||
#include "app_task.h"
|
||||
#include "bt.h"
|
||||
|
||||
#define LOG_TAG_CONST AVI_VIDEO
|
||||
#define LOG_TAG "[AVI_VIDEO]"
|
||||
@@ -109,6 +110,15 @@ static const char *avi_files[] = {
|
||||
// 可以继续添加更多文件
|
||||
};
|
||||
static u16 task_switch_flag;
|
||||
u16 app_video_task_switch_flag_get()
|
||||
{
|
||||
return task_switch_flag;
|
||||
}
|
||||
u16 app_video_task_switch_flag_set(u16 flag)
|
||||
{
|
||||
task_switch_flag = flag;
|
||||
return task_switch_flag;
|
||||
}
|
||||
/* static u8 __this->param.is_audio_mute = 1; */
|
||||
|
||||
#define AVI_FILE_COUNT (sizeof(avi_files) / sizeof(avi_files[0]))
|
||||
@@ -2044,12 +2054,13 @@ void *get_avi_player_st_handle()
|
||||
}
|
||||
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
static void app_video_mode_switch(void *priv)
|
||||
void app_video_mode_switch(void *priv)
|
||||
{
|
||||
int ret = FALSE;
|
||||
u16 flag = (u16)priv;
|
||||
log_info("%s", __func__);
|
||||
if (flag != task_switch_flag) {
|
||||
log_info("\n\n %s, %d \n\n", __func__, __LINE__);
|
||||
log_info("flag:%d, %d \n", flag, task_switch_flag);
|
||||
log_info("%s %d %d--%d", __func__, __LINE__, flag, task_switch_flag);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2057,7 +2068,15 @@ static void app_video_mode_switch(void *priv)
|
||||
if (app_get_current_mode_name() == APP_MODE_VIDEO) {
|
||||
return;
|
||||
}
|
||||
int ret = app_task_switch_to(APP_MODE_VIDEO, NULL_VALUE);
|
||||
|
||||
#if TCFG_APP_BT_EN && TCFG_BT_BACKGROUND_ENABLE
|
||||
if (bt_check_already_initializes()) {
|
||||
#else
|
||||
if (1) {
|
||||
#endif
|
||||
ret = app_task_switch_to(APP_MODE_VIDEO, NULL_VALUE);
|
||||
}
|
||||
|
||||
if (ret == FALSE) {
|
||||
sys_timeout_add((void *)(long)task_switch_flag, app_video_mode_switch, 500);
|
||||
}
|
||||
@@ -2070,12 +2089,21 @@ void *animig_open(char *name, AVI_PARAM param, int arg)
|
||||
u8 type = 0;
|
||||
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
#if TCFG_APP_BT_EN && TCFG_BT_BACKGROUND_ENABLE
|
||||
if (app_get_current_mode_name() != APP_MODE_VIDEO && bt_check_already_initializes()) {
|
||||
#else
|
||||
if (app_get_current_mode_name() != APP_MODE_VIDEO) {
|
||||
#endif
|
||||
int ret = app_task_switch_to(APP_MODE_VIDEO, NULL_VALUE);
|
||||
if (ret == FALSE) {
|
||||
sys_timeout_add((void *)(long)task_switch_flag, app_video_mode_switch, 500);
|
||||
}
|
||||
}
|
||||
#if TCFG_APP_BT_EN && TCFG_BT_BACKGROUND_ENABLE
|
||||
else {
|
||||
sys_timeout_add((void *)(long)task_switch_flag, app_video_mode_switch, 500);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
FILE *f = fopen(name, "r");
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "pcm_data.h"
|
||||
#include "mic_data.h"
|
||||
#include "clock_manager/clock_manager.h"
|
||||
|
||||
#include "app_task.h"
|
||||
#define LOG_TAG_CONST VIDEO_REC
|
||||
#define LOG_TAG "[VIDEO_REC]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
@@ -16,6 +16,8 @@
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
#if TCFG_CAMERA_MANAGER_ENABLE
|
||||
extern void app_video_mode_switch(void *priv);
|
||||
extern u16 app_video_task_switch_flag_get();
|
||||
/*
|
||||
是否使用独立pcm线程管理mic数据,
|
||||
会消耗更多的ram(11*4k),直接获取mic数据仅需要(3*4k+512)
|
||||
@@ -87,6 +89,27 @@ static void jlcamera_ui_reflush(void)
|
||||
if (__this && __this->ui_refresh_cb) {
|
||||
__this->ui_refresh_cb(__this->write_error);
|
||||
}
|
||||
#if 0//刷新间隔测试
|
||||
{
|
||||
static int last_msec = 0;
|
||||
static int frame_count_total_interval = 0;
|
||||
static int frame_count_cnt = 0;
|
||||
int curr_msec = jiffies_msec();
|
||||
int interval = curr_msec - last_msec;
|
||||
if (interval < 1000) {
|
||||
frame_count_total_interval += interval;
|
||||
frame_count_cnt ++;
|
||||
int frame_count_avg = frame_count_total_interval / frame_count_cnt;
|
||||
int frame_fps = 0 ;
|
||||
if (frame_count_avg) {
|
||||
frame_fps = 1000 / frame_count_avg;
|
||||
}
|
||||
printf("[camera-ui] avg:%d fps:%d interval%d total:%d cnt:%d\n",
|
||||
frame_count_avg, frame_fps, interval, frame_count_total_interval, frame_count_cnt);
|
||||
}
|
||||
last_msec = curr_msec;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
@@ -397,7 +420,30 @@ static void video_show_task(void *priv)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (camera_manager_data_read(&jpeg_data, &jpeg_data_len) == 0) {
|
||||
#if 0 //编码间隔
|
||||
{
|
||||
static int last_msec = 0;
|
||||
static int frame_count_total_interval = 0;
|
||||
static int frame_count_cnt = 0;
|
||||
int curr_msec = jiffies_msec();
|
||||
int interval = curr_msec - last_msec;
|
||||
if (interval < 1000)
|
||||
{
|
||||
frame_count_total_interval += interval;
|
||||
frame_count_cnt ++;
|
||||
int frame_count_avg = frame_count_total_interval / frame_count_cnt;
|
||||
int frame_fps = 0 ;
|
||||
if (frame_count_avg) {
|
||||
frame_fps = 1000 / frame_count_avg;
|
||||
}
|
||||
printf("[camera] avg:%d fps:%d interval%d total:%d cnt:%d\n",
|
||||
frame_count_avg, frame_fps, interval, frame_count_total_interval, frame_count_cnt);
|
||||
}
|
||||
last_msec = curr_msec;
|
||||
}
|
||||
#endif
|
||||
log_char('M');
|
||||
read_data = 1;
|
||||
frame_cnt ++;
|
||||
@@ -409,8 +455,6 @@ static void video_show_task(void *priv)
|
||||
}
|
||||
#endif
|
||||
if (out_fd) { //录像输出
|
||||
|
||||
|
||||
if (!jljpeg_frame_dropping_judge()) {
|
||||
__this->write_error = AVI_write_frame(out_fd, (char *)jpeg_data, jpeg_data_len, 1);
|
||||
jljpeg_frame_fill_judge(out_fd, 1); //补帧计算
|
||||
@@ -419,6 +463,10 @@ static void video_show_task(void *priv)
|
||||
}
|
||||
}
|
||||
camera_manager_read_done(jpeg_data);
|
||||
if (!out_fd) {
|
||||
//不录像的时候,主动延时
|
||||
os_time_dly(6);
|
||||
}
|
||||
#if 0
|
||||
static int cam_last_msec = 0;
|
||||
static int cam_frame_sum = 0;
|
||||
@@ -505,6 +553,14 @@ int jlcamera_video_rec_init(void)
|
||||
if (ret) {
|
||||
goto __err;
|
||||
}
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
if (app_get_current_mode_name() != APP_MODE_VIDEO) {
|
||||
int ret = app_task_switch_to(APP_MODE_VIDEO, NULL_VALUE);
|
||||
if (ret == FALSE) {
|
||||
sys_timeout_add((void *)(long) app_video_task_switch_flag_get(), app_video_mode_switch, 500);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
int fps;
|
||||
camera_manager_get_dev_fps(&fps);
|
||||
//视频帧率
|
||||
@@ -524,6 +580,12 @@ __err:
|
||||
log_error("%s err\n", __func__);
|
||||
camera_manager_stop();
|
||||
camera_manager_deinit();
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
if (app_get_current_mode_name() == APP_MODE_VIDEO) {
|
||||
app_mode_stack_clr(APP_MODE_VIDEO);
|
||||
app_task_switch_back();
|
||||
}
|
||||
#endif
|
||||
if (__this) {
|
||||
free(__this);
|
||||
__this = NULL;
|
||||
@@ -556,6 +618,12 @@ int jlcamera_video_rec_deinit(void)
|
||||
}
|
||||
|
||||
camera_manager_deinit();
|
||||
#if TCFG_APP_VIDEO_EN
|
||||
if (app_get_current_mode_name() == APP_MODE_VIDEO) {
|
||||
app_mode_stack_clr(APP_MODE_VIDEO);
|
||||
app_task_switch_back();
|
||||
}
|
||||
#endif
|
||||
clock_unlock("camera_video");
|
||||
__this->busy = 0;
|
||||
free(__this);
|
||||
|
||||
Reference in New Issue
Block a user