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);
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"-name": "BT_Watch",
|
||||
"-type": "project",
|
||||
"activePage": 83,
|
||||
"activePage": 84,
|
||||
"chip_type": "BR35",
|
||||
"dpi_type": "72",
|
||||
"lang_excel": "../../多国语言/多国语言_watch.xls",
|
||||
@@ -446144,7 +446144,7 @@
|
||||
"-name": "id",
|
||||
"-type": "id",
|
||||
"caption": "唯一ID号",
|
||||
"ename": "DUER_ERROR_NOTE",
|
||||
"ename": "DUER_NOTE",
|
||||
"id": 0
|
||||
},
|
||||
{
|
||||
@@ -446314,504 +446314,7 @@
|
||||
"-name": "id",
|
||||
"-type": "id",
|
||||
"caption": "ID号",
|
||||
"ename": "DUER_BASEFORM_ERROR",
|
||||
"id": 0
|
||||
},
|
||||
{
|
||||
"-name": "element_css",
|
||||
"-type": "struct",
|
||||
"caption": "CSS元素",
|
||||
"info": "",
|
||||
"struct": [
|
||||
[
|
||||
{
|
||||
"-name": "hori_align",
|
||||
"-type": "enum",
|
||||
"caption": "水平对齐方式",
|
||||
"default": "HORI_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"HORI_ALIGN_LEFT": 0
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_RIGHT": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "vert_align",
|
||||
"-type": "enum",
|
||||
"caption": "垂直对齐方式",
|
||||
"default": "VERT_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"VERT_ALIGN_TOP": 0
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_BOTTOM": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "invisible",
|
||||
"-type": "enum",
|
||||
"caption": "默认隐藏",
|
||||
"default": "false",
|
||||
"enum": [
|
||||
{
|
||||
"true": 1
|
||||
},
|
||||
{
|
||||
"false": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "flags",
|
||||
"-type": "enum",
|
||||
"caption": "标志",
|
||||
"default": "ELM_FLAG_NORMAL",
|
||||
"enum": [
|
||||
{
|
||||
"ELM_FLAG_NORMAL": 0
|
||||
},
|
||||
{
|
||||
"ELM_FLAG_HEAD": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "background_color",
|
||||
"-type": "background-color",
|
||||
"background-color": "#ff000000",
|
||||
"caption": "背景颜色"
|
||||
},
|
||||
{
|
||||
"-name": "rect",
|
||||
"-type": "rect",
|
||||
"caption": "坐标",
|
||||
"rect": {
|
||||
"height": 385,
|
||||
"width": 320,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"-name": "border",
|
||||
"-type": "border",
|
||||
"border": {
|
||||
"bottom": 0,
|
||||
"left": 0,
|
||||
"right": 0,
|
||||
"top": 0
|
||||
},
|
||||
"caption": "边框",
|
||||
"gray-color": 0
|
||||
},
|
||||
{
|
||||
"-name": "background_image",
|
||||
"-type": "background-image",
|
||||
"background-image": "",
|
||||
"caption": "背景图片"
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"tip": "",
|
||||
"version": "1",
|
||||
"widget": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"-class": "NewLayout",
|
||||
"-name": "布局_624",
|
||||
"-type": "NewLayout",
|
||||
"caption": "布局",
|
||||
"clip": true,
|
||||
"icon": "config/images/layout.ico",
|
||||
"layout": [
|
||||
{
|
||||
"-class": "NewFrame",
|
||||
"-name": "文字_609",
|
||||
"-type": "Text",
|
||||
"caption": "文字",
|
||||
"icon": "",
|
||||
"property": [
|
||||
{
|
||||
"-name": "id",
|
||||
"-type": "id",
|
||||
"caption": "唯一ID号",
|
||||
"ename": "DUER_RESPONSE_TXT",
|
||||
"id": 0
|
||||
},
|
||||
{
|
||||
"-name": "element_css",
|
||||
"-type": "struct",
|
||||
"caption": "CSS元素",
|
||||
"info": "",
|
||||
"struct": [
|
||||
[
|
||||
{
|
||||
"-name": "hori_align",
|
||||
"-type": "enum",
|
||||
"caption": "水平对齐方式",
|
||||
"default": "HORI_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"HORI_ALIGN_LEFT": 0
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_RIGHT": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "vert_align",
|
||||
"-type": "enum",
|
||||
"caption": "垂直对齐方式",
|
||||
"default": "VERT_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"VERT_ALIGN_TOP": 0
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_BOTTOM": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "invisible",
|
||||
"-type": "enum",
|
||||
"caption": "默认隐藏",
|
||||
"default": "false",
|
||||
"enum": [
|
||||
{
|
||||
"true": 1
|
||||
},
|
||||
{
|
||||
"false": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "flags",
|
||||
"-type": "enum",
|
||||
"caption": "标志",
|
||||
"default": "ELM_FLAG_NORMAL",
|
||||
"enum": [
|
||||
{
|
||||
"ELM_FLAG_NORMAL": 0
|
||||
},
|
||||
{
|
||||
"ELM_FLAG_HEAD": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "background_color",
|
||||
"-type": "background-color",
|
||||
"background-color": "",
|
||||
"caption": "背景颜色"
|
||||
},
|
||||
{
|
||||
"-name": "rect",
|
||||
"-type": "rect",
|
||||
"caption": "坐标",
|
||||
"rect": {
|
||||
"height": 194,
|
||||
"width": 265,
|
||||
"x": 29,
|
||||
"y": 38
|
||||
}
|
||||
},
|
||||
{
|
||||
"-name": "border",
|
||||
"-type": "border",
|
||||
"border": {
|
||||
"bottom": 0,
|
||||
"left": 0,
|
||||
"right": 0,
|
||||
"top": 0
|
||||
},
|
||||
"caption": "边框",
|
||||
"gray-color": 0
|
||||
},
|
||||
{
|
||||
"-name": "background_image",
|
||||
"-type": "background-image",
|
||||
"background-image": "",
|
||||
"caption": "背景图片"
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "source",
|
||||
"-type": "text-str",
|
||||
"caption": "数据源",
|
||||
"default": "none",
|
||||
"maxlength": 8
|
||||
},
|
||||
{
|
||||
"-name": "color",
|
||||
"-type": "color",
|
||||
"caption": "文字颜色",
|
||||
"color": "#ffffffff"
|
||||
},
|
||||
{
|
||||
"-name": "color",
|
||||
"-type": "color",
|
||||
"caption": "高亮颜色",
|
||||
"color": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"-name": "str",
|
||||
"-type": "text-pic",
|
||||
"caption": "文字列表",
|
||||
"default": "",
|
||||
"list": [
|
||||
],
|
||||
"maxlength": 100
|
||||
},
|
||||
{
|
||||
"-name": "code",
|
||||
"-type": "enum",
|
||||
"caption": "编码格式",
|
||||
"default": "STRPIC",
|
||||
"enum": [
|
||||
{
|
||||
"TEXT": 0
|
||||
},
|
||||
{
|
||||
"ASCII": 1
|
||||
},
|
||||
{
|
||||
"STRPIC": 2
|
||||
},
|
||||
{
|
||||
"MULSTR": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tip": "",
|
||||
"version": "1",
|
||||
"widget": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"-class": "NewFrame",
|
||||
"-name": "图片_925",
|
||||
"-type": "ImageList",
|
||||
"caption": "图片",
|
||||
"icon": "config/images/page_white_vector.png",
|
||||
"property": [
|
||||
{
|
||||
"-name": "id",
|
||||
"-type": "id",
|
||||
"caption": "ID号",
|
||||
"ename": "DUER_RESPONSE_TTS",
|
||||
"id": 0
|
||||
},
|
||||
{
|
||||
"-name": "element_css",
|
||||
"-type": "struct",
|
||||
"caption": "CSS元素",
|
||||
"info": "",
|
||||
"struct": [
|
||||
[
|
||||
{
|
||||
"-name": "hori_align",
|
||||
"-type": "enum",
|
||||
"caption": "水平对齐方式",
|
||||
"default": "HORI_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"HORI_ALIGN_LEFT": 0
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"HORI_ALIGN_RIGHT": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "vert_align",
|
||||
"-type": "enum",
|
||||
"caption": "垂直对齐方式",
|
||||
"default": "VERT_ALIGN_CENTER",
|
||||
"enum": [
|
||||
{
|
||||
"VERT_ALIGN_TOP": 0
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_CENTER": 1
|
||||
},
|
||||
{
|
||||
"VERT_ALIGN_BOTTOM": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "invisible",
|
||||
"-type": "enum",
|
||||
"caption": "默认隐藏",
|
||||
"default": "false",
|
||||
"enum": [
|
||||
{
|
||||
"true": 1
|
||||
},
|
||||
{
|
||||
"false": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "flags",
|
||||
"-type": "enum",
|
||||
"caption": "标志",
|
||||
"default": "ELM_FLAG_NORMAL",
|
||||
"enum": [
|
||||
{
|
||||
"ELM_FLAG_NORMAL": 0
|
||||
},
|
||||
{
|
||||
"ELM_FLAG_HEAD": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "background_color",
|
||||
"-type": "background-color",
|
||||
"background-color": "",
|
||||
"caption": "背景颜色"
|
||||
},
|
||||
{
|
||||
"-name": "rect",
|
||||
"-type": "rect",
|
||||
"caption": "坐标",
|
||||
"rect": {
|
||||
"height": 75,
|
||||
"width": 102,
|
||||
"x": 104,
|
||||
"y": 271
|
||||
}
|
||||
},
|
||||
{
|
||||
"-name": "border",
|
||||
"-type": "border",
|
||||
"border": {
|
||||
"bottom": 0,
|
||||
"left": 0,
|
||||
"right": 0,
|
||||
"top": 0
|
||||
},
|
||||
"caption": "边框",
|
||||
"gray-color": 0
|
||||
},
|
||||
{
|
||||
"-name": "background_image",
|
||||
"-type": "background-image",
|
||||
"background-image": "",
|
||||
"caption": "背景图片"
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "source",
|
||||
"-type": "text-str",
|
||||
"caption": "数据源",
|
||||
"default": "none",
|
||||
"maxlength": 8
|
||||
},
|
||||
{
|
||||
"-name": "highlight",
|
||||
"-type": "int8",
|
||||
"caption": "默认高亮",
|
||||
"default": 0,
|
||||
"max": 128,
|
||||
"min": 0
|
||||
},
|
||||
{
|
||||
"-name": "play_mode",
|
||||
"-type": "enum",
|
||||
"caption": "播放设置",
|
||||
"default": "PLAY_NONE",
|
||||
"enum": [
|
||||
{
|
||||
"PLAY_NONE": 0
|
||||
},
|
||||
{
|
||||
"PLAY_ONCE": 1
|
||||
},
|
||||
{
|
||||
"PLAY_LOOP": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"-name": "interval",
|
||||
"-type": "int16",
|
||||
"caption": "播放间隔(ms)",
|
||||
"default": 100,
|
||||
"max": 32768,
|
||||
"min": 0
|
||||
},
|
||||
{
|
||||
"-name": "normal_image",
|
||||
"-type": "piclist",
|
||||
"caption": "图片列表",
|
||||
"default": "config/image_resources/pullup/drop_icon_play.png",
|
||||
"image-compress": "true",
|
||||
"image-compress-en": "true",
|
||||
"image-compress-level": "",
|
||||
"image-compress-way": "BestSpaceSize",
|
||||
"image-type": "AUTO",
|
||||
"list": [
|
||||
"config/image_resources/pullup/drop_icon_play.png",
|
||||
"config/image_resources/pullup/drop_icon_stop.png"
|
||||
],
|
||||
"maxlength": 30
|
||||
},
|
||||
{
|
||||
"-name": "highlight_image",
|
||||
"-type": "piclist",
|
||||
"caption": "高亮图片列表",
|
||||
"default": "",
|
||||
"list": [
|
||||
],
|
||||
"maxlength": 30
|
||||
}
|
||||
],
|
||||
"tip": "",
|
||||
"version": "1",
|
||||
"widget": [
|
||||
]
|
||||
}
|
||||
],
|
||||
"property": [
|
||||
{
|
||||
"-name": "id",
|
||||
"-type": "id",
|
||||
"caption": "ID号",
|
||||
"ename": "DUER_BASEFORM_RESPONSE",
|
||||
"ename": "DUER_BASEFORM_NOTE",
|
||||
"id": 0
|
||||
},
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -562,7 +562,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 +1725,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 +2565,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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -123,6 +123,7 @@ extern void gpu_free_frame_buf(void *p);
|
||||
extern void jpeg_module_free_res_cb(void *p);
|
||||
extern struct element *ui_core_get_root();
|
||||
extern u8 buf_is_heap_addr(void *p);
|
||||
extern int ui_buf_is_psram(void *buf);
|
||||
extern const int JLUI_GPU_DMA_TO_PSRAM;
|
||||
extern void *jlgpu_unit_to_instruction(pJLGPUTaskUnit_t taskp);
|
||||
extern const int config_gpu_cache_psram_jpeg_en ;
|
||||
@@ -182,7 +183,7 @@ static int jlgpu_lcd_buf_line_get(int left_space, int stride, int buf_num, int m
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
static void jlgpu_scheduler_aysnc_free_buf_cb(void *p)
|
||||
{
|
||||
if (buf_is_heap_addr(p)) {
|
||||
if (buf_is_heap_addr(p) || ui_buf_is_psram(p)) {
|
||||
gpu_free_frame_buf(p);
|
||||
} else {
|
||||
ASSERT(0, "p:%x", (int)p);
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <math.h>
|
||||
#include "ui/lcd/lcd_drive.h" // lcd 驱动
|
||||
|
||||
#if TCFG_UI_ENABLE
|
||||
|
||||
#define LOG_TAG_CONST JPEG
|
||||
#define LOG_TAG "[JPEG]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
@@ -650,18 +652,20 @@ static void jpeg_draw_cb(int id, u8 *dst_buf, struct rect *dst_r, struct rect *s
|
||||
|
||||
/* 计算变换后图片的输出区域 */
|
||||
struct rect jpeg_draw_src;
|
||||
memcpy(&jpeg_draw_src, src_r, sizeof(struct rect));
|
||||
//放大时为中心放大
|
||||
int center_y = src_r->top + src_r->height / 2;
|
||||
jpeg_draw_src.height = opj->height / ratio_h;
|
||||
jpeg_draw_src.top = center_y - jpeg_draw_src.height / 2;
|
||||
int center_x = src_r->left + src_r->width / 2;
|
||||
jpeg_draw_src.width = opj->width / ratio_w;
|
||||
jpeg_draw_src.left = center_x - jpeg_draw_src.width / 2;
|
||||
if (matrix) {
|
||||
int center_y = src_r->top + src_r->height / 2;
|
||||
jpeg_draw_src.height = opj->height / ratio_h;
|
||||
jpeg_draw_src.top = center_y - jpeg_draw_src.height / 2;
|
||||
int center_x = src_r->left + src_r->width / 2;
|
||||
jpeg_draw_src.width = opj->width / ratio_w;
|
||||
jpeg_draw_src.left = center_x - jpeg_draw_src.width / 2;
|
||||
} else {
|
||||
memcpy(&jpeg_draw_src, src_r, sizeof(struct rect));
|
||||
}
|
||||
/* DUMP_RECT(__func__, __LINE__, "dst_r", dst_r); //推屏buf */
|
||||
/* DUMP_RECT(__func__, __LINE__, "src_r", src_r); //jpeg显示区域 */
|
||||
/* DUMP_RECT(__func__, __LINE__, "jpeg_draw_src", &jpeg_draw_src); //jpeg缩放后区域 */
|
||||
|
||||
/* 计算图片输出和推屏Buf的重叠区域 */
|
||||
struct rect cover_r_t;
|
||||
if (!get_rect_cover(dst_r, src_r, &cover_r_t)) {
|
||||
@@ -707,7 +711,15 @@ static void jpeg_draw_cb(int id, u8 *dst_buf, struct rect *dst_r, struct rect *s
|
||||
/* DUMP_RECT(__func__, __LINE__, "jpeg_dec_r", &jpeg_dec_r); */
|
||||
u8 *disp_buf = dst_buf + (block_r.top - dst_r->top) * 2 * dst_r->width;
|
||||
/*启动解码*/
|
||||
jljpeg_decode_start(opj, &jpeg_draw_src, &jpeg_dec_r, &cover_r, &block_r, disp_buf);
|
||||
int jpg_dec_ret = jljpeg_decode_start(opj, &jpeg_draw_src, &jpeg_dec_r, &cover_r, &block_r, disp_buf);
|
||||
#if 0
|
||||
//用于jpeg_stream debug
|
||||
if (jpg_dec_ret != JDEC_OK) {
|
||||
extern int jljpeg_stream_src_data_save_to_file(s8 * filename);
|
||||
jljpeg_stream_src_data_save_to_file("storage/sd0/C/ERROR/err_****.jpg");
|
||||
ASSERT(0);
|
||||
}
|
||||
#endif
|
||||
sub_top += sub_height;
|
||||
sub_height = (sub_top + sub_height + draw_top < draw_btm) ? max_dec_height : draw_btm - draw_top - sub_top;
|
||||
}
|
||||
@@ -981,9 +993,7 @@ void *jpeg_module_opj_create_file(void *path, int path_len, u32 check, u32 index
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*#if TCFG_UI_ENABLE */
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include "jpeg_stream.h"
|
||||
#include "video/avi/avilib.h"
|
||||
|
||||
#if CONFIG_JL_UI_ENABLE
|
||||
|
||||
#define LOG_TAG_CONST JPEG
|
||||
#define LOG_TAG "[JPEG_STREAM]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
@@ -719,3 +721,6 @@ int jpeg_image_file_psram(struct draw_context *dc, int left, int top, int width,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /*#if CONFIG_JL_UI_ENABLE*/
|
||||
|
||||
|
||||
@@ -1874,7 +1874,8 @@ static int jlui_close_draw_context(struct draw_context *dc)
|
||||
/* 如果 dc->refresh 没有使能,说明是3D特效创建GPU任务链,此时不释放缓存,由特效退出时主动释放 */
|
||||
if (dc->refresh && (config_gpu_cache_psram_jpeg_en || config_gpu_cache_psram_file_res_en)) {
|
||||
/* gpu_input_stream_cache_reset(); */
|
||||
gpu_input_stream_cache_clr_non_resident();
|
||||
/* gpu_input_stream_cache_clr_non_resident(); */
|
||||
gpu_input_stream_cache_clr_by_index(dc->index);
|
||||
}
|
||||
|
||||
__this->dc_flag &= ~BIT(dc->index);
|
||||
@@ -4350,12 +4351,19 @@ void *cache_gpu_input_data(void *head, pJLGPUTaskParam_t task_param, void *fp, i
|
||||
task_param->texture.data = (u8 *)((u32)task_param->texture.data - tab_size);
|
||||
task_param->image.len += tab_size;
|
||||
}
|
||||
|
||||
#if 1
|
||||
u32 res_hash = 5383;
|
||||
res_hash = mmu_hash(res_hash, (u8 *)&task_param->image, sizeof(struct image_file));
|
||||
res_hash = mmu_hash(res_hash, (u8 *)&task_param->task_id, 4);
|
||||
res_hash = mmu_hash(res_hash, (u8 *)&task_param->element_id, 4);
|
||||
u32 data_crc = res_hash;
|
||||
#else
|
||||
u32 tab[3] ALIGNED(4);
|
||||
tab[0] = (u32)fp;
|
||||
tab[1] = (u32)task_param->texture.data;
|
||||
tab[2] = task_param->image.len;
|
||||
u16 data_crc = CRC16(&tab[0], sizeof(tab));
|
||||
#endif
|
||||
/* 检查是否已经有缓存,如果需要缓存的图片没在cache里,释放原来的,缓存新的 */
|
||||
void *cache_addr = gpu_input_stream_cache_check(data_crc);
|
||||
int vaild_index = index;
|
||||
@@ -4377,6 +4385,7 @@ void *cache_gpu_input_data(void *head, pJLGPUTaskParam_t task_param, void *fp, i
|
||||
}
|
||||
#endif
|
||||
cache_addr = gpu_input_stream_cache_add(fp, task_param->texture.data, task_param->image.len, data_crc, task_param->texture.mmu_tab_base, (task_param->info.tab_size >> 2));
|
||||
/* printf("[cache]add elm_id:%x task_id:%d index:%d addr:0x%x", task_param->element_id, task_param->task_id,index, (u32)cache_addr); */
|
||||
task_param->texture.data = cache_addr;
|
||||
task_param->texture.mmu_tab_base = NULL;
|
||||
}
|
||||
|
||||
@@ -1445,7 +1445,51 @@ int gpu_input_stream_cache_set_index(u32 cache_addr, u8 index);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
int gpu_input_stream_cache_vaild_sub_by_index(u8 index);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief gpu_input_stream_cache_clr_by_index 按索引清理资源
|
||||
*
|
||||
* @param index 链表索引(dc->index)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
int gpu_input_stream_cache_clr_by_index(u8 index);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief gpu_input_stream_cache_addr_check 检查资源是否存在psram(通过gpu_cache接口管理)
|
||||
*
|
||||
* @param adr
|
||||
* @param len
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
int gpu_input_stream_cache_addr_check(u32 adr, int len);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief gpu_input_stream_cache_dump 打印gpu_cache信息
|
||||
*
|
||||
* @param index -1:打印所有信息,0~255:按链表索引打印
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
int gpu_input_stream_cache_dump(int index, const char *func, int line);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief jlgpu_check_res_all_task
|
||||
*
|
||||
* @param head 任务链表头
|
||||
* @param gpu_cache_check
|
||||
校验gpu_cache资源(nandflash+psram版本)
|
||||
1:校验不过时打印信息,
|
||||
2:校验不过时打印信息并触发断言
|
||||
* @param func 调用函数
|
||||
* @param line 调用行号
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
void jlgpu_check_res_all_task(pJLGPUTaskHead_t head, int gpu_cache_check, const char *func, int line);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -59,6 +59,13 @@ typedef enum {
|
||||
AUTO_CENTER_CUSTOM,//自定义滑动处理
|
||||
} AUTO_CENTER_MODE;
|
||||
|
||||
// 定义列表动画类型枚举
|
||||
typedef enum {
|
||||
UI_ANIM_TYPE_NONE,
|
||||
UI_ANIM_TYPE_ENERGY, // 惯性动画
|
||||
UI_ANIM_TYPE_CENTER_AND_FLICK, // 回弹动画
|
||||
} ui_anim_type_t;
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
|
||||
@@ -145,6 +145,7 @@ int syscfg_early_read(u16 item_id, void *buf, u16 len);
|
||||
//=================================================================================//
|
||||
#define CFG_STORE_VM_ONLY_BEGIN 50
|
||||
#define AT_CHAR_DEV_NAME 51
|
||||
#define CFG_FATFS_BACKUP_FLAG 60
|
||||
#define CFG_STORE_VM_ONLY_END 99
|
||||
|
||||
//=================================================================================//
|
||||
|
||||
Reference in New Issue
Block a user