1.更新IQ;2.更新缩略图修改;3.同步wifi文件
This commit is contained in:
parent
e3ccaa56e6
commit
5ea5ebe590
6
code/.vscode/settings.json
vendored
6
code/.vscode/settings.json
vendored
|
@ -3,6 +3,10 @@
|
||||||
"prjcfg_hunting_s530.h": "c",
|
"prjcfg_hunting_s530.h": "c",
|
||||||
"sf_keymng.h": "c",
|
"sf_keymng.h": "c",
|
||||||
"sf_inc.h": "c",
|
"sf_inc.h": "c",
|
||||||
"sf_commmng.h": "c"
|
"sf_commmng.h": "c",
|
||||||
|
"sf_common.h": "c",
|
||||||
|
"sf_filemng.h": "c",
|
||||||
|
"sf_systemmng.h": "c",
|
||||||
|
"sf_commu_mcu_reg.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -920,7 +920,8 @@
|
||||||
#define HUNTING_IR_LED_940 DISABLE
|
#define HUNTING_IR_LED_940 DISABLE
|
||||||
#define SF_BASE_VERSION "7MD4RCwD3T3"
|
#define SF_BASE_VERSION "7MD4RCwD3T3"
|
||||||
#define HW_S530 1
|
#define HW_S530 1
|
||||||
|
#define PHOTO_ISP_STAMP DISABLE
|
||||||
|
#define SF_BASE_VERSION_FEA "R2.3"
|
||||||
|
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
* LVGL UI Style config
|
* LVGL UI Style config
|
||||||
|
|
|
@ -146,7 +146,7 @@ void Movie_CommPoolInit(void)
|
||||||
vcap_buf_size +
|
vcap_buf_size +
|
||||||
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
|
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
|
||||||
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
|
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
|
||||||
mem_cfg.pool_info[id].blk_cnt = 2;
|
mem_cfg.pool_info[id].blk_cnt = 7;
|
||||||
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "GxVideoFile.h"
|
#include "GxVideoFile.h"
|
||||||
#include "hdal.h"
|
#include "hdal.h"
|
||||||
|
|
||||||
#define MOVIE_ISP_LOG ENABLE
|
#define MOVIE_ISP_LOG DISABLE
|
||||||
|
|
||||||
#if (MOVIE_ISP_LOG == ENABLE)
|
#if (MOVIE_ISP_LOG == ENABLE)
|
||||||
#undef WATERLOGO_FUNCTION
|
#undef WATERLOGO_FUNCTION
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include "sys_mempool.h"
|
#include "sys_mempool.h"
|
||||||
|
|
||||||
#define UDP_SOCKET 0
|
#define UDP_SOCKET 0
|
||||||
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
#define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define __MODULE__ WifiAppCmd
|
#define __MODULE__ WifiAppCmd
|
||||||
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
|
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
|
||||||
|
|
34
code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h
Executable file → Normal file
34
code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h
Executable file → Normal file
|
@ -66,6 +66,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if (SENSOR_CAPS_COUNT >= 2)
|
#if (SENSOR_CAPS_COUNT >= 2)
|
||||||
#define PHOTO_MAX_CAP_SIZE UIAPP_PHOTO_SIZE_10M
|
#define PHOTO_MAX_CAP_SIZE UIAPP_PHOTO_SIZE_10M
|
||||||
#else
|
#else
|
||||||
|
@ -77,18 +78,6 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PHOTO_PREVIEW_SLICE_ENC_FUNC == ENABLE
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH 1920
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT 1080
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_SIZE VDO_YUV_BUFSIZE(CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH, CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT, HD_VIDEO_PXLFMT_YUV420)
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO 8 /* (yuv size / ratio) + header = bs buf size */
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY 90
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
|
|
||||||
#define CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP 3
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define JPG_COMERESSED_RATIO_5 (5)
|
#define JPG_COMERESSED_RATIO_5 (5)
|
||||||
#define JPG_COMERESSED_RATIO_6 (6)
|
#define JPG_COMERESSED_RATIO_6 (6)
|
||||||
#define JPG_COMERESSED_RATIO_7 (7)
|
#define JPG_COMERESSED_RATIO_7 (7)
|
||||||
|
@ -109,11 +98,29 @@
|
||||||
#define JPG_BRC_INIT_Q 85
|
#define JPG_BRC_INIT_Q 85
|
||||||
#define JPG_BRC_RETRY_CNT 4
|
#define JPG_BRC_RETRY_CNT 4
|
||||||
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
|
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
|
||||||
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H/(2*JPG_COMERESSED_RATIO_8))
|
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/(2*JPG_COMERESSED_RATIO_8))
|
||||||
|
|
||||||
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
|
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
|
||||||
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
|
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
|
||||||
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)
|
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)
|
||||||
|
|
||||||
|
#if PHOTO_PREVIEW_SLICE_ENC_FUNC == ENABLE
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH 1920
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT 1080
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_SIZE VDO_YUV_BUFSIZE(CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH, CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT, HD_VIDEO_PXLFMT_YUV420)
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO 8 /* (yuv size / ratio) + header = bs buf size */
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY 90
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP 3
|
||||||
|
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL 1 /* rate control */
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND (SCREENNAIL_TARGETBYTERATE + (SCREENNAIL_TARGETBYTERATE * 20 / 100))
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_LBOUND (SCREENNAIL_TARGETBYTERATE - (SCREENNAIL_TARGETBYTERATE * 20 / 100))
|
||||||
|
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP 2
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
extern UINT32 gPhotoFrameBuf;
|
extern UINT32 gPhotoFrameBuf;
|
||||||
|
|
||||||
extern void PhotoExe_RSC_SetSwitch(UINT32 index, UINT32 value);
|
extern void PhotoExe_RSC_SetSwitch(UINT32 index, UINT32 value);
|
||||||
|
@ -411,4 +418,5 @@ extern BOOL PhotoExe_GetCapYUV420En(void);
|
||||||
|
|
||||||
extern HD_RESULT PhotoExe_DetSensor(BOOL *plug);
|
extern HD_RESULT PhotoExe_DetSensor(BOOL *plug);
|
||||||
|
|
||||||
|
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len);
|
||||||
#endif //_UIAPP_PHOTO_H_
|
#endif //_UIAPP_PHOTO_H_
|
||||||
|
|
436
code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c
Executable file → Normal file
436
code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c
Executable file → Normal file
|
@ -32,7 +32,7 @@
|
||||||
//#include "sf_mcu.h"
|
//#include "sf_mcu.h"
|
||||||
#include "IOCfg.h"
|
#include "IOCfg.h"
|
||||||
#include <sf_inc.h>
|
#include <sf_inc.h>
|
||||||
|
#include "PrjInc.h"
|
||||||
#define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
#define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
||||||
|
|
||||||
#if 1//_TODO
|
#if 1//_TODO
|
||||||
|
@ -240,6 +240,18 @@ static INT32 PhotoExe_Preview_SliceEncode_DateStamp(
|
||||||
IMG_CAP_DATASTAMP_EVENT event);
|
IMG_CAP_DATASTAMP_EVENT event);
|
||||||
|
|
||||||
extern INT32 Set_Cur_Day_Night_Status(BOOL OnOff, UINT8 isSnapVideo);
|
extern INT32 Set_Cur_Day_Night_Status(BOOL OnOff, UINT8 isSnapVideo);
|
||||||
|
|
||||||
|
static INT32 PhotoExe_Preview_SliceEncode_Encode_Set_In(
|
||||||
|
const HD_PATH_ID enc_path_id,
|
||||||
|
const HD_VIDEO_PXLFMT vproc_out_pxlfmt,
|
||||||
|
const HD_DIM dim);
|
||||||
|
|
||||||
|
static INT32 PhotoExe_Preview_SliceEncode_Encode_Set_Out(
|
||||||
|
const HD_PATH_ID enc_path_id,
|
||||||
|
const UINT32 quality);
|
||||||
|
|
||||||
|
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in);
|
||||||
|
|
||||||
/* static variables */
|
/* static variables */
|
||||||
PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB;
|
PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB;
|
||||||
|
|
||||||
|
@ -423,6 +435,7 @@ static UINT32 PhotoExe_GetScreenNailSize(void)
|
||||||
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
||||||
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
|
//BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
||||||
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
|
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
|
||||||
} else {
|
} else {
|
||||||
BitStreamSize = 0;
|
BitStreamSize = 0;
|
||||||
|
@ -455,7 +468,10 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id)
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
|
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
|
||||||
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
|
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
|
||||||
BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
|
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
|
//BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
|
||||||
BufferSize.h = BufferSize.w * 3 / 4;
|
BufferSize.h = BufferSize.w * 3 / 4;
|
||||||
|
|
||||||
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
||||||
|
@ -514,9 +530,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id)
|
||||||
DevSize = GxVideo_GetDeviceSize(DOUT1);
|
DevSize = GxVideo_GetDeviceSize(DOUT1);
|
||||||
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
|
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
|
||||||
{
|
{
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
// fix bug: w/h size will be wrong if no VGA/3M resolution!
|
// fix bug: w/h size will be wrong if no VGA/3M resolution!
|
||||||
BufferSize.w = CFG_SCREENNAIL_W;
|
//BufferSize.w = CFG_SCREENNAIL_W;
|
||||||
BufferSize.h = CFG_SCREENNAIL_H;
|
//BufferSize.h = CFG_SCREENNAIL_H;
|
||||||
|
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
|
BufferSize.h = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
|
|
||||||
if (BufferSize.w > (UINT32)DevSize.w) {
|
if (BufferSize.w > (UINT32)DevSize.w) {
|
||||||
BufferSize.w = DevSize.w;
|
BufferSize.w = DevSize.w;
|
||||||
|
@ -1349,8 +1368,8 @@ void PhotoExe_DZoomOutBK(void)
|
||||||
#define VDO_SEN1_SIZE_W 2960// 2560
|
#define VDO_SEN1_SIZE_W 2960// 2560
|
||||||
#define VDO_SEN1_SIZE_H 1664//1440
|
#define VDO_SEN1_SIZE_H 1664//1440
|
||||||
#else
|
#else
|
||||||
#define VDO_SEN1_SIZE_W 2960// 2560
|
#define VDO_SEN1_SIZE_W 2592// 2560
|
||||||
#define VDO_SEN1_SIZE_H 1664//1440
|
#define VDO_SEN1_SIZE_H 1944//1440
|
||||||
#endif
|
#endif
|
||||||
#define VDO_SEN2_SIZE_W 2560
|
#define VDO_SEN2_SIZE_W 2560
|
||||||
#define VDO_SEN2_SIZE_H 1440
|
#define VDO_SEN2_SIZE_H 1440
|
||||||
|
@ -1401,26 +1420,24 @@ void PhotoExe_DZoomOutBK(void)
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static HD_COMMON_MEM_INIT_CONFIG g_photo_mem_cfg = {0};
|
static HD_COMMON_MEM_INIT_CONFIG g_photo_mem_cfg = {0};
|
||||||
void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen)
|
|
||||||
|
void UiDateImprint_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen)
|
||||||
{
|
{
|
||||||
AET_STATUS_INFO ae_status = {0};
|
AET_STATUS_INFO ae_status = {0};
|
||||||
AWBT_STATUS awb_status = {0};
|
AWBT_STATUS awb_status = {0};
|
||||||
//IQT_WDR_PARAM wdr = {0};
|
//IQT_WDR_PARAM wdr = {0};
|
||||||
HD_RESULT hd_ret;
|
|
||||||
UINT16 AD_Value;
|
ae_status.id = AE_ID_1;
|
||||||
if ((hd_ret = vendor_isp_init()) != HD_OK) {
|
|
||||||
DBG_ERR("vendor_isp_init() failed(%d)\r\n", hd_ret);
|
|
||||||
}
|
|
||||||
AD_Value = sf_mcu_get_irshtter();
|
|
||||||
ae_status.id = 0;
|
|
||||||
vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status);
|
vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status);
|
||||||
awb_status.id = 0;
|
awb_status.id = AWB_ID_1;
|
||||||
vendor_isp_get_awb(AWBT_ITEM_STATUS, &awb_status);
|
vendor_isp_get_awb(AWBT_ITEM_STATUS, &awb_status);
|
||||||
/*wdr.id = id;
|
|
||||||
|
/*
|
||||||
|
wdr.id = id;
|
||||||
vendor_isp_get_iq(IQT_ITEM_WDR_PARAM, &wdr);
|
vendor_isp_get_iq(IQT_ITEM_WDR_PARAM, &wdr);
|
||||||
*/
|
*/
|
||||||
snprintf(Buf, BufLen, "%d %3d %3d %3d %6d %6d %4d %4d %3d %3d %4d %d\0",
|
|
||||||
ae_status.status_info.state_adj,
|
snprintf(Buf, BufLen, "%3d %4d %4d %6d %6d %4d %4d %4d %4d %4d\0",
|
||||||
ae_status.status_info.lv/100000,
|
ae_status.status_info.lv/100000,
|
||||||
ae_status.status_info.lum,
|
ae_status.status_info.lum,
|
||||||
ae_status.status_info.expect_lum,
|
ae_status.status_info.expect_lum,
|
||||||
|
@ -1431,16 +1448,53 @@ AD_Value = sf_mcu_get_irshtter();
|
||||||
//wdr.wdr.enable,
|
//wdr.wdr.enable,
|
||||||
awb_status.status.cur_r_gain,
|
awb_status.status.cur_r_gain,
|
||||||
awb_status.status.cur_b_gain,
|
awb_status.status.cur_b_gain,
|
||||||
awb_status.status.cur_ct,
|
awb_status.status.cur_ct
|
||||||
AD_Value
|
|
||||||
);
|
);
|
||||||
DBG_ERR("isp Buf=%s\r\n",Buf);
|
//DBG_DUMP("isp Buf=%s\r\n",Buf);
|
||||||
if ((hd_ret = vendor_isp_uninit()) != HD_OK) {
|
|
||||||
DBG_ERR("vendor_isp_uninit() failed(%d)\r\n", hd_ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
|
||||||
|
{
|
||||||
|
char *str = NULL;
|
||||||
|
DBG_IND("\r\n");
|
||||||
|
|
||||||
|
DateTime_Load();
|
||||||
|
|
||||||
|
#if PHOTO_ISP_STAMP == ENABLE
|
||||||
|
|
||||||
|
str = DateTime_MakeYMD();
|
||||||
|
UiDateImprint_get_isp_status(0, str, DateTime_StrBuf_Size());
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
switch (UI_GetData(FL_DATE_STAMP))
|
||||||
|
{
|
||||||
|
case DATEIMPRINT_DATE:
|
||||||
|
str = DateTime_MakeYMD();
|
||||||
|
DBG_IND("DATEIMPRINT_DATE, str=%s\r\n", str);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATEIMPRINT_DATE_TIME:
|
||||||
|
str = DateTime_MakeYMDHMS();
|
||||||
|
DBG_IND("DATEIMPRINT_DATE_TIME, str=%s\r\n", str);
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
StrBuf[0] = 0; //Empty String
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (strncmp(str,StrBuf,strlen(str))) {
|
||||||
|
strncpy(StrBuf, str, buff_len - 1);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
//extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff);
|
//extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1458,6 +1512,7 @@ void PhotoExe_CommPoolInit(void)
|
||||||
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
|
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
|
||||||
HD_RESULT hd_ret = HD_OK;
|
HD_RESULT hd_ret = HD_OK;
|
||||||
USIZE DispDevSize = {0};
|
USIZE DispDevSize = {0};
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
|
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
|
||||||
if (hd_ret != HD_OK) {
|
if (hd_ret != HD_OK) {
|
||||||
|
@ -1555,7 +1610,8 @@ void PhotoExe_CommPoolInit(void)
|
||||||
|
|
||||||
id ++;
|
id ++;
|
||||||
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
||||||
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
|
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), pxl_fmt);
|
||||||
|
// g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
|
||||||
g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
|
g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
|
||||||
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
|
|
||||||
|
@ -1871,11 +1927,15 @@ static void PhotoExe_InitNetworkStream(UINT32 dualCam, USIZE *pImageRatioSize)
|
||||||
if (dualCam == DUALCAM_FRONT) {
|
if (dualCam == DUALCAM_FRONT) {
|
||||||
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1);
|
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1);
|
||||||
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
|
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
|
||||||
|
p_strm->enable = PHOTO_PORT_STATE_EN;
|
||||||
p_strm->width_ratio = pImageRatioSize->w;
|
p_strm->width_ratio = pImageRatioSize->w;
|
||||||
p_strm->height_ratio = pImageRatioSize->h;
|
p_strm->height_ratio = pImageRatioSize->h;
|
||||||
|
|
||||||
p_strm->width = ALIGN_CEIL_16(p_strm->height* pImageRatioSize->w/pImageRatioSize->h);
|
p_strm->width = ALIGN_CEIL_16(p_strm->height* pImageRatioSize->w/pImageRatioSize->h);
|
||||||
|
|
||||||
//p_strm->height = PHOTO_STRM_HEIGHT;
|
//p_strm->height = PHOTO_STRM_HEIGHT;
|
||||||
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
|
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
|
||||||
|
|
||||||
if (p_strm->strm_type== PHOTO_STRM_TYPE_HTTP) {
|
if (p_strm->strm_type== PHOTO_STRM_TYPE_HTTP) {
|
||||||
PhotoExe_InitNetHttp();
|
PhotoExe_InitNetHttp();
|
||||||
}
|
}
|
||||||
|
@ -1902,8 +1962,7 @@ static void PhotoExe_InitNetworkStream(UINT32 dualCam, USIZE *pImageRatioSize)
|
||||||
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1+i);
|
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1+i);
|
||||||
if (p_strm == NULL)
|
if (p_strm == NULL)
|
||||||
return;
|
return;
|
||||||
// p_strm->enable = PHOTO_PORT_STATE_EN_RUN;
|
p_strm->enable = PHOTO_PORT_STATE_EN_RUN;
|
||||||
p_strm->enable = PHOTO_PORT_STATE_EN;
|
|
||||||
#if ((SENSOR_CAPS_COUNT == 2) && (SENSOR_INSERT_MASK != 0))
|
#if ((SENSOR_CAPS_COUNT == 2) && (SENSOR_INSERT_MASK != 0))
|
||||||
if (System_GetEnableSensor() == SENSOR_1 && i==UIAPP_PHOTO_STRM_ID_2){
|
if (System_GetEnableSensor() == SENSOR_1 && i==UIAPP_PHOTO_STRM_ID_2){
|
||||||
p_strm->enable = PHOTO_PORT_STATE_EN;
|
p_strm->enable = PHOTO_PORT_STATE_EN;
|
||||||
|
@ -2260,7 +2319,7 @@ static void PhotoExe_InitDisplayStream(UINT32 dualCam, USIZE *pImageRatioSize)
|
||||||
p_disp->rotate_dir = SysVideo_GetDirbyID(DOUT2);
|
p_disp->rotate_dir = SysVideo_GetDirbyID(DOUT2);
|
||||||
ImageApp_Photo_Config(PHOTO_CFG_DISP_INFO, (UINT32)p_disp);
|
ImageApp_Photo_Config(PHOTO_CFG_DISP_INFO, (UINT32)p_disp);
|
||||||
|
|
||||||
DBG_DUMP("p_disp->rotate_dir = %lx\n", p_disp->rotate_dir);
|
DBG_IND("p_disp->rotate_dir = %lx\n", p_disp->rotate_dir);
|
||||||
}
|
}
|
||||||
// sensor 2 display
|
// sensor 2 display
|
||||||
else if (dualCam == DUALCAM_BEHIND) {
|
else if (dualCam == DUALCAM_BEHIND) {
|
||||||
|
@ -2368,15 +2427,18 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||||
USIZE ImageRatioSize = {0};
|
USIZE ImageRatioSize = {0};
|
||||||
UINT32 ImageRatioIdx;
|
UINT32 ImageRatioIdx;
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
UI_SetData(FL_PHOTO_SIZE, PHOTO_SIZE_5M);
|
||||||
|
#endif
|
||||||
|
|
||||||
g_bPhotoOpened = FALSE;
|
g_bPhotoOpened = FALSE;
|
||||||
localInfo->isStartCapture = FALSE;
|
localInfo->isStartCapture = FALSE;
|
||||||
//UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
||||||
|
|
||||||
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
||||||
g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx];
|
g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx];
|
||||||
|
|
||||||
// g_photo_ImageRatioSize = IMAGERATIO_SIZE[4];
|
// g_photo_ImageRatioSize = IMAGERATIO_SIZE[4];
|
||||||
FileSys_MakeDir(PHOTO_THUMB_PATH);
|
|
||||||
GOIO_Turn_Onoff_IRCUT(1);
|
GOIO_Turn_Onoff_IRCUT(1);
|
||||||
|
|
||||||
//sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0);
|
//sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0);
|
||||||
|
@ -2386,7 +2448,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||||
system("sync");
|
system("sync");
|
||||||
usleep(100*1000);
|
usleep(100*1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhotoExe_CommPoolInit();
|
PhotoExe_CommPoolInit();
|
||||||
dualCam =PhotoExe_InitSensorCount();
|
dualCam =PhotoExe_InitSensorCount();
|
||||||
PhotoExe_InitFileNaming();
|
PhotoExe_InitFileNaming();
|
||||||
|
@ -2400,11 +2461,9 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||||
ImageApp_Photo_DispConfig(PHOTO_CFG_DISP_REG_CB ,(UINT32)&PhotoExe_DispCB);
|
ImageApp_Photo_DispConfig(PHOTO_CFG_DISP_REG_CB ,(UINT32)&PhotoExe_DispCB);
|
||||||
PhotoExe_InitDisplayStream(dualCam,&g_photo_ImageRatioSize);
|
PhotoExe_InitDisplayStream(dualCam,&g_photo_ImageRatioSize);
|
||||||
|
|
||||||
|
|
||||||
PhotoExe_InitNetworkStream(dualCam,&g_photo_ImageRatioSize);
|
PhotoExe_InitNetworkStream(dualCam,&g_photo_ImageRatioSize);
|
||||||
ImageApp_Photo_WiFiConfig(PHOTO_CFG_WIFI_REG_CB ,(UINT32)&PhotoExe_WifiCB);
|
ImageApp_Photo_WiFiConfig(PHOTO_CFG_WIFI_REG_CB ,(UINT32)&PhotoExe_WifiCB);
|
||||||
|
|
||||||
|
|
||||||
PHOTO_SENSOR_INFO sen_cfg = {0};
|
PHOTO_SENSOR_INFO sen_cfg = {0};
|
||||||
UIAPP_PHOTO_SENSOR_INFO *pSensorInfo;
|
UIAPP_PHOTO_SENSOR_INFO *pSensorInfo;
|
||||||
|
|
||||||
|
@ -2515,6 +2574,14 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||||
Flip.mirror_type=(UI_GetData(FL_MOVIE_SENSOR_ROTATE) == SEN_ROTATE_ON) ? HD_VIDEO_DIR_MIRRORXY : HD_VIDEO_DIR_NONE;//HD_VIDEO_DIR_MIRRORX;
|
Flip.mirror_type=(UI_GetData(FL_MOVIE_SENSOR_ROTATE) == SEN_ROTATE_ON) ? HD_VIDEO_DIR_MIRRORXY : HD_VIDEO_DIR_NONE;//HD_VIDEO_DIR_MIRRORX;
|
||||||
ImageApp_Photo_Config(PHOTO_CFG_IPL_MIRROR,(UINT32)&Flip);
|
ImageApp_Photo_Config(PHOTO_CFG_IPL_MIRROR,(UINT32)&Flip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (FS_FUNC == ENABLE)
|
||||||
|
// wait fs mount ready
|
||||||
|
System_WaitFS();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FileSys_MakeDir(PHOTO_THUMB_PATH);
|
||||||
|
|
||||||
#if (USE_FILEDB== ENABLE)
|
#if (USE_FILEDB== ENABLE)
|
||||||
|
|
||||||
ImageApp_Photo_Config(PHOTO_CFG_FILEDB_MAX_NUM,5000);
|
ImageApp_Photo_Config(PHOTO_CFG_FILEDB_MAX_NUM,5000);
|
||||||
|
@ -2554,7 +2621,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if PHOTO_PREVIEW_SLICE_ENC_FUNC
|
#if PHOTO_PREVIEW_SLICE_ENC_FUNC
|
||||||
|
|
||||||
/* open encode path */
|
/* open encode path */
|
||||||
|
@ -3137,7 +3203,6 @@ INT32 PhotoExe_OnCaptureStop(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArra
|
||||||
Photo_setS2Status(FALSE);
|
Photo_setS2Status(FALSE);
|
||||||
ImageApp_Photo_CapStop();
|
ImageApp_Photo_CapStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
return NVTEVT_CONSUME;
|
return NVTEVT_CONSUME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3455,12 +3520,10 @@ INT32 PhotoExe_OnImageRatio(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray
|
||||||
|
|
||||||
if (((rotate_dir & ISF_VDO_DIR_ROTATE_270) == ISF_VDO_DIR_ROTATE_270) || \
|
if (((rotate_dir & ISF_VDO_DIR_ROTATE_270) == ISF_VDO_DIR_ROTATE_270) || \
|
||||||
((rotate_dir & ISF_VDO_DIR_ROTATE_90) == ISF_VDO_DIR_ROTATE_90) ) {
|
((rotate_dir & ISF_VDO_DIR_ROTATE_90) == ISF_VDO_DIR_ROTATE_90) ) {
|
||||||
CHKPNT;
|
|
||||||
dst_w=sz_img.h;
|
dst_w=sz_img.h;
|
||||||
dst_h=sz_img.w;
|
dst_h=sz_img.w;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
CHKPNT;
|
|
||||||
dst_w=sz_img.w;
|
dst_w=sz_img.w;
|
||||||
dst_h=sz_img.h;
|
dst_h=sz_img.h;
|
||||||
}
|
}
|
||||||
|
@ -4039,6 +4102,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
|
||||||
in = HD_VIDEOENC_IN(0, first_out_port);
|
in = HD_VIDEOENC_IN(0, first_out_port);
|
||||||
out = HD_VIDEOENC_OUT(0, first_out_port);
|
out = HD_VIDEOENC_OUT(0, first_out_port);
|
||||||
ret = hd_videoenc_open(in, out, &venc_path_id);
|
ret = hd_videoenc_open(in, out, &venc_path_id);
|
||||||
|
|
||||||
if (ret != HD_OK ){
|
if (ret != HD_OK ){
|
||||||
DBG_ERR("hd_videoenc_open(%lx, %lx) failed(%d)!\r\n", in, out, ret);
|
DBG_ERR("hd_videoenc_open(%lx, %lx) failed(%d)!\r\n", in, out, ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
|
@ -4073,16 +4137,28 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
|
||||||
|
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Config_Path(info->enc_path_id, dim, bitrate*2);
|
PhotoExe_Preview_SliceEncode_Encode_Config_Path(info->enc_path_id, dim, bitrate*2);
|
||||||
|
|
||||||
|
/* To avoid mem fragment, start venc firtst. (hdal vdoenc.o[2].max / vdoenc.o[2].que / vdoenc.ctrl.bs)*/
|
||||||
|
{
|
||||||
|
PhotoExe_Preview_SliceEncode_Encode_Set_In(info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {max_info.width, max_info.height});
|
||||||
|
PhotoExe_Preview_SliceEncode_Encode_Set_Out(info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY);
|
||||||
|
hd_videoenc_start(info->enc_path_id);
|
||||||
|
hd_videoenc_stop(info->enc_path_id);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PHOTO_ENC_JPG_SCREENNAIL:
|
case PHOTO_ENC_JPG_SCREENNAIL:
|
||||||
{
|
{
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
info->enc_path_id = venc_path_id;
|
info->enc_path_id = venc_path_id;
|
||||||
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
//info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
||||||
|
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
||||||
|
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
|
||||||
|
|
||||||
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
|
||||||
bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
//bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
||||||
|
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4167,11 +4243,6 @@ static PhotoExe_SliceEncode_Info* PhotoExe_Preview_SliceEncode_Get_Info(const PH
|
||||||
|
|
||||||
static INT32 PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(PhotoExe_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
|
static INT32 PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(PhotoExe_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
|
||||||
{
|
{
|
||||||
if((cap_size_h % slice_num) != 0){
|
|
||||||
DBG_ERR("Height(%lu) should be %lu aligned!, please check photo size of PhotoMapping\r\n", cap_size_h, slice_num);
|
|
||||||
return E_SYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
info->width = cap_size_w;
|
info->width = cap_size_w;
|
||||||
info->height = cap_size_h;
|
info->height = cap_size_h;
|
||||||
info->slice_num = slice_num;
|
info->slice_num = slice_num;
|
||||||
|
@ -4204,18 +4275,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoExe_Slice
|
||||||
slice_num = 1;
|
slice_num = 1;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
||||||
|
|
||||||
UINT32 lines = (buf_size / cap_size_w);
|
UINT32 lines = (buf_size / cap_size_w);
|
||||||
|
|
||||||
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
||||||
|
|
||||||
if(cap_size_h % slice_num){
|
|
||||||
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
|
|
||||||
cap_size_h -= (cap_size_h % slice_num);
|
|
||||||
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
||||||
|
@ -4224,8 +4287,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoExe_Slice
|
||||||
static UINT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
|
static UINT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
|
||||||
{
|
{
|
||||||
HD_DIM dim = PhotoExe_Preview_SliceEncode_Get_Encode_Max_Size();
|
HD_DIM dim = PhotoExe_Preview_SliceEncode_Get_Encode_Max_Size();
|
||||||
UINT32 reserved_buffer_height = ((dim.h * 3) / 10);
|
UINT32 reserved_buffer = 0;
|
||||||
UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt);
|
|
||||||
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
|
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
|
||||||
|
|
||||||
return max_buffer_size;
|
return max_buffer_size;
|
||||||
|
@ -4244,19 +4306,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Info(PhotoExe_SliceS
|
||||||
slice_num = 1;
|
slice_num = 1;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
// slice_num = CFG_JPG_PREVIEW_SLICE_ENC_NUM;
|
|
||||||
|
|
||||||
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
||||||
|
|
||||||
UINT32 lines = (buf_size / cap_size_w);
|
UINT32 lines = (buf_size / cap_size_w);
|
||||||
|
|
||||||
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
||||||
|
|
||||||
if(cap_size_h % slice_num){
|
|
||||||
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
|
|
||||||
cap_size_h -= (cap_size_h % slice_num);
|
|
||||||
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
||||||
|
@ -4442,6 +4495,27 @@ static INT32 PhotoExe_Preview_SliceEncode_Alloc_Buffer(PhotoExe_MEM_Info* info,
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INT32 PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(PhotoExe_MEM_Info* info, char* name, UINT8 timeout, UINT32 delay_ms)
|
||||||
|
{
|
||||||
|
INT32 ret;
|
||||||
|
UINT8 cnt = 0;
|
||||||
|
|
||||||
|
do{
|
||||||
|
if(cnt > 0){
|
||||||
|
DBG_WRN("retrying %u...\n", cnt);
|
||||||
|
vos_util_delay_ms(delay_ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = PhotoExe_Preview_SliceEncode_Alloc_Buffer(info, name);
|
||||||
|
if(ret == E_OK)
|
||||||
|
break;
|
||||||
|
|
||||||
|
} while(++cnt < timeout);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static INT32 PhotoExe_Preview_SliceEncode_Free_Buffer(PhotoExe_MEM_Info* info)
|
static INT32 PhotoExe_Preview_SliceEncode_Free_Buffer(PhotoExe_MEM_Info* info)
|
||||||
{
|
{
|
||||||
HD_RESULT ret;
|
HD_RESULT ret;
|
||||||
|
@ -4501,7 +4575,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Init_VF_GFX_Slice(
|
||||||
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
|
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
|
||||||
UINT32 offset;
|
UINT32 offset;
|
||||||
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
|
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
|
||||||
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height * dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height;
|
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? dst_slice_info.last_slice_height : dst_slice_info.slice_height;
|
||||||
|
|
||||||
/* dst img */
|
/* dst img */
|
||||||
|
|
||||||
|
@ -4808,7 +4882,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video
|
||||||
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
||||||
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
||||||
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
||||||
ret = HD_ERR_SYS;
|
ret = HD_ERR_NOMEM;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4849,11 +4923,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
|
||||||
VF_GFX_SCALE vf_gfx_scale = {0};
|
VF_GFX_SCALE vf_gfx_scale = {0};
|
||||||
URECT dest_win = {0};
|
URECT dest_win = {0};
|
||||||
USIZE src_size = {0}, dest_size = {0};
|
USIZE src_size = {0}, dest_size = {0};
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
src_size.w = video_frame_in->dim.w;
|
src_size.w = video_frame_in->dim.w;
|
||||||
src_size.h = video_frame_in->dim.h;
|
src_size.h = video_frame_in->dim.h;
|
||||||
dest_size.w = CFG_SCREENNAIL_W;
|
dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
dest_size.h = CFG_SCREENNAIL_H;
|
dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
|
//dest_size.w = CFG_SCREENNAIL_W;
|
||||||
|
//dest_size.h = CFG_SCREENNAIL_H;
|
||||||
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
||||||
|
|
||||||
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
@ -4866,6 +4945,89 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(HD_VIDEO_FRAME* video_frame_in)
|
||||||
|
{
|
||||||
|
static UINT32 quality = CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL;
|
||||||
|
INT8 direction = 0;
|
||||||
|
INT32 ret = E_OK;
|
||||||
|
PhotoExe_SliceEncode_Info* slice_encode_screennail_info = PhotoExe_Preview_SliceEncode_Get_Info(PHOTO_ENC_JPG_SCREENNAIL);
|
||||||
|
|
||||||
|
//UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
//((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
|
||||||
|
const UINT32 ubount = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;
|
||||||
|
const UINT32 lbount = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;
|
||||||
|
//const UINT32 ubount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
//const UINT32 lbount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) - (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
bool stop_flag = false;
|
||||||
|
|
||||||
|
do {
|
||||||
|
PHOTO_SLICE_ENC_DUMP("screennail quality = %lu\n", quality);
|
||||||
|
|
||||||
|
ret = PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, quality);
|
||||||
|
if(ret != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = PhotoExe_Preview_SliceEncode_Encode_Screennail(video_frame_in);
|
||||||
|
if ( (ret != E_OK) && (ret != HD_ERR_NOMEM)){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((slice_encode_screennail_info->bs_buf_mem_info.used_size > ubount) || (ret == HD_ERR_NOMEM)){
|
||||||
|
|
||||||
|
if(direction == 1){
|
||||||
|
quality -= CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
stop_flag = true; /* current step > ubound and next prev step < lbound , stop rc flow (choose prev step)*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
direction = -1;
|
||||||
|
|
||||||
|
if(quality == 0){
|
||||||
|
DBG_WRN("lowest quality reached, stop rc flow!\n");
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
else if(quality > CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP)
|
||||||
|
quality -= CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
else{
|
||||||
|
quality = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(slice_encode_screennail_info->bs_buf_mem_info.used_size < lbount){
|
||||||
|
|
||||||
|
if(stop_flag){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(direction == -1){
|
||||||
|
DBG_WRN("back search due to low resolution of CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP(%lu), stop rc flow\n", CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
direction = 1;
|
||||||
|
|
||||||
|
if(quality >= 99){
|
||||||
|
quality = 99;
|
||||||
|
DBG_WRN("highest quality reached, stop rc flow!\n");
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
else if(quality < (99 - CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP))
|
||||||
|
quality += CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
else{
|
||||||
|
quality = 99;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while(1);
|
||||||
|
|
||||||
|
|
||||||
|
EXIT:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in)
|
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in)
|
||||||
{
|
{
|
||||||
HD_RESULT ret;
|
HD_RESULT ret;
|
||||||
|
@ -4903,7 +5065,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* vide
|
||||||
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
||||||
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
||||||
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
||||||
ret = HD_ERR_SYS;
|
ret = HD_ERR_NOMEM;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5014,7 +5176,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary(
|
||||||
dst_slice_info,
|
dst_slice_info,
|
||||||
slice_idx);
|
slice_idx);
|
||||||
|
|
||||||
if(vf_gfx_scale(&vf_gfx_scale_param, 1) != HD_OK){
|
if((ret = vf_gfx_scale(&vf_gfx_scale_param, 1)) != HD_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5133,12 +5295,12 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary(
|
||||||
if(quality_old == 1){
|
if(quality_old == 1){
|
||||||
restart = FALSE;
|
restart = FALSE;
|
||||||
}
|
}
|
||||||
else if(quality_old <= CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP){
|
else if(quality_old <= CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP){
|
||||||
quality_new = 1;
|
quality_new = 1;
|
||||||
restart = TRUE;
|
restart = TRUE;
|
||||||
}
|
}
|
||||||
else if(quality_old > CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP){
|
else if(quality_old > CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP){
|
||||||
quality_new = quality_old - CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP;
|
quality_new = quality_old - CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP;
|
||||||
restart = TRUE;
|
restart = TRUE;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -5279,6 +5441,7 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
|
||||||
HD_VIDEO_PXLFMT vproc_out_pxlfmt = 0;
|
HD_VIDEO_PXLFMT vproc_out_pxlfmt = 0;
|
||||||
PhotoExe_MEM_Info exif_mem_info = {0};
|
PhotoExe_MEM_Info exif_mem_info = {0};
|
||||||
UINT32 enc_accum_size = 0;
|
UINT32 enc_accum_size = 0;
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_S);
|
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_S);
|
||||||
|
|
||||||
|
@ -5347,7 +5510,13 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;//(((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
#else
|
||||||
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
|
||||||
|
#endif
|
||||||
|
|
||||||
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
@ -5423,13 +5592,19 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
|
||||||
|
|
||||||
/* screennail encode */
|
/* screennail encode */
|
||||||
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_S);
|
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_S);
|
||||||
|
//PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
||||||
|
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
|
||||||
|
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
if(PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
#else
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
||||||
|
|
||||||
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_E);
|
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_E);
|
||||||
|
|
||||||
|
@ -5627,7 +5802,7 @@ THREAD_RETTYPE _PhotoExe_Preview_SliceEncode_Worker(void* arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag & FLG_PHOTO_SLICE_ENC_CMD_START){
|
if(flag & FLG_PHOTO_SLICE_ENC_CMD_START){
|
||||||
DBG_DUMP("start\n");
|
DBG_IND("start\n");
|
||||||
set_flg(param->flag_id, FLG_PHOTO_SLICE_ENC_STA_STARTED);
|
set_flg(param->flag_id, FLG_PHOTO_SLICE_ENC_STA_STARTED);
|
||||||
if(param->callback){
|
if(param->callback){
|
||||||
param->callback(param->user_data);
|
param->callback(param->user_data);
|
||||||
|
@ -5675,7 +5850,6 @@ typedef struct {
|
||||||
UINT8 cnt;
|
UINT8 cnt;
|
||||||
lfqueue_t* queue12; /* shared with CB1 */
|
lfqueue_t* queue12; /* shared with CB1 */
|
||||||
lfqueue_t* queue23; /* shared with CB3 */
|
lfqueue_t* queue23; /* shared with CB3 */
|
||||||
|
|
||||||
} PhotoExe_Preview_SliceEncode_CB2_Param;
|
} PhotoExe_Preview_SliceEncode_CB2_Param;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -5695,7 +5869,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
|
||||||
PHOTO_VID_IN vid_in = PHOTO_VID_IN_1;
|
PHOTO_VID_IN vid_in = PHOTO_VID_IN_1;
|
||||||
HD_PATH_ID vproc_path_id;
|
HD_PATH_ID vproc_path_id;
|
||||||
PhotoExe_Preview_SliceEncode_Queue12_Param* queue_ele_out = NULL;
|
PhotoExe_Preview_SliceEncode_Queue12_Param* queue_ele_out = NULL;
|
||||||
VOS_TICK tick1 = 0, tick2 = 0, elapsed = 0;
|
VOS_TICK tick1;
|
||||||
UINT32 err_cnt = 0, err_timeout = 30;
|
UINT32 err_cnt = 0, err_timeout = 30;
|
||||||
|
|
||||||
if(!user_data){
|
if(!user_data){
|
||||||
|
@ -5715,23 +5889,8 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
|
||||||
ImageApp_Photo_Get_Hdal_Path(vid_in, PHOTO_HDAL_VPRC_3DNR_REF_PATH, (UINT32 *)&vproc_path_id);
|
ImageApp_Photo_Get_Hdal_Path(vid_in, PHOTO_HDAL_VPRC_3DNR_REF_PATH, (UINT32 *)&vproc_path_id);
|
||||||
|
|
||||||
do{
|
do{
|
||||||
|
if(param->cnt)
|
||||||
vos_perf_mark(&tick1);
|
vos_util_delay_ms(param->period);
|
||||||
|
|
||||||
if(tick2){
|
|
||||||
elapsed = vos_perf_duration(tick2, tick1);
|
|
||||||
elapsed /= 1000;
|
|
||||||
if(elapsed < param->period){
|
|
||||||
vos_util_delay_ms(param->period - elapsed);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
tick2 = tick1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
tick2 = tick1;
|
|
||||||
}
|
|
||||||
|
|
||||||
hd_ret = hd_videoproc_pull_out_buf(vproc_path_id, &video_frame, -1);
|
hd_ret = hd_videoproc_pull_out_buf(vproc_path_id, &video_frame, -1);
|
||||||
|
|
||||||
|
@ -5747,9 +5906,12 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_DUMP("pic%lu = %lu\n", param->cnt, tick2);
|
vos_perf_mark(&tick1);
|
||||||
|
|
||||||
|
DBG_DUMP("frame%lu : %lu ms\n", param->cnt, tick1 / 1000);
|
||||||
|
|
||||||
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param));
|
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param));
|
||||||
|
memset(queue_ele_out, 0, sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param));
|
||||||
queue_ele_out->frame = video_frame;
|
queue_ele_out->frame = video_frame;
|
||||||
|
|
||||||
while (lfqueue_enq(param->queue12, (void*) queue_ele_out) == -1) {
|
while (lfqueue_enq(param->queue12, (void*) queue_ele_out) == -1) {
|
||||||
|
@ -5763,7 +5925,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
|
||||||
|
|
||||||
} while(1);
|
} while(1);
|
||||||
|
|
||||||
DBG_DUMP("task1 job finished\n");
|
DBG_IND("task1 job finished\n");
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -5799,7 +5961,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
param = (PhotoExe_Preview_SliceEncode_CB2_Param*) user_data;
|
param = (PhotoExe_Preview_SliceEncode_CB2_Param*) user_data;
|
||||||
param->cnt = 0;
|
param->cnt = 0;
|
||||||
|
|
||||||
DBG_DUMP("enter cb2 loop\n");
|
DBG_IND("enter cb2 loop\n");
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Get vproc info
|
* Get vproc info
|
||||||
|
@ -5858,7 +6020,14 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_DUMP("process frame\n");
|
if(queue_ele_in->comm.terminate){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
free(queue_ele_in);
|
||||||
|
queue_ele_in = NULL;
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("process frame %lu\n", param->cnt);
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Calculate src slice info
|
* Calculate src slice info
|
||||||
|
@ -5866,12 +6035,30 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
PhotoExe_Preview_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
|
PhotoExe_Preview_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
|
||||||
|
|
||||||
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoExe_GetScreenNailSize() ;
|
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoExe_GetScreenNailSize() ;
|
||||||
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){
|
// if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){
|
||||||
|
// goto EXIT;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(
|
||||||
|
&slice_encode_primary_info->bs_buf_mem_info,
|
||||||
|
"slice_enc_primary",
|
||||||
|
10,
|
||||||
|
100
|
||||||
|
) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
|
||||||
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
// if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
||||||
|
// goto EXIT;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(
|
||||||
|
&slice_encode_screennail_info->bs_buf_mem_info,
|
||||||
|
"slice_enc_screennail",
|
||||||
|
10,
|
||||||
|
100
|
||||||
|
) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5911,14 +6098,21 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Screennail & Thumbnail Encode
|
* Screennail & Thumbnail Encode
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
/* screennail encode */
|
/* screennail encode */
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
|
||||||
|
|
||||||
|
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
if(PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
||||||
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* thumbnail encode */
|
/* thumbnail encode */
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
|
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
|
||||||
|
@ -5941,7 +6135,6 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
MEM_RANGE pri_jpg = {.addr = slice_encode_primary_info->bs_buf_mem_info.va + CFG_JPG_HEADER_SIZE, .size = slice_encode_primary_info->bs_buf_mem_info.used_size};
|
MEM_RANGE pri_jpg = {.addr = slice_encode_primary_info->bs_buf_mem_info.va + CFG_JPG_HEADER_SIZE, .size = slice_encode_primary_info->bs_buf_mem_info.used_size};
|
||||||
MEM_RANGE scr_jpg = {.addr = slice_encode_screennail_info->bs_buf_mem_info.va, .size = slice_encode_screennail_info->bs_buf_mem_info.used_size};
|
MEM_RANGE scr_jpg = {.addr = slice_encode_screennail_info->bs_buf_mem_info.va, .size = slice_encode_screennail_info->bs_buf_mem_info.used_size};
|
||||||
MEM_RANGE dst_jpg_file = { 0 };
|
MEM_RANGE dst_jpg_file = { 0 };
|
||||||
DBG_WRN(" EXIF\r\n");
|
|
||||||
|
|
||||||
/* exif */
|
/* exif */
|
||||||
ExifVendor_Write0thIFD(EXIF_HDL_ID_1);
|
ExifVendor_Write0thIFD(EXIF_HDL_ID_1);
|
||||||
|
@ -5967,6 +6160,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
|
||||||
|
|
||||||
/* enqueue jpg buffer info */
|
/* enqueue jpg buffer info */
|
||||||
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
|
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
|
||||||
|
memset(queue_ele_out, 0, sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
|
||||||
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
|
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
|
||||||
queue_ele_out->jpg_combined_size = dst_jpg_file.size;
|
queue_ele_out->jpg_combined_size = dst_jpg_file.size;
|
||||||
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
|
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
|
||||||
|
@ -6013,7 +6207,13 @@ EXIT:
|
||||||
PhotoExe_Preview_SliceEncode_Free_Buffer(&exif_mem_info);
|
PhotoExe_Preview_SliceEncode_Free_Buffer(&exif_mem_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_DUMP("task2 job finished\n");
|
if(param->cnt < param->max_cnt){
|
||||||
|
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
|
||||||
|
queue_ele_out->comm.terminate = 1;
|
||||||
|
lfqueue_enq(param->queue23, (void*) queue_ele_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("task2 job finished\n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -6042,6 +6242,13 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(queue_ele_in->comm.terminate){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
free(queue_ele_in);
|
||||||
|
queue_ele_in = NULL;
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Output jpg file
|
* Output jpg file
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
@ -6062,7 +6269,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
|
||||||
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
|
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
|
||||||
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
|
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
|
||||||
|
|
||||||
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, file_path);
|
DBG_IND("PHOTO THUMB %s\n", tmp);
|
||||||
|
|
||||||
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
|
|
||||||
|
@ -6076,7 +6283,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
|
||||||
snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG");
|
snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG");
|
||||||
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2);
|
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2);
|
||||||
|
|
||||||
sf_file_thumb_cfg_fill(tmp, tmp2, SF_FILE_TYPE_PIC_SMALL);
|
sf_file_thumb_cfg_fill(tmp, tmp2, queue_ele_in->jpg_thumb_size, SF_FILE_TYPE_PIC_SMALL);
|
||||||
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
if(SF_CAM_MODE_PHOTO == puiPara->CamMode)
|
if(SF_CAM_MODE_PHOTO == puiPara->CamMode)
|
||||||
{
|
{
|
||||||
|
@ -6117,7 +6324,11 @@ EXIT:
|
||||||
|
|
||||||
PhotoExe_Preview_SliceEncode2_Close();
|
PhotoExe_Preview_SliceEncode2_Close();
|
||||||
|
|
||||||
DBG_DUMP("task3 job finished\n");
|
if(param->cnt < param->max_cnt){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("task3 job finished\n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -6256,9 +6467,8 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
|
||||||
cb1_param.queue12 = &queue12;
|
cb1_param.queue12 = &queue12;
|
||||||
|
|
||||||
cb1_param.period = 1000 / max_cnt; /* average ms in one second */
|
cb1_param.period = 1000 / max_cnt; /* average ms in one second */
|
||||||
// cb1_param.period = 1000;
|
|
||||||
|
|
||||||
DBG_DUMP("resume task1\n");
|
DBG_IND("resume task1\n");
|
||||||
task1_param.run = 1;
|
task1_param.run = 1;
|
||||||
vos_task_resume(task1_param.task_id);
|
vos_task_resume(task1_param.task_id);
|
||||||
|
|
||||||
|
@ -6288,7 +6498,7 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
|
||||||
cb2_param.queue12 = &queue12;
|
cb2_param.queue12 = &queue12;
|
||||||
cb2_param.queue23 = &queue23;
|
cb2_param.queue23 = &queue23;
|
||||||
|
|
||||||
DBG_DUMP("resume task2\n");
|
DBG_IND("resume task2\n");
|
||||||
task2_param.run = 1;
|
task2_param.run = 1;
|
||||||
vos_task_resume(task2_param.task_id);
|
vos_task_resume(task2_param.task_id);
|
||||||
|
|
||||||
|
@ -6318,7 +6528,7 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
|
||||||
cb3_param.cnt = 0;
|
cb3_param.cnt = 0;
|
||||||
cb3_param.queue23 = &queue23;
|
cb3_param.queue23 = &queue23;
|
||||||
|
|
||||||
DBG_DUMP("resume task3\n");
|
DBG_IND("resume task3\n");
|
||||||
task3_param.run = 1;
|
task3_param.run = 1;
|
||||||
vos_task_resume(task3_param.task_id);
|
vos_task_resume(task3_param.task_id);
|
||||||
|
|
||||||
|
|
|
@ -319,8 +319,8 @@ void UiDateImprint_InitBuff(void)
|
||||||
}
|
}
|
||||||
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
|
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
|
||||||
pInfo->MemSize = 0x80000;
|
pInfo->MemSize = 0x80000;
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont);
|
UiDateImprint_GetStampFont(sf_get_screen_nail_width(puiPara->SendPicSize),(char**)&pFont);
|
||||||
|
|
||||||
#if defined(_UI_STYLE_LVGL_)
|
#if defined(_UI_STYLE_LVGL_)
|
||||||
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());
|
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());
|
||||||
|
@ -424,7 +424,7 @@ void UiDateImprint_DestroyBuff(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
extern void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen);
|
/*extern void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen);
|
||||||
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
|
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -456,7 +456,7 @@ BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
|
||||||
StrBuf[0] = 0; //Empty String
|
StrBuf[0] = 0; //Empty String
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}*/
|
||||||
char * UiDateImprint_InitStrBuf(void)
|
char * UiDateImprint_InitStrBuf(void)
|
||||||
{
|
{
|
||||||
char *str=NULL;
|
char *str=NULL;
|
||||||
|
|
|
@ -61,6 +61,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = {
|
||||||
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
|
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
|
||||||
|
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = "FHD P60+VGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
|
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
|
||||||
};
|
};
|
||||||
|
|
|
@ -471,7 +471,8 @@ static void UIFlowPhoto_OnExeCaptureStart(lv_obj_t* obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check capture prerequisite */
|
/* Check capture prerequisite */
|
||||||
if (FlowPhoto_IsStorageErr() == TRUE) {
|
//if (FlowPhoto_IsStorageErr() == TRUE) {
|
||||||
|
if((FileSys_GetDiskInfo(FST_INFO_FREE_SPACE)/ 1024) < (30*1024)){//30MB
|
||||||
DBG_ERR("UIFlowPhoto_OnKeyShutter2: Card or memory full!\r\n");
|
DBG_ERR("UIFlowPhoto_OnKeyShutter2: Card or memory full!\r\n");
|
||||||
gPhotoData.State = PHOTO_ST_WARNING_MENU;
|
gPhotoData.State = PHOTO_ST_WARNING_MENU;
|
||||||
return;
|
return;
|
||||||
|
@ -773,7 +774,7 @@ void UIFlowPhoto_OnStorageChange(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA*
|
||||||
//#NT#2016/10/04#Lincy Lin -begin
|
//#NT#2016/10/04#Lincy Lin -begin
|
||||||
//#NT#Support SD hot plug function
|
//#NT#Support SD hot plug function
|
||||||
#if (SDHOTPLUG_FUNCTION == ENABLE)
|
#if (SDHOTPLUG_FUNCTION == ENABLE)
|
||||||
Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, System_GetState(SYS_STATE_CURRMODE));
|
//Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, System_GetState(SYS_STATE_CURRMODE));
|
||||||
#endif
|
#endif
|
||||||
//#NT#2016/10/04#Lincy Lin -end
|
//#NT#2016/10/04#Lincy Lin -end
|
||||||
return;
|
return;
|
||||||
|
@ -815,11 +816,18 @@ static void UIFlowPhoto_ScrOpen(lv_obj_t* obj)
|
||||||
//#NT#Support SD hot plug function
|
//#NT#Support SD hot plug function
|
||||||
//#if (SDHOTPLUG_FUNCTION == ENABLE)
|
//#if (SDHOTPLUG_FUNCTION == ENABLE)
|
||||||
if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE) {
|
if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE) {
|
||||||
|
#if (DRAM_SIZE_64MB_DISP_OFF == ENABLE)
|
||||||
|
//sd error,no panel! playsound or flash led being warring msg
|
||||||
|
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
|
||||||
|
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
|
||||||
|
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
|
||||||
|
#else
|
||||||
|
|
||||||
/* never closed */
|
/* never closed */
|
||||||
gPhotoData.State = PHOTO_ST_WARNING_MENU;
|
gPhotoData.State = PHOTO_ST_WARNING_MENU;
|
||||||
UIFlowWrnMsgAPI_Open_StringID(LV_PLUGIN_STRING_ID_STRID_PLEASE_INSERT_SD, 0);
|
UIFlowWrnMsgAPI_Open_StringID(LV_PLUGIN_STRING_ID_STRID_PLEASE_INSERT_SD, 0);
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
//#endif
|
//#endif
|
||||||
//#NT#2016/10/04#Lincy Lin -end
|
//#NT#2016/10/04#Lincy Lin -end
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
// Photo
|
// Photo
|
||||||
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
|
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
|
||||||
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_5M//PHOTO_MAX_CAP_SIZE
|
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_8M//PHOTO_MAX_CAP_SIZE
|
||||||
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE
|
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE
|
||||||
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
|
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
|
||||||
#define DEFAULT_SCENE SCENE_AUTO
|
#define DEFAULT_SCENE SCENE_AUTO
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
||||||
#else
|
#else
|
||||||
#if (MOVIE_AI_DEMO == DISABLE)
|
#if (MOVIE_AI_DEMO == DISABLE)
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30
|
||||||
#else
|
#else
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,8 +71,8 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30
|
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
|
||||||
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30
|
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
|
||||||
|
|
||||||
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
|
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
|
||||||
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL
|
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL
|
||||||
|
|
|
@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR ImgSize;/* 24M/12M/8M/5M */
|
CHAR ImgSize;/* 24M/12M/8M/5M */
|
||||||
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
|
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
|
||||||
CHAR Multishot;/*1P/2P/3P/4P/5P*/
|
CHAR Multishot;/*1P/2P/3P/4P/5P*/
|
||||||
|
CHAR MultiShotIntevel;/*0s/1s/2s*/
|
||||||
|
CHAR SendMulti;/*OFF/ON*/
|
||||||
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
|
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
|
||||||
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
|
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
|
||||||
CHAR VideoLenth;
|
CHAR VideoLenth;
|
||||||
|
@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR TimeSend3Switch;/*OFF/ON*/
|
CHAR TimeSend3Switch;/*OFF/ON*/
|
||||||
CHAR TimeSend4Switch;/*OFF/ON*/
|
CHAR TimeSend4Switch;/*OFF/ON*/
|
||||||
CHAR SendType;
|
CHAR SendType;
|
||||||
|
CHAR PicUpDailyReport;
|
||||||
///////////////////////
|
///////////////////////
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR SimIccid[21];
|
CHAR SimIccid[21];
|
||||||
CHAR ServiceProvider[64];
|
CHAR ServiceProvider[64];
|
||||||
UINT8 SimSignal;
|
UINT8 SimSignal;
|
||||||
UINT8 SimType;
|
UINT8 SimType;
|
||||||
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
|
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
|
||||||
UINT8 FtpIp[40];
|
UINT8 FtpIp[40];
|
||||||
UINT8 FtpPort[5];
|
UINT8 FtpPort[5];
|
||||||
|
@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
UINT8 FtpsPort[5];
|
UINT8 FtpsPort[5];
|
||||||
UINT8 FtpsUsr[40];
|
UINT8 FtpsUsr[40];
|
||||||
UINT8 FtpsPwd[20];
|
UINT8 FtpsPwd[20];
|
||||||
|
|
||||||
|
UINT8 WifiSwitch;
|
||||||
|
UINT8 WifiMode;
|
||||||
|
UINT8 WifiApPWD[16];
|
||||||
|
UINT8 Zoom;
|
||||||
//============Sifar==============///Payton
|
//============Sifar==============///Payton
|
||||||
|
|
||||||
} UIMenuStoreInfo;
|
} UIMenuStoreInfo;
|
||||||
|
@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE {
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
|
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
|
||||||
|
MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
|
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
|
||||||
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60
|
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60
|
||||||
|
|
|
@ -147,9 +147,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
},
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_1920x1080P30] = {
|
[MOVIE_SIZE_1920x1080P30] = {
|
||||||
{1920, 1080, 30, 262144/* 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{1920, 1080, 30, 104857/*262144 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 262144/* 2M = 2*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 104857/*262144 2M = 2*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
},
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_1280x720P240] = {
|
[MOVIE_SIZE_1280x720P240] = {
|
||||||
|
@ -171,15 +171,15 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
},
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_1280x720P30] = {
|
[MOVIE_SIZE_1280x720P30] = {
|
||||||
{1280, 720, 30, 131072 /* 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{1280, 720, 30, 58982/*131072 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 131072 /* 1M = 1*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 58982/*131072 1M = 1*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
},
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_848x480P30] = {
|
[MOVIE_SIZE_848x480P30] = {
|
||||||
{848, 480, 30, 110100, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{848, 480, 30, 32768/*110100*/, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 110100, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 32768/*110100*/, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
},
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_848x480P30_WIFI] = {
|
[MOVIE_SIZE_848x480P30_WIFI] = {
|
||||||
|
@ -212,9 +212,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 80 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4},
|
{1, 4, 30, 80 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4},
|
||||||
#else
|
#else
|
||||||
{ 640, 360, 30, 150 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{ 640, 360, 30, 78643, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 150 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4},
|
{1, 4, 30, 78643, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -444,6 +444,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = {
|
||||||
{MOVIE_SIZE_1920x1080P60, 0},
|
{MOVIE_SIZE_1920x1080P60, 0},
|
||||||
{MOVIE_SIZE_640x360P30, 0},
|
{MOVIE_SIZE_640x360P30, 0},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = {
|
||||||
|
MOVIE_REC_TYPE_CLONE,
|
||||||
|
{MOVIE_SIZE_1920x1080P30, 0},
|
||||||
|
{MOVIE_SIZE_640x360P30, 0},
|
||||||
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
|
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
|
||||||
MOVIE_REC_TYPE_CLONE,
|
MOVIE_REC_TYPE_CLONE,
|
||||||
|
|
|
@ -52,8 +52,8 @@ static PHOTO_SIZE_PARAM g_ScreenNailSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
|
||||||
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
||||||
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
||||||
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
||||||
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
|
||||||
{640, 480, IMAGERATIO_4_3, "VGA"}, // VGA
|
{640, 480, IMAGERATIO_4_3, "VGA"}, // VGA
|
||||||
|
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
||||||
#endif
|
#endif
|
||||||
//CFG_SCREENNAIL_W
|
//CFG_SCREENNAIL_W
|
||||||
//CFG_SCREENNAIL_H
|
//CFG_SCREENNAIL_H
|
||||||
|
|
|
@ -68,7 +68,7 @@ EXTRA_INCLUDE += \
|
||||||
-I$(EXT_DIR)/audio/aud_common/include \
|
-I$(EXT_DIR)/audio/aud_common/include \
|
||||||
-I$(KFLOW_DIR)/include \
|
-I$(KFLOW_DIR)/include \
|
||||||
-I$(NVT_DRIVER_DIR)/include \
|
-I$(NVT_DRIVER_DIR)/include \
|
||||||
-I$(LIBRARY_DIR)/include \
|
-I$(LIBRARY_DIR)/include/libnl3 \
|
||||||
-I$(APP_DIR)/include \
|
-I$(APP_DIR)/include \
|
||||||
-I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \
|
-I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \
|
||||||
-I$(NVT_HDAL_DIR)/vendor/media/include \
|
-I$(NVT_HDAL_DIR)/vendor/media/include \
|
||||||
|
@ -258,8 +258,11 @@ SRC = \
|
||||||
./code/source/utils/sf_aes.c \
|
./code/source/utils/sf_aes.c \
|
||||||
./code/source/debugMng/sf_debug.c \
|
./code/source/debugMng/sf_debug.c \
|
||||||
./code/source/updataMng/sf_md5.c \
|
./code/source/updataMng/sf_md5.c \
|
||||||
./code/source/updataMng/sf_otamng.c
|
./code/source/updataMng/sf_otamng.c \
|
||||||
|
./code/source/wifi/sf_data_transfer.c \
|
||||||
|
./code/source/wifi/sf_svr_send.c \
|
||||||
|
./code/source/wifi/sf_wifi_svr.c
|
||||||
|
|
||||||
#--------- END OF SOURCEs FOR APPLICATION ---------------------------------------------
|
#--------- END OF SOURCEs FOR APPLICATION ---------------------------------------------
|
||||||
|
|
||||||
#--------- ENVIRONMENT SETTING --------------------
|
#--------- ENVIRONMENT SETTING --------------------
|
||||||
|
|
|
@ -62,6 +62,19 @@ extern "C" {
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define SF_STRLEN(a) (UINT32)strlen((char *)a)
|
||||||
|
#define SF_STRCPY(a, b) strcpy((char *)a, (char *)b)
|
||||||
|
#define SF_STRNCPY(a, b, c) strncpy((char *)a, (char *)b, c)
|
||||||
|
#define SF_STRCMP(a, b) strcmp((char *)a, (char *)b)
|
||||||
|
#define SF_STRNCMP(a, b, c) strncmp((char *)a, (char *)b, c)
|
||||||
|
#define SF_STRSTR(a, b) (UINT8 *)strstr((char *)a, (char *)b)
|
||||||
|
#define SF_STRTOK(a, b) (UINT8 *)strtok((char *)a, (char *)b)
|
||||||
|
#define SF_SPRINTF(a, ...) sprintf((char *)a, __VA_ARGS__)
|
||||||
|
#define SF_STRCASECMP(a, b) strcasecmp((char *)a, (char *)b)
|
||||||
|
#define SF_STRSEP(a, b) strsep((char **)a, (char *)b)
|
||||||
|
#define SF_STRCAT(a, b) strcat((char *)a, (char *)b)
|
||||||
|
#define SF_STRTOLL(a, b, c) strtoll((char *)a, (char **)b, c)
|
||||||
|
|
||||||
void app_message_recv_start(void);
|
void app_message_recv_start(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -296,6 +296,20 @@ typedef enum sfPOWEROFF_TYPE_E
|
||||||
SF_POWEROFF_BUTT,
|
SF_POWEROFF_BUTT,
|
||||||
} SF_POWEROFF_TYPE_E;
|
} SF_POWEROFF_TYPE_E;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
APP_POWER_OFF_NORMAL,
|
||||||
|
APP_POWER_OFF_LENS_ERROR,
|
||||||
|
APP_POWER_OFF_BATT_EMPTY,
|
||||||
|
APP_POWER_OFF_CHARGE_ERROR,
|
||||||
|
APP_POWER_OFF_CARD_PLUG,
|
||||||
|
APP_POWER_OFF_USB_PLUG,
|
||||||
|
APP_POWER_OFF_TV_PLUG,
|
||||||
|
APP_POWER_OFF_HDMI_PLUG,
|
||||||
|
APP_POWER_OFF_VIDEO_REC_ERROR, /*slow card, fail to video recording*/
|
||||||
|
APP_POWER_OFF_APO,
|
||||||
|
} appUiPowerOff_e;
|
||||||
|
|
||||||
typedef struct sf_TIME_S {
|
typedef struct sf_TIME_S {
|
||||||
unsigned short Year; /* Year > 1970*/
|
unsigned short Year; /* Year > 1970*/
|
||||||
unsigned short Mon; /* Mon range[1-12]*/
|
unsigned short Mon; /* Mon range[1-12]*/
|
||||||
|
@ -342,9 +356,10 @@ unsigned char sf_mcu_wdg_off(void);
|
||||||
void sf_set_module_sleep_flag(UINT8 flag);
|
void sf_set_module_sleep_flag(UINT8 flag);
|
||||||
int sf_app_while_flag(void);
|
int sf_app_while_flag(void);
|
||||||
void sf_set_sim_insert(UINT32 sim);
|
void sf_set_sim_insert(UINT32 sim);
|
||||||
UINT8 sf_get_signal_ready(void);
|
int sf_get_signal_ready(void);
|
||||||
void sf_set_sim_pin_flag(UINT8 simPin, UINT8 simPins, UINT8 simPinPuk);
|
void sf_set_sim_pin_flag(UINT8 simPin, UINT8 simPins, UINT8 simPinPuk);
|
||||||
void sf_set_cq_signal(UINT8 csq);
|
void sf_set_cq_signal(UINT8 csq);
|
||||||
|
void sf_mcu_version_get(UINT8 *mcuVer);
|
||||||
|
|
||||||
extern unsigned short TrigType;
|
extern unsigned short TrigType;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
|
||||||
|
*
|
||||||
|
* This software is copyrighted by and is the property of SiFar
|
||||||
|
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
|
||||||
|
* This software may only be used in accordance with the corresponding
|
||||||
|
* license agreement. Any unauthorized use, duplication, distribution,
|
||||||
|
* or disclosure of this software is expressly forbidden.
|
||||||
|
*
|
||||||
|
* This Copyright notice MUST not be removed or modified without prior
|
||||||
|
* written consent of SiFar Technology, Inc..
|
||||||
|
*
|
||||||
|
* SiFar Technology, Inc. reserves the right to modify this software without notice.
|
||||||
|
*
|
||||||
|
* Author: Oliver
|
||||||
|
* Ver: 1.0.0 2019/01/14
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __APP_DATA_TRANSFER_H__
|
||||||
|
#define __APP_DATA_TRANSFER_H__
|
||||||
|
#include "sf_type.h"
|
||||||
|
|
||||||
|
typedef struct DataErrCode_s {
|
||||||
|
U32 port;
|
||||||
|
U8 errCode;
|
||||||
|
struct DataErrCode_s *pNext;
|
||||||
|
}DataErrCode_t;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DATA_SUCCESS = 0x00,
|
||||||
|
DATA_CMD = 0x01,
|
||||||
|
DATA_CMD_8855_NO_CONNECT = 0x02,
|
||||||
|
DATA_CMD_ADD_TO_FLOW_ERR = 0x03,
|
||||||
|
DATA_CMD_PORT_IS_USED = 0x04,
|
||||||
|
DATA_CMD_NO_THIS_PORT = 0x05,
|
||||||
|
DATA_CMD_OPEN_FILE_FAIL = 0x06,
|
||||||
|
DATA_UP_CREAT_FILE_FAIL = 0x07,
|
||||||
|
DATA_UP_NO_FILE_NAME = 0x08,
|
||||||
|
DATA_UP_TIME_OUT = 0x09,
|
||||||
|
DATA_UP_WRITE_FILE_ERR = 0x0A,
|
||||||
|
DATA_DOWN_OPEN_FILE_FAIL = 0x0B,
|
||||||
|
DATA_DOWN_NO_FILE_NAME = 0x0C,
|
||||||
|
DATA_DOWN_SEND_DATA_ERR = 0x0D,
|
||||||
|
DATA_DOWN_READ_FILE_ERR = 0x0E,
|
||||||
|
DATA_DOWN_TIME_OUT = 0x0F,
|
||||||
|
DATA_ERROR_CODE_MAX = 0x10,
|
||||||
|
}DataTransErrCode_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
S32 sf_DataSvrInit(void);
|
||||||
|
U8 sf_DataMapSet(U32 key, U8 function, S8 *fileName, U32 FileSize);
|
||||||
|
|
||||||
|
#endif /*__APP_DATA_TRANSFER_H__*/
|
||||||
|
|
|
@ -11,6 +11,7 @@ extern "C" {
|
||||||
#define MMZBLOCKSIZE 1024
|
#define MMZBLOCKSIZE 1024
|
||||||
#define SF_VIDEO_LOOP_NUM 4 /*PIC 3 + VIDEO 1*/
|
#define SF_VIDEO_LOOP_NUM 4 /*PIC 3 + VIDEO 1*/
|
||||||
|
|
||||||
|
#define SF_SD_THUMB_PATH_CFG "/mnt/sd/Thumb/ThumbFileCfg"
|
||||||
#define SF_FILE_ERROR_NO_FILE SF_ERR_ID(SF_MOD_FILE, ERROR_NO_FILE)
|
#define SF_FILE_ERROR_NO_FILE SF_ERR_ID(SF_MOD_FILE, ERROR_NO_FILE)
|
||||||
|
|
||||||
typedef enum sf_SUBSCRIBE_TYPE_E
|
typedef enum sf_SUBSCRIBE_TYPE_E
|
||||||
|
@ -66,7 +67,7 @@ SINT16 sf_file_subscribe_check(SF_FILE_ATTR_S *pstfileAttr, SF_SEND_FILE_ATTR_S*
|
||||||
|
|
||||||
SINT32 sf_file_IsExsit(CHAR *fileName);
|
SINT32 sf_file_IsExsit(CHAR *fileName);
|
||||||
|
|
||||||
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileType);
|
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,UINT32 size, SF_FILE_TYPE_E enFileType);
|
||||||
|
|
||||||
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl);
|
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl);
|
||||||
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara);
|
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara);
|
||||||
|
@ -76,6 +77,7 @@ void sf_file_thumb_cfg_clear(void);
|
||||||
SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void);
|
SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void);
|
||||||
SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize);
|
SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize);
|
||||||
|
|
||||||
|
BOOL sf_check_auto_thumb_file(VOID);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
|
|
|
@ -184,6 +184,7 @@ extern "C" {
|
||||||
#define SF_THUMB_BIG_DIR SF_SD_DISK"\\DCIM\\THUMB\\big"
|
#define SF_THUMB_BIG_DIR SF_SD_DISK"\\DCIM\\THUMB\\big"
|
||||||
#define SF_THUMB_VIDEO_DIR SF_SD_DISK"\\DCIM\\THUMB\\video"
|
#define SF_THUMB_VIDEO_DIR SF_SD_DISK"\\DCIM\\THUMB\\video"
|
||||||
#define DCF_DIR_FREE_CHAR "MEDIA"
|
#define DCF_DIR_FREE_CHAR "MEDIA"
|
||||||
|
#define DCF_FILE_FREE_CHAR "SYFW"
|
||||||
|
|
||||||
#define SF_TRUE 1
|
#define SF_TRUE 1
|
||||||
#define SF_FALSE 0
|
#define SF_FALSE 0
|
||||||
|
@ -346,6 +347,7 @@ typedef enum sf_IMG_SIZE_E
|
||||||
{
|
{
|
||||||
SF_IMG_SIZE_32M = 0,
|
SF_IMG_SIZE_32M = 0,
|
||||||
SF_IMG_SIZE_24M,
|
SF_IMG_SIZE_24M,
|
||||||
|
SF_IMG_SIZE_16M,
|
||||||
SF_IMG_SIZE_12M,
|
SF_IMG_SIZE_12M,
|
||||||
SF_IMG_SIZE_8M,
|
SF_IMG_SIZE_8M,
|
||||||
SF_IMG_SIZE_5M,
|
SF_IMG_SIZE_5M,
|
||||||
|
@ -378,6 +380,7 @@ typedef enum sf_MESSAGE_TYPE_E
|
||||||
CMD_MCU = 0x1F01,
|
CMD_MCU = 0x1F01,
|
||||||
CMD_PARA = 0x1F02,
|
CMD_PARA = 0x1F02,
|
||||||
CMD_GPRS = 0x1F03,
|
CMD_GPRS = 0x1F03,
|
||||||
|
CMD_WIFI = 0x1F04,
|
||||||
|
|
||||||
}SF_MESSAGE_TYPE_E;
|
}SF_MESSAGE_TYPE_E;
|
||||||
|
|
||||||
|
@ -467,6 +470,14 @@ typedef enum sf_PARA_MESSAGE_TYPE_E
|
||||||
|
|
||||||
|
|
||||||
}SF_PARA_MESSAGE_TYPE_E;
|
}SF_PARA_MESSAGE_TYPE_E;
|
||||||
|
|
||||||
|
typedef enum sf_WIFI_MESSAGE_TYPE_E
|
||||||
|
{
|
||||||
|
SF_WIFI_CMD_START = 0x1A00,
|
||||||
|
SF_WIFI_CMD_STOP = 0x1B00,
|
||||||
|
|
||||||
|
|
||||||
|
}SF_WIFI_MESSAGE_TYPE_E;
|
||||||
|
|
||||||
typedef enum _GPRS_SEARCH_STEP_e{
|
typedef enum _GPRS_SEARCH_STEP_e{
|
||||||
GPRS_SEARCH_STEP_IDLE = 0x0,
|
GPRS_SEARCH_STEP_IDLE = 0x0,
|
||||||
|
|
37
code/application/source/sf_app/code/include/sf_svr_send.h
Normal file
37
code/application/source/sf_app/code/include/sf_svr_send.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
|
||||||
|
*
|
||||||
|
* This software is copyrighted by and is the property of SiFar
|
||||||
|
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
|
||||||
|
* This software may only be used in accordance with the corresponding
|
||||||
|
* license agreement. Any unauthorized use, duplication, distribution,
|
||||||
|
* or disclosure of this software is expressly forbidden.
|
||||||
|
*
|
||||||
|
* This Copyright notice MUST not be removed or modified without prior
|
||||||
|
* written consent of SiFar Technology, Inc..
|
||||||
|
*
|
||||||
|
* SiFar Technology, Inc. reserves the right to modify this software without notice.
|
||||||
|
*
|
||||||
|
* Author: Oliver
|
||||||
|
* Ver: 1.0.0 2018/11/14
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __APP_SVR_SEND_H__
|
||||||
|
#define __APP_SVR_SEND_H__
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SEND_THUMB,
|
||||||
|
SEND_TIME_MAP,
|
||||||
|
SEND_FILE,
|
||||||
|
SEND_MAX
|
||||||
|
}WIFI_SEND_CMD_T;
|
||||||
|
|
||||||
|
|
||||||
|
SINT32 appSvrSendInit(void);
|
||||||
|
void appSvrStopSendFile(void);
|
||||||
|
UINT32 sp5kFsFileSizeGet(const char *path);
|
||||||
|
|
||||||
|
#endif /*__APP_SVR_SEND_H__*/
|
||||||
|
|
946
code/application/source/sf_app/code/include/sf_wifi_svr.h
Normal file
946
code/application/source/sf_app/code/include/sf_wifi_svr.h
Normal file
|
@ -0,0 +1,946 @@
|
||||||
|
#ifndef __SF_WIFI_SERVER__
|
||||||
|
#define __SF_WIFI_SERVER__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "sf_common.h"
|
||||||
|
//#include "sf_customer_app.h"
|
||||||
|
#include "sf_type.h"
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
#define LISTEN_PARAM 0
|
||||||
|
#else
|
||||||
|
#define LISTEN_PARAM 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SF_LPA_SDK 0
|
||||||
|
#define SF_GPS_SUPPORT 0
|
||||||
|
#define DEBUG_INFO_ON_LCD 0
|
||||||
|
#define DBG_LOG 0
|
||||||
|
|
||||||
|
#define MAX_SSID_NAME_LEN (20)
|
||||||
|
#define MAX_PASSWORD_LEN (63)
|
||||||
|
#define PTPIP_ALIVE_TIME (60)
|
||||||
|
#define RTP_ALIVE_TIME (60)
|
||||||
|
|
||||||
|
#define SF_DCF_FILENAME_LEN_MAX 256 /**< DCF File Name Len Max */
|
||||||
|
#define SF_FILENAME_MAXLEN SF_DCF_FILENAME_LEN_MAX //256
|
||||||
|
|
||||||
|
#define PACKET_MAX_LEN 51200
|
||||||
|
|
||||||
|
#define MSG_PRE_FIX 0x55AA
|
||||||
|
#define MSG_END_FIX 0xFFEE
|
||||||
|
#define MSG_APP_2_WIFI 0
|
||||||
|
#define MSG_WIFI_2_APP 1
|
||||||
|
|
||||||
|
#define DEV_LOGIN 0x1000
|
||||||
|
#define DEV_LOGIN_RSP 0x1001
|
||||||
|
#define DEV_UPDATESTA 0x1002
|
||||||
|
#define DEV_UPDATESTA_RSP 0x1003
|
||||||
|
#define DEV_UPLOADFILE 0x1004
|
||||||
|
#define DEV_UPLOADFILE_RSP 0x1005
|
||||||
|
#define DEV_UPLOADFILE_BEGIN 0x1006
|
||||||
|
#define DEV_UPLOADFILE_BEGIN_RSP 0x1007
|
||||||
|
#define DEV_UPLOADFILE_END 0x1008
|
||||||
|
#define DEV_UPLOADFILE_END_RSP 0x1009
|
||||||
|
|
||||||
|
#define SF_DCF_SD_ROOT "/mnt/sd/" /**< DCF File Name (it must be 4-characters) */
|
||||||
|
#define SD_PATH SF_DCF_SD_ROOT //"/sdcard/mmcblk0p1" //mnt/hgfs
|
||||||
|
#define THUMB_PATH SD_PATH "/DCIM/THUMB/SMALL"
|
||||||
|
#define THUMB_HD_PATH SD_PATH "/DCIM/THUMB/LARGE"
|
||||||
|
#define SF_DCF_SD_ROOT2 "/sdcard/mmcblk0p1/" /**< DCF File Name (it must be 4-characters) */
|
||||||
|
#define SD_PATH2 SF_DCF_SD_ROOT2 //"/sdcard/mmcblk0p1" //mnt/hgfs
|
||||||
|
|
||||||
|
/*typedef enum {
|
||||||
|
POWEROFF_COUNTDOWN = 1,
|
||||||
|
POWEROFF_PVDOWN,
|
||||||
|
POWEROFF_KEYDOWN,
|
||||||
|
POWEROFF_KEYREBOOT,
|
||||||
|
POWEROFF_GPRSREBOOT,
|
||||||
|
POWEROFF_KEYOFF
|
||||||
|
}POWEROFF_MODE;*/
|
||||||
|
|
||||||
|
typedef enum sfWIFI_STATUS_E
|
||||||
|
{
|
||||||
|
SF_WIFI_OK = 0x01,/*wifi start success*/
|
||||||
|
SF_WIFI_CON, /*wifi has been connected*/
|
||||||
|
SF_WIFI_FAIL, /*wifi start fail*/
|
||||||
|
SF_WIFI_BUTT,
|
||||||
|
} SF_WIFI_STATUS_E;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT32 cmd;
|
||||||
|
UINT32 param;
|
||||||
|
} sysMsg_t;
|
||||||
|
|
||||||
|
typedef struct socketKeyMap_s
|
||||||
|
{
|
||||||
|
UINT32 key;
|
||||||
|
UINT8 function; //0:stop transter 1:upload 2:download
|
||||||
|
UINT8 fileName[64];
|
||||||
|
SINT32 fd;
|
||||||
|
UINT32 fileSize;
|
||||||
|
UINT32 transferSize;
|
||||||
|
UINT32 count;
|
||||||
|
UINT32 seek;
|
||||||
|
struct socketKeyMap_s *next;
|
||||||
|
}socketKeyMap_t;
|
||||||
|
|
||||||
|
typedef struct clientContext_s
|
||||||
|
{
|
||||||
|
struct clientContext_s *p_next;
|
||||||
|
SINT32 totalBytes;
|
||||||
|
SINT32 sentBytes;
|
||||||
|
SINT32 socket; /* accepted socket */
|
||||||
|
socketKeyMap_t map;
|
||||||
|
pthread_t pthread;
|
||||||
|
struct sockaddr_in ClientAddr;
|
||||||
|
UINT8 szBuffer[PACKET_MAX_LEN];
|
||||||
|
}clientContext_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SVR_INIT = 1,
|
||||||
|
SVR_CONNECT,
|
||||||
|
SVR_LOGIN
|
||||||
|
} SVR_STATE_E;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DEV_TYPE_NORMAL = 1,
|
||||||
|
DEV_TYPE_WIFI ,
|
||||||
|
DEV_TYPE_GPRS,
|
||||||
|
|
||||||
|
DEV_TYPE_MAX
|
||||||
|
} dev_type_e;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
WIFI_TYPE_NONE = 0,
|
||||||
|
WIFI_TYPE_8189FS,
|
||||||
|
WIFI_TYPE_HI3881,
|
||||||
|
|
||||||
|
WIFI_TYPE_MAX
|
||||||
|
} WIFI_TYPE_E;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CMD_SUCCESS = 0x00, //command success
|
||||||
|
CMD_ERR = 0x01, //command error
|
||||||
|
|
||||||
|
/* 文件传输错误码 */
|
||||||
|
DATA_ERR_CMD = 0x11, //CMD error
|
||||||
|
DATA_CMD_8855_NO_CONNECT = 0x12, //APP还没有和相机的数据端口8855建立连接
|
||||||
|
DATA_CMD_ADD_TO_FLOW_ERR = 0x13, //相机添加传输队列失败
|
||||||
|
DATA_CMD_PORT_IS_USED = 0x14, //相机端口被占用
|
||||||
|
DATA_CMD_NO_THIS_PORT = 0x15, //相机在收发数据时未找到对应的端口
|
||||||
|
DATA_CMD_OPEN_FILE_FAIL = 0x16, //相机打开SD卡文件失败
|
||||||
|
DATA_UP_CREAT_FILE_FAIL = 0x17, //APP上传文件时,相机在SD卡上创建文件失败
|
||||||
|
DATA_UP_NO_FILE_NAME = 0x18, // APP上传文件时,相机未接收到有效文件名
|
||||||
|
DATA_UP_TIME_OUT = 0x19, // APP上传文件时,相机接收文件数据超时
|
||||||
|
DATA_UP_WRITE_FILE_ERR = 0x1A, // APP上传文件时,相机在向SD卡文件写入数据时出错
|
||||||
|
DATA_DOWN_OPEN_FILE_FAIL = 0x1B, // APP下载文件时,相机打开文件失败
|
||||||
|
DATA_DOWN_NO_FILE_NAME = 0x1C, // APP下载文件时,相机未接收到有效文件名
|
||||||
|
DATA_DOWN_SEND_DATA_ERR = 0x1D, // APP下载文件时,相机发送数据出错
|
||||||
|
DATA_DOWN_READ_FILE_ERR = 0x1E, // APP下载文件时,相机读取SD卡文件出错
|
||||||
|
DATA_DOWN_TIME_OUT = 0x1F, // APP下载文件时,相机发送数据超时
|
||||||
|
|
||||||
|
/*运营商scan错误码*/
|
||||||
|
NETWORK_CAMERA_BUSY =0x31, //相机忙,正在拍照/录像/发送,请等待相机空闲
|
||||||
|
NETWORK_NO_SIM =0x32, //无SIM卡
|
||||||
|
NETWORK_SIM_NOT_SUPPORTED =0x33, // SIM卡不支持scan(不是ESIM卡)
|
||||||
|
NETWORK_NOT_NEED_SET =0x34, // 网络已选择,不需要重新设置
|
||||||
|
NETWORK_PROFILE_NOT_FOUND =0x35,// 找不到对应的profile
|
||||||
|
NETWORK_PROFILE_SELECT_FAILED =0x36,// 网络选择失败
|
||||||
|
NETWORK_PROFILE_SELECT_BUSY =0x37,// 网络繁忙,切换失败
|
||||||
|
NETWORK_CMD_NOT_SUPPORT =0x38, //网络指令不支持
|
||||||
|
NETWORK_CMD_READ_SIM_FAIL =0x39, //读卡失败,请重试
|
||||||
|
NETWORK_CMD_TIME_OUT =0x3a, //命令超时
|
||||||
|
NETWORK_EERROR_MAX = 0x40,
|
||||||
|
}WIFICameraErrCode_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/**********获取,从0x01开始***********/
|
||||||
|
WIFI_GET_CAMERA_CONNECT = 0x01, // WIFI长连接心跳包
|
||||||
|
WIFI_GET_CAMERA_INFORMATIION = 0x02, //获取相机设备信息
|
||||||
|
WIFI_GET_CAMERA_PARAM = 0x03, //获取设备的所有参数信息
|
||||||
|
WIFI_GET_CAMERA_THUMB_LIST = 0x04, //获取缩略图文件名列表
|
||||||
|
WIFI_GET_CAMERA_HD_FILE = 0x05, //获取缩略图对应SD卡上的照片或视频原文件
|
||||||
|
|
||||||
|
/* 相机功能参数设置区地址从10开始为其它的接口做预留 */
|
||||||
|
WIFI_SET_CAMERA_Zoom = 0x10, //设置相机变焦倍数
|
||||||
|
WIFI_SET_CAMERA_CameraMode = 0x11, //设置相机工作模式
|
||||||
|
WIFI_SET_CAMERA_ImageSize = 0x12, //设置照片分辨率
|
||||||
|
WIFI_SET_CAMERA_MultiShot = 0x13, //设置连拍张数
|
||||||
|
WIFI_SET_CAMERA_PirSensitivity = 0x14, //设置PIR感应灵敏度
|
||||||
|
WIFI_SET_CAMERA_Timer = 0x15, //设置Timer
|
||||||
|
WIFI_SET_CAMERA_MaxNum = 0x16, //设置每天最大发送张数
|
||||||
|
WIFI_SET_CAMERA_Delay = 0x17, //设置Delay
|
||||||
|
WIFI_SET_CAMERA_SDLoop = 0x18, //设置SD卡循环
|
||||||
|
WIFI_SET_CAMERA_FlashPower = 0x19, //设置夜视灯亮度等级
|
||||||
|
WIFI_SET_CAMERA_NightMode= 0x1A, //设置夜视曝光时间等级
|
||||||
|
WIFI_SET_CAMERA_SendType = 0x1B, //设置发送类型
|
||||||
|
WIFI_SET_CAMERA_SMSCtrl = 0x1C, //设置SMS Ctrl
|
||||||
|
WIFI_SET_CAMERA_VideoSize = 0x1D, //设置录影分辨率
|
||||||
|
WIFI_SET_CAMERA_VideoTime = 0x1E, //设置录影时长
|
||||||
|
WIFI_SET_CAMERA_BatteryType = 0x1F, //设置电池类型
|
||||||
|
WIFI_SET_CAMERA_CameraID = 0x20, //设置Camera ID
|
||||||
|
WIFI_SET_CAMERA_DateTime = 0x21, //设置相机时间和日期
|
||||||
|
WIFI_SET_CAMERA_GPS = 0x22, //设置相机GPS
|
||||||
|
WIFI_SET_CAMERA_timeLapse = 0x23, //设置相机缩时摄影
|
||||||
|
WIFI_SET_CAMERA_PicUponDailyReport = 0x24, //设置DailyReport时是否发送照片.
|
||||||
|
WIFI_SET_CAMERA_WifiPWD = 0x25, //设置相机的wifi密码
|
||||||
|
|
||||||
|
/* 相机操作命令从0x30开始 */
|
||||||
|
WIFI_CONTROL_CAMERA_FormatSDCard = 0x30,//格式化SD卡
|
||||||
|
WIFI_CONTROL_CAMERA_Reboot = 0x31, //重启相机
|
||||||
|
WIFI_CONTROL_CAMERA_Recovery = 0x32, //恢复出厂设置
|
||||||
|
WIFI_CONTROL_CAMERA_CloseAPMode = 0x33, //关闭AP模式
|
||||||
|
WIFI_CONTROL_CAMERA_FileTransfer = 0x34,//文件收/发
|
||||||
|
WIFI_CONTROL_CAMERA_StopTransfer = 0x35,//中断数据发送(用于停止发送文件)
|
||||||
|
WIFI_CONTROL_CAMERA_DeleteFile = 0x36, //删除相机SD卡上的某个文件
|
||||||
|
WIFI_CONTROL_CAMERA_CheckThumb = 0x37, //核对缩略图
|
||||||
|
WIFI_CONTROL_CAMERA_SHOOT = 0x38, //相机拍摄
|
||||||
|
WIFI_CONTROL_CAMERA_Update = 0x39, //相机软件升级
|
||||||
|
WIFI_CONTROL_CAMERA_Debug = 0x3a, //debug模式
|
||||||
|
WIFI_CONTROL_CAMERA_Network_Scan = 0x3b, //Network scan
|
||||||
|
WIFI_CONTROL_CAMERA_Network_Select = 0x3c,//Network select
|
||||||
|
|
||||||
|
WIFI_CMD_MAX = 0x40,
|
||||||
|
} CAMERA_CFG_CMD;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------WiFi Module Get CMD-------------------------------*/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reserve; /*不传值就是0,本接口就不需要传,需要设置值的接口需要比如cameraMode、PirSensitivity*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Heart_Send_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /*结果标志位:0成功,否则返回错误码 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Heart_Send_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reserve; /* 0*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_INFO_Get_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd errorCode */
|
||||||
|
UINT8 protocolVersion[3]; /* 协议版本号1.0 */
|
||||||
|
UINT8 devType; /* 设备类型 */
|
||||||
|
UINT8 devId[16]; /* 设备ID */
|
||||||
|
UINT8 batLevel; /* 电池电量1~4,4格显示 */
|
||||||
|
UINT8 batteryPercent; /* 电量百分比 */
|
||||||
|
UINT8 batteryType; /*0: normal 正常 1: Customer 定制*/
|
||||||
|
UINT32 SDFree; /* SD卡剩余容量 MB */
|
||||||
|
UINT32 SDTotalSize; /* SD卡总容量MB */
|
||||||
|
UINT32 SDStatus; /*0:正常 1:未插卡 2:错误*/
|
||||||
|
UINT8 GpsLongitude[16]; /* GPS经度 */
|
||||||
|
UINT8 GpsLatitude[16]; /* GPS纬度 */
|
||||||
|
|
||||||
|
UINT8 hwType[16]; /*相机型号:reveal-x, reveal-sk*/
|
||||||
|
UINT8 swVer[16]; /*相机软件版本 */
|
||||||
|
UINT8 swVer1[16]; /*相机软件特征码 */
|
||||||
|
UINT8 McuVer[10]; /* MCU 软件版本 */
|
||||||
|
UINT8 moduleVer[40]; /* 模块软件版本 */
|
||||||
|
UINT8 moduleIMEI[16]; /* 模块IMEI号 */
|
||||||
|
UINT8 signalLevel; /* 信号强度 */
|
||||||
|
UINT8 SimICCID[32]; /* SIM 卡的 ICCID */
|
||||||
|
UINT8 WifiMac[32]; /* WIFI模块的MAC地址 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
}__attribute__((packed)) MSG_DEV_INFO_Get_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reserve; /*如果不需要传数据就是0*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed))MSG_DEV_Param_Get_T;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct devPara_t
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0:成功,否则返回错误码 */
|
||||||
|
UINT8 zoom; /* zoom 1:1x 2:2x 3:3x 4:4x */
|
||||||
|
UINT8 cameraMode; /* 相机拍照模式0:拍照;1:拍照+录像 */
|
||||||
|
UINT8 imageSize; /* 照片分辨率0:24M;1:12M;1:8M */
|
||||||
|
UINT8 multiShot; /* 连拍张数,0-单拍,1~2连拍 */
|
||||||
|
UINT8 multiInterval; /* 连拍时的时间间隔 1-2s */
|
||||||
|
UINT8 sendMulti; /* 连拍发送设置 0:关闭; 1:打开*/
|
||||||
|
UINT8 PirSensitivity; /* PIR感应灵敏度度0:high;1:Middle;2:Low */
|
||||||
|
|
||||||
|
UINT8 timer; /* timer的开关,0: OFF,1: ON */
|
||||||
|
UINT8 timerStartHour; /* 0-23 */
|
||||||
|
UINT8 timerStartMinute; /* 0-59 */
|
||||||
|
UINT8 timerEndHour; /* 0-23 */
|
||||||
|
UINT8 timerEndMinute; /* 0-59 */
|
||||||
|
|
||||||
|
UINT8 maxNum; /* 0:Unlimited 01-99:每天最大发送张数 */
|
||||||
|
UINT8 delay; /* 延时开关,0: OFF,1: ON */
|
||||||
|
UINT8 delayHour; /*0-23*/
|
||||||
|
UINT8 delayMinute; /*0-59*/
|
||||||
|
UINT8 delaySecond; /*0-59 默认时间是30S*/
|
||||||
|
|
||||||
|
UINT8 SDLoop; /* SD卡循环开关0: OFF,1: ON */
|
||||||
|
UINT8 flashPower; /* 夜视灯亮度等级 0:Hight 1:Low */
|
||||||
|
UINT8 nightMode; /* 夜视曝光时间等级0:Max Range;1:Balanced ; 2: Min Blur */
|
||||||
|
|
||||||
|
UINT8 sendType; /* 发送类型 0:Timely;1:Once/12 hours; 2:Once/24hours */
|
||||||
|
UINT8 sendFirstTimeH; /* 0~23 (12小时和 24小时共用) */
|
||||||
|
UINT8 sendFirstTimeM; /* 0~59 (12小时和 24小时共用) */
|
||||||
|
UINT8 sendSecondTimeH; /* 0~23 */
|
||||||
|
UINT8 sendSecondTimeM; /* 0~59 */
|
||||||
|
|
||||||
|
UINT8 SMSCtrl; /* 模块上电状态0:Daily 1:Instant */
|
||||||
|
UINT8 videoSize; /* 录影分辨率 0:1080P 1:720P 2:WVGA */
|
||||||
|
UINT8 videoTime; /* 录影时长 0~54:5~59s */
|
||||||
|
UINT8 batType; /* 电池类型 0: AKALINE 1: NI-MH 2: LITHIUM */
|
||||||
|
UINT8 cameraID; /* 0: OFF,1: ON */
|
||||||
|
UINT8 cameraIDstr[5]; /* 最长4个有效字符,最后一位补0 */
|
||||||
|
UINT8 dateTimeAuto; /* 时间和日期同步方式 */
|
||||||
|
UINT8 timeZone; /* 时区设置 1: EST(-05:00) ,2: CST(-06:00) ,3: MST(-07:00),4: PST(-08:00),5: AKST(-09:00),6: HST(-10:00)*/
|
||||||
|
UINT8 gpsSwitch; /*GPS 开关: 0:OFF 1:ON*/
|
||||||
|
UINT8 gpsSendType; /*GPS信息发送设置: 0:when camera trun on 1: one time 2:twice time*/
|
||||||
|
|
||||||
|
UINT8 timelapse; /* 0: OFF 1: ON */
|
||||||
|
UINT8 timelapseHour; /* 0 ~ 23 */
|
||||||
|
UINT8 timelapseMin; /* 0 ~ 59 */
|
||||||
|
UINT8 timelapseSec; /* 0 ~ 59 */
|
||||||
|
|
||||||
|
UINT8 picUponDailyReport;/* 在发送dailyreport 时发送一张照片0:OFF 1:ON */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Param_Get_Rsp_T;
|
||||||
|
|
||||||
|
/*获取缩略图文件列表*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 fileName[32]; /*最后一个文件名取增量,为空取全部*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_T;
|
||||||
|
|
||||||
|
/*确认缩略图文件列表请求后,返回应答数据包*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /*0 成功,否则返回错误码*/
|
||||||
|
UINT32 fileNums; /*缩略图文件总数量*/
|
||||||
|
UINT32 packageSize; /*数据包大小*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_Rsp_T;
|
||||||
|
|
||||||
|
/*接收完MSG_DEV_THUMB_LIST_Get_Rsp_T数据包之后,紧接着接收下面缩略图信息数据包*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 srcFileType;
|
||||||
|
UINT8 fileNameString[32]; /*每个缩略图的名称*/
|
||||||
|
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_Data_Rsp_T;
|
||||||
|
|
||||||
|
#if 1// remove
|
||||||
|
/*获取某一个文件(视频/图片)*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 dirName[32]; /*缩略图名称*/
|
||||||
|
UINT8 type; /*0:缩略图,1:源文件(不包含文件名),2:作为其他文件的预留*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_HD_FILE_Get_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /*0成功,否则是errcode*/
|
||||||
|
UINT32 fileSize; /*文件大小*/
|
||||||
|
UINT8 fileName[32]; /*文件名*/
|
||||||
|
UINT8 filePath[32]; /*每个缩略图所在文件夹的位置(不包含文件名,比如 :D/thumb/)*/
|
||||||
|
UINT8 type; /*0:pic 1: Video*/
|
||||||
|
|
||||||
|
UINT16 year; /*2018*/
|
||||||
|
UINT8 month; /*11*/
|
||||||
|
UINT8 day; /*20*/
|
||||||
|
UINT8 hour; /*0-23*/
|
||||||
|
UINT8 minute; /*0-59*/
|
||||||
|
UINT8 second; /*0-59*/
|
||||||
|
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_HD_FILE_Get_Rsp_T;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/***** 相机功能参数设置区地址从10开始为其它的接口做预留 *****/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SET_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 zoom; /*1:x1;2:x2;3:x3; 4:4x*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Zoom_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cameraMode; /*0:拍照;1:拍照+录像*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_CameraMODE_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 imageSize; /* 0:24M;1:12M;2:8M */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_ImageSize_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 multiShot; /* 值0-2 ,0表示单拍,1~2表示2到3连拍 */
|
||||||
|
UINT8 multiInterval; /* 值0-1 ,0:1s 1:2s */
|
||||||
|
UINT8 sendMulti; /*值0-1, 0: 关闭连拍发送 1:打开连拍发送*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_MultiShot_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 PirSensitivity; /* 红外触发强度0:high;1:Middle;2:Low */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_PirSensitivity_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 timer; /* 0:OFF 1:ON */
|
||||||
|
UINT8 timerStartHour; /* 0-23 */
|
||||||
|
UINT8 timerStartMinute; /* 0-59 */
|
||||||
|
UINT8 timerEndHour; /* 0-23 */
|
||||||
|
UINT8 timerEndMinute; /* 0-59 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Timer_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 maxNum; /* 0:Unlimited 01-99:每天最大发送张数 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_MaxNum_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 delay; /* 0: OFF 1: ON */
|
||||||
|
UINT8 delayHour; /* 0-23 */
|
||||||
|
UINT8 delayMinute; /* 0-59 */
|
||||||
|
UINT8 delaySecond; /* 0-59 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Delay_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 SDLoop; /* 0: OFF,1: ON */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SDLoop_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 flashPower; /* 0:Hight 1:Low */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_flashPower_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 nightMode; /* 0:Max Range;1:Balanced ; 2: Min Blur*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_NightMode_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 sendType; /* 0:Timely;1:Once/12 hours; 2:Once/24hours */
|
||||||
|
UINT8 sendFirstTimeH; /* 0~23 (12小时和 24小时共用) */
|
||||||
|
UINT8 sendFirstTimeM; /* 0~59 (12小时和 24小时共用) */
|
||||||
|
UINT8 sendSecondTimeH; /* 0~23 */
|
||||||
|
UINT8 sendSecondTimeM; /* 0~59 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SendType_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 SMSCtrl; /* 0:Daily 1:Instant */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SMSCtrl_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 videoSize; /* 0:FHD 1:HD 2:WVGA*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_VideoSize_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 videoTime; /*录影时长设置 值:0~54 代表 5~59秒*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_VideoTime_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 batType; /* 电池类型 0: AKALINE 1: NI-MH 2: LITHIUM */
|
||||||
|
/*当获取到的状态中batteryType为1时,此项不可设置.*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_batteryType_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cameraID; /* 0: ON 1:OFF */
|
||||||
|
UINT8 cameraIDstr[5]; /*最长4个有效字符,最后一位补0 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_CameraID_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 dateTimeAuto; /* 0: 手动(APP传时间) 1: 自动(相机通过UTC获取) */
|
||||||
|
UINT8 timeZone; /* 时区设置(自动模式需要设置)1: EST(-05:00) ,2: CST(-06:00) ,3: MST(-07:00),4: PST(-08:00),5: AKST(-09:00),6: HST(-10:00) */
|
||||||
|
UINT16 year; /* 2020-2030*/
|
||||||
|
UINT8 month; /* 1-12 */
|
||||||
|
UINT8 day; /* 1-31 */
|
||||||
|
UINT8 hour; /* 0-23 */
|
||||||
|
UINT8 minute; /* 0-59 */
|
||||||
|
UINT8 second; /* 0-59 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_DateTime_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 gpsSwitch; /* 0: OFF 1: ON */
|
||||||
|
UINT8 gpsSendType; /* 0:when camera trun on. 1: 1次(DailyReport时间) 2:2次(DailyReport时间, DailyReport+12小时时间) */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_GPS_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 timelapse; /* 0: OFF 1: ON */
|
||||||
|
UINT8 timelapseHour; /* 0 ~ 23 */
|
||||||
|
UINT8 timelapseMin; /* 0 ~ 59 */
|
||||||
|
UINT8 timelapseSec; /* 0 ~ 59 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_TimeLapse_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 picUponDailyReport; /* 0:OFF 1:ON */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_PicUponDailyReport_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 PWDlength; /* 密码字符串的长度:8~15 */
|
||||||
|
UINT8 newPWD[16]; /* WIFI密码字符串,长度需小于等于15个字节,并以’\0’结尾 */
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_WifiPWD_Set_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 debugMode; /* 0:关闭debugMode 1:开启Debug Mode */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_DebugMode_Set_T;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******相机控制指令结构体***********/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 format; /* 1:format immediately */
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_FormatSDCard_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_FormatSDCard_Ctrl_RSP_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reboot; /* 1: Reboot */
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_REBOOT_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_REBOOT_Ctrl_RSP_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reset; /* reset */
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Reset_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Reset_Ctrl_RSP_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 closeAp; /* 0*/
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_CloseAPMode_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed))MSG_DEV_CloseAPMode_Ctrl_RSP_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT32 PORT; /* 这个端口是APP连接相机8855端口时用的socket端口*/
|
||||||
|
UINT8 function; /* 0:stop transter 1:upload 2:download */
|
||||||
|
UINT8 type; /* 0:缩略图,1:原图或视频 */
|
||||||
|
UINT32 fileSize; /* 传文件给相机时提供文件大小 */
|
||||||
|
UINT8 fileName[32]; /* 缩略图名称 或 全路径的文件名 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed))MSG_DEV_FileTransfer_Ctrl_T;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: 准备好收/发 其他为错误码*/
|
||||||
|
UINT32 fileSize; /* 文件大小 Byte */
|
||||||
|
UINT8 fileName[32]; /* 文件名 */
|
||||||
|
UINT8 filePath[32]; /* 文件所在文件夹的位置(不包含文件名,比如 :D/thumb/) */
|
||||||
|
UINT8 type; /* 0:pic 1: Video */
|
||||||
|
|
||||||
|
UINT16 year; /* 2020-2050 */
|
||||||
|
UINT8 month; /* 1-12 */
|
||||||
|
UINT8 day; /* 1-31 */
|
||||||
|
UINT8 hour; /*0-23*/
|
||||||
|
UINT8 minute; /*0-59*/
|
||||||
|
UINT8 second; /*0-59*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_FileTransfer_Infor_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 buff[PACKET_MAX_LEN]; /* 文件二进制数据,通过8855端口传输 */
|
||||||
|
} __attribute__((packed)) MSG_DEV_FileTransfer_Data_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0:收/发成功,其他为错误码*/
|
||||||
|
UINT32 port; /* PORT */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_FileTransfer_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
|
||||||
|
/*本接口主要用来中断原图与视频类大文件剩余数据的传输*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 resever; /* 0 */
|
||||||
|
UINT16 sufix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_StopTransfer_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_StopTransfer_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reserve;
|
||||||
|
UINT8 fileName [32]; /*带绝对路径的文件名*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed))MSG_DEV_DelFile_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_DelFile_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 reserve; /* 保留 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_CheckThumb_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_CheckThumb_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 shoot; /* 1:拍照 2:开始录影 3:结束录影 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SHOOT_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_SHOOT_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 updateType; /* 0:相机升级 1:模块升级 */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Update_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_Update_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 networkCtrl; /* 0:scan and get 1: get only*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
}__attribute__((packed)) MSG_DEV_NetworkScan_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT8 buff[4]; /*Variable length, only as a mark*/
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_NetworkScan_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 profileId; /*profile ID */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
}__attribute__((packed)) MSG_DEV_NetworkSelect_Ctrl_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UINT8 cmdRet; /* 0: mean cmd OK other:mean cmd error */
|
||||||
|
UINT16 suffix; /* 0xFFEE */
|
||||||
|
} __attribute__((packed)) MSG_DEV_NetworkSelect_Ctrl_Rsp_T;
|
||||||
|
|
||||||
|
|
||||||
|
/************* APP_MSG_T 数据结构 **************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
/**********获取相机信息***********/
|
||||||
|
/*长连接、心跳包*/
|
||||||
|
MSG_DEV_Heart_Send_T GetHeartPackage;
|
||||||
|
MSG_DEV_Heart_Send_Rsp_T rGetHeartPackage;
|
||||||
|
|
||||||
|
/*获取设备的所有参数设置信息*/
|
||||||
|
MSG_DEV_INFO_Get_T getDevInfo;
|
||||||
|
MSG_DEV_INFO_Get_Rsp_T rgetDevInfo;
|
||||||
|
MSG_DEV_Param_Get_T getDevParam;
|
||||||
|
MSG_DEV_Param_Get_Rsp_T rgetDevParam;
|
||||||
|
|
||||||
|
/*获取缩略图文件列表*/
|
||||||
|
MSG_DEV_THUMB_LIST_Get_T getThumbList;/*获取缩略图列表*/
|
||||||
|
MSG_DEV_THUMB_LIST_Get_Rsp_T rgetThumbList;/*缩略图信息数据包*/
|
||||||
|
MSG_DEV_THUMB_LIST_Get_Data_Rsp_T rgetThumbListData;/*缩略图文件名*/
|
||||||
|
#if 1//remove
|
||||||
|
/*获取照片或视频原文件*/
|
||||||
|
MSG_DEV_HD_FILE_Get_T getHdFile;
|
||||||
|
MSG_DEV_HD_FILE_Get_Rsp_T rgetHdFile;
|
||||||
|
#endif
|
||||||
|
/*------------------------------相机参数设置模块--------------------------*/
|
||||||
|
/* 0x10到0x24 命令共用的回复结构*/
|
||||||
|
MSG_DEV_SET_Rsp_T camreaSetRsp;
|
||||||
|
|
||||||
|
/*变焦放大倍数*/
|
||||||
|
MSG_DEV_Zoom_Set_T deviceZoomSet;
|
||||||
|
|
||||||
|
/* CameraMode设置*/
|
||||||
|
MSG_DEV_CameraMODE_Set_T setCameraMode;
|
||||||
|
|
||||||
|
/* 图片大小*/
|
||||||
|
MSG_DEV_ImageSize_Set_T setImageSize;
|
||||||
|
|
||||||
|
/* 连拍数*/
|
||||||
|
MSG_DEV_MultiShot_Set_T setMultiShot;
|
||||||
|
|
||||||
|
/* Pir感应*/
|
||||||
|
MSG_DEV_PirSensitivity_Set_T setPirSensitivity;
|
||||||
|
|
||||||
|
/* timer设置项*/
|
||||||
|
MSG_DEV_Timer_Set_T setTimer;
|
||||||
|
|
||||||
|
/* MaxNum设置项*/
|
||||||
|
MSG_DEV_MaxNum_Set_T setMaxNum;
|
||||||
|
|
||||||
|
/* Delay设置项*/
|
||||||
|
MSG_DEV_Delay_Set_T setDelay;
|
||||||
|
|
||||||
|
/* SD卡循环设置项*/
|
||||||
|
MSG_DEV_SDLoop_Set_T setSDLoop;
|
||||||
|
|
||||||
|
/*设置夜视灯亮度等级*/
|
||||||
|
MSG_DEV_flashPower_Set_T setFlashPower;
|
||||||
|
|
||||||
|
/*设置夜视曝光时间等级*/
|
||||||
|
MSG_DEV_NightMode_Set_T setNightMode;
|
||||||
|
|
||||||
|
/*设置发送类型*/
|
||||||
|
MSG_DEV_SendType_Set_T setSendType;
|
||||||
|
|
||||||
|
/*设置SMS Ctrl */
|
||||||
|
MSG_DEV_SMSCtrl_Set_T setSMSCtrl;
|
||||||
|
|
||||||
|
/* 录影分辨率设置*/
|
||||||
|
MSG_DEV_VideoSize_Set_T setVideoSize;
|
||||||
|
|
||||||
|
/*录影时长设置 值*/
|
||||||
|
MSG_DEV_VideoTime_Set_T setVideoTime;
|
||||||
|
|
||||||
|
/*设置电池类型*/
|
||||||
|
MSG_DEV_batteryType_Set_T setBatType;
|
||||||
|
|
||||||
|
/*设置camera ID*/
|
||||||
|
MSG_DEV_CameraID_Set_T setCameraID;
|
||||||
|
|
||||||
|
/*相机时间和日期*/
|
||||||
|
MSG_DEV_DateTime_Set_T setDateTime;
|
||||||
|
|
||||||
|
/*设置相机GPS */
|
||||||
|
MSG_DEV_GPS_Set_T setGPS;
|
||||||
|
|
||||||
|
/*设置相机缩时摄影*/
|
||||||
|
MSG_DEV_TimeLapse_Set_T setTimeLapseTime;
|
||||||
|
|
||||||
|
/*设置发送DailyReport时是否发送照片*/
|
||||||
|
MSG_DEV_PicUponDailyReport_Set_T setDailyReport;
|
||||||
|
|
||||||
|
/*设置相机的wifi密码*/
|
||||||
|
MSG_DEV_WifiPWD_Set_T setWifiPWD;
|
||||||
|
|
||||||
|
/*设置调试模式*/
|
||||||
|
MSG_DEV_DebugMode_Set_T setDebugMode;
|
||||||
|
|
||||||
|
/*******相机控制指令结构体***********/
|
||||||
|
/*格式化SD卡*/
|
||||||
|
MSG_DEV_FormatSDCard_Ctrl_T ctrlFormat;
|
||||||
|
MSG_DEV_FormatSDCard_Ctrl_RSP_T rctrlFormat;
|
||||||
|
|
||||||
|
/*重启*/
|
||||||
|
MSG_DEV_REBOOT_Ctrl_T ctrlReboot;
|
||||||
|
MSG_DEV_REBOOT_Ctrl_RSP_T rctrlReboot;
|
||||||
|
|
||||||
|
/*恢复出厂设置*/
|
||||||
|
MSG_DEV_Reset_Ctrl_T ctrlReset;
|
||||||
|
MSG_DEV_Reset_Ctrl_RSP_T rctrlReset;
|
||||||
|
|
||||||
|
/*关闭AP模式*/
|
||||||
|
MSG_DEV_CloseAPMode_Ctrl_T ctrlCloseAP;
|
||||||
|
MSG_DEV_CloseAPMode_Ctrl_RSP_T rctrlCloseAP;
|
||||||
|
|
||||||
|
/*接收/发送文件*/
|
||||||
|
MSG_DEV_FileTransfer_Ctrl_T ctrlFileTransfer;
|
||||||
|
MSG_DEV_FileTransfer_Infor_Rsp_T rctrlFileTransferInfo;
|
||||||
|
MSG_DEV_FileTransfer_Ctrl_Rsp_T rctrlFileTransfer;
|
||||||
|
|
||||||
|
/*停止发送原图数据*/
|
||||||
|
MSG_DEV_StopTransfer_Ctrl_T stopTransfer;
|
||||||
|
MSG_DEV_StopTransfer_Ctrl_Rsp_T rstopTransfer;
|
||||||
|
|
||||||
|
/*删除相机SD卡上的某个文件*/
|
||||||
|
MSG_DEV_DelFile_Ctrl_T ctrlDelFile;
|
||||||
|
MSG_DEV_DelFile_Ctrl_Rsp_T rctrlDelFile;
|
||||||
|
|
||||||
|
/*核对缩略图*/
|
||||||
|
MSG_DEV_CheckThumb_Ctrl_T ctrlCheckThumb;
|
||||||
|
MSG_DEV_CheckThumb_Ctrl_Rsp_T rctrlCheckThumb;
|
||||||
|
|
||||||
|
/*相机拍摄*/
|
||||||
|
MSG_DEV_SHOOT_Ctrl_T ctrlShoot;
|
||||||
|
MSG_DEV_SHOOT_Ctrl_Rsp_T rctrlShoot;
|
||||||
|
|
||||||
|
/*相机软件升级*/
|
||||||
|
MSG_DEV_Update_Ctrl_T ctrlUpdate;
|
||||||
|
MSG_DEV_Update_Ctrl_Rsp_T rctrlUpdate;
|
||||||
|
|
||||||
|
/*Network Scan*/
|
||||||
|
MSG_DEV_NetworkScan_Ctrl_T ctrlNetworkScan;
|
||||||
|
MSG_DEV_NetworkScan_Ctrl_Rsp_T rctrlNetworkScan;
|
||||||
|
|
||||||
|
/*Network select*/
|
||||||
|
MSG_DEV_NetworkSelect_Ctrl_T ctrlNetworkSelect;
|
||||||
|
MSG_DEV_NetworkSelect_Ctrl_Rsp_T rctrlNetworkSelect;
|
||||||
|
|
||||||
|
};
|
||||||
|
} __attribute__((packed)) APP_MSG_T;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct APP_SVR_PACKET_S
|
||||||
|
{
|
||||||
|
UINT16 magicNum; /* 0x55AA */
|
||||||
|
UINT16 msglen; /* from cmd to endflag(0xFFEE); not include prefix && msglen*/
|
||||||
|
UINT16 cmd; /* wifi act as ac/pm2.5 */
|
||||||
|
UINT16 rsp; /* used for response */
|
||||||
|
APP_MSG_T msgBuf;
|
||||||
|
} __attribute__((packed)) APP_SVR_PACKET_T;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SINT8 dirName[32]; //
|
||||||
|
UINT32 dirSize; //
|
||||||
|
} __attribute__((packed)) MSG_DEV_THUMB_DIR_LIST_T;
|
||||||
|
|
||||||
|
//forbuild fix----start------------------------------
|
||||||
|
//#define THUMB_PATH "D:\\THUMB"
|
||||||
|
//#define THUMB_PATH SD_PATH "/DCIM/THUMB/SMALL"
|
||||||
|
|
||||||
|
typedef enum thumbType{
|
||||||
|
STILL_THUMB,
|
||||||
|
VIDEO_THUMB,
|
||||||
|
TMLPS_THUMB, //timelapse
|
||||||
|
}thumbType_t;
|
||||||
|
|
||||||
|
typedef enum thumbSize{
|
||||||
|
THUMB_320x240,
|
||||||
|
THUMB_1280x960,
|
||||||
|
THUMB_1920x1440,
|
||||||
|
}thumbSize_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
UINT8 forbuild[32];
|
||||||
|
|
||||||
|
#define appBatteryLevelGet() 0
|
||||||
|
#define appStillBackgroundGetFree(x) 0
|
||||||
|
#define appVersionGet() NULL
|
||||||
|
#define appCurDiskInfoGet() ((void *)&forbuild)
|
||||||
|
#define appPbTotalFileCountGet() 100
|
||||||
|
#define sf_get_temper() 0
|
||||||
|
#define appHOSTVersionGet() "forbuild"
|
||||||
|
#define appBatteryLevelGet() 0
|
||||||
|
#define appBatteryValueGet() 0
|
||||||
|
*/
|
||||||
|
|
||||||
|
void memdump(void *buf,int len);
|
||||||
|
|
||||||
|
void sf_wifi_hw_init(void);
|
||||||
|
void *sf_wifi_sevrer_init(void *);
|
||||||
|
void sf_set_wifi_status(SF_WIFI_STATUS_E enStatus);
|
||||||
|
SF_WIFI_STATUS_E sf_get_wifi_status(void);
|
||||||
|
void sf_get_wifi_ssid(char *ssid);
|
||||||
|
int sf_is_ip_in_list(char *macbuf);
|
||||||
|
UINT8 sf_get_wifi_type(void);
|
||||||
|
void sf_wifi_app_start(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /*__SF_WIFI_SERVER__*/
|
|
@ -98,7 +98,8 @@ int main(int argc, char *argv[])
|
||||||
printf("*********************************************\n");
|
printf("*********************************************\n");
|
||||||
//gpio_direction_input(C_GPIO(10));
|
//gpio_direction_input(C_GPIO(10));
|
||||||
SINT16 startup = 0;
|
SINT16 startup = 0;
|
||||||
|
SF_MESSAGE_BUF_S stMessageBuf = {0};
|
||||||
|
BOOL autosend = FALSE;
|
||||||
SF_MUTEX_INIT_LOCK(Param_mutexLock);
|
SF_MUTEX_INIT_LOCK(Param_mutexLock);
|
||||||
SF_MUTEX_INIT_LOCK(GPIO_mutexLock);
|
SF_MUTEX_INIT_LOCK(GPIO_mutexLock);
|
||||||
//test_sd_free();
|
//test_sd_free();
|
||||||
|
@ -153,11 +154,39 @@ int main(int argc, char *argv[])
|
||||||
//app_led_pin_init();
|
//app_led_pin_init();
|
||||||
//app_upgrade_sd_execute();
|
//app_upgrade_sd_execute();
|
||||||
app_preinit();
|
app_preinit();
|
||||||
|
//#if
|
||||||
app_RegisterNet_start();
|
app_RegisterNet_start();
|
||||||
|
//#endif
|
||||||
startup = sf_poweron_type_get();
|
startup = sf_poweron_type_get();
|
||||||
SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup));
|
SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup));
|
||||||
if(SF_MCU_STARTUP_ONKEY == startup)
|
/*if(SF_MCU_STARTUP_ONKEY != startup)
|
||||||
|
{
|
||||||
|
sf_share_mem_file_init();
|
||||||
|
autosend = sf_check_auto_thumb_file();
|
||||||
|
if(TRUE == autosend)
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if(-1 != sf_get_signal_ready())//init
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(sf_get_signal_ready())
|
||||||
|
{
|
||||||
|
stMessageBuf.arg1 = SF_PARA_CMD_UPDATE;
|
||||||
|
stMessageBuf.cmdId = CMD_FILE;
|
||||||
|
sf_com_message_send_to_app(&stMessageBuf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
autosend = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//if((SF_MCU_STARTUP_ONKEY == startup) || (TRUE == autosend))
|
||||||
{
|
{
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
app_debug_init();
|
app_debug_init();
|
||||||
|
@ -169,14 +198,14 @@ int main(int argc, char *argv[])
|
||||||
app_debug_deinit();
|
app_debug_deinit();
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
}
|
}
|
||||||
else//tese
|
/*else//tese
|
||||||
{
|
{
|
||||||
SF_MESSAGE_BUF_S stMessageBuf = {0};
|
SF_MESSAGE_BUF_S stMessageBuf = {0};
|
||||||
stMessageBuf.cmdId = CMD_KEY;
|
stMessageBuf.cmdId = CMD_KEY;
|
||||||
stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK;
|
stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK;
|
||||||
stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
|
stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
|
||||||
sf_com_message_send_to_cardv(&stMessageBuf);
|
sf_com_message_send_to_cardv(&stMessageBuf);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
sf_share_mem_file_deinit();
|
sf_share_mem_file_deinit();
|
||||||
|
|
|
@ -51,6 +51,7 @@ extern "C" {
|
||||||
#include "sf_system.h"
|
#include "sf_system.h"
|
||||||
#include "sf_service.h"
|
#include "sf_service.h"
|
||||||
#include <FileSysTsk.h>
|
#include <FileSysTsk.h>
|
||||||
|
#include "sf_wifi_svr.h"
|
||||||
|
|
||||||
|
|
||||||
extern pthread_mutex_t Param_mutexLock;
|
extern pthread_mutex_t Param_mutexLock;
|
||||||
|
@ -500,10 +501,12 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
break;
|
break;
|
||||||
case CMD_SD_STRG_CB_INSERTED:
|
case CMD_SD_STRG_CB_INSERTED:
|
||||||
sf_set_card(1);
|
sf_set_card(1);
|
||||||
|
sf_sd_status_set(SF_SD_OK);
|
||||||
break;
|
break;
|
||||||
case CMD_SD_STRG_CB_REMOVED:
|
case CMD_SD_STRG_CB_REMOVED:
|
||||||
sf_set_card(0);
|
sf_set_card(0);
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL);
|
sf_sd_status_set(SF_SD_OUT);
|
||||||
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
|
||||||
break;
|
break;
|
||||||
case CMD_SD_STRG_CB_MOUNT_FINISH:
|
case CMD_SD_STRG_CB_MOUNT_FINISH:
|
||||||
|
|
||||||
|
@ -512,11 +515,14 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
{
|
{
|
||||||
case FST_STA_OK:
|
case FST_STA_OK:
|
||||||
sf_set_card(1);
|
sf_set_card(1);
|
||||||
|
sf_sd_status_set(SF_SD_OK);
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
|
||||||
MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1);
|
MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1);
|
||||||
break;
|
break;
|
||||||
case FST_STA_DISK_UNFORMAT:
|
case FST_STA_DISK_UNFORMAT:
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
|
sf_set_card(1);
|
||||||
|
sf_sd_status_set(SF_SD_OK);
|
||||||
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
|
||||||
MLOGI("^Rcard-%d mount FAIL: Unformat\r\n", pMessageBuf->arg2 + 1);
|
MLOGI("^Rcard-%d mount FAIL: Unformat\r\n", pMessageBuf->arg2 + 1);
|
||||||
break;
|
break;
|
||||||
case FST_STA_DISK_UNKNOWN_FORMAT:
|
case FST_STA_DISK_UNKNOWN_FORMAT:
|
||||||
|
@ -534,14 +540,19 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case CMD_SD_STRG_CB_UNMOUNT_FINISH:
|
case CMD_SD_STRG_CB_UNMOUNT_FINISH:
|
||||||
|
sf_set_card(0);
|
||||||
break;
|
sf_sd_status_set(SF_SD_OUT);
|
||||||
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
|
||||||
|
MLOGI("CMD_SD_STRG_CB_UNMOUNT_FINISH\r\n");
|
||||||
|
break;
|
||||||
case CMD_SD_SYSTEM_CB_CONFIG:
|
case CMD_SD_SYSTEM_CB_CONFIG:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case CMD_SD_FULL:
|
case CMD_SD_FULL:
|
||||||
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
|
||||||
|
MLOGI("CMD_SD_FULL\r\n");
|
||||||
sf_set_card_full(1);
|
sf_set_card_full(1);
|
||||||
|
sf_sd_status_set(SF_SD_FULL);
|
||||||
/*sf_sd_status_set(SF_SD_FULL);
|
/*sf_sd_status_set(SF_SD_FULL);
|
||||||
if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) {
|
if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) {
|
||||||
if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get()))
|
if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get()))
|
||||||
|
@ -625,11 +636,11 @@ static SINT32 app_proccess_cmd_file(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
return SF_SUCCESS;
|
return SF_SUCCESS;
|
||||||
#endif
|
#endif
|
||||||
sf_mcu_wdg_set(5);
|
sf_mcu_wdg_set(5);
|
||||||
if(sf_poweron_type_get() != SF_MCU_STARTUP_RING && sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY)
|
/*if(sf_poweron_type_get() != SF_MCU_STARTUP_RING && sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY)
|
||||||
{
|
{
|
||||||
app_t110();
|
app_t110();
|
||||||
}
|
}
|
||||||
else
|
else*/
|
||||||
{
|
{
|
||||||
app_FileSend_start();
|
app_FileSend_start();
|
||||||
}
|
}
|
||||||
|
@ -693,6 +704,23 @@ static SINT32 app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
return SF_SUCCESS;
|
return SF_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SINT32 sf_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
|
{
|
||||||
|
MLOGI("ID = %#x\n",pMessageBuf->arg1);
|
||||||
|
|
||||||
|
switch(pMessageBuf->arg1)
|
||||||
|
{
|
||||||
|
case SF_WIFI_CMD_START:
|
||||||
|
sf_wifi_app_start();
|
||||||
|
sf_sys_status_led_set(SF_LED_SYS_STATE_WIFI_DISCONNECT);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return SF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CFG_LIVE_ENBLE)
|
#if defined(CFG_LIVE_ENBLE)
|
||||||
static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf)
|
static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
{
|
{
|
||||||
|
@ -772,6 +800,9 @@ void* app_message_recv_thread(void *arg)
|
||||||
break;
|
break;
|
||||||
case CMD_PARA:
|
case CMD_PARA:
|
||||||
app_proccess_cmd_para_update(&stMessagebuf);
|
app_proccess_cmd_para_update(&stMessagebuf);
|
||||||
|
break;
|
||||||
|
case CMD_WIFI:
|
||||||
|
sf_proccess_cmd_wifi(&stMessagebuf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1018,7 +1018,6 @@ static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam)
|
||||||
|
|
||||||
//sf_thumb_file_creat();
|
//sf_thumb_file_creat();
|
||||||
|
|
||||||
sf_share_mem_file_init();
|
|
||||||
s32ret = sf_simcom_ftp_send(1);
|
s32ret = sf_simcom_ftp_send(1);
|
||||||
|
|
||||||
if(s32ret == SF_SUCCESS) {
|
if(s32ret == SF_SUCCESS) {
|
||||||
|
@ -1029,40 +1028,24 @@ static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam)
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL);
|
sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sf_file_thumb_cfg_clear();
|
//sf_file_thumb_cfg_clear();
|
||||||
sf_share_mem_file_down(1);
|
//sf_share_mem_file_down(1);
|
||||||
sf_set_upload_to_module_flag(0);//test
|
sf_set_upload_to_module_flag(0);//test
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#if 0
|
|
||||||
case SF_MCU_STARTUP_TIMELAPSE:
|
case SF_MCU_STARTUP_TIMELAPSE:
|
||||||
case SF_MCU_STARTUP_PIR:
|
case SF_MCU_STARTUP_PIR:
|
||||||
if(pStaticParam->PicPlan == 0) {
|
//sf_share_mem_file_init();
|
||||||
s32ret = sf_4G_server_open(pfnParam);
|
sf_check_auto_thumb_file();
|
||||||
s32ret = app_server_querystatus(SF_CMD_LOGIN_IN,pfnParam,SF_NULL);
|
s32ret = sf_simcom_ftp_send(1);
|
||||||
s32ret = sf_4G_server_close(pfnParam);
|
|
||||||
|
|
||||||
}
|
|
||||||
if(pStaticParam->PicPlan == 1) {
|
|
||||||
s32ret = app_file_thumbsend(pfnParam);
|
|
||||||
// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
|
|
||||||
}
|
|
||||||
|
|
||||||
s32ret |= app_server_excute_cmd(pfnParam);
|
stMessageBuf.cmdId = CMD_KEY;
|
||||||
// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
|
stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK;
|
||||||
if(pStaticParam->AliveIp[0] !='\0') {
|
stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
|
||||||
s32ret = sf_4G_acm_tcp_server_open(pfnParam);
|
sf_com_message_send_to_cardv(&stMessageBuf);
|
||||||
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
|
|
||||||
|
|
||||||
s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode);
|
|
||||||
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
|
|
||||||
}
|
|
||||||
|
|
||||||
stMessageBuf.arg1 = SF_POWEROFF_NOT;
|
|
||||||
stMessageBuf.cmdId = CMD_POWEROFF;
|
|
||||||
sf_com_message_send_to_app(&stMessageBuf);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
#if 0
|
||||||
case SF_MCU_STARTUP_NORMAL:
|
case SF_MCU_STARTUP_NORMAL:
|
||||||
case SF_MCU_STARTUP_RING:
|
case SF_MCU_STARTUP_RING:
|
||||||
sf_thumb_file_creat();
|
sf_thumb_file_creat();
|
||||||
|
@ -1113,12 +1096,14 @@ SINT32 app_FileSend_thread(void)
|
||||||
|
|
||||||
pthread_detach(pthread_self());
|
pthread_detach(pthread_self());
|
||||||
|
|
||||||
|
sf_share_mem_file_init();
|
||||||
//s32ret = app_file_send_check(stpfncallback.pstaticParam);
|
//s32ret = app_file_send_check(stpfncallback.pstaticParam);
|
||||||
s32ret = sf_check_ftp_send(1);
|
s32ret = sf_check_ftp_send(1);
|
||||||
if(s32ret != SF_SUCCESS)
|
if(s32ret != SF_SUCCESS)
|
||||||
{
|
{
|
||||||
MLOGE("ERROR:%#x\n", s32ret);
|
MLOGE("ERROR:%#x\n", s32ret);
|
||||||
ThumbSend.IsRun = 0;
|
ThumbSend.IsRun = 0;
|
||||||
|
sf_file_thumb_cfg_clear();
|
||||||
sf_share_mem_file_down(1);
|
sf_share_mem_file_down(1);
|
||||||
return s32ret;
|
return s32ret;
|
||||||
}
|
}
|
||||||
|
@ -1127,6 +1112,8 @@ SINT32 app_FileSend_thread(void)
|
||||||
//if(s32ret == SF_APP_ERROR_NO_SUPPOET)
|
//if(s32ret == SF_APP_ERROR_NO_SUPPOET)
|
||||||
// app_file_transfer_Error_return_server(&stpfncallback);
|
// app_file_transfer_Error_return_server(&stpfncallback);
|
||||||
ThumbSend.IsRun = 0;
|
ThumbSend.IsRun = 0;
|
||||||
|
sf_file_thumb_cfg_clear();
|
||||||
|
sf_share_mem_file_down(1);
|
||||||
return s32ret;
|
return s32ret;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1366,7 +1353,7 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam)
|
||||||
|
|
||||||
case SF_MCU_STARTUP_TIMELAPSE:
|
case SF_MCU_STARTUP_TIMELAPSE:
|
||||||
case SF_MCU_STARTUP_PIR:
|
case SF_MCU_STARTUP_PIR:
|
||||||
/*
|
|
||||||
#ifdef SF_HARDWARE_TEST
|
#ifdef SF_HARDWARE_TEST
|
||||||
app_system_poweroff(SF_POWEROFF_NOT);
|
app_system_poweroff(SF_POWEROFF_NOT);
|
||||||
break;
|
break;
|
||||||
|
@ -1392,17 +1379,17 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam)
|
||||||
s32ret = sf_4G_register_net_auto(pfnParam);
|
s32ret = sf_4G_register_net_auto(pfnParam);
|
||||||
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
||||||
|
|
||||||
sf_thumb_file_creat();
|
//sf_thumb_file_creat();
|
||||||
|
|
||||||
sf_4G_usb_net_apn_cfg(pfnParam);
|
//sf_4G_usb_net_apn_cfg(pfnParam);
|
||||||
sf_USB_net_init();
|
//sf_USB_net_init();
|
||||||
|
|
||||||
s32ret = app_http_IsAuthenrequst(pfnParam);
|
//s32ret = app_http_IsAuthenrequst(pfnParam);
|
||||||
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
//SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
||||||
|
|
||||||
s32ret = app_FileSend_thread();
|
s32ret = app_FileSend_thread();
|
||||||
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
|
||||||
*/
|
|
||||||
break;
|
break;
|
||||||
case SF_MCU_STARTUP_WARNING:
|
case SF_MCU_STARTUP_WARNING:
|
||||||
|
|
||||||
|
|
|
@ -194,7 +194,7 @@ SINT32 sf_share_mem_file_down(UINT32 to)
|
||||||
|
|
||||||
if(pThumbFileCfg <= 0)
|
if(pThumbFileCfg <= 0)
|
||||||
{
|
{
|
||||||
printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__);
|
printf("[%s:%d] creat share mem failed!!!to:%d\n", __FUNCTION__, __LINE__,to);
|
||||||
return SF_FAILURE;
|
return SF_FAILURE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <sf_message_queue.h>
|
#include <sf_message_queue.h>
|
||||||
#include "sf_log.h"
|
#include "sf_log.h"
|
||||||
#include "sf_fileMng.h"
|
#include "sf_fileMng.h"
|
||||||
|
#include "sf_common.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
|
@ -627,7 +628,7 @@ SINT16 sf_file_subscribe_check(SF_FILE_ATTR_S *pstfileAttr, SF_SEND_FILE_ATTR_S*
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileType)
|
void sf_file_thumb_cfg_fill(char* filepath,char* fileName, UINT32 size, SF_FILE_TYPE_E enFileType)
|
||||||
{
|
{
|
||||||
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
|
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
|
||||||
{
|
{
|
||||||
|
@ -638,6 +639,7 @@ void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileT
|
||||||
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
|
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
|
||||||
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
|
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
|
||||||
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType;
|
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType;
|
||||||
|
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileSize = size;
|
||||||
pThumbFileCfg->filecnt++;
|
pThumbFileCfg->filecnt++;
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,8 +651,8 @@ void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl)
|
||||||
}
|
}
|
||||||
|
|
||||||
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara)
|
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara)
|
||||||
{
|
{
|
||||||
//currentInfo = *pSfCustomerPara;
|
//currentInfo = *pSfCustomerPara;
|
||||||
memcpy(pSfCustomerPara,&pThumbFileCfg,sizeof(pThumbFileCfg));
|
memcpy(pSfCustomerPara,&pThumbFileCfg,sizeof(pThumbFileCfg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,6 +665,45 @@ void sf_file_thumb_cfg_clear(void)
|
||||||
pThumbFileCfg->filecnt = 0;
|
pThumbFileCfg->filecnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL sf_check_auto_thumb_file(VOID)
|
||||||
|
{
|
||||||
|
FILE *fp = NULL;
|
||||||
|
UINT32 u32ize = 0;
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
UINT8 fileIndex = 0;
|
||||||
|
printf("%s:%d s\n", __FUNCTION__, __LINE__);
|
||||||
|
|
||||||
|
char tmp[64] = {'\0'};
|
||||||
|
|
||||||
|
SF_SRCFILE_ATTR_S* fileCfg = sf_file_thumb_cfg_get();
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s", SF_SD_THUMB_PATH_CFG);
|
||||||
|
|
||||||
|
fp = fopen(tmp,"r");
|
||||||
|
if(fp == NULL){
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
u32ize = ftell(fp);
|
||||||
|
|
||||||
|
if (fileCfg) {
|
||||||
|
fread(fileCfg, 1, sizeof(SF_SRCFILE_ATTR_S), fp);
|
||||||
|
if(fileCfg->filecnt)
|
||||||
|
{
|
||||||
|
ret = TRUE;
|
||||||
|
for(fileIndex = 0; fileIndex < fileCfg->filecnt; fileIndex++)
|
||||||
|
{
|
||||||
|
printf("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,pThumbFileCfg->stfileattr[fileIndex].thumbfileSize,fileCfg->stfileattr[fileIndex].thumbfileName,fileCfg->stfileattr[fileIndex].thumbfilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
sf_file_remove(tmp);
|
||||||
|
printf("%s:%d e u32ize:%d sizeof:%d\n", __FUNCTION__, __LINE__,u32ize,sizeof(SF_SRCFILE_ATTR_S));
|
||||||
|
fp = NULL;
|
||||||
|
u32ize = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,12 +51,12 @@ unsigned short TrigType = 0;
|
||||||
unsigned int powerSave_t1 = 0;
|
unsigned int powerSave_t1 = 0;
|
||||||
unsigned char DailyReportStartMode = 0;
|
unsigned char DailyReportStartMode = 0;
|
||||||
unsigned char POWEROFF = 0;
|
unsigned char POWEROFF = 0;
|
||||||
SF_TIME_S sfMcuTime = { 0 };
|
SF_TIME_S sfMcuTime = { 0 };
|
||||||
static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */
|
static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */
|
||||||
static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP
|
static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP
|
||||||
static UINT32 simCardInsert=0;
|
static UINT32 simCardInsert=0;
|
||||||
static UINT8 gModuleSleep = 1;
|
static UINT8 gModuleSleep = 1;
|
||||||
static UINT8 isSignalReady = 0;
|
static int isSignalReady = -1;
|
||||||
static UINT32 GPRS_ERRNO = 0;
|
static UINT32 GPRS_ERRNO = 0;
|
||||||
static UINT32 SmsCheck = 0;
|
static UINT32 SmsCheck = 0;
|
||||||
static UINT8 SIMPIN1 = 1;
|
static UINT8 SIMPIN1 = 1;
|
||||||
|
@ -289,8 +289,8 @@ void sf_mcu_poweron_4g_module(void)
|
||||||
const unsigned char PirDigtSensLevel[3] = {0, 1, 2}; // /*analog PIR: High/Middle/Low/OFF*/
|
const unsigned char PirDigtSensLevel[3] = {0, 1, 2}; // /*analog PIR: High/Middle/Low/OFF*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define APP_POWER_OFF_APO 0
|
//#define APP_POWER_OFF_APO 0
|
||||||
#define APP_POWER_OFF_BATT_EMPTY 0
|
//#define APP_POWER_OFF_BATT_EMPTY 0
|
||||||
extern SF_TIME_S sf_get_mcu_poweroff_date(void);
|
extern SF_TIME_S sf_get_mcu_poweroff_date(void);
|
||||||
UINT8 sf_set_digit_pir_level(UINT8 pirs)
|
UINT8 sf_set_digit_pir_level(UINT8 pirs)
|
||||||
{
|
{
|
||||||
|
@ -353,7 +353,7 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val)
|
||||||
SINT32 isCardFull = sf_is_card_full();
|
SINT32 isCardFull = sf_is_card_full();
|
||||||
//CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle();
|
//CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle();
|
||||||
|
|
||||||
MLOGI("isUsb = %d isCard = %d isCardFull = %d\n", isUsb, isCard, isCardFull);
|
MLOGI("isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %d\n", isUsb, isCard, isCardFull, val, simCardInsert);
|
||||||
if(!isCard)
|
if(!isCard)
|
||||||
{
|
{
|
||||||
isCard = sf_is_card();
|
isCard = sf_is_card();
|
||||||
|
@ -822,8 +822,8 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val)
|
||||||
|
|
||||||
|
|
||||||
SF_TIME_S sf_get_mcu_poweroff_date(void)
|
SF_TIME_S sf_get_mcu_poweroff_date(void)
|
||||||
{
|
{
|
||||||
return sfMcuTime;
|
return sfMcuTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date)
|
void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date)
|
||||||
|
@ -1025,6 +1025,18 @@ unsigned short sf_get_mcu_ver(void)
|
||||||
return McuVersion;
|
return McuVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
Function: sf_mcu_version_get
|
||||||
|
Description: get mcu ver
|
||||||
|
Input: N/A
|
||||||
|
Output: ver str
|
||||||
|
Return: N/A
|
||||||
|
Others: N/A
|
||||||
|
*************************************************/
|
||||||
|
void sf_mcu_version_get(UINT8 *mcuVer)
|
||||||
|
{
|
||||||
|
sprintf((char *)mcuVer, "%d.%d.%d", (McuVersion>>4)&0x0F, McuVersion & 0x0F, McuSubVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
|
@ -1135,7 +1147,7 @@ void sf_set_cq_signal(UINT8 csq)
|
||||||
printf("[%s:%d]cq_Signal=%d,isSignalReady=%d\n", __FUNCTION__, __LINE__, cq_Signal, isSignalReady);
|
printf("[%s:%d]cq_Signal=%d,isSignalReady=%d\n", __FUNCTION__, __LINE__, cq_Signal, isSignalReady);
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT8 sf_get_signal_ready(void)
|
int sf_get_signal_ready(void)
|
||||||
{
|
{
|
||||||
return isSignalReady;
|
return isSignalReady;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,864 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
|
||||||
|
*
|
||||||
|
* This software is copyrighted by and is the property of SiFar
|
||||||
|
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
|
||||||
|
* This software may only be used in accordance with the corresponding
|
||||||
|
* license agreement. Any unauthorized use, duplication, distribution,
|
||||||
|
* or disclosure of this software is expressly forbidden.
|
||||||
|
*
|
||||||
|
* This Copyright notice MUST not be removed or modified without prior
|
||||||
|
* written consent of SiFar Technology, Inc..
|
||||||
|
*
|
||||||
|
* SiFar Technology, Inc. reserves the right to modify this software without notice.
|
||||||
|
*
|
||||||
|
* Author: Oliver
|
||||||
|
* Ver: 1.0.0 2018/11/14 New thread used to send file
|
||||||
|
**************************************************************************/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>//malloc
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <unistd.h> //usleep()
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/times.h>
|
||||||
|
|
||||||
|
#include "sf_common.h"
|
||||||
|
|
||||||
|
#include "sf_wifi_svr.h"
|
||||||
|
#include "sf_data_transfer.h"
|
||||||
|
#include "sf_svr_send.h"
|
||||||
|
#include "sf_system.h"
|
||||||
|
|
||||||
|
//#include "sf_customer_app.h"
|
||||||
|
//#include "sf_4g_common.h"
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* C O N S T A N T S *
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* M A C R O S *
|
||||||
|
**************************************************************************/
|
||||||
|
#define DATA_SVR_PORT 8855
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* D A T A T Y P E S *
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* G L O B A L D A T A *
|
||||||
|
**************************************************************************/
|
||||||
|
//nouse TX_QUEUE *gAppDataSvrQueue = NULL;
|
||||||
|
pthread_t gAppDataSvrThreadId;
|
||||||
|
pthread_mutex_t gAppDataSvrMutex;
|
||||||
|
pthread_mutex_t gDataErrCodeMutex;
|
||||||
|
|
||||||
|
//S32 gAppDataSvrSocket = -1;
|
||||||
|
|
||||||
|
//fileInfo_t socketKeyMap[64];
|
||||||
|
socketKeyMap_t *socketKeyMapHead = NULL;
|
||||||
|
clientContext_t *pDataClientHead = NULL ;
|
||||||
|
DataErrCode_t *pDataErrCode = NULL;
|
||||||
|
//sem_t s_DataSvrSem;
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* E X T E R N A L R E F E R E N C E S *
|
||||||
|
**************************************************************************/
|
||||||
|
extern U8 poweroff_mode;
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* F U N C T I O N D E C L A R A T I O N S *
|
||||||
|
**************************************************************************/
|
||||||
|
void socketKeyMapAdd(S32 socket, U32 key)
|
||||||
|
{
|
||||||
|
socketKeyMap_t *p = socketKeyMapHead;
|
||||||
|
if(socketKeyMapHead == NULL)
|
||||||
|
{
|
||||||
|
socketKeyMapHead = (socketKeyMap_t *)malloc(sizeof(socketKeyMap_t));
|
||||||
|
socketKeyMapHead->key = key;
|
||||||
|
//socketKeyMapHead->socket = socket;
|
||||||
|
socketKeyMapHead->next = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while(p != NULL)
|
||||||
|
{
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
p = (socketKeyMap_t *)malloc(sizeof(socketKeyMap_t));
|
||||||
|
p->key = key;
|
||||||
|
//p.socket = socket;
|
||||||
|
p->next = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void socketKeyMapDel(S32 socket, U32 key)
|
||||||
|
{
|
||||||
|
//U8 i;
|
||||||
|
//socketKeyMap_t *p = socketKeyMapHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fdClears(S32 clientsd, fd_set *rdfds, fd_set *wrfds, fd_set *errfds)
|
||||||
|
{
|
||||||
|
/* Initialize */
|
||||||
|
FD_CLR(clientsd, rdfds);
|
||||||
|
FD_CLR(clientsd, wrfds);
|
||||||
|
FD_CLR(clientsd, errfds);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fdInitSets(clientContext_t *pClientHead, S32 serversd, fd_set *rdfds, fd_set *wrfds, fd_set *errfds)
|
||||||
|
{
|
||||||
|
clientContext_t *pClient = pClientHead;
|
||||||
|
|
||||||
|
/* Initialize */
|
||||||
|
FD_ZERO(rdfds);
|
||||||
|
FD_ZERO(wrfds);
|
||||||
|
FD_ZERO(errfds);
|
||||||
|
|
||||||
|
FD_SET(serversd, rdfds);
|
||||||
|
FD_SET(serversd, errfds);
|
||||||
|
|
||||||
|
/* Iterate the client context list and assign the sockets to Sets */
|
||||||
|
|
||||||
|
while(pClient != NULL)
|
||||||
|
{
|
||||||
|
FD_SET(pClient->socket, rdfds);
|
||||||
|
FD_SET(pClient->socket, errfds);
|
||||||
|
pClient = pClient->p_next ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static clientContext_t* DeleteClientContext( clientContext_t **ppClientHead, clientContext_t *pClient)
|
||||||
|
{
|
||||||
|
clientContext_t *pTemp;
|
||||||
|
clientContext_t *pPrev = *ppClientHead;
|
||||||
|
clientContext_t *pCurr = (*ppClientHead)->p_next;
|
||||||
|
pthread_mutex_lock(&gAppDataSvrMutex);
|
||||||
|
|
||||||
|
if (pClient == *ppClientHead)
|
||||||
|
{
|
||||||
|
pTemp = *ppClientHead;
|
||||||
|
*ppClientHead = (*ppClientHead)->p_next ;
|
||||||
|
close(pTemp->socket);
|
||||||
|
free(pTemp);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return *ppClientHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
pPrev = *ppClientHead;
|
||||||
|
pCurr = (*ppClientHead)->p_next;
|
||||||
|
|
||||||
|
while (pCurr != NULL)
|
||||||
|
{
|
||||||
|
if (pCurr == pClient)
|
||||||
|
{
|
||||||
|
pTemp = pCurr->p_next;
|
||||||
|
pPrev->p_next = pTemp;
|
||||||
|
close(pCurr->socket);
|
||||||
|
free(pCurr);
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return pTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
pPrev = pCurr;
|
||||||
|
pCurr = pCurr->p_next;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static clientContext_t* AddClientContextToList( clientContext_t *pClientHead, clientContext_t *pClient)
|
||||||
|
{
|
||||||
|
printf("data client add \n");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&gAppDataSvrMutex);
|
||||||
|
//printf("data client add m\n");
|
||||||
|
if ( pClientHead != NULL )
|
||||||
|
{
|
||||||
|
pClient->p_next = pClientHead ;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
//printf("data client add e\n");
|
||||||
|
return pClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dataClientListPrint(void)
|
||||||
|
{
|
||||||
|
clientContext_t *pClient = pDataClientHead;
|
||||||
|
while ( pClient != NULL )
|
||||||
|
{
|
||||||
|
printf("data key:%d,fun:%d, fd:%d, %s\n",pClient->map.key,pClient->map.function,pClient->map.fd,pClient->map.fileName);
|
||||||
|
pClient = pClient->p_next;
|
||||||
|
}
|
||||||
|
//printf("list end\n");
|
||||||
|
//pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8 dataTransErrCodeSet(U32 port, U8 errCode)
|
||||||
|
{
|
||||||
|
DataErrCode_t *p;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&gDataErrCodeMutex);
|
||||||
|
if(pDataErrCode == NULL)
|
||||||
|
{
|
||||||
|
pDataErrCode = (DataErrCode_t *)malloc(sizeof(DataErrCode_t));
|
||||||
|
if(pDataErrCode == NULL)
|
||||||
|
{
|
||||||
|
goto ErrCodeSetFail;
|
||||||
|
}
|
||||||
|
memset(pDataErrCode, 0, sizeof(DataErrCode_t));
|
||||||
|
}
|
||||||
|
p = pDataErrCode;
|
||||||
|
while(p->pNext != NULL)
|
||||||
|
{
|
||||||
|
p = p->pNext;
|
||||||
|
}
|
||||||
|
p->pNext = (DataErrCode_t *)malloc(sizeof(DataErrCode_t));
|
||||||
|
if(p->pNext == NULL)
|
||||||
|
{
|
||||||
|
goto ErrCodeSetFail;
|
||||||
|
}
|
||||||
|
memset(p->pNext, 0, sizeof(DataErrCode_t));
|
||||||
|
|
||||||
|
p = p->pNext;
|
||||||
|
p->port = port;
|
||||||
|
p->errCode = errCode;
|
||||||
|
|
||||||
|
#if 1 /*debug*/
|
||||||
|
p = pDataErrCode;
|
||||||
|
while(p->pNext != NULL )
|
||||||
|
{
|
||||||
|
p = p->pNext;
|
||||||
|
if(p->errCode != CMD_SUCCESS)
|
||||||
|
{
|
||||||
|
printf("port:%d,errCode:%d\n",p->port,p->errCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
pthread_mutex_unlock(&gDataErrCodeMutex);
|
||||||
|
/*forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_ERROR_CODE, port);*/
|
||||||
|
return SUCCESS;
|
||||||
|
|
||||||
|
ErrCodeSetFail:
|
||||||
|
pthread_mutex_unlock(&gDataErrCodeMutex);
|
||||||
|
|
||||||
|
/*forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_ERROR_CODE, port);*/
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
U8 dataTransErrCodeGet(U32 port)
|
||||||
|
{
|
||||||
|
DataErrCode_t *p,*q;
|
||||||
|
if(pDataErrCode == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
pthread_mutex_lock(&gDataErrCodeMutex);
|
||||||
|
p = pDataErrCode;
|
||||||
|
while(p->pNext != NULL)
|
||||||
|
{
|
||||||
|
q = p;
|
||||||
|
p = p->pNext;
|
||||||
|
if(p->port == port)
|
||||||
|
{
|
||||||
|
q->pNext = p->pNext;
|
||||||
|
free(p);
|
||||||
|
pthread_mutex_unlock(&gDataErrCodeMutex);
|
||||||
|
return p->errCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if DBG_LOG /*debug*/
|
||||||
|
p = pDataErrCode;
|
||||||
|
while(p->pNext != NULL)
|
||||||
|
{
|
||||||
|
p = p->pNext;
|
||||||
|
printf("port:%d,errCode:%d",p->port,p->errCode);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
pthread_mutex_unlock(&gDataErrCodeMutex);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sf_DataMapClear(clientContext_t *pClient)
|
||||||
|
{
|
||||||
|
//pClient->map.key = 0;
|
||||||
|
// printf("pClient.map:%d,socket:%d\n",pClient->map.fd,pClient->socket);
|
||||||
|
if(pClient->map.fd)
|
||||||
|
close(pClient->map.fd);
|
||||||
|
|
||||||
|
pClient->map.fd = 0;
|
||||||
|
pClient->map.fileName[0] = 0;
|
||||||
|
pClient->map.function = 3;//idle
|
||||||
|
pClient->map.count = 0;
|
||||||
|
pClient->map.fileSize = 0;
|
||||||
|
pClient->map.transferSize = 0;
|
||||||
|
pClient->map.seek = 0;
|
||||||
|
//printf("sf_DataMapClear e\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
U8 sf_DataMapSet(U32 key, U8 function, S8 *fileName, U32 FileSize)
|
||||||
|
{
|
||||||
|
clientContext_t *pClient = pDataClientHead;
|
||||||
|
U32 err;
|
||||||
|
U32 i = 0;
|
||||||
|
|
||||||
|
printf("[sf_DataMapSet],key:%d,fileName:%s\n",key,fileName);
|
||||||
|
|
||||||
|
if(fileName == NULL)
|
||||||
|
return CMD_ERR;
|
||||||
|
|
||||||
|
if(pClient == NULL)
|
||||||
|
{
|
||||||
|
return DATA_CMD_8855_NO_CONNECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = pthread_mutex_lock(&gAppDataSvrMutex);
|
||||||
|
if(err != SUCCESS)
|
||||||
|
{
|
||||||
|
printf("Map set error!\n");
|
||||||
|
return DATA_CMD_ADD_TO_FLOW_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(pClient != NULL)
|
||||||
|
{
|
||||||
|
// printf("socket=%d,key=%d,function=%d,name=%s\n",pClient->socket,pClient->map.key,pClient->map.function,pClient->map.fileName);
|
||||||
|
#ifndef __x86_64__
|
||||||
|
if(pClient->map.key == key)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if((pClient->map.function == 1 || pClient->map.function == 2) && (function))
|
||||||
|
{
|
||||||
|
printf("[ERROR]file data is still transfer!\n");
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return DATA_CMD_PORT_IS_USED;
|
||||||
|
}
|
||||||
|
pClient->map.function = function;
|
||||||
|
if(function)
|
||||||
|
{
|
||||||
|
memcpy((char *)&pClient->map.fileName[0], (char *)fileName,strlen((char *)fileName));
|
||||||
|
// printf("map.fileName:%s,filename:%s,len:%d\n",pClient->map.fileName,fileName,strlen((char *)fileName));
|
||||||
|
// pClient->map.fileName[strlen(fileName)+1]=0;
|
||||||
|
pClient->map.fileSize = FileSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//sf_DataMapClear(pClient);
|
||||||
|
usleep(50*1000);
|
||||||
|
while(pClient->map.function != 3)
|
||||||
|
{
|
||||||
|
usleep(20*1000);
|
||||||
|
i++;
|
||||||
|
printf("function2=%d\n",pClient->map.function);
|
||||||
|
if(i >= 50)
|
||||||
|
{
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return DATA_CMD_PORT_IS_USED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
pClient = pClient->p_next;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&gAppDataSvrMutex);
|
||||||
|
return DATA_CMD_NO_THIS_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0//forbuild
|
||||||
|
void thread_destroy(TX_THREAD *pthread)
|
||||||
|
{
|
||||||
|
/*terminate and delete thread*/
|
||||||
|
if (sp5kOsThreadTerminate(pthread) !=0)
|
||||||
|
{
|
||||||
|
HOST_ASSERT(0);/**/
|
||||||
|
}
|
||||||
|
if (sp5kOsThreadDelete(pthread) !=0)
|
||||||
|
{
|
||||||
|
HOST_ASSERT(0);/**/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *sf_DataSvrTransferThread(void *addr)
|
||||||
|
{
|
||||||
|
S32 nbytes=0,nErr;
|
||||||
|
S32 ret =0 ,writedsize=0;
|
||||||
|
S32 readSize;
|
||||||
|
//fd_set rdfds, wrfds, errfds;
|
||||||
|
static U32 oldTime,CurrTime,countByte;
|
||||||
|
//pthread_t *pthread;
|
||||||
|
U32 sendSizeTemp = 0;
|
||||||
|
//U32 i = 0;;
|
||||||
|
/*U8 tmpbuf[100];*/
|
||||||
|
printf("new data thread = %p\n",addr);
|
||||||
|
if(addr == 0)
|
||||||
|
{
|
||||||
|
sleep(3);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
clientContext_t *pClient = (clientContext_t *)addr ;
|
||||||
|
//pthread = (pthread_t *)(&pClient->pthread);
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
nbytes = recv(pClient->socket, pClient->szBuffer, PACKET_MAX_LEN,0);
|
||||||
|
if( nbytes < 0 )
|
||||||
|
{
|
||||||
|
// printf("[Error][sf_DataSvrTransferThread]receive: %d\n", nbytes );
|
||||||
|
// if (FD_ISSET(pClient->socket, &errfds))
|
||||||
|
{
|
||||||
|
nErr = errno;//getSocketError(pClient->socket);
|
||||||
|
//printf("[Error][sf_DataSvrTransferThread] Error: %d,socket:%d.\n",nErr,pClient->socket );
|
||||||
|
if(nErr != 11)//EAGAIN/EINTR
|
||||||
|
{
|
||||||
|
printf("Socket:%d, errno: %d,key:%d,fd:%d\n",pClient->socket,errno,pClient->map.key,pClient->map.fd );
|
||||||
|
perror("Error:");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
|
||||||
|
pClient = DeleteClientContext(&pDataClientHead,pClient);
|
||||||
|
if ( pClient == NULL )
|
||||||
|
{
|
||||||
|
//pDataClientHead = NULL ;
|
||||||
|
}
|
||||||
|
dataClientListPrint();
|
||||||
|
printf("[Error][thread_destroy] end\n");
|
||||||
|
//forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_THREAD_DEL, pthread);
|
||||||
|
pthread_exit(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//usleep(10*1000);
|
||||||
|
}
|
||||||
|
else if(nbytes == 0)
|
||||||
|
{
|
||||||
|
printf("client close socket:%d, key:%d, errno: %d.\n",pClient->socket,pClient->map.key , errno );
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
pClient = DeleteClientContext(&pDataClientHead,pClient);
|
||||||
|
dataClientListPrint();
|
||||||
|
//sf_set_wifi_status(SF_WIFI_OK);
|
||||||
|
//printf("destroy thread\n");
|
||||||
|
pthread_exit(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(pClient->map.function != 3)
|
||||||
|
{
|
||||||
|
printf("function=%d,name=%s\n",pClient->map.function,pClient->map.fileName);
|
||||||
|
//printf("socket=%d,key=%d,C_port=%d\n",pClient->socket,pClient->map.key,ntohs(pClient->ClientAddr.sin_port));
|
||||||
|
}
|
||||||
|
//pClient->map.fileName[47]=0;
|
||||||
|
//stprintf(tmpbuf,"function=%d,name=%s,port=%d\n",pClient->map.function,pClient->map.fileName,ntohs(pClient->ClientAddr.sin_port));
|
||||||
|
//send(pClient->socket, tmpbuf, 100);
|
||||||
|
if(pClient->map.function == 0 || poweroff_mode) //stop
|
||||||
|
{
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
if(poweroff_mode)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pClient->map.function == 1) //upload
|
||||||
|
{
|
||||||
|
app_poweroff_time_clear();/*reset power off count time*/
|
||||||
|
if(pClient->map.fd == 0)
|
||||||
|
{
|
||||||
|
pClient->map.fileName[strlen((char *)(pClient->map.fileName))+1]=0;
|
||||||
|
|
||||||
|
if(pClient->map.fileName[0] != '\0')
|
||||||
|
{
|
||||||
|
pClient->map.fd = open((char *)pClient->map.fileName, O_RDWR|O_CREAT,0);
|
||||||
|
if(pClient->map.fd == 0)
|
||||||
|
{
|
||||||
|
//creat file failed.
|
||||||
|
printf("fd=0\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
dataTransErrCodeSet(pClient->map.key, DATA_UP_CREAT_FILE_FAIL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//pClient->map.fileSize = sp5kFsFileSizeGet(pClient->map.fd);
|
||||||
|
//pClient->map.transferSize = 0;
|
||||||
|
printf("data filesize=%d\n",pClient->map.fileSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("err\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
dataTransErrCodeSet(pClient->map.key, DATA_UP_NO_FILE_NAME);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
if(nbytes <= 0)
|
||||||
|
nbytes = 0;
|
||||||
|
CurrTime = times(NULL)/100;
|
||||||
|
if(oldTime == 0)
|
||||||
|
{
|
||||||
|
oldTime = times(NULL)/100;
|
||||||
|
}
|
||||||
|
else if(oldTime != CurrTime)
|
||||||
|
{
|
||||||
|
countByte += nbytes;
|
||||||
|
printf("receive speed=% 3dKB/s, %d\n",countByte/1024,countByte);
|
||||||
|
countByte = 0;
|
||||||
|
oldTime = CurrTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
countByte += nbytes;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(nbytes <= 0)
|
||||||
|
{
|
||||||
|
pClient->map.count++;
|
||||||
|
/*printf(">");*/
|
||||||
|
usleep(25*1000); /* ms */
|
||||||
|
if(pClient->map.count > 200)
|
||||||
|
{
|
||||||
|
printf("receive time out\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
dataTransErrCodeSet(pClient->map.key, DATA_UP_TIME_OUT);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pClient->map.count = 0;
|
||||||
|
}
|
||||||
|
//printf("fd=%d,nbytes=%d\n",pClient->map.fd, nbytes);
|
||||||
|
ret = write(pClient->map.fd, pClient->szBuffer, nbytes);
|
||||||
|
if(ret <= 0)
|
||||||
|
{
|
||||||
|
printf("wirte error ! ret=%d\n",ret);
|
||||||
|
usleep(25*1000); /* ms */
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
dataTransErrCodeSet(pClient->map.key, DATA_UP_WRITE_FILE_ERR);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pClient->map.transferSize += ret;
|
||||||
|
if(pClient->map.transferSize >= pClient->map.fileSize)
|
||||||
|
{
|
||||||
|
printf("receive success! Tsize=%d,Fsize=%d\n", pClient->map.transferSize,pClient->map.fileSize);
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
dataTransErrCodeSet(pClient->map.key, CMD_SUCCESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pClient->map.function == 2) //download
|
||||||
|
{
|
||||||
|
app_poweroff_time_clear();/*reset power off count time*/
|
||||||
|
// printf("[read],fd:%x,pClient->map.fileName:%s,len:%d\n",pClient->map.fd,pClient->map.fileName,strlen((char*)(pClient->map.fileName)));
|
||||||
|
if(pClient->map.fd <= 0)
|
||||||
|
{
|
||||||
|
if(pClient->map.fileName[0] != '\0')
|
||||||
|
{
|
||||||
|
pClient->map.fd = open((char *)pClient->map.fileName, O_RDWR,0/*borbuild FS_OPEN_RDONLY*/);
|
||||||
|
// printf("pClient->map.fd = %d\n",pClient->map.fd);
|
||||||
|
if(pClient->map.fd == -1)
|
||||||
|
{
|
||||||
|
//open file failed.
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_OPEN_FILE_FAIL);//remove,because APP not use
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pClient->map.fileSize = sp5kFsFileSizeGet((char *)pClient->map.fileName);
|
||||||
|
pClient->map.transferSize = 0;
|
||||||
|
// printf("filesize=%d\n",pClient->map.fileSize);
|
||||||
|
//i = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("ssdfeef\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_NO_FILE_NAME);//remove,because APP not use
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readSize = read(pClient->map.fd, pClient->szBuffer, PACKET_MAX_LEN);
|
||||||
|
// printf("[read],fd:%x,readsize:%d,len:%x\n",pClient->map.fd,readSize,PACKET_MAX_LEN);
|
||||||
|
if(readSize > 0)
|
||||||
|
{
|
||||||
|
//printf("data socket send->%d\n",pClient->socket);
|
||||||
|
//i=0;
|
||||||
|
sendSizeTemp = 0;
|
||||||
|
while(readSize > 0)
|
||||||
|
{
|
||||||
|
writedsize = send(pClient->socket, (void *)&pClient->szBuffer[sendSizeTemp], readSize, 0);
|
||||||
|
// printf("R=%d, W=%d\n", readSize, writedsize);
|
||||||
|
if(writedsize <= 0)
|
||||||
|
{
|
||||||
|
perror("Send Failed!\n");
|
||||||
|
pClient->map.count++;
|
||||||
|
usleep(pClient->map.count*50*1000); /* ms */
|
||||||
|
//printf("c");
|
||||||
|
//sp5kFsFileSeek(pClient->map.fd, -readSize, SP5K_FS_SEEK_CUR);
|
||||||
|
}
|
||||||
|
else if(writedsize > readSize)
|
||||||
|
{
|
||||||
|
printf("[ERROR] send size > read size\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_SEND_DATA_ERR);//remove,because APP not use
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pClient->map.transferSize += writedsize;
|
||||||
|
//printf("send=%d\n",pClient->map.transferSize);
|
||||||
|
pClient->map.count = 0;
|
||||||
|
if(writedsize < readSize)
|
||||||
|
{
|
||||||
|
readSize -= writedsize;
|
||||||
|
sendSizeTemp += writedsize;
|
||||||
|
printf("send left =%d,index:%d\n",readSize,sendSizeTemp);
|
||||||
|
usleep(30*1000); /* ms */
|
||||||
|
//sp5kFsFileSeek(pClient->map.fd, ret-readSize, SP5K_FS_SEEK_CUR); seek function has a bug
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
readSize = 0;
|
||||||
|
sendSizeTemp = 0;
|
||||||
|
|
||||||
|
if(pClient->map.transferSize >= pClient->map.fileSize)
|
||||||
|
{
|
||||||
|
// printf("send success!\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, CMD_SUCCESS);//remove,because APP not use
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if 1
|
||||||
|
if(writedsize <= 0)
|
||||||
|
writedsize = 0;
|
||||||
|
CurrTime = times(NULL)/100;
|
||||||
|
if(oldTime == 0)
|
||||||
|
{
|
||||||
|
oldTime = times(NULL)/100;
|
||||||
|
}
|
||||||
|
else if(oldTime != CurrTime)
|
||||||
|
{
|
||||||
|
countByte += writedsize;
|
||||||
|
printf("send speed=% 3dKB/s, %d\n",countByte/1024,countByte);
|
||||||
|
countByte = 0;
|
||||||
|
oldTime = CurrTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
countByte += writedsize;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if((pClient->map.count >= 10))
|
||||||
|
{
|
||||||
|
readSize = 0;
|
||||||
|
sendSizeTemp = 0;
|
||||||
|
//send time out.
|
||||||
|
//printf("time out == 30\n");
|
||||||
|
printf("timeOut sendSize=%d,filesize=%d\n",pClient->map.transferSize,pClient->map.fileSize);
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_TIME_OUT);//remove,because APP not use
|
||||||
|
}
|
||||||
|
usleep(25*1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("[ERROR] read size = 0\n");
|
||||||
|
sf_DataMapClear(pClient);
|
||||||
|
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_READ_FILE_ERR);//remove,because APP not use
|
||||||
|
}
|
||||||
|
|
||||||
|
//ros_thread_sleep(25); /* ms */
|
||||||
|
|
||||||
|
}
|
||||||
|
usleep(5*1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void *sf_DataSvrThread(void *p)
|
||||||
|
{
|
||||||
|
//S32 s32Ret;
|
||||||
|
S32 nbytes=0;
|
||||||
|
//U32 i;
|
||||||
|
//U32 readSize, sendSize;
|
||||||
|
S32 new_fd,on;//nErr,, count
|
||||||
|
S32 appDataSvrSocket;
|
||||||
|
U32 clientLength;
|
||||||
|
//U8 tempbuf[21] = {0};
|
||||||
|
//U8 key = 0;
|
||||||
|
|
||||||
|
S32 ret = 0 ;
|
||||||
|
struct sockaddr_in cliAddr;
|
||||||
|
fd_set rdfds, wrfds, errfds;
|
||||||
|
clientContext_t *pClient = NULL;
|
||||||
|
S32 maxSD = -1;
|
||||||
|
struct timeval timeout = {60, 0};
|
||||||
|
|
||||||
|
//socklen_t len;
|
||||||
|
//struct sockaddr_in addr;
|
||||||
|
struct sockaddr_in addrSend;
|
||||||
|
|
||||||
|
//printf("[sf_DataSvrThread]\n");
|
||||||
|
|
||||||
|
appDataSvrSocket = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (appDataSvrSocket < 0)
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread] socket,ret:%x\n",appDataSvrSocket);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
printf("[sf_DataSvrThread],gAppSvrSocket:%d\n",appDataSvrSocket);
|
||||||
|
|
||||||
|
pthread_mutex_init(&gAppDataSvrMutex,NULL);
|
||||||
|
pthread_mutex_init(&gDataErrCodeMutex,NULL);
|
||||||
|
|
||||||
|
// strcpy(gAppSvrIp,sIp);
|
||||||
|
//gAppSvrPort = nPort;
|
||||||
|
on = 1 ;
|
||||||
|
ret = setsockopt(appDataSvrSocket, IPPROTO_TCP, SO_KEEPALIVE, &on, sizeof(on));
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread] setsockopt,ret:%x\n",ret);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = setsockopt( appDataSvrSocket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof( on ) );
|
||||||
|
if( ret < 0 )
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread] SO_REUSEADDR,ret:%d \n",ret);
|
||||||
|
//return -1;
|
||||||
|
}
|
||||||
|
int opt = 512*1024;
|
||||||
|
setsockopt(appDataSvrSocket,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));
|
||||||
|
|
||||||
|
memset(&addrSend, 0, sizeof(addrSend));
|
||||||
|
// addrSend.sin_addr.s_addr = inet_addr(gAppLocalIp);
|
||||||
|
addrSend.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
addrSend.sin_port = htons(DATA_SVR_PORT);
|
||||||
|
addrSend.sin_family = AF_INET;
|
||||||
|
ret = bind(appDataSvrSocket, (struct sockaddr*)&addrSend, sizeof(addrSend));
|
||||||
|
if( ret < 0 )
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread] bind:%d \n",ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret =listen(appDataSvrSocket, LISTEN_PARAM);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread]listen:%d\n",ret);
|
||||||
|
close(appDataSvrSocket);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
clientLength = sizeof(cliAddr);
|
||||||
|
maxSD = appDataSvrSocket;
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
fdInitSets(pDataClientHead,appDataSvrSocket,&rdfds,&wrfds,&errfds);
|
||||||
|
//printf("sec = %ld, usec = %ld\n", timeout.tv_sec, timeout.tv_usec);
|
||||||
|
timeout.tv_sec = 60;
|
||||||
|
timeout.tv_usec = 0;
|
||||||
|
//printf("w");
|
||||||
|
ret = select(maxSD+1, &rdfds, NULL, &errfds, &timeout) ;
|
||||||
|
//printf("2sec = %ld, usec = %ld\n", timeout.tv_sec, timeout.tv_usec);
|
||||||
|
//printf("data select ret=%d, appDataSvrSocket=%d\n",ret, appDataSvrSocket);
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
//U32 flags = fcntl(appDataSvrSocket, F_GETFL, 0); //获取文件的flags值。
|
||||||
|
//fcntl(appDataSvrSocket, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式;
|
||||||
|
//printf("[sf_DataSvrThread]select,rdfds:%d,errfds:%d\n",rdfds,errfds);
|
||||||
|
//if (FD_ISSET(appDataSvrSocket, &rdfds))
|
||||||
|
{
|
||||||
|
printf("data accept wait\n");
|
||||||
|
new_fd = accept(appDataSvrSocket, (struct sockaddr *) &cliAddr, &clientLength);
|
||||||
|
if (new_fd < 0)
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread]accept:%d\n",new_fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\n\n[Port:8855]new data channel socket:%d --------oliver\n", new_fd);
|
||||||
|
printf("data channel.IP:%s, Port:%d\n\n\n", inet_ntoa(cliAddr.sin_addr), htons(cliAddr.sin_port));
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(SF_SUCCESS != sf_is_ip_in_list(inet_ntoa(cliAddr.sin_addr)))
|
||||||
|
{
|
||||||
|
LOGD("Already device connected ,Pls Wait!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//sf_set_wifi_status(SF_WIFI_CON);
|
||||||
|
//memdump((void *)&cliAddr, sizeof(cliAddr));
|
||||||
|
ret = 1 ;
|
||||||
|
//ioctlsocket(new_fd,FIONBIO,&ret); /* set/clear non-blocking i/o */
|
||||||
|
U32 flags = fcntl(new_fd, F_GETFL, 0); //获取文件的flags值。
|
||||||
|
fcntl(new_fd, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式;
|
||||||
|
|
||||||
|
int opt = 512*1024;
|
||||||
|
setsockopt(new_fd,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));
|
||||||
|
|
||||||
|
pClient = (clientContext_t *) malloc(sizeof(clientContext_t));
|
||||||
|
memset(pClient, 0, sizeof(clientContext_t));
|
||||||
|
pClient->socket = new_fd ;
|
||||||
|
pClient->map.key = ntohs(cliAddr.sin_port);
|
||||||
|
memcpy((void *)&pClient->ClientAddr, (void *)&cliAddr, sizeof(cliAddr));
|
||||||
|
pDataClientHead = AddClientContextToList(pDataClientHead,pClient);
|
||||||
|
if ( maxSD < pClient->socket )
|
||||||
|
maxSD = pClient->socket ;
|
||||||
|
|
||||||
|
dataClientListPrint();
|
||||||
|
//printf("thread create s\n");
|
||||||
|
/*s32Ret = */pthread_create(&pClient->pthread, NULL, sf_DataSvrTransferThread, pClient);
|
||||||
|
//printf("data server thread create:%d\n", s32Ret);
|
||||||
|
fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ret == 0)
|
||||||
|
{
|
||||||
|
/*usleep(1*1000); ms */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("[Error][sf_DataSvrThread]nbytes %d,lwip_close\n", nbytes );
|
||||||
|
pClient = pDataClientHead ;
|
||||||
|
while (pClient != NULL)
|
||||||
|
{
|
||||||
|
fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
|
||||||
|
pClient = DeleteClientContext(&pDataClientHead,pClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
close(appDataSvrSocket);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
S32 sf_DataSvrInit(void)
|
||||||
|
{
|
||||||
|
S32 s32Ret;
|
||||||
|
|
||||||
|
s32Ret = pthread_create(&gAppDataSvrThreadId, NULL, sf_DataSvrThread, NULL);
|
||||||
|
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
444
code/application/source/sf_app/code/source/wifi/sf_getapinfo.c
Normal file
444
code/application/source/sf_app/code/source/wifi/sf_getapinfo.c
Normal file
|
@ -0,0 +1,444 @@
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <linux/netlink.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#include <netlink/genl/genl.h>
|
||||||
|
#include <netlink/genl/family.h>
|
||||||
|
#include <netlink/genl/ctrl.h>
|
||||||
|
#include <netlink/msg.h>
|
||||||
|
#include <netlink/attr.h>
|
||||||
|
|
||||||
|
//#include "nl80211.h"
|
||||||
|
//#include "iw.h"
|
||||||
|
//#include "sf_4g_app.h"
|
||||||
|
//#include "sf_syslib.h"
|
||||||
|
int iw_debug = 0;
|
||||||
|
static int (*registered_handler)(struct nl_msg *, void *);
|
||||||
|
static void *registered_handler_data;
|
||||||
|
|
||||||
|
void register_handler(int (*handler)(struct nl_msg *, void *), void *data)
|
||||||
|
{
|
||||||
|
registered_handler = handler;
|
||||||
|
registered_handler_data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
int valid_handler(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
if (registered_handler)
|
||||||
|
return registered_handler(msg, registered_handler_data);
|
||||||
|
|
||||||
|
return NL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err,
|
||||||
|
void *arg)
|
||||||
|
{
|
||||||
|
int *ret = arg;
|
||||||
|
*ret = err->error;
|
||||||
|
return NL_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ack_handler(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
int *ret = arg;
|
||||||
|
*ret = 0;
|
||||||
|
return NL_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct handler_args {
|
||||||
|
const char *group;
|
||||||
|
int id;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int no_seq_check(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
return NL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mac_addr_n2a(char *mac_addr, const unsigned char *arg)
|
||||||
|
{
|
||||||
|
int i, l;
|
||||||
|
|
||||||
|
l = 0;
|
||||||
|
for (i = 0; i < ETH_ALEN ; i++) {
|
||||||
|
if (i == 0) {
|
||||||
|
sprintf(mac_addr+l, "%02x", arg[i]);
|
||||||
|
l += 2;
|
||||||
|
} else {
|
||||||
|
sprintf(mac_addr+l, ":%02x", arg[i]);
|
||||||
|
l += 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int family_handler(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
struct handler_args *grp = arg;
|
||||||
|
struct nlattr *tb[CTRL_ATTR_MAX + 1];
|
||||||
|
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||||
|
struct nlattr *mcgrp;
|
||||||
|
int rem_mcgrp;
|
||||||
|
|
||||||
|
nla_parse(tb, CTRL_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
|
||||||
|
genlmsg_attrlen(gnlh, 0), NULL);
|
||||||
|
|
||||||
|
if (!tb[CTRL_ATTR_MCAST_GROUPS])
|
||||||
|
return NL_SKIP;
|
||||||
|
|
||||||
|
nla_for_each_nested(mcgrp, tb[CTRL_ATTR_MCAST_GROUPS], rem_mcgrp) {
|
||||||
|
struct nlattr *tb_mcgrp[CTRL_ATTR_MCAST_GRP_MAX + 1];
|
||||||
|
|
||||||
|
nla_parse(tb_mcgrp, CTRL_ATTR_MCAST_GRP_MAX,
|
||||||
|
nla_data(mcgrp), nla_len(mcgrp), NULL);
|
||||||
|
|
||||||
|
if (!tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME] ||
|
||||||
|
!tb_mcgrp[CTRL_ATTR_MCAST_GRP_ID])
|
||||||
|
continue;
|
||||||
|
if (strncmp(nla_data(tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME]),
|
||||||
|
grp->group, nla_len(tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME])))
|
||||||
|
continue;
|
||||||
|
grp->id = nla_get_u32(tb_mcgrp[CTRL_ATTR_MCAST_GRP_ID]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NL_SKIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nl_get_multicast_id(struct nl_sock *sock, const char *family, const char *group)
|
||||||
|
{
|
||||||
|
struct nl_msg *msg;
|
||||||
|
struct nl_cb *cb;
|
||||||
|
int ret, ctrlid;
|
||||||
|
struct handler_args grp = {
|
||||||
|
.group = group,
|
||||||
|
.id = -ENOENT,
|
||||||
|
};
|
||||||
|
|
||||||
|
msg = nlmsg_alloc();
|
||||||
|
if (!msg)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
cb = nl_cb_alloc(NL_CB_DEFAULT);
|
||||||
|
if (!cb) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto out_fail_cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctrlid = genl_ctrl_resolve(sock, "nlctrl");
|
||||||
|
|
||||||
|
genlmsg_put(msg, 0, 0, ctrlid, 0,
|
||||||
|
0, CTRL_CMD_GETFAMILY, 0);
|
||||||
|
|
||||||
|
ret = -ENOBUFS;
|
||||||
|
NLA_PUT_STRING(msg, CTRL_ATTR_FAMILY_NAME, family);
|
||||||
|
|
||||||
|
ret = nl_send_auto_complete(sock, msg);
|
||||||
|
if (ret < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
|
|
||||||
|
nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &ret);
|
||||||
|
nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &ret);
|
||||||
|
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, family_handler, &grp);
|
||||||
|
|
||||||
|
while (ret > 0)
|
||||||
|
nl_recvmsgs(sock, cb);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
ret = grp.id;
|
||||||
|
nla_put_failure:
|
||||||
|
out:
|
||||||
|
nl_cb_put(cb);
|
||||||
|
out_fail_cb:
|
||||||
|
nlmsg_free(msg);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int nl80211_init(struct nl80211_state *state)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
state->nl_sock = nl_socket_alloc();
|
||||||
|
if (!state->nl_sock) {
|
||||||
|
fprintf(stderr, "Failed to allocate netlink socket.\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (genl_connect(state->nl_sock)) {
|
||||||
|
fprintf(stderr, "Failed to connect to generic netlink.\n");
|
||||||
|
err = -ENOLINK;
|
||||||
|
goto out_handle_destroy;
|
||||||
|
}
|
||||||
|
|
||||||
|
nl_socket_set_buffer_size(state->nl_sock, 8192, 8192);
|
||||||
|
|
||||||
|
/* try to set NETLINK_EXT_ACK to 1, ignoring errors */
|
||||||
|
err = 1;
|
||||||
|
setsockopt(nl_socket_get_fd(state->nl_sock), SOL_NETLINK,
|
||||||
|
NETLINK_EXT_ACK, &err, sizeof(err));
|
||||||
|
|
||||||
|
state->nl80211_id = genl_ctrl_resolve(state->nl_sock, "nl80211");
|
||||||
|
if (state->nl80211_id < 0) {
|
||||||
|
fprintf(stderr, "nl80211 not found.\n");
|
||||||
|
err = -ENOENT;
|
||||||
|
goto out_handle_destroy;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
out_handle_destroy:
|
||||||
|
nl_socket_free(state->nl_sock);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void nl80211_cleanup(struct nl80211_state *state)
|
||||||
|
{
|
||||||
|
nl_socket_free(state->nl_sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
int __prepare_listen_events(struct nl80211_state *state)
|
||||||
|
{
|
||||||
|
int mcid, ret;
|
||||||
|
|
||||||
|
/* Configuration multicast group */
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "config");
|
||||||
|
if (mcid < 0)
|
||||||
|
return mcid;
|
||||||
|
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* Scan multicast group */
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "scan");
|
||||||
|
if (mcid >= 0) {
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Regulatory multicast group */
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "regulatory");
|
||||||
|
if (mcid >= 0) {
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MLME multicast group */
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "mlme");
|
||||||
|
if (mcid >= 0) {
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "vendor");
|
||||||
|
if (mcid >= 0) {
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "nan");
|
||||||
|
if (mcid >= 0) {
|
||||||
|
ret = nl_socket_add_membership(state->nl_sock, mcid);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int connectNum=0;
|
||||||
|
static int print_event(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||||
|
struct nlattr *tb[NL80211_ATTR_MAX + 1], *nst;
|
||||||
|
struct print_event_args *args = arg;
|
||||||
|
char ifname[100];
|
||||||
|
char macbuf[6*3];
|
||||||
|
__u8 reg_type;
|
||||||
|
__u32 wiphy_idx = 0;
|
||||||
|
int rem_nst;
|
||||||
|
__u16 status;
|
||||||
|
|
||||||
|
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
|
||||||
|
genlmsg_attrlen(gnlh, 0), NULL);
|
||||||
|
|
||||||
|
if (tb[NL80211_ATTR_IFINDEX] && tb[NL80211_ATTR_WIPHY]) {
|
||||||
|
/* if_indextoname may fails on delete interface/wiphy event */
|
||||||
|
if (if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), ifname))
|
||||||
|
printf("%s (phy #%d): ", ifname, nla_get_u32(tb[NL80211_ATTR_WIPHY]));
|
||||||
|
else
|
||||||
|
printf("phy #%d: ", nla_get_u32(tb[NL80211_ATTR_WIPHY]));
|
||||||
|
} else if (tb[NL80211_ATTR_WDEV] && tb[NL80211_ATTR_WIPHY]) {
|
||||||
|
printf("wdev 0x%llx (phy #%d): ",
|
||||||
|
(unsigned long long)nla_get_u64(tb[NL80211_ATTR_WDEV]),
|
||||||
|
nla_get_u32(tb[NL80211_ATTR_WIPHY]));
|
||||||
|
} else if (tb[NL80211_ATTR_IFINDEX]) {
|
||||||
|
if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), ifname);
|
||||||
|
printf("%s: ", ifname);
|
||||||
|
} else if (tb[NL80211_ATTR_WDEV]) {
|
||||||
|
printf("wdev 0x%llx: ", (unsigned long long)nla_get_u64(tb[NL80211_ATTR_WDEV]));
|
||||||
|
} else if (tb[NL80211_ATTR_WIPHY]) {
|
||||||
|
printf("phy #%d: ", nla_get_u32(tb[NL80211_ATTR_WIPHY]));
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (gnlh->cmd) {
|
||||||
|
case NL80211_CMD_NEW_STATION:
|
||||||
|
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
||||||
|
printf("new station %s\n", macbuf);
|
||||||
|
connectNum++;
|
||||||
|
if(connectNum == 1)
|
||||||
|
{
|
||||||
|
//sf_app_msg_data_snd(SY_MSG_WIFI_CONNECT,(unsigned char*)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case NL80211_CMD_DEL_STATION:
|
||||||
|
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
||||||
|
printf("del station %s\n", macbuf);
|
||||||
|
connectNum--;
|
||||||
|
if(connectNum < 0)
|
||||||
|
connectNum = 0;
|
||||||
|
|
||||||
|
if(connectNum == 0)
|
||||||
|
{
|
||||||
|
//sf_app_msg_data_snd(SY_MSG_WIFI_DISCONNECT,(unsigned char*)NULL);
|
||||||
|
//sf_rtsp_msg_data_snd(1,(unsigned char*)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("unknown event %d\n",
|
||||||
|
gnlh->cmd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(stdout);
|
||||||
|
return NL_SKIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct wait_event {
|
||||||
|
int n_cmds, n_prints;
|
||||||
|
const __u32 *cmds;
|
||||||
|
const __u32 *prints;
|
||||||
|
__u32 cmd;
|
||||||
|
struct print_event_args *pargs;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int wait_event(struct nl_msg *msg, void *arg)
|
||||||
|
{
|
||||||
|
struct wait_event *wait = arg;
|
||||||
|
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (wait->pargs) {
|
||||||
|
for (i = 0; i < wait->n_prints; i++) {
|
||||||
|
if (gnlh->cmd == wait->prints[i])
|
||||||
|
print_event(msg, wait->pargs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < wait->n_cmds; i++) {
|
||||||
|
if (gnlh->cmd == wait->cmds[i])
|
||||||
|
wait->cmd = gnlh->cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NL_SKIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
__u32 __do_listen_events(struct nl80211_state *state,
|
||||||
|
const int n_waits, const __u32 *waits,
|
||||||
|
const int n_prints, const __u32 *prints,
|
||||||
|
struct print_event_args *args)
|
||||||
|
{
|
||||||
|
struct nl_cb *cb = nl_cb_alloc(iw_debug ? NL_CB_DEBUG : NL_CB_DEFAULT);
|
||||||
|
struct wait_event wait_ev;
|
||||||
|
|
||||||
|
if (!cb) {
|
||||||
|
fprintf(stderr, "failed to allocate netlink callbacks\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no sequence checking for multicast messages */
|
||||||
|
nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
|
||||||
|
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, NULL);
|
||||||
|
|
||||||
|
if (n_waits && waits) {
|
||||||
|
wait_ev.cmds = waits;
|
||||||
|
wait_ev.n_cmds = n_waits;
|
||||||
|
wait_ev.prints = prints;
|
||||||
|
wait_ev.n_prints = n_prints;
|
||||||
|
wait_ev.pargs = args;
|
||||||
|
register_handler(wait_event, &wait_ev);
|
||||||
|
} else
|
||||||
|
register_handler(print_event, args);
|
||||||
|
|
||||||
|
wait_ev.cmd = 0;
|
||||||
|
|
||||||
|
while (!wait_ev.cmd)
|
||||||
|
nl_recvmsgs(state->nl_sock, cb);
|
||||||
|
|
||||||
|
nl_cb_put(cb);
|
||||||
|
|
||||||
|
return wait_ev.cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
__u32 listen_events1(struct nl80211_state *state)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = __prepare_listen_events(state);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return __do_listen_events(state, 0, NULL, 0, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* apinfoThread(void* args)
|
||||||
|
{
|
||||||
|
/*struct nl80211_state nlstate;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
|
||||||
|
err = nl80211_init(&nlstate);
|
||||||
|
if (err)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
listen_events1(&nlstate);
|
||||||
|
nl80211_cleanup(&nlstate);
|
||||||
|
*/
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct nl80211_state nlstate;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
|
||||||
|
err = nl80211_init(&nlstate);
|
||||||
|
if (err)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
listen_events1(&nlstate);
|
||||||
|
nl80211_cleanup(&nlstate);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
312
code/application/source/sf_app/code/source/wifi/sf_svr_send.c
Normal file
312
code/application/source/sf_app/code/source/wifi/sf_svr_send.c
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
|
||||||
|
*
|
||||||
|
* This software is copyrighted by and is the property of SiFar
|
||||||
|
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
|
||||||
|
* This software may only be used in accordance with the corresponding
|
||||||
|
* license agreement. Any unauthorized use, duplication, distribution,
|
||||||
|
* or disclosure of this software is expressly forbidden.
|
||||||
|
*
|
||||||
|
* This Copyright notice MUST not be removed or modified without prior
|
||||||
|
* written consent of SiFar Technology, Inc..
|
||||||
|
*
|
||||||
|
* SiFar Technology, Inc. reserves the right to modify this software without notice.
|
||||||
|
*
|
||||||
|
* Author: Oliver
|
||||||
|
* Ver: 1.0.0 2018/11/14 New thread used to send file
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <unistd.h> //usleep()
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/stat.h>//stat()
|
||||||
|
#include <semaphore.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "sf_wifi_svr.h"
|
||||||
|
#include "sf_data_transfer.h"
|
||||||
|
#include "sf_svr_send.h"
|
||||||
|
//#include "sf_para.h"
|
||||||
|
|
||||||
|
//#define TIME_MAP_PATH "/app/sd/timemap"
|
||||||
|
#define TIME_MAP_PATH "."
|
||||||
|
|
||||||
|
pthread_t gAppSvrSendThreadId;
|
||||||
|
sem_t gAppSvrSendQueue;
|
||||||
|
UINT8 StopSendFile = 0;
|
||||||
|
extern UINT8 SendingFile;
|
||||||
|
|
||||||
|
extern UINT8 QUICKLY_CAPTURE_ON;
|
||||||
|
extern UINT16 CurrentWifiCmd;
|
||||||
|
extern sysMsg_t sendMsg;
|
||||||
|
|
||||||
|
void appSvrStopSendFile(void)
|
||||||
|
{
|
||||||
|
printf("stop send file\n");
|
||||||
|
if(SendingFile == 1)
|
||||||
|
{
|
||||||
|
StopSendFile = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *find_file_name(const char *name)
|
||||||
|
{
|
||||||
|
char *name_start = NULL;
|
||||||
|
int sep = '/';
|
||||||
|
if (NULL == name)
|
||||||
|
{
|
||||||
|
printf("the path name is NULL\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
name_start = strrchr(name, sep);
|
||||||
|
|
||||||
|
return (NULL == name_start)?(char *)name:(name_start + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8 appSvrSendFile(UINT32 socket, const UINT8 *fname)
|
||||||
|
{
|
||||||
|
SINT32 fd = 0;
|
||||||
|
UINT32 length = 0;
|
||||||
|
UINT32 count = 0;
|
||||||
|
UINT32 i = 0;
|
||||||
|
UINT32 offset = 0;
|
||||||
|
SINT32 size = 0;
|
||||||
|
SINT32 sendsize = 0;
|
||||||
|
UINT32 fileTotalSize = 0;
|
||||||
|
UINT8 *buff = NULL;
|
||||||
|
UINT8 ret = SUCCESS;
|
||||||
|
UINT32 temp;
|
||||||
|
UINT8 tempName[32] = {0};
|
||||||
|
struct tm mtime = {0};//, atime = {0}, ctime = {0};
|
||||||
|
APP_SVR_PACKET_T msgParse;
|
||||||
|
|
||||||
|
printf("[SEND FILE oliver]file:%s\n", fname);
|
||||||
|
SendingFile = 1;
|
||||||
|
if((socket == 0) || (fname == NULL))
|
||||||
|
{
|
||||||
|
printf("appSvrSendFile param ERROR!\n");
|
||||||
|
ret = FAIL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buff = (UINT8 *)malloc(PACKET_MAX_LEN+1);
|
||||||
|
if(buff == NULL)
|
||||||
|
{
|
||||||
|
ret = FAIL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fd = open((char *)fname, O_RDONLY /*SP5K_FS_OPEN_RDONLY*/);
|
||||||
|
if(fd == -1)
|
||||||
|
{
|
||||||
|
printf("open file error: %s!", fname);
|
||||||
|
ret = FAIL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = sp5kFsFileSizeGet((char *)fname);
|
||||||
|
|
||||||
|
//struct stat statbuff;
|
||||||
|
//stat(fname, &statbuff);
|
||||||
|
//size = statbuff.st
|
||||||
|
//forbuild sp5kFsFileTimeGet(fname, &atime, &mtime, &ctime);
|
||||||
|
//sp5kFsFileAttrGet();
|
||||||
|
printf("sp5kFsFileSizeGet:%d\n",size);
|
||||||
|
/**********get file name and path***********/
|
||||||
|
strcpy((char *)tempName, (char *)fname);
|
||||||
|
length = strlen((char *)tempName);
|
||||||
|
for(i = 1; i <= length; i++)
|
||||||
|
{
|
||||||
|
if(tempName[length - i] == '/')
|
||||||
|
{
|
||||||
|
offset = length - i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tempName[offset] = 0;
|
||||||
|
offset += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("bufsize=%d,",PACKET_MAX_LEN);
|
||||||
|
|
||||||
|
/*******send file respons cmd********/
|
||||||
|
memset((void *)&msgParse, 0, sizeof(msgParse));
|
||||||
|
msgParse.magicNum = htons(MSG_PRE_FIX);
|
||||||
|
msgParse.msglen = htons(sizeof(MSG_DEV_FileTransfer_Infor_Rsp_T) + 2*sizeof(UINT16));
|
||||||
|
msgParse.cmd = htons(CurrentWifiCmd); /*ERROR RSP CMD*/
|
||||||
|
msgParse.rsp = htons(MSG_WIFI_2_APP);
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.cmdRet = ret;
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.fileSize = htonl(size);
|
||||||
|
|
||||||
|
strcpy((char *)msgParse.msgBuf.rctrlFileTransferInfo.fileName, (char *)tempName+offset);
|
||||||
|
strcpy((char *)msgParse.msgBuf.rctrlFileTransferInfo.filePath, (char *)tempName);
|
||||||
|
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.type = (tempName[offset+9] == 'J' ? 0 : 1);//!IS_FILETYPE_JPG();
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.year = htons(mtime.tm_year+1900);
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.month = mtime.tm_mon;
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.day = mtime.tm_mday;
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.hour = mtime.tm_hour;
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.minute = mtime.tm_min;
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.second = mtime.tm_sec;
|
||||||
|
|
||||||
|
msgParse.msgBuf.rctrlFileTransferInfo.suffix = htons(MSG_END_FIX);
|
||||||
|
/* add the magic + len total 2*2 bytes; */
|
||||||
|
temp = ntohs(msgParse.msglen);
|
||||||
|
printf("send file:");
|
||||||
|
//memdump((&msgParse), (temp + sizeof(UINT16)*2));
|
||||||
|
send( socket,(void *)(&msgParse), (temp + sizeof(UINT16)*2), 0);
|
||||||
|
//printf("send cmd = 0\n", htons(msgParse.cmd));
|
||||||
|
|
||||||
|
|
||||||
|
if(ret != SUCCESS)
|
||||||
|
{
|
||||||
|
printf("info error send fail!\n");
|
||||||
|
StopSendFile = 0;
|
||||||
|
SendingFile = 0;
|
||||||
|
free(buff);
|
||||||
|
buff = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
//send(socket, (void *)(buff), 24*2, 0);
|
||||||
|
/************send file data*************/
|
||||||
|
i = 0;
|
||||||
|
length = 0;
|
||||||
|
fileTotalSize = size;
|
||||||
|
count = 0;
|
||||||
|
size = PACKET_MAX_LEN;
|
||||||
|
//static UINT8 dofirst=1;
|
||||||
|
while((length < fileTotalSize) && (!StopSendFile) && (count < 300) && size)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
|
||||||
|
memset(buff, 0, PACKET_MAX_LEN);
|
||||||
|
size = read(fd, buff, PACKET_MAX_LEN);
|
||||||
|
sendsize = send(socket, (void *)(buff), size, 0);
|
||||||
|
printf("writesize=%d,readsize=%d, i=%d-----",sendsize, size, i);
|
||||||
|
|
||||||
|
if(sendsize < 1)
|
||||||
|
{
|
||||||
|
printf("send error");
|
||||||
|
//forbuild sp5kFsFileSeek(fd, -size, SP5K_FS_SEEK_CUR);
|
||||||
|
usleep(50*1000);
|
||||||
|
count++;
|
||||||
|
sendsize = 0;
|
||||||
|
}
|
||||||
|
else if(sendsize < size)
|
||||||
|
{
|
||||||
|
//printf("seek=%d,i=%d-----\n",(SINT32)sendsize-(SINT32)size, i);
|
||||||
|
//forbuild sp5kFsFileSeek(fd, sendsize-size, SP5K_FS_SEEK_CUR);
|
||||||
|
usleep(25*1000);
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count = 0;
|
||||||
|
sendsize = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
length += sendsize;
|
||||||
|
//printf("length=%d, seek=%d", length,fsFileTell(fd));
|
||||||
|
|
||||||
|
usleep(30*1000);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
free(buff);
|
||||||
|
buff = NULL;
|
||||||
|
StopSendFile = 0;
|
||||||
|
SendingFile = 0;
|
||||||
|
|
||||||
|
//appTimeDelayMs(10000);
|
||||||
|
printf("fSize=%d,len=%d cnt=%d",fileTotalSize,length,count);
|
||||||
|
printf("send end,fSize=%d,len=%d\n",fileTotalSize,length);
|
||||||
|
#if 1
|
||||||
|
printf("count=%d,size=%d,stopflag=%d\n", count, size, StopSendFile);
|
||||||
|
if(length == fileTotalSize)
|
||||||
|
{
|
||||||
|
printf("send file SUCCESS\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("send file failed!\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void *appSvrSendThread(void *p)
|
||||||
|
{
|
||||||
|
//UINT32 ret = 0;
|
||||||
|
//sysMsg_t sendMsg;
|
||||||
|
UINT32 socket = 0;
|
||||||
|
//UINT8 fileName[32];
|
||||||
|
//SF_PDT_PARAM_CFG_S *puiPara = sf_UiParaGet();
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
sem_wait(&gAppSvrSendQueue);
|
||||||
|
|
||||||
|
if(sendMsg.cmd == SEND_THUMB)
|
||||||
|
{
|
||||||
|
printf("cmd: SEND_THUMB\n");
|
||||||
|
socket = sendMsg.param;
|
||||||
|
appSvrSendFile(socket, (UINT8 *)"D:\\DCIM\\100MEDIA\\DCAM0001.JPG");
|
||||||
|
}
|
||||||
|
else if(sendMsg.cmd == SEND_TIME_MAP)
|
||||||
|
{
|
||||||
|
printf("cmd: SEND_TIME_MAP\n");
|
||||||
|
socket = sendMsg.param;
|
||||||
|
#if 0
|
||||||
|
sprintf((char *)fileName, "%s/%04d%02d%02d.txt", TIME_MAP_PATH, puiPara->timeMapToday.year,
|
||||||
|
puiPara->timeMapToday.mon, puiPara->timeMapToday.day);
|
||||||
|
appSvrSendFile(socket, fileName);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if(sendMsg.cmd == SEND_FILE)
|
||||||
|
{
|
||||||
|
extern UINT8 gFileName[];
|
||||||
|
printf("cmd: SEND_FILE->%s\n",gFileName);
|
||||||
|
socket = sendMsg.param;
|
||||||
|
appSvrSendFile(socket, gFileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("cmd: send other\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SINT32 appSvrSendInit(void)
|
||||||
|
{
|
||||||
|
SINT32 s32Ret;
|
||||||
|
|
||||||
|
s32Ret = sem_init(&gAppSvrSendQueue, 0, 0);
|
||||||
|
if ( s32Ret != 0 /*ROS_SUCCESS*/)
|
||||||
|
{
|
||||||
|
printf("[appSvrSendInit]Line %d, ret=0x%x\n", __LINE__, s32Ret);
|
||||||
|
//HOST_ASSERT(0);
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32Ret = pthread_create(&gAppSvrSendThreadId, NULL, appSvrSendThread, NULL);
|
||||||
|
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
|
|
2601
code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c
Normal file
2601
code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -7,7 +7,7 @@
|
||||||
version-info = [00 01 00 01];
|
version-info = [00 01 00 01];
|
||||||
ae_expect_lum {
|
ae_expect_lum {
|
||||||
size = [b0 00 00 00];
|
size = [b0 00 00 00];
|
||||||
data = [3c 00 00 00 32 00 00 00 3d 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3d 00 00 00 41 00 00 00 46 00 00 00 4d 00 00 00 54 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
|
data = [3c 00 00 00 3c 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
|
||||||
};
|
};
|
||||||
ae_la_clamp {
|
ae_la_clamp {
|
||||||
size = [50 01 00 00];
|
size = [50 01 00 00];
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
};
|
};
|
||||||
ae_over_exposure {
|
ae_over_exposure {
|
||||||
size = [b0 01 00 00];
|
size = [b0 01 00 00];
|
||||||
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
|
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
|
||||||
};
|
};
|
||||||
ae_convergence {
|
ae_convergence {
|
||||||
size = [2c 00 00 00];
|
size = [2c 00 00 00];
|
||||||
|
@ -23,11 +23,11 @@
|
||||||
};
|
};
|
||||||
ae_curve_gen_movie {
|
ae_curve_gen_movie {
|
||||||
size = [10 01 00 00];
|
size = [10 01 00 00];
|
||||||
data = [f4 01 00 00 01 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 00 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00];
|
data = [f4 01 00 00 01 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 01 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00];
|
||||||
};
|
};
|
||||||
ae_meter_window {
|
ae_meter_window {
|
||||||
size = [00 01 00 00];
|
size = [00 01 00 00];
|
||||||
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
|
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
|
||||||
};
|
};
|
||||||
ae_lum_gamma {
|
ae_lum_gamma {
|
||||||
size = [82 00 00 00];
|
size = [82 00 00 00];
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
};
|
};
|
||||||
awb_target {
|
awb_target {
|
||||||
size = [24 00 00 00];
|
size = [24 00 00 00];
|
||||||
data = [60 03 00 00 f7 03 00 00 23 04 00 00 00 04 00 00 18 04 00 00 18 04 00 00 00 04 00 00 e8 03 00 00 e8 03 00 00];
|
data = [60 03 00 00 f7 03 00 00 23 04 00 00 00 04 00 00 18 04 00 00 1c 04 00 00 00 04 00 00 e8 03 00 00 e8 03 00 00];
|
||||||
};
|
};
|
||||||
awb_ct_info {
|
awb_ct_info {
|
||||||
size = [60 00 00 00];
|
size = [60 00 00 00];
|
||||||
|
|
File diff suppressed because one or more lines are too long
BIN
code/hdal/vendor/output/libvendor_ai2_pub.a
vendored
BIN
code/hdal/vendor/output/libvendor_ai2_pub.a
vendored
Binary file not shown.
BIN
code/hdal/vendor/output/libvendor_ai2_pub2.a
vendored
BIN
code/hdal/vendor/output/libvendor_ai2_pub2.a
vendored
Binary file not shown.
|
@ -22,5 +22,6 @@ void sf_set_night_led_flag(UINT8 flag);
|
||||||
UINT32 sf_battery_level_get(void);
|
UINT32 sf_battery_level_get(void);
|
||||||
void sf_view_osd_battery_draw(UINT8 bShow);
|
void sf_view_osd_battery_draw(UINT8 bShow);
|
||||||
UINT8 sf_battery_value_get(UINT8 nightMode);
|
UINT8 sf_battery_value_get(UINT8 nightMode);
|
||||||
|
UINT8 sf_battery_type_get(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1096,5 +1096,20 @@ UINT8 sf_battery_value_get(UINT8 nightMode)
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/*************************************************
|
||||||
|
Function: sf_battery_type_get
|
||||||
|
Description: Get battery type.
|
||||||
|
Input: N/A
|
||||||
|
Output: N/A
|
||||||
|
Return: value: battery type, 0:normal 1:LiPolymer
|
||||||
|
Others: N/A
|
||||||
|
*************************************************/
|
||||||
|
UINT8 sf_battery_type_get(void)
|
||||||
|
{
|
||||||
|
if(LiPolymerVoltageVal)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; Source Insight Project File List
|
; Source Insight Project File List
|
||||||
; Project Name: s530_app
|
; Project Name: s530_app
|
||||||
; Generated by Source Insight 4.00.0107 at 2023/4/25 17:47:48
|
; Generated by Source Insight 4.00.0107 at 2023/5/15 11:09:12
|
||||||
; Version=4.00.0107
|
; Version=4.00.0107
|
||||||
;
|
;
|
||||||
; Each line should contain either a file name, a wildcard, or a sub-directory name.
|
; Each line should contain either a file name, a wildcard, or a sub-directory name.
|
||||||
|
@ -569,6 +569,7 @@ application\source\sf_app\code\include\sf_commu_mcu.h
|
||||||
application\source\sf_app\code\include\sf_commu_mcu_reg.h
|
application\source\sf_app\code\include\sf_commu_mcu_reg.h
|
||||||
application\source\sf_app\code\include\sf_datahttp.h
|
application\source\sf_app\code\include\sf_datahttp.h
|
||||||
application\source\sf_app\code\include\sf_dataMng.h
|
application\source\sf_app\code\include\sf_dataMng.h
|
||||||
|
application\source\sf_app\code\include\sf_data_transfer.h
|
||||||
application\source\sf_app\code\include\sf_dbg.h
|
application\source\sf_app\code\include\sf_dbg.h
|
||||||
application\source\sf_app\code\include\sf_debug.h
|
application\source\sf_app\code\include\sf_debug.h
|
||||||
application\source\sf_app\code\include\sf_device.h
|
application\source\sf_app\code\include\sf_device.h
|
||||||
|
@ -577,7 +578,9 @@ application\source\sf_app\code\include\sf_dev_usb.h
|
||||||
application\source\sf_app\code\include\sf_eg91_gps.h
|
application\source\sf_app\code\include\sf_eg91_gps.h
|
||||||
application\source\sf_app\code\include\sf_eg91_server.h
|
application\source\sf_app\code\include\sf_eg91_server.h
|
||||||
application\source\sf_app\code\include\sf_eg91_sim.h
|
application\source\sf_app\code\include\sf_eg91_sim.h
|
||||||
|
application\source\sf_app\code\include\sf_file.h
|
||||||
application\source\sf_app\code\include\sf_fileMng.h
|
application\source\sf_app\code\include\sf_fileMng.h
|
||||||
|
application\source\sf_app\code\include\sf_ftp.h
|
||||||
application\source\sf_app\code\include\sf_hal_gpio.h
|
application\source\sf_app\code\include\sf_hal_gpio.h
|
||||||
application\source\sf_app\code\include\sf_hal_ttyusb.h
|
application\source\sf_app\code\include\sf_hal_ttyusb.h
|
||||||
application\source\sf_app\code\include\sf_http_server.h
|
application\source\sf_app\code\include\sf_http_server.h
|
||||||
|
@ -596,15 +599,21 @@ application\source\sf_app\code\include\sf_qrcode.h
|
||||||
application\source\sf_app\code\include\sf_qrutils.h
|
application\source\sf_app\code\include\sf_qrutils.h
|
||||||
application\source\sf_app\code\include\sf_service.h
|
application\source\sf_app\code\include\sf_service.h
|
||||||
application\source\sf_app\code\include\sf_storeMng.h
|
application\source\sf_app\code\include\sf_storeMng.h
|
||||||
|
application\source\sf_app\code\include\sf_svr_send.h
|
||||||
application\source\sf_app\code\include\sf_system.h
|
application\source\sf_app\code\include\sf_system.h
|
||||||
application\source\sf_app\code\include\sf_systemMng.h
|
application\source\sf_app\code\include\sf_systemMng.h
|
||||||
application\source\sf_app\code\include\sf_transdata1.h
|
application\source\sf_app\code\include\sf_transdata1.h
|
||||||
application\source\sf_app\code\include\sf_type.h
|
application\source\sf_app\code\include\sf_type.h
|
||||||
|
application\source\sf_app\code\include\sf_wifi_data_transfer.h
|
||||||
|
application\source\sf_app\code\include\sf_wifi_svr.h
|
||||||
|
application\source\sf_app\code\include\sf_wifi_svr_send.h
|
||||||
application\source\sf_app\code\include\sha256.h
|
application\source\sf_app\code\include\sha256.h
|
||||||
application\source\sf_app\code\include\split.h
|
application\source\sf_app\code\include\split.h
|
||||||
|
application\source\sf_app\code\source\4gMng\sf_4G_auto_operation.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_eg91_gps.c
|
application\source\sf_app\code\source\4gMng\sf_eg91_gps.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_eg91_server.c
|
application\source\sf_app\code\source\4gMng\sf_eg91_server.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_eg91_sim.c
|
application\source\sf_app\code\source\4gMng\sf_eg91_sim.c
|
||||||
|
application\source\sf_app\code\source\4gMng\sf_ftp.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_http_server.c
|
application\source\sf_app\code\source\4gMng\sf_http_server.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_module.c
|
application\source\sf_app\code\source\4gMng\sf_module.c
|
||||||
application\source\sf_app\code\source\4gMng\sf_opera_adapt.c
|
application\source\sf_app\code\source\4gMng\sf_opera_adapt.c
|
||||||
|
@ -626,6 +635,7 @@ application\source\sf_app\code\source\devMng\sf_dev_usb.c
|
||||||
application\source\sf_app\code\source\devMng\sf_keymng.c
|
application\source\sf_app\code\source\devMng\sf_keymng.c
|
||||||
application\source\sf_app\code\source\devMng\sf_ledmng.c
|
application\source\sf_app\code\source\devMng\sf_ledmng.c
|
||||||
application\source\sf_app\code\source\fileMng\cJSON.c
|
application\source\sf_app\code\source\fileMng\cJSON.c
|
||||||
|
application\source\sf_app\code\source\fileMng\sf_file.c
|
||||||
application\source\sf_app\code\source\fileMng\sf_fileMng.c
|
application\source\sf_app\code\source\fileMng\sf_fileMng.c
|
||||||
application\source\sf_app\code\source\gpio\sf_hal_gpio.c
|
application\source\sf_app\code\source\gpio\sf_hal_gpio.c
|
||||||
application\source\sf_app\code\source\logMng\sf_log.c
|
application\source\sf_app\code\source\logMng\sf_log.c
|
||||||
|
@ -657,6 +667,12 @@ application\source\sf_app\code\source\updataMng\sf_otamng.c
|
||||||
application\source\sf_app\code\source\utils\mbedtls.c
|
application\source\sf_app\code\source\utils\mbedtls.c
|
||||||
application\source\sf_app\code\source\utils\sf_aes.c
|
application\source\sf_app\code\source\utils\sf_aes.c
|
||||||
application\source\sf_app\code\source\utils\sf_qrutils.c
|
application\source\sf_app\code\source\utils\sf_qrutils.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_data_transfer.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_getapinfo.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_svr_send.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_wifi_data_transfer.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_wifi_svr.c
|
||||||
|
application\source\sf_app\code\source\wifi\sf_wifi_svr_send.c
|
||||||
application\source\sf_app\component\liveMng\inc\exports\aiot_authorize_api.h
|
application\source\sf_app\component\liveMng\inc\exports\aiot_authorize_api.h
|
||||||
application\source\sf_app\component\liveMng\inc\exports\iot_export_awss.h
|
application\source\sf_app\component\liveMng\inc\exports\iot_export_awss.h
|
||||||
application\source\sf_app\component\liveMng\inc\exports\iot_export_coap.h
|
application\source\sf_app\component\liveMng\inc\exports\iot_export_coap.h
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
2
rtos/code/.vscode/c_cpp_properties.json
vendored
2
rtos/code/.vscode/c_cpp_properties.json
vendored
|
@ -5,7 +5,7 @@
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${workspaceFolder}/**"
|
"${workspaceFolder}/**"
|
||||||
],
|
],
|
||||||
"defines": ["_MODEL_565_HUNTING_EVB_LINUX_4G_S530_","_EMBMEM_SPI_NOR_"],
|
"defines": ["_MODEL_565_HUNTING_EVB_LINUX_4G_S530_","_EMBMEM_SPI_NOR_","_UI_STYLE_LVGL_"],
|
||||||
"compilerPath": "/usr/bin/gcc",
|
"compilerPath": "/usr/bin/gcc",
|
||||||
"cStandard": "c11",
|
"cStandard": "c11",
|
||||||
"cppStandard": "gnu++14",
|
"cppStandard": "gnu++14",
|
||||||
|
|
5
rtos/code/.vscode/settings.json
vendored
Normal file
5
rtos/code/.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"uiappphoto_param.h": "c"
|
||||||
|
}
|
||||||
|
}
|
|
@ -169,10 +169,11 @@ static HD_RESULT flowpreview_mem_relayout(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
// config common pool (screennail image)
|
// config common pool (screennail image)
|
||||||
mem_cfg.pool_info[3].type = HD_COMMON_MEM_COMMON_POOL;
|
mem_cfg.pool_info[3].type = HD_COMMON_MEM_COMMON_POOL;
|
||||||
mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, HD_VIDEO_PXLFMT_YUV420);
|
//mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), HD_VIDEO_PXLFMT_YUV420);
|
||||||
mem_cfg.pool_info[3].blk_cnt = 1;
|
mem_cfg.pool_info[3].blk_cnt = 1;
|
||||||
mem_cfg.pool_info[3].ddr_id = DDR_ID0;
|
mem_cfg.pool_info[3].ddr_id = DDR_ID0;
|
||||||
// config common pool (thumbnail image)
|
// config common pool (thumbnail image)
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
#define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot"
|
#define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot"
|
||||||
#define POWERON_BOOT_REPORT ENABLE
|
#define POWERON_BOOT_REPORT ENABLE
|
||||||
#define POWERON_FAST_BOOT DISABLE
|
#define POWERON_FAST_BOOT DISABLE
|
||||||
#define POWERON_FAST_BOOT_MSG DISABLE // disable boot msg for fast boot, but hard to debug
|
#define POWERON_FAST_BOOT_MSG ENABLE//DISABLE // disable boot msg for fast boot, but hard to debug
|
||||||
#define POWERON_FAST_CPU2_BOOT DISABLE
|
#define POWERON_FAST_CPU2_BOOT DISABLE
|
||||||
#define POWERON_FAST_RECORD DISABLE
|
#define POWERON_FAST_RECORD DISABLE
|
||||||
#define POWERON_FAST_WIFI DISABLE //NOTE: need to enable POWERON_FAST_CPU2_BOOT too
|
#define POWERON_FAST_WIFI DISABLE //NOTE: need to enable POWERON_FAST_CPU2_BOOT too
|
||||||
|
@ -345,7 +345,7 @@
|
||||||
#define LCD2_INSERT_FUNCTION LCD2_FUNC //Auto Detect - LCD2 cable insert
|
#define LCD2_INSERT_FUNCTION LCD2_FUNC //Auto Detect - LCD2 cable insert
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DRAM_SIZE_64MB_DISP_OFF DISABLE
|
#define DRAM_SIZE_64MB_DISP_OFF ENABLE
|
||||||
|
|
||||||
#if (DRAM_SIZE_64MB_DISP_OFF==ENABLE)
|
#if (DRAM_SIZE_64MB_DISP_OFF==ENABLE)
|
||||||
#undef POWERONLOGO_FUNCTION
|
#undef POWERONLOGO_FUNCTION
|
||||||
|
@ -936,7 +936,7 @@
|
||||||
#define HUNTING_CAMERA_SYS_PARTITION_NAME sys
|
#define HUNTING_CAMERA_SYS_PARTITION_NAME sys
|
||||||
#define HUNTING_CAMERA_BOOT_LINUX ENABLE
|
#define HUNTING_CAMERA_BOOT_LINUX ENABLE
|
||||||
#define HUNTING_CAMERA_MCU ENABLE
|
#define HUNTING_CAMERA_MCU ENABLE
|
||||||
#define HUNTING_CAMERA_4G DISABLE
|
#define HUNTING_CAMERA_4G DISABLE//ENABLE
|
||||||
#define PHOTO_STAMP_ISP_STATUS DISABLE//ENABLE
|
#define PHOTO_STAMP_ISP_STATUS DISABLE//ENABLE
|
||||||
#define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE
|
#define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE
|
||||||
#define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE
|
#define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE
|
||||||
|
|
|
@ -102,7 +102,79 @@
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0};
|
static HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0};
|
||||||
|
#if 1
|
||||||
|
void Movie_CommPoolInit(void)
|
||||||
|
{
|
||||||
|
UINT32 id=0;
|
||||||
|
UINT32 vcap_buf_size = 0;
|
||||||
|
HD_VIDEO_PXLFMT vcap_fmt = HD_VIDEO_PXLFMT_RAW12;
|
||||||
|
|
||||||
|
// config common pool (cap)
|
||||||
|
for (id = 0; id < SENSOR_CAPS_COUNT; id++) {
|
||||||
|
System_GetSensorInfo(id, SENSOR_CAPOUT_FMT, &vcap_fmt);
|
||||||
|
if (HD_VIDEO_PXLFMT_CLASS(vcap_fmt) == HD_VIDEO_PXLFMT_CLASS_YUV) { // YUV
|
||||||
|
switch (id) {
|
||||||
|
case 0: //single sensor
|
||||||
|
vcap_buf_size = VDO_YUV_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt);
|
||||||
|
break;
|
||||||
|
case 1: // dual sensor
|
||||||
|
vcap_buf_size = VDO_YUV_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else { // RAW
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
vcap_buf_size = VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
vcap_buf_size = VDO_RAW_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if (MOVIE_DIRECT_FUNC == ENABLE)
|
||||||
|
if (id == 0) {
|
||||||
|
vcap_buf_size = 0;
|
||||||
|
}
|
||||||
|
#endif // (MOVIE_DIRECT_FUNC == ENABLE)
|
||||||
|
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
||||||
|
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() +
|
||||||
|
vcap_buf_size +
|
||||||
|
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
|
||||||
|
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
|
||||||
|
mem_cfg.pool_info[id].blk_cnt = 7;
|
||||||
|
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if (_BOARD_DRAM_SIZE_ > 0x04000000)
|
||||||
|
#if (SENSOR_CAPS_COUNT == 1)
|
||||||
|
// config common pool (clone)
|
||||||
|
id ++;
|
||||||
|
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
||||||
|
#if (MOVIE_DIS == DISABLE)
|
||||||
|
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
#else // (MOVIE_DIS == DISABLE)
|
||||||
|
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_DIS_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
#endif // (MOVIE_DIS == DISABLE)
|
||||||
|
#if (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_)||defined(_MODEL_565_CARDV_EVA51_))
|
||||||
|
#if (MOVIE_DIRECT_FUNC == ENABLE)
|
||||||
|
mem_cfg.pool_info[id].blk_cnt = 2;
|
||||||
|
#else // (MOVIE_DIRECT_FUNC == ENABLE)
|
||||||
|
mem_cfg.pool_info[id].blk_cnt = 4;
|
||||||
|
#endif // (MOVIE_DIRECT_FUNC == ENABLE)
|
||||||
|
#else // (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_))
|
||||||
|
mem_cfg.pool_info[id].blk_cnt = 6;
|
||||||
|
#endif // (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_))
|
||||||
|
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
|
#endif // (SENSOR_CAPS_COUNT == 1)
|
||||||
|
#endif // (_BOARD_DRAM_SIZE_ > 0x04000000)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
void Movie_CommPoolInit(void)
|
void Movie_CommPoolInit(void)
|
||||||
{
|
{
|
||||||
UINT32 id=0;
|
UINT32 id=0;
|
||||||
|
@ -161,7 +233,7 @@ void Movie_CommPoolInit(void)
|
||||||
vcap_buf_size +
|
vcap_buf_size +
|
||||||
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
|
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
|
||||||
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
|
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
|
||||||
mem_cfg.pool_info[id].blk_cnt = 2;
|
mem_cfg.pool_info[id].blk_cnt = 7;
|
||||||
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,6 +390,8 @@ void Movie_CommPoolInit(void)
|
||||||
|
|
||||||
ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg);
|
ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void Movie_CommPool_AI2_Init(void)
|
void Movie_CommPool_AI2_Init(void)
|
||||||
{
|
{
|
||||||
#if (ALG_FUNC_AI2 == ENABLE)
|
#if (ALG_FUNC_AI2 == ENABLE)
|
||||||
|
|
|
@ -445,6 +445,20 @@ static void MovieFast_SetRecInfoByUISetting(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void MovieFast_SetAq(HD_PATH_ID path_id, UINT8 ip_str)
|
||||||
|
{
|
||||||
|
HD_H26XENC_AQ aq_param = {0};
|
||||||
|
|
||||||
|
if(ip_str > 8)
|
||||||
|
ip_str = 8;
|
||||||
|
|
||||||
|
aq_param.enable = 1; // AQ enable. default: 0, range: 0~1 (0: disable, 1: enable)
|
||||||
|
aq_param.i_str = ip_str; // aq strength of I frame. default: 3, range: 1~8
|
||||||
|
aq_param.p_str = ip_str; // aq strength of P frame. default: 1, range: 1~8
|
||||||
|
aq_param.min_delta_qp = -8; // max delta qp of aq.
|
||||||
|
aq_param.max_delta_qp = 8; // min delta qp of aq.
|
||||||
|
hd_videoenc_set(path_id, HD_VIDEOENC_PARAM_OUT_AQ, &aq_param);
|
||||||
|
}
|
||||||
|
|
||||||
static void MovieFast_OnRecStart(void)
|
static void MovieFast_OnRecStart(void)
|
||||||
{
|
{
|
||||||
|
@ -503,6 +517,7 @@ static void MovieFast_OnRecStart(void)
|
||||||
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
|
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
|
||||||
|
|
||||||
MovieFast_SetRecParamByRecID(gMovie_Rec_Info[i].rec_id);
|
MovieFast_SetRecParamByRecID(gMovie_Rec_Info[i].rec_id);
|
||||||
|
MovieFast_SetAq(ImageApp_MovieMulti_GetVdoEncPort(gMovie_Rec_Info[i].rec_id), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clone_rec_mask & mask) {
|
if (clone_rec_mask & mask) {
|
||||||
|
@ -513,6 +528,7 @@ static void MovieFast_OnRecStart(void)
|
||||||
ImageApp_MovieMulti_SetParam(_CFG_CLONE_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
|
ImageApp_MovieMulti_SetParam(_CFG_CLONE_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
|
||||||
|
|
||||||
MovieFast_SetRecParamByRecID(gMovie_Clone_Info[i].rec_id);
|
MovieFast_SetRecParamByRecID(gMovie_Clone_Info[i].rec_id);
|
||||||
|
MovieFast_SetAq(ImageApp_MovieMulti_GetVdoEncPort(gMovie_Clone_Info[i].rec_id), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
|
@ -820,6 +836,13 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
|
||||||
#endif
|
#endif
|
||||||
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PRARM_FILEDB_MAX_MUM, 5000);
|
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PRARM_FILEDB_MAX_MUM, 5000);
|
||||||
|
|
||||||
|
|
||||||
|
MOVIEMULTI_IPL_SIZE_INFO ipl_size={{2560,1440},30};
|
||||||
|
|
||||||
|
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_USER_IMG_SIZE, (UINT32)&ipl_size);
|
||||||
|
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_FORCED_IMG_SIZE, MOVIE_IPL_SIZE_USER);
|
||||||
|
|
||||||
|
|
||||||
#if (ANR_FUNC == ENABLE)
|
#if (ANR_FUNC == ENABLE)
|
||||||
HD_AUDIOCAP_ANR audio_cfg_param = {0};
|
HD_AUDIOCAP_ANR audio_cfg_param = {0};
|
||||||
|
|
||||||
|
@ -859,7 +882,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MovieFast_InstallID();
|
MovieFast_InstallID();
|
||||||
vos_util_delay_ms(500);
|
vos_util_delay_ms(330);
|
||||||
//Set_AEMODE(1);
|
//Set_AEMODE(1);
|
||||||
//vos_util_delay_ms(500);
|
//vos_util_delay_ms(500);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "GxVideoFile.h"
|
#include "GxVideoFile.h"
|
||||||
#include "hdal.h"
|
#include "hdal.h"
|
||||||
|
|
||||||
#define MOVIE_ISP_LOG ENABLE
|
#define MOVIE_ISP_LOG DISABLE
|
||||||
|
|
||||||
#if (MOVIE_ISP_LOG == ENABLE)
|
#if (MOVIE_ISP_LOG == ENABLE)
|
||||||
#undef WATERLOGO_FUNCTION
|
#undef WATERLOGO_FUNCTION
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
#define JPG_BRC_INIT_Q 85
|
#define JPG_BRC_INIT_Q 85
|
||||||
#define JPG_BRC_RETRY_CNT 4
|
#define JPG_BRC_RETRY_CNT 4
|
||||||
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
|
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
|
||||||
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H/(2*JPG_COMERESSED_RATIO_8))
|
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/(2*JPG_COMERESSED_RATIO_8))
|
||||||
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
|
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
|
||||||
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
|
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
|
||||||
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)
|
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)
|
||||||
|
|
|
@ -364,11 +364,13 @@ static UINT32 PhotoExe_GetScreenNailSize(void)
|
||||||
UINT32 uiImageSize, ScreenNailSize;
|
UINT32 uiImageSize, ScreenNailSize;
|
||||||
UINT32 BitStreamSize;
|
UINT32 BitStreamSize;
|
||||||
|
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
||||||
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
//BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
||||||
|
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
|
||||||
} else {
|
} else {
|
||||||
BitStreamSize = 0;
|
BitStreamSize = 0;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +402,9 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id)
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
|
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
|
||||||
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
|
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
|
||||||
BufferSize.w = CFG_SCREENNAIL_W;
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
|
//BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
|
||||||
BufferSize.h = BufferSize.w * 3 / 4;
|
BufferSize.h = BufferSize.w * 3 / 4;
|
||||||
|
|
||||||
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
|
||||||
|
@ -459,9 +463,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id)
|
||||||
DevSize = GxVideo_GetDeviceSize(DOUT1);
|
DevSize = GxVideo_GetDeviceSize(DOUT1);
|
||||||
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
|
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
|
||||||
{
|
{
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
// fix bug: w/h size will be wrong if no VGA/3M resolution!
|
// fix bug: w/h size will be wrong if no VGA/3M resolution!
|
||||||
BufferSize.w = CFG_SCREENNAIL_W;
|
//BufferSize.w = CFG_SCREENNAIL_W;
|
||||||
BufferSize.h = CFG_SCREENNAIL_H;
|
//BufferSize.h = CFG_SCREENNAIL_H;
|
||||||
|
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
|
BufferSize.h = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
|
|
||||||
if (BufferSize.w > (UINT32)DevSize.w) {
|
if (BufferSize.w > (UINT32)DevSize.w) {
|
||||||
BufferSize.w = DevSize.w;
|
BufferSize.w = DevSize.w;
|
||||||
|
@ -1342,6 +1349,7 @@ void PhotoExe_CommPoolInit(void)
|
||||||
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
|
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
|
||||||
HD_RESULT hd_ret = HD_OK;
|
HD_RESULT hd_ret = HD_OK;
|
||||||
USIZE DispDevSize = {0};
|
USIZE DispDevSize = {0};
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
|
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
|
||||||
if (hd_ret != HD_OK) {
|
if (hd_ret != HD_OK) {
|
||||||
|
@ -1435,7 +1443,8 @@ void PhotoExe_CommPoolInit(void)
|
||||||
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
id ++;
|
id ++;
|
||||||
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
|
||||||
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
|
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), pxl_fmt);
|
||||||
|
//g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
|
||||||
g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
|
g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
|
||||||
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
|
||||||
|
|
||||||
|
@ -3877,11 +3886,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
|
||||||
|
|
||||||
case PHOTO_ENC_JPG_SCREENNAIL:
|
case PHOTO_ENC_JPG_SCREENNAIL:
|
||||||
{
|
{
|
||||||
info->enc_path_id = venc_path_id;
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
|
||||||
|
|
||||||
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
info->enc_path_id = venc_path_id;
|
||||||
bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
//info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
||||||
|
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
||||||
|
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
|
||||||
|
dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
|
||||||
|
|
||||||
|
//bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
||||||
|
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4644,11 +4658,14 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
|
||||||
VF_GFX_SCALE vf_gfx_scale = {0};
|
VF_GFX_SCALE vf_gfx_scale = {0};
|
||||||
URECT dest_win = {0};
|
URECT dest_win = {0};
|
||||||
USIZE src_size = {0}, dest_size = {0};
|
USIZE src_size = {0}, dest_size = {0};
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
src_size.w = video_frame_in->dim.w;
|
src_size.w = video_frame_in->dim.w;
|
||||||
src_size.h = video_frame_in->dim.h;
|
src_size.h = video_frame_in->dim.h;
|
||||||
dest_size.w = CFG_SCREENNAIL_W;
|
dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
dest_size.h = CFG_SCREENNAIL_H;
|
dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
|
//dest_size.w = CFG_SCREENNAIL_W;
|
||||||
|
//dest_size.h = CFG_SCREENNAIL_H;
|
||||||
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
||||||
|
|
||||||
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
@ -5124,9 +5141,11 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Screennail & Thumbnail Encode
|
* Screennail & Thumbnail Encode
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
/* screennail encode */
|
/* screennail encode */
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
|
||||||
|
//PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
||||||
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
||||||
|
|
||||||
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
||||||
|
|
|
@ -308,8 +308,10 @@ void UiDateImprint_InitBuff(void)
|
||||||
}
|
}
|
||||||
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
|
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
|
||||||
pInfo->MemSize = 0x80000;
|
pInfo->MemSize = 0x80000;
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont);
|
UiDateImprint_GetStampFont(sf_get_screen_nail_width(puiPara->SendPicSize),(char**)&pFont);
|
||||||
|
//UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont);
|
||||||
|
|
||||||
#if defined(_UI_STYLE_LVGL_)
|
#if defined(_UI_STYLE_LVGL_)
|
||||||
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());
|
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());
|
||||||
|
|
|
@ -189,8 +189,11 @@ static HD_RESULT set_enc_cfg(void)
|
||||||
HD_VIDEOENC_PATH_CONFIG video_enc_path_config = {0};
|
HD_VIDEOENC_PATH_CONFIG video_enc_path_config = {0};
|
||||||
HD_RESULT hd_ret;
|
HD_RESULT hd_ret;
|
||||||
UINT32 u32W, u32H;
|
UINT32 u32W, u32H;
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
UINT32 ThumbTargetBytes = THUMBNAIL_TARGETBYTERATE;
|
UINT32 ThumbTargetBytes = THUMBNAIL_TARGETBYTERATE;
|
||||||
UINT32 ScrTargetBytes = SCREENNAIL_TARGETBYTERATE;
|
//UINT32 ScrTargetBytes = SCREENNAIL_TARGETBYTERATE;
|
||||||
|
UINT32 ScrTargetBytes = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8));
|
||||||
|
|
||||||
UINT32 PriTargetBytes = PhotoFast_GetExpectSize_RhoBRCrtl(UI_GetData(FL_PHOTO_SIZE), TRUE);
|
UINT32 PriTargetBytes = PhotoFast_GetExpectSize_RhoBRCrtl(UI_GetData(FL_PHOTO_SIZE), TRUE);
|
||||||
UINT32 PriTargetUBoundBytes = PRIMARY_TARGETBYTERATE_UBOUND(PriTargetBytes);
|
UINT32 PriTargetUBoundBytes = PRIMARY_TARGETBYTERATE_UBOUND(PriTargetBytes);
|
||||||
|
|
||||||
|
@ -213,12 +216,15 @@ static HD_RESULT set_enc_cfg(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
//screennail image
|
//screennail image
|
||||||
u32W = CFG_SCREENNAIL_W;
|
//u32W = CFG_SCREENNAIL_W;
|
||||||
u32H = CFG_SCREENNAIL_H;
|
//u32H = CFG_SCREENNAIL_H;
|
||||||
|
u32W = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
|
u32H = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
video_enc_path_config.max_mem.codec_type = HD_CODEC_TYPE_JPEG;
|
video_enc_path_config.max_mem.codec_type = HD_CODEC_TYPE_JPEG;
|
||||||
video_enc_path_config.max_mem.max_dim.w = u32W;
|
video_enc_path_config.max_mem.max_dim.w = u32W;
|
||||||
video_enc_path_config.max_mem.max_dim.h = u32H;
|
video_enc_path_config.max_mem.max_dim.h = u32H;
|
||||||
video_enc_path_config.max_mem.bitrate = SCREENNAIL_TARGETBYTERATE*8;
|
//video_enc_path_config.max_mem.bitrate = SCREENNAIL_TARGETBYTERATE*8;
|
||||||
|
video_enc_path_config.max_mem.bitrate = ScrTargetBytes*8;
|
||||||
video_enc_path_config.max_mem.enc_buf_ms = 1500;
|
video_enc_path_config.max_mem.enc_buf_ms = 1500;
|
||||||
video_enc_path_config.max_mem.svc_layer = HD_SVC_DISABLE;
|
video_enc_path_config.max_mem.svc_layer = HD_SVC_DISABLE;
|
||||||
video_enc_path_config.max_mem.ltr = FALSE;
|
video_enc_path_config.max_mem.ltr = FALSE;
|
||||||
|
@ -525,11 +531,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void)
|
||||||
UINT32 uiImageSize, ScreenNailSize;
|
UINT32 uiImageSize, ScreenNailSize;
|
||||||
UINT32 BitStreamSize;
|
UINT32 BitStreamSize;
|
||||||
|
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
||||||
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
//BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
||||||
|
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
|
||||||
} else {
|
} else {
|
||||||
BitStreamSize = 0;
|
BitStreamSize = 0;
|
||||||
}
|
}
|
||||||
|
@ -1053,7 +1061,8 @@ static ER PhotoFast_CaptureInit(void)
|
||||||
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_PRIMARY]);
|
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_PRIMARY]);
|
||||||
|
|
||||||
// allocate screennail captured resolution
|
// allocate screennail captured resolution
|
||||||
g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/2;
|
//g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/2;
|
||||||
|
g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = (sf_get_screen_nail_width(puiPara->SendPicSize))*(sf_get_screen_nail_height(puiPara->SendPicSize))*3/2;
|
||||||
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL]);
|
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL]);
|
||||||
|
|
||||||
// allocate thumbnail captured resolution
|
// allocate thumbnail captured resolution
|
||||||
|
@ -1186,8 +1195,10 @@ static void PhotoFast_CaptureStart(HD_VIDEO_FRAME *p_video_frame)
|
||||||
/* --- The flow of encoded screenail image. ---*/
|
/* --- The flow of encoded screenail image. ---*/
|
||||||
memset(&gfx_scale, 0, sizeof(VF_GFX_SCALE));
|
memset(&gfx_scale, 0, sizeof(VF_GFX_SCALE));
|
||||||
//scale to screennail resolution
|
//scale to screennail resolution
|
||||||
u32W = CFG_SCREENNAIL_W;
|
//u32W = CFG_SCREENNAIL_W;
|
||||||
u32H = CFG_SCREENNAIL_H;
|
//u32H = CFG_SCREENNAIL_H;
|
||||||
|
u32W = (sf_get_screen_nail_width(puiPara->SendPicSize));
|
||||||
|
u32H = (sf_get_screen_nail_height(puiPara->SendPicSize));
|
||||||
src_size.w = p_video_frame->dim.w;
|
src_size.w = p_video_frame->dim.w;
|
||||||
src_size.h = p_video_frame->dim.h;
|
src_size.h = p_video_frame->dim.h;
|
||||||
dest_size.w = u32W;
|
dest_size.w = u32W;
|
||||||
|
@ -1552,7 +1563,12 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg)
|
||||||
|
|
||||||
g_bFrmCnt = 0;
|
g_bFrmCnt = 0;
|
||||||
PhotoFast_PhotoClose();
|
PhotoFast_PhotoClose();
|
||||||
|
vos_perf_list_mark("sie_vd", __LINE__, 3);
|
||||||
|
if(sf_get_power_off_flag())
|
||||||
|
{
|
||||||
|
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN);
|
||||||
|
}
|
||||||
|
sf_file_thumb_cfg_sava();
|
||||||
switch (DrvGPIO_GetPhotoMovieModeFromMonitor()) {
|
switch (DrvGPIO_GetPhotoMovieModeFromMonitor()) {
|
||||||
case DX_HUNTING_MODE_PHOTO:
|
case DX_HUNTING_MODE_PHOTO:
|
||||||
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN);
|
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN);
|
||||||
|
@ -1561,7 +1577,6 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg)
|
||||||
case DX_HUNTING_MODE_PHOTO_MOVIE:
|
case DX_HUNTING_MODE_PHOTO_MOVIE:
|
||||||
case DX_HUNTING_MODE_CAMERA_PHOTO_MOVIE:
|
case DX_HUNTING_MODE_CAMERA_PHOTO_MOVIE:
|
||||||
|
|
||||||
vos_perf_list_mark("sie_vd", __LINE__, 3);
|
|
||||||
|
|
||||||
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_CHGMODE);
|
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_CHGMODE);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
#include "sys_fastboot.h"
|
#include "sys_fastboot.h"
|
||||||
#include "UIApp/ExifVendor.h"
|
#include "UIApp/ExifVendor.h"
|
||||||
#include "PhotoFastCapDateImprint.h"
|
#include "PhotoFastCapDateImprint.h"
|
||||||
|
#include "PhotoFast.h"
|
||||||
|
#include "sf_mcu.h"
|
||||||
#include <kwrap/cmdsys.h>
|
#include <kwrap/cmdsys.h>
|
||||||
|
|
||||||
#define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8)
|
#define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8)
|
||||||
#define VDO_RAW_BUFSIZE(w, h, pxlfmt) (ALIGN_CEIL_4((w) * HD_VIDEO_PXLFMT_BPP(pxlfmt) / 8) * (h))
|
|
||||||
|
|
||||||
/**********************************************************************************
|
/**********************************************************************************
|
||||||
* independent thumbnail
|
* independent thumbnail
|
||||||
|
@ -44,7 +45,6 @@
|
||||||
#define PHOTOFAST_SLICE_ENC_DUMP(fmtstr, args...)
|
#define PHOTOFAST_SLICE_ENC_DUMP(fmtstr, args...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT32 va;
|
UINT32 va;
|
||||||
|
@ -69,6 +69,7 @@ static HD_DIM PhotoFast_SliceEncode_Get_Encode_Max_Size(void);
|
||||||
static UINT32 PhotoFast_SliceEncode_Get_Encode_Max_Bitrate(HD_VIDEO_PXLFMT vproc_out_pxlfmt);
|
static UINT32 PhotoFast_SliceEncode_Get_Encode_Max_Bitrate(HD_VIDEO_PXLFMT vproc_out_pxlfmt);
|
||||||
static INT32 PhotoFast_SliceEncode_Get_Comm_Buffer(PhotoFast_MEM_Info* mem_info);
|
static INT32 PhotoFast_SliceEncode_Get_Comm_Buffer(PhotoFast_MEM_Info* mem_info);
|
||||||
static INT32 PhotoFast_SliceEncode_Release_Comm_Buffer(PhotoFast_MEM_Info mem_info);
|
static INT32 PhotoFast_SliceEncode_Release_Comm_Buffer(PhotoFast_MEM_Info mem_info);
|
||||||
|
static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in);
|
||||||
|
|
||||||
static UINT32 PhotoFast_PHY2VIRT(UINT32 pa_pos, UINT32 pa_start, UINT32 va)
|
static UINT32 PhotoFast_PHY2VIRT(UINT32 pa_pos, UINT32 pa_start, UINT32 va)
|
||||||
{
|
{
|
||||||
|
@ -117,8 +118,7 @@ static void PhotoFast_SliceEncode_Get_Src_Slice_Info(
|
||||||
INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
|
INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
|
||||||
{
|
{
|
||||||
HD_DIM dim = PhotoFast_SliceEncode_Get_Encode_Max_Size();
|
HD_DIM dim = PhotoFast_SliceEncode_Get_Encode_Max_Size();
|
||||||
UINT32 reserved_buffer_height = ((dim.h * 3) / 10);
|
UINT32 reserved_buffer = 0;
|
||||||
UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt);
|
|
||||||
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
|
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
|
||||||
|
|
||||||
return max_buffer_size;
|
return max_buffer_size;
|
||||||
|
@ -126,11 +126,6 @@ INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fm
|
||||||
|
|
||||||
static INT32 PhotoFast_SliceEncode_Get_Dst_Slice_Info(PhotoFast_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
|
static INT32 PhotoFast_SliceEncode_Get_Dst_Slice_Info(PhotoFast_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
|
||||||
{
|
{
|
||||||
if((cap_size_h % slice_num) != 0){
|
|
||||||
DBG_ERR("Height(%lu) should be %lu aligned!, please check photo size of PhotoMapping\r\n", cap_size_h, slice_num);
|
|
||||||
return E_SYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
info->width = cap_size_w;
|
info->width = cap_size_w;
|
||||||
info->height = cap_size_h;
|
info->height = cap_size_h;
|
||||||
info->slice_num = slice_num;
|
info->slice_num = slice_num;
|
||||||
|
@ -163,18 +158,10 @@ INT32 PhotoFast_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoFast_SliceSize_Info *in
|
||||||
slice_num = 1;
|
slice_num = 1;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
|
||||||
|
|
||||||
UINT32 lines = (buf_size / cap_size_w);
|
UINT32 lines = (buf_size / cap_size_w);
|
||||||
|
|
||||||
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
|
||||||
|
|
||||||
if(cap_size_h % slice_num){
|
|
||||||
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
|
|
||||||
cap_size_h -= (cap_size_h % slice_num);
|
|
||||||
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return PhotoFast_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
return PhotoFast_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
|
||||||
|
@ -375,11 +362,17 @@ INT32 PhotoFast_SliceEncode_Open(const HD_PATH_ID vproc_path_id)
|
||||||
|
|
||||||
case PHOTO_ENC_JPG_SCREENNAIL:
|
case PHOTO_ENC_JPG_SCREENNAIL:
|
||||||
{
|
{
|
||||||
info->enc_path_id = venc_path_id;
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
|
||||||
|
|
||||||
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
info->enc_path_id = venc_path_id;
|
||||||
bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
//info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
|
||||||
|
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
|
||||||
|
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
|
||||||
|
|
||||||
|
dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
|
||||||
|
|
||||||
|
//bitrate = SCREENNAIL_TARGETBYTERATE * 8;
|
||||||
|
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -499,6 +492,26 @@ static INT32 PhotoFast_SliceEncode_Alloc_Buffer(PhotoFast_MEM_Info* info, char*
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INT32 PhotoFast_SliceEncode_Alloc_Buffer_Retry(PhotoFast_MEM_Info* info, char* name, UINT8 timeout, UINT32 delay_ms)
|
||||||
|
{
|
||||||
|
INT32 ret;
|
||||||
|
UINT8 cnt = 0;
|
||||||
|
|
||||||
|
do{
|
||||||
|
if(cnt > 0){
|
||||||
|
DBG_WRN("retrying %u...\n", cnt);
|
||||||
|
vos_util_delay_ms(delay_ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = PhotoFast_SliceEncode_Alloc_Buffer(info, name);
|
||||||
|
if(ret == E_OK)
|
||||||
|
break;
|
||||||
|
|
||||||
|
} while(++cnt < timeout);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static INT32 PhotoFast_SliceEncode_Free_Buffer(PhotoFast_MEM_Info* info)
|
static INT32 PhotoFast_SliceEncode_Free_Buffer(PhotoFast_MEM_Info* info)
|
||||||
{
|
{
|
||||||
HD_RESULT ret;
|
HD_RESULT ret;
|
||||||
|
@ -557,7 +570,7 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice(
|
||||||
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
|
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
|
||||||
UINT32 offset;
|
UINT32 offset;
|
||||||
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
|
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
|
||||||
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height * dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height;
|
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? dst_slice_info.last_slice_height : dst_slice_info.slice_height;
|
||||||
|
|
||||||
/* dst img */
|
/* dst img */
|
||||||
|
|
||||||
|
@ -620,34 +633,23 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice(
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1//PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
|
#if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
|
||||||
INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame, UINT32 format)
|
static INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame)
|
||||||
//static INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame)
|
|
||||||
{
|
{
|
||||||
char fileName[128] = {0};
|
char fileName[128] = {0};
|
||||||
FST_FILE fp = NULL;
|
FST_FILE fp = NULL;
|
||||||
UINT32 size;
|
UINT32 size;
|
||||||
UINT32 va;
|
UINT32 va;
|
||||||
static UINT32 cnt = 0;
|
|
||||||
|
size = VDO_YUV_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
|
||||||
if(format == HD_VIDEO_PXLFMT_YUV420){
|
|
||||||
size = VDO_YUV_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
|
|
||||||
}else{
|
|
||||||
// video_frame.pxlfmt = HD_VIDEO_PXLFMT_RAW12;
|
|
||||||
size = VDO_RAW_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
va = (UINT32)hd_common_mem_mmap(HD_COMMON_MEM_MEM_TYPE_CACHE, video_frame.phy_addr[0], size);
|
va = (UINT32)hd_common_mem_mmap(HD_COMMON_MEM_MEM_TYPE_CACHE, video_frame.phy_addr[0], size);
|
||||||
if (va == 0) {
|
if (va == 0) {
|
||||||
DBG_ERR("hd_common_mem_mmap error!r\n");
|
DBG_ERR("hd_common_mem_mmap error!r\n");
|
||||||
return E_SYS;
|
return E_SYS;
|
||||||
}
|
}
|
||||||
if(format == HD_VIDEO_PXLFMT_YUV420){
|
|
||||||
sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx.dat", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
|
sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx.dat", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
|
||||||
}else{
|
|
||||||
sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx_%02d.raw", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt, cnt);
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
fp = FileSys_OpenFile(fileName, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
|
fp = FileSys_OpenFile(fileName, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
|
||||||
FileSys_WriteFile(fp, (UINT8*)va, &size, 0, NULL);
|
FileSys_WriteFile(fp, (UINT8*)va, &size, 0, NULL);
|
||||||
|
@ -802,11 +804,14 @@ static INT32 PhotoFast_SliceEncode_Scale_Screennail(
|
||||||
VF_GFX_SCALE vf_gfx_scale = {0};
|
VF_GFX_SCALE vf_gfx_scale = {0};
|
||||||
URECT dest_win = {0};
|
URECT dest_win = {0};
|
||||||
USIZE src_size = {0}, dest_size = {0};
|
USIZE src_size = {0}, dest_size = {0};
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
src_size.w = video_frame_in->dim.w;
|
src_size.w = video_frame_in->dim.w;
|
||||||
src_size.h = video_frame_in->dim.h;
|
src_size.h = video_frame_in->dim.h;
|
||||||
dest_size.w = CFG_SCREENNAIL_W;
|
dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
|
||||||
dest_size.h = CFG_SCREENNAIL_H;
|
dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
|
||||||
|
//dest_size.w = CFG_SCREENNAIL_W;
|
||||||
|
//dest_size.h = CFG_SCREENNAIL_H;
|
||||||
PhotoFast_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
PhotoFast_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
|
||||||
|
|
||||||
ret = PhotoFast_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
ret = PhotoFast_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
|
||||||
|
@ -819,6 +824,89 @@ static INT32 PhotoFast_SliceEncode_Scale_Screennail(
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
static INT32 PhotoFast_SliceEncode_Encode_Screennail_RC(HD_VIDEO_FRAME* video_frame_in)
|
||||||
|
{
|
||||||
|
static UINT32 quality = CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL;
|
||||||
|
INT8 direction = 0;
|
||||||
|
INT32 ret = E_OK;
|
||||||
|
PhotoFast_SliceEncode_Info* slice_encode_screennail_info = PhotoFast_SliceEncode_Get_Info(PHOTO_ENC_JPG_SCREENNAIL);
|
||||||
|
// UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
//((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
|
||||||
|
const UINT32 ubount = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
|
||||||
|
const UINT32 lbount = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
|
||||||
|
//const UINT32 ubount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
//const UINT32 lbount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) - (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
|
||||||
|
bool stop_flag = false;
|
||||||
|
|
||||||
|
do {
|
||||||
|
PHOTOFAST_SLICE_ENC_DUMP("screennail quality = %lu\n", quality);
|
||||||
|
|
||||||
|
ret = PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, quality);
|
||||||
|
if(ret != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = PhotoFast_SliceEncode_Encode_Screennail(video_frame_in);
|
||||||
|
if ( (ret != E_OK) && (ret != HD_ERR_NOMEM)){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((slice_encode_screennail_info->bs_buf_mem_info.used_size > ubount) || (ret == HD_ERR_NOMEM)){
|
||||||
|
|
||||||
|
if(direction == 1){
|
||||||
|
quality -= CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
stop_flag = true; /* current step > ubound and next prev step < lbound , stop rc flow (choose prev step)*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
direction = -1;
|
||||||
|
|
||||||
|
if(quality == 0){
|
||||||
|
DBG_WRN("lowest quality reached, stop rc flow!\n");
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
else if(quality > CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP)
|
||||||
|
quality -= CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
else{
|
||||||
|
quality = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(slice_encode_screennail_info->bs_buf_mem_info.used_size < lbount){
|
||||||
|
|
||||||
|
if(stop_flag){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(direction == -1){
|
||||||
|
DBG_WRN("back search due to low resolution of CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP(%lu), stop rc flow\n", CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
direction = 1;
|
||||||
|
|
||||||
|
if(quality >= 99){
|
||||||
|
quality = 99;
|
||||||
|
DBG_WRN("highest quality reached, stop rc flow!\n");
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
else if(quality < (99 - CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP))
|
||||||
|
quality += CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
|
||||||
|
else{
|
||||||
|
quality = 99;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while(1);
|
||||||
|
|
||||||
|
|
||||||
|
EXIT:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static INT32 PhotoFast_SliceEncode_Scale_Thumbnail(
|
static INT32 PhotoFast_SliceEncode_Scale_Thumbnail(
|
||||||
const HD_VIDEO_FRAME* video_frame_in,
|
const HD_VIDEO_FRAME* video_frame_in,
|
||||||
HD_VIDEO_FRAME* video_frame_out)
|
HD_VIDEO_FRAME* video_frame_out)
|
||||||
|
@ -861,13 +949,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video_frame_
|
||||||
|
|
||||||
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
|
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
|
||||||
|
|
||||||
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, -1); // -1 = blocking mode
|
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode
|
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
|
@ -882,7 +970,7 @@ static INT32 PhotoFast_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video_frame_
|
||||||
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
||||||
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
||||||
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
||||||
ret = HD_ERR_SYS;
|
ret = HD_ERR_NOMEM;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -927,13 +1015,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame
|
||||||
|
|
||||||
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
|
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
|
||||||
|
|
||||||
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, -1); // -1 = blocking mode
|
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode
|
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
|
@ -948,7 +1036,7 @@ static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame
|
||||||
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
|
||||||
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
|
||||||
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
|
||||||
ret = HD_ERR_SYS;
|
ret = HD_ERR_NOMEM;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -984,11 +1072,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void)
|
||||||
UINT32 uiImageSize, ScreenNailSize;
|
UINT32 uiImageSize, ScreenNailSize;
|
||||||
UINT32 BitStreamSize;
|
UINT32 BitStreamSize;
|
||||||
|
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
ScreenNailSize = CFG_SCREENNAIL_SIZE;
|
||||||
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
uiImageSize = UI_GetData(FL_PHOTO_SIZE);
|
||||||
if (uiImageSize < ScreenNailSize) {
|
if (uiImageSize < ScreenNailSize) {
|
||||||
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
//BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
|
||||||
|
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
|
||||||
} else {
|
} else {
|
||||||
BitStreamSize = 0;
|
BitStreamSize = 0;
|
||||||
}
|
}
|
||||||
|
@ -1100,13 +1190,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Primary(
|
||||||
vf_gfx_scale_param.dst_img.dim.w, vf_gfx_scale_param.dst_img.dim.h
|
vf_gfx_scale_param.dst_img.dim.w, vf_gfx_scale_param.dst_img.dim.h
|
||||||
);
|
);
|
||||||
|
|
||||||
ret = hd_videoenc_push_in_buf(enc_path_id, &vf_gfx_scale_param.dst_img, NULL, -1); // -1 = blocking mode
|
ret = hd_videoenc_push_in_buf(enc_path_id, &vf_gfx_scale_param.dst_img, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode
|
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
|
||||||
if (ret != HD_OK) {
|
if (ret != HD_OK) {
|
||||||
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
|
@ -1160,12 +1250,12 @@ static INT32 PhotoFast_SliceEncode_Encode_Primary(
|
||||||
if(quality_old == 1){
|
if(quality_old == 1){
|
||||||
restart = FALSE;
|
restart = FALSE;
|
||||||
}
|
}
|
||||||
else if(quality_old <= CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP){
|
else if(quality_old <= CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP){
|
||||||
quality_new = 1;
|
quality_new = 1;
|
||||||
restart = TRUE;
|
restart = TRUE;
|
||||||
}
|
}
|
||||||
else if(quality_old > CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP){
|
else if(quality_old > CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP){
|
||||||
quality_new = quality_old - CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP;
|
quality_new = quality_old - CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP;
|
||||||
restart = TRUE;
|
restart = TRUE;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -1261,7 +1351,7 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
|
||||||
// VOS_TICK tick_thumbnail_s, tick_thumbnail_e;
|
// VOS_TICK tick_thumbnail_s, tick_thumbnail_e;
|
||||||
// VOS_TICK tick_stamp_s, tick_stamp_e;
|
// VOS_TICK tick_stamp_s, tick_stamp_e;
|
||||||
// VOS_TICK tick_combine_s, tick_combine_e;
|
// VOS_TICK tick_combine_s, tick_combine_e;
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
vos_perf_mark(&tick_start);
|
vos_perf_mark(&tick_start);
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
|
@ -1287,7 +1377,7 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
|
||||||
|
|
||||||
#if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
|
#if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
|
||||||
|
|
||||||
PhotoFast_SliceEncode_Dump_Frame(video_frame, HD_VIDEO_PXLFMT_YUV420);
|
PhotoFast_SliceEncode_Dump_Frame(video_frame);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1311,7 +1401,15 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
|
||||||
|
|
||||||
|
//slice_encode_screennail_info->bs_buf_mem_info.blk_size = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
|
||||||
|
|
||||||
|
#else
|
||||||
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
|
||||||
|
#endif
|
||||||
|
|
||||||
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
@ -1367,14 +1465,24 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Screennail & Thumbnail Encode
|
* Screennail & Thumbnail Encode
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
/* screennail encode */
|
/* screennail encode */
|
||||||
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {(sf_get_screen_nail_width(puiPara->SendPicSize)), (sf_get_screen_nail_height(puiPara->SendPicSize))});
|
||||||
|
|
||||||
|
|
||||||
|
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
|
||||||
|
if(PhotoFast_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
#else
|
||||||
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
||||||
|
|
||||||
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if PHOTOFAST_SLICE_ENC_DBG_SCREENNAIL_JPG
|
#if PHOTOFAST_SLICE_ENC_DBG_SCREENNAIL_JPG
|
||||||
/* dump file */
|
/* dump file */
|
||||||
|
@ -1585,6 +1693,7 @@ INT32 PhotoFast_Sliceencode2_Enq_Frame(const HD_VIDEO_FRAME* video_frame)
|
||||||
{
|
{
|
||||||
PhotoFast_SliceEncode_Queue12_Param* queue_ele_out = NULL;
|
PhotoFast_SliceEncode_Queue12_Param* queue_ele_out = NULL;
|
||||||
queue_ele_out = (PhotoFast_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue12_Param));
|
queue_ele_out = (PhotoFast_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue12_Param));
|
||||||
|
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue12_Param));
|
||||||
queue_ele_out->frame = *video_frame;
|
queue_ele_out->frame = *video_frame;
|
||||||
|
|
||||||
while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1)
|
while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1)
|
||||||
|
@ -1686,7 +1795,14 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_DUMP("process frame\n");
|
if(queue_ele_in->comm.terminate){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
free(queue_ele_in);
|
||||||
|
queue_ele_in = NULL;
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("process frame %lu\n", param->cnt);
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Calculate src slice info
|
* Calculate src slice info
|
||||||
|
@ -1694,12 +1810,22 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
|
||||||
PhotoFast_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
|
PhotoFast_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
|
||||||
|
|
||||||
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoFast_GetScreenNailSize() ;
|
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoFast_GetScreenNailSize() ;
|
||||||
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){
|
if(PhotoFast_SliceEncode_Alloc_Buffer_Retry(
|
||||||
|
&slice_encode_primary_info->bs_buf_mem_info,
|
||||||
|
"slice_enc_primary",
|
||||||
|
10,
|
||||||
|
100
|
||||||
|
) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
|
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
|
||||||
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
|
if(PhotoFast_SliceEncode_Alloc_Buffer_Retry(
|
||||||
|
&slice_encode_screennail_info->bs_buf_mem_info,
|
||||||
|
"slice_enc_screennail",
|
||||||
|
10,
|
||||||
|
100
|
||||||
|
) != E_OK){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1734,14 +1860,23 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Screennail & Thumbnail Encode
|
* Screennail & Thumbnail Encode
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
|
||||||
/* screennail encode */
|
/* screennail encode */
|
||||||
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
|
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {(sf_get_screen_nail_width(puiPara->SendPicSize)), (sf_get_screen_nail_height(puiPara->SendPicSize))});
|
||||||
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
|
||||||
|
|
||||||
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
|
||||||
goto EXIT;
|
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
|
||||||
}
|
if(PhotoFast_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
|
||||||
|
|
||||||
|
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* thumbnail encode */
|
/* thumbnail encode */
|
||||||
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
|
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
|
||||||
|
@ -1790,6 +1925,7 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
|
||||||
|
|
||||||
/* enqueue jpg buffer info */
|
/* enqueue jpg buffer info */
|
||||||
queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param));
|
queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param));
|
||||||
|
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue23_Param));
|
||||||
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
|
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
|
||||||
queue_ele_out->jpg_combined_size = dst_jpg_file.size;
|
queue_ele_out->jpg_combined_size = dst_jpg_file.size;
|
||||||
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
|
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
|
||||||
|
@ -1836,7 +1972,14 @@ EXIT:
|
||||||
PhotoFast_SliceEncode_Free_Buffer(&exif_mem_info);
|
PhotoFast_SliceEncode_Free_Buffer(&exif_mem_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_DUMP("task2 job finished\n");
|
if(param->cnt < param->max_cnt){
|
||||||
|
queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param));
|
||||||
|
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue23_Param));
|
||||||
|
queue_ele_out->comm.terminate = 1;
|
||||||
|
lfqueue_enq(param->queue23, (void*) queue_ele_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("task2 job finished\n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1865,13 +2008,18 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(queue_ele_in->comm.terminate){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
free(queue_ele_in);
|
||||||
|
queue_ele_in = NULL;
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Output jpg file
|
* Output jpg file
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
extern INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId);
|
extern INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId);
|
||||||
|
|
||||||
vos_perf_list_mark("sie_vd", __LINE__, 4);
|
|
||||||
|
|
||||||
fastboot_wait_done(BOOT_INIT_FILESYSOK);
|
fastboot_wait_done(BOOT_INIT_FILESYSOK);
|
||||||
fastboot_wait_done(BOOT_INIT_FILENAMINGOK);
|
fastboot_wait_done(BOOT_INIT_FILENAMINGOK);
|
||||||
PhotoFast_WriteFile(
|
PhotoFast_WriteFile(
|
||||||
|
@ -1884,17 +2032,27 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
|
||||||
extern CHAR* PhotoFast_GetLastWriteFilePath(void);
|
extern CHAR* PhotoFast_GetLastWriteFilePath(void);
|
||||||
char* file_path = PhotoFast_GetLastWriteFilePath();
|
char* file_path = PhotoFast_GetLastWriteFilePath();
|
||||||
char tmp[256] = {'\0'};
|
char tmp[256] = {'\0'};
|
||||||
|
char tmp2[64] = {'\0'};
|
||||||
UINT32 length = strlen(file_path);
|
UINT32 length = strlen(file_path);
|
||||||
|
|
||||||
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
|
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
|
||||||
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
|
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
|
||||||
|
|
||||||
DBG_DUMP("PHOTO THUMB %s\n", tmp);
|
DBG_IND("PHOTO THUMB %s\n", tmp);
|
||||||
|
|
||||||
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
|
|
||||||
FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL);
|
FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL);
|
||||||
FileSys_CloseFile(fp);
|
FileSys_CloseFile(fp);
|
||||||
|
|
||||||
|
memset(tmp, '\0', sizeof(tmp));
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s%s", SF_SD_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
|
||||||
|
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
|
||||||
|
snprintf(tmp2, sizeof(tmp2), "%s", file_path + length - 12); /* DCF 8.3 naming rule */
|
||||||
|
snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG");
|
||||||
|
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2);
|
||||||
|
|
||||||
|
sf_file_thumb_cfg_fill(tmp, tmp2, queue_ele_in->jpg_thumb_size, SF_FILE_TYPE_PIC_SMALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check user bs buffer is freed */
|
/* check user bs buffer is freed */
|
||||||
|
@ -1919,7 +2077,11 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
|
||||||
|
|
||||||
EXIT:
|
EXIT:
|
||||||
|
|
||||||
DBG_DUMP("task3 job finished\n");
|
if(param->cnt < param->max_cnt){
|
||||||
|
DBG_ERR("force terminate\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_IND("task3 job finished\n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,13 @@
|
||||||
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 85
|
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 85
|
||||||
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
|
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
|
||||||
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
|
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
|
||||||
#define CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP 3
|
#define CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP 3
|
||||||
|
|
||||||
|
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL 1 /* rate control */
|
||||||
|
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND (SCREENNAIL_TARGETBYTERATE + (SCREENNAIL_TARGETBYTERATE * 20 / 100))
|
||||||
|
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_LBOUND (SCREENNAIL_TARGETBYTERATE - (SCREENNAIL_TARGETBYTERATE * 20 / 100))
|
||||||
|
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP 2
|
||||||
|
#define PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS 3000
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,6 +52,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = {
|
||||||
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
|
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
|
||||||
|
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = "FHD P60+VGA P30",
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
|
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
|
||||||
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
|
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
// Photo
|
// Photo
|
||||||
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
|
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
|
||||||
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_5M//PHOTO_MAX_CAP_SIZE
|
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_8M//PHOTO_MAX_CAP_SIZE
|
||||||
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE
|
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE
|
||||||
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
|
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
|
||||||
#define DEFAULT_SCENE SCENE_AUTO
|
#define DEFAULT_SCENE SCENE_AUTO
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
||||||
#else
|
#else
|
||||||
#if (MOVIE_AI_DEMO == DISABLE)
|
#if (MOVIE_AI_DEMO == DISABLE)
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30
|
||||||
#else
|
#else
|
||||||
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,8 +71,8 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30
|
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
|
||||||
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30
|
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
|
||||||
|
|
||||||
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
|
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
|
||||||
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL
|
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL
|
||||||
|
|
|
@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR ImgSize;/* 24M/12M/8M/5M */
|
CHAR ImgSize;/* 24M/12M/8M/5M */
|
||||||
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
|
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
|
||||||
CHAR Multishot;/*1P/2P/3P/4P/5P*/
|
CHAR Multishot;/*1P/2P/3P/4P/5P*/
|
||||||
|
CHAR MultiShotIntevel;/*0s/1s/2s*/
|
||||||
|
CHAR SendMulti;/*OFF/ON*/
|
||||||
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
|
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
|
||||||
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
|
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
|
||||||
CHAR VideoLenth;
|
CHAR VideoLenth;
|
||||||
|
@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR TimeSend3Switch;/*OFF/ON*/
|
CHAR TimeSend3Switch;/*OFF/ON*/
|
||||||
CHAR TimeSend4Switch;/*OFF/ON*/
|
CHAR TimeSend4Switch;/*OFF/ON*/
|
||||||
CHAR SendType;
|
CHAR SendType;
|
||||||
|
CHAR PicUpDailyReport;
|
||||||
///////////////////////
|
///////////////////////
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
CHAR SimIccid[21];
|
CHAR SimIccid[21];
|
||||||
CHAR ServiceProvider[64];
|
CHAR ServiceProvider[64];
|
||||||
UINT8 SimSignal;
|
UINT8 SimSignal;
|
||||||
UINT8 SimType;
|
UINT8 SimType;
|
||||||
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
|
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
|
||||||
UINT8 FtpIp[40];
|
UINT8 FtpIp[40];
|
||||||
UINT8 FtpPort[5];
|
UINT8 FtpPort[5];
|
||||||
|
@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo {
|
||||||
UINT8 FtpsPort[5];
|
UINT8 FtpsPort[5];
|
||||||
UINT8 FtpsUsr[40];
|
UINT8 FtpsUsr[40];
|
||||||
UINT8 FtpsPwd[20];
|
UINT8 FtpsPwd[20];
|
||||||
|
|
||||||
|
UINT8 WifiSwitch;
|
||||||
|
UINT8 WifiMode;
|
||||||
|
UINT8 WifiApPWD[16];
|
||||||
|
UINT8 Zoom;
|
||||||
//============Sifar==============///Payton
|
//============Sifar==============///Payton
|
||||||
|
|
||||||
} UIMenuStoreInfo;
|
} UIMenuStoreInfo;
|
||||||
|
@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE {
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
|
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
|
||||||
|
MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA
|
||||||
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
|
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
|
||||||
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
|
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
|
||||||
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60
|
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60
|
||||||
|
|
|
@ -164,9 +164,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 200 * 1024, 30, 26, 10, 40, 26, 10, 40, -40, 1, 8, 4},
|
{1, 4, 30, 200 * 1024, 30, 26, 10, 40, 26, 10, 40, -40, 1, 8, 4},
|
||||||
#else
|
#else
|
||||||
{1920, 1080, 30, 262144/* 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{1920, 1080, 30, 104857/*262144 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 262144/* 2M = 2*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 104857/*262144 2M = 2*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -194,9 +194,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
{1, 2, 36, 6, -6, 0},
|
{1, 2, 36, 6, -6, 0},
|
||||||
{1, 4, 30, 100 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
|
{1, 4, 30, 100 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
|
||||||
#else
|
#else
|
||||||
{1280, 720, 30, 131072 /* 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{1280, 720, 30, 58982/*131072 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 131072 /* 1M = 1*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 58982/*131072 1M = 1*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -218,9 +218,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 84 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
|
{1, 4, 30, 84 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
|
||||||
#else
|
#else
|
||||||
{848, 480, 30, 110100, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{848, 480, 30, 32768/*110100*/, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 110100, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
{1, 4, 30, 32768/*110100*/, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -254,9 +254,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 80 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4},
|
{1, 4, 30, 80 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4},
|
||||||
#else
|
#else
|
||||||
{ 640, 360, 30, 150 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
{ 640, 360, 30, 78643, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
|
||||||
{1, 3, 36, 8, -8, 0},
|
{1, 3, 36, 8, -8, 0},
|
||||||
{1, 4, 30, 150 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4},
|
{1, 4, 30, 78643, 15, 26, 10, 50, 26, 10, 50, 0, 1, 8, 4},
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -498,6 +498,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = {
|
||||||
{MOVIE_SIZE_1920x1080P60, 0, 0},
|
{MOVIE_SIZE_1920x1080P60, 0, 0},
|
||||||
{MOVIE_SIZE_640x360P30, 0, 0},
|
{MOVIE_SIZE_640x360P30, 0, 0},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = {
|
||||||
|
MOVIE_REC_TYPE_CLONE,
|
||||||
|
{MOVIE_SIZE_1920x1080P30, 0, 0},
|
||||||
|
{MOVIE_SIZE_640x360P30, 0, 0},
|
||||||
|
},
|
||||||
|
|
||||||
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
|
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
|
||||||
MOVIE_REC_TYPE_CLONE,
|
MOVIE_REC_TYPE_CLONE,
|
||||||
|
|
27
rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c
Executable file → Normal file
27
rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c
Executable file → Normal file
|
@ -48,6 +48,18 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
|
||||||
{1920, 1080, IMAGERATIO_16_9, "2MHD"}, // 2MHD
|
{1920, 1080, IMAGERATIO_16_9, "2MHD"}, // 2MHD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PHOTO_SIZE_PARAM g_ScreenNailSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
|
||||||
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
||||||
|
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
||||||
|
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
||||||
|
{640, 480, IMAGERATIO_4_3, "VGA"}, // VGA
|
||||||
|
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
|
||||||
|
#endif
|
||||||
|
//CFG_SCREENNAIL_W
|
||||||
|
//CFG_SCREENNAIL_H
|
||||||
|
//SCREENNAIL_TARGETBYTERATE
|
||||||
|
};
|
||||||
|
|
||||||
const CHAR *Get_SizeString(UINT32 uiIndex)
|
const CHAR *Get_SizeString(UINT32 uiIndex)
|
||||||
{
|
{
|
||||||
if (uiIndex < PHOTO_SIZE_ID_MAX) {
|
if (uiIndex < PHOTO_SIZE_ID_MAX) {
|
||||||
|
@ -72,6 +84,21 @@ UINT32 GetPhotoSizeRatio(UINT32 ubIndex)
|
||||||
return g_PhotoCapSizeTable[ubIndex].uiImageRatio;
|
return g_PhotoCapSizeTable[ubIndex].uiImageRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UINT32 sf_get_screen_nail_width(UINT32 ubIndex)
|
||||||
|
{
|
||||||
|
return g_ScreenNailSizeTable[ubIndex].uiWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 sf_get_screen_nail_height(UINT32 ubIndex)
|
||||||
|
{
|
||||||
|
return g_ScreenNailSizeTable[ubIndex].uiHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex)
|
||||||
|
{
|
||||||
|
return g_ScreenNailSizeTable[ubIndex].uiImageRatio;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
Dzoom string handling
|
Dzoom string handling
|
||||||
**************************************************/
|
**************************************************/
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex);
|
extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex);
|
||||||
extern UINT32 GetPhotoSizeHeight(UINT32 ubIndex);
|
extern UINT32 GetPhotoSizeHeight(UINT32 ubIndex);
|
||||||
extern UINT32 GetPhotoSizeRatio(UINT32 ubIndex);
|
extern UINT32 GetPhotoSizeRatio(UINT32 ubIndex);
|
||||||
|
extern UINT32 sf_get_screen_nail_width(UINT32 ubIndex);
|
||||||
|
extern UINT32 sf_get_screen_nail_height(UINT32 ubIndex);
|
||||||
|
extern UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex);
|
||||||
extern CHAR *Get_DZoomRatioString(void);
|
extern CHAR *Get_DZoomRatioString(void);
|
||||||
extern UINT32 Get_AFWindowIndexFromValue(UINT32 value);
|
extern UINT32 Get_AFWindowIndexFromValue(UINT32 value);
|
||||||
extern UINT32 Get_AFWindowValue(UINT32 uhIndex);
|
extern UINT32 Get_AFWindowValue(UINT32 uhIndex);
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#define SF_I2C_NAME "sf_mcu"
|
#define SF_I2C_NAME "sf_mcu"
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
#define SF_SD_THUMB_PATH "A:\\Thumb\\ThumbFileCfg"
|
||||||
//#ifndef SF_I2C_ADDR
|
//#ifndef SF_I2C_ADDR
|
||||||
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
||||||
#define MCU_I2C_SLAVE_ADDR (0x20>>1)
|
#define MCU_I2C_SLAVE_ADDR (0x20>>1)
|
||||||
|
@ -426,6 +427,57 @@ typedef struct sfCAMERA_CMD_S
|
||||||
UINT8 GotoServerGetPara;
|
UINT8 GotoServerGetPara;
|
||||||
} SF_CAMERA_CMD_S;
|
} SF_CAMERA_CMD_S;
|
||||||
|
|
||||||
|
#define SF_MAX_PATH_LEN 128
|
||||||
|
#define SF_MAX_PIC_LEN 64
|
||||||
|
#define SF_SRCFILE_MAX 5
|
||||||
|
|
||||||
|
typedef enum sf_FILE_TYPE_E
|
||||||
|
|
||||||
|
{
|
||||||
|
SF_FILE_TYPE_PIC_THUM_3M = 0x00,
|
||||||
|
SF_FILE_TYPE_PIC_3M = 0x01,
|
||||||
|
SF_FILE_TYPE_VIDEO_THUM_WVGA = 0X02,
|
||||||
|
SF_FILE_TYPE_VIDEO_WVGA = 0X03,
|
||||||
|
SF_FILE_TYPE_VIDEO_THUM_720P = 0X04,
|
||||||
|
SF_FILE_TYPE_VIDEO_720P = 0X05,
|
||||||
|
SF_FILE_TYPE_VIDEO_THUM_1080P = 0X06,
|
||||||
|
SF_FILE_TYPE_VIDEO_1080P = 0X07,
|
||||||
|
SF_FILE_TYPE_PIC_THUM_5M = 0x08,
|
||||||
|
SF_FILE_TYPE_PIC_5M = 0x09,
|
||||||
|
SF_FILE_TYPE_LOG_ERROR = 0x0A,
|
||||||
|
SF_FILE_TYPE_CFG = 0x0B,
|
||||||
|
SF_FILE_TYPE_TRIGGER = 0x0C,
|
||||||
|
|
||||||
|
SF_FILE_TYPE_PIC_BIG,
|
||||||
|
SF_FILE_TYPE_PIC_SMALL,
|
||||||
|
SF_FILE_TYPE_PIC_VIDEO,
|
||||||
|
SF_FILE_TYPE_VIDEO,
|
||||||
|
SF_FILE_TYPE_LOG_DP, /*dailyreport file*/
|
||||||
|
SF_FILE_TYPE_GPS,
|
||||||
|
SF_FILE_TYPE_TXT,
|
||||||
|
SF_FILE_TYPE_UPDATE,
|
||||||
|
SF_FILE_TYPE_FOTA,
|
||||||
|
SF_FILE_TYPE_BT_ALARM, /*Bettery Alarm*/
|
||||||
|
SF_FILE_TYPE_OTHER,
|
||||||
|
SF_FILE_TYPE_BUTT,
|
||||||
|
}SF_FILE_TYPE_E;
|
||||||
|
|
||||||
|
typedef struct sf_FILE_ATTR_S {
|
||||||
|
|
||||||
|
SF_FILE_TYPE_E enFileTye;
|
||||||
|
char thumbfileName[SF_MAX_PIC_LEN];
|
||||||
|
char thumbfilePath[SF_MAX_PATH_LEN];
|
||||||
|
char txtfilePath[SF_MAX_PATH_LEN];
|
||||||
|
char txtfileName[SF_MAX_PIC_LEN];
|
||||||
|
UINT32 thumbfileSize;
|
||||||
|
|
||||||
|
}SF_FILE_ATTR_S;
|
||||||
|
|
||||||
|
typedef struct sf_SRCFILE_ATTR_S {
|
||||||
|
UINT8 filecnt;
|
||||||
|
SF_FILE_ATTR_S stfileattr[SF_SRCFILE_MAX];
|
||||||
|
}SF_SRCFILE_ATTR_S;
|
||||||
|
|
||||||
ER sf_i2c_init_driver(UINT32 i2c_id);
|
ER sf_i2c_init_driver(UINT32 i2c_id);
|
||||||
void sf_i2c_remove_driver(UINT32 id);
|
void sf_i2c_remove_driver(UINT32 id);
|
||||||
INT32 sf_i2c_transfer(struct i2c_msg *msgs, INT32 num);
|
INT32 sf_i2c_transfer(struct i2c_msg *msgs, INT32 num);
|
||||||
|
@ -458,5 +510,10 @@ void sf_set_power_off_flag(UINT8 flag);
|
||||||
UINT32 sf_set_pir_sensitivity(UINT8 pirs);
|
UINT32 sf_set_pir_sensitivity(UINT8 pirs);
|
||||||
void sf_set_module_sleep_flag(UINT8 flag);
|
void sf_set_module_sleep_flag(UINT8 flag);
|
||||||
|
|
||||||
|
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,UINT32 size, SF_FILE_TYPE_E enFileType);
|
||||||
|
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl);
|
||||||
|
void sf_file_thumb_cfg_clear(void);
|
||||||
|
void sf_file_thumb_cfg_sava(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -18,33 +18,33 @@
|
||||||
* Description: creat
|
* Description: creat
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
//#include <mach/rcw_macro.h>
|
//#include <mach/rcw_macro.h>
|
||||||
//#include "kwrap/type.h"
|
//#include "kwrap/type.h"
|
||||||
//#include "kwrap/semaphore.h"
|
//#include "kwrap/semaphore.h"
|
||||||
//#include "kwrap/flag.h"
|
//#include "kwrap/flag.h"
|
||||||
#include <sf_mcu.h>
|
#include <sf_mcu.h>
|
||||||
#else
|
#else
|
||||||
//#include "kwrap/type.h"
|
//#include "kwrap/type.h"
|
||||||
//#include "kwrap/semaphore.h"
|
//#include "kwrap/semaphore.h"
|
||||||
//#include "kwrap/flag.h"
|
//#include "kwrap/flag.h"
|
||||||
#include <sf_mcu.h>
|
#include <sf_mcu.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __MODULE__ sf_i2c_mcu
|
#define __MODULE__ sf_i2c_mcu
|
||||||
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
||||||
#define __DBGFLT__ "*" // *=All, [mark]=CustomClass
|
#define __DBGFLT__ "*" // *=All, [mark]=CustomClass
|
||||||
#include "kwrap/debug.h"
|
#include "kwrap/debug.h"
|
||||||
//#include <kwrap/debug.h>
|
//#include <kwrap/debug.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <kwrap/util.h>
|
#include <kwrap/util.h>
|
||||||
#include "comm/hwclock.h"
|
#include "comm/hwclock.h"
|
||||||
#include "comm/timer.h"
|
#include "comm/timer.h"
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <rtos_na51089/gpio.h>
|
#include <rtos_na51089/gpio.h>
|
||||||
#include "UIInfo.h"
|
#include "UIInfo.h"
|
||||||
#include "GxUSB.h"
|
#include "GxUSB.h"
|
||||||
#include "kwrap/task.h"
|
#include "kwrap/task.h"
|
||||||
#include <uart.h>
|
#include <uart.h>
|
||||||
|
@ -143,7 +143,7 @@ unsigned char cmpValBuf[BUF_REG_SIZE] = {0};
|
||||||
static unsigned char sf_commu_mcu_exit = 1;
|
static unsigned char sf_commu_mcu_exit = 1;
|
||||||
static VK_TASK_HANDLE sfCommuMcuThread = 0;
|
static VK_TASK_HANDLE sfCommuMcuThread = 0;
|
||||||
THREAD_RETTYPE sf_commu_mcu_task(void *arg);
|
THREAD_RETTYPE sf_commu_mcu_task(void *arg);
|
||||||
|
|
||||||
int gsfd = -1;
|
int gsfd = -1;
|
||||||
|
|
||||||
void mcubuf_reset(void)
|
void mcubuf_reset(void)
|
||||||
|
@ -286,7 +286,7 @@ int sf_set_mcu_reg_many(unsigned char reg[], unsigned char val[], unsigned int n
|
||||||
sndBuf[index] = num;
|
sndBuf[index] = num;
|
||||||
|
|
||||||
for(i = 0; i < num; i++)
|
for(i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
sndBuf[index] = reg[i];
|
sndBuf[index] = reg[i];
|
||||||
index++;
|
index++;
|
||||||
|
@ -330,9 +330,9 @@ int sf_get_mcu_reg_many(unsigned char reg[], unsigned int num)
|
||||||
index++;
|
index++;
|
||||||
sndBuf[index] = num;
|
sndBuf[index] = num;
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < num; i++)
|
for(i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
sndBuf[index] = reg[i];
|
sndBuf[index] = reg[i];
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ unsigned int sf_get_mcu_reg_ack_depack_many(unsigned char reg[], unsigned char v
|
||||||
*num = smap_buf.buf[3];
|
*num = smap_buf.buf[3];
|
||||||
|
|
||||||
for(i = 0; i < *num; i++)
|
for(i = 0; i < *num; i++)
|
||||||
{
|
{
|
||||||
reg[i]= smap_buf.buf[j];
|
reg[i]= smap_buf.buf[j];
|
||||||
j++;
|
j++;
|
||||||
val[i]= smap_buf.buf[j];
|
val[i]= smap_buf.buf[j];
|
||||||
|
@ -682,7 +682,8 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len)
|
||||||
//stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY;
|
//stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY;
|
||||||
//sf_com_message_send_to_app(&stMessageBuf);
|
//sf_com_message_send_to_app(&stMessageBuf);
|
||||||
ret = 0x05;
|
ret = 0x05;
|
||||||
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO);
|
sf_set_power_off_flag(1);
|
||||||
|
//Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -713,7 +714,7 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len)
|
||||||
|
|
||||||
THREAD_RETTYPE sf_commu_mcu_task(void *arg)
|
THREAD_RETTYPE sf_commu_mcu_task(void *arg)
|
||||||
{
|
{
|
||||||
THREAD_ENTRY();
|
THREAD_ENTRY();
|
||||||
static unsigned char buffer[BUF_REG_SIZE] = {0};
|
static unsigned char buffer[BUF_REG_SIZE] = {0};
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int readLen = 0;
|
int readLen = 0;
|
||||||
|
@ -832,7 +833,7 @@ THREAD_RETTYPE sf_commu_mcu_task(void *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
THREAD_RETURN(0);
|
THREAD_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
#include "GxUSB.h"
|
#include "GxUSB.h"
|
||||||
|
|
||||||
#include <uart.h>
|
#include <uart.h>
|
||||||
|
#include "FileSysTsk.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
static UINT8 McuSubVersion = 0;
|
static UINT8 McuSubVersion = 0;
|
||||||
static UINT16 McuVersion = 0;
|
static UINT16 McuVersion = 0;
|
||||||
|
@ -66,6 +69,8 @@ static UINT32 GPRS_ERRNO = 0;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SF_SRCFILE_ATTR_S *pThumbFileCfg = NULL;
|
||||||
|
|
||||||
#if DIGITAL_PIR
|
#if DIGITAL_PIR
|
||||||
const UINT8 PirDigtSensRegValue[3] = { 7, 9, 16 }; /*digital Level PIR: 7/9/16 -> reg:9/7/5*/
|
const UINT8 PirDigtSensRegValue[3] = { 7, 9, 16 }; /*digital Level PIR: 7/9/16 -> reg:9/7/5*/
|
||||||
#else /*analog PIR*/
|
#else /*analog PIR*/
|
||||||
|
@ -2006,6 +2011,62 @@ void sf_set_module_sleep_flag(UINT8 flag)
|
||||||
gModuleSleep = flag;
|
gModuleSleep = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sf_file_thumb_cfg_fill(char* filepath,char* fileName, UINT32 size, SF_FILE_TYPE_E enFileType)
|
||||||
|
{
|
||||||
|
if (pThumbFileCfg == NULL) {
|
||||||
|
pThumbFileCfg = malloc(sizeof(SF_SRCFILE_ATTR_S));
|
||||||
|
|
||||||
|
printf("%s:%d pThumbFileCfg malloc\n", __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
|
||||||
|
{
|
||||||
|
pThumbFileCfg->filecnt = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfilePath, "%s", filepath);
|
||||||
|
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
|
||||||
|
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
|
||||||
|
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType;
|
||||||
|
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileSize = size;
|
||||||
|
pThumbFileCfg->filecnt++;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl)
|
||||||
|
{
|
||||||
|
pThumbFileCfg = pThumbFileCfgl;
|
||||||
|
//memcpy(&pThumbFileCfg,pThumbFileCfgl,sizeof(pThumbFileCfg));
|
||||||
|
}
|
||||||
|
|
||||||
|
SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void)
|
||||||
|
{
|
||||||
|
return pThumbFileCfg;
|
||||||
|
}
|
||||||
|
void sf_file_thumb_cfg_clear(void)
|
||||||
|
{
|
||||||
|
pThumbFileCfg->filecnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sf_file_thumb_cfg_sava(void)
|
||||||
|
{
|
||||||
|
printf("%s:%d s\n", __FUNCTION__, __LINE__);
|
||||||
|
char tmp[64] = {'\0'};
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s", SF_SD_THUMB_PATH);
|
||||||
|
|
||||||
|
if (FileSys_DeleteFile(tmp) != FST_STA_OK)
|
||||||
|
{
|
||||||
|
printf("%s:%d delete failed\n", __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
FST_FILE fp = FileSys_OpenFile(tmp, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
|
||||||
|
UINT32 size = sizeof(SF_SRCFILE_ATTR_S);
|
||||||
|
|
||||||
|
FileSys_WriteFile(fp, (UINT8*)pThumbFileCfg, &size, 0, NULL);
|
||||||
|
FileSys_CloseFile(fp);
|
||||||
|
free(pThumbFileCfg);
|
||||||
|
printf("%s:%d e\n", __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined __FREERTOS
|
#if defined __FREERTOS
|
||||||
|
|
||||||
int sf_mod_init(void)
|
int sf_mod_init(void)
|
||||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@
|
||||||
version-info = [00 01 00 01];
|
version-info = [00 01 00 01];
|
||||||
ae_expect_lum {
|
ae_expect_lum {
|
||||||
size = [b0 00 00 00];
|
size = [b0 00 00 00];
|
||||||
data = [36 00 00 00 3c 00 00 00 32 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
|
data = [3c 00 00 00 3c 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
|
||||||
};
|
};
|
||||||
ae_la_clamp {
|
ae_la_clamp {
|
||||||
size = [50 01 00 00];
|
size = [50 01 00 00];
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
};
|
};
|
||||||
ae_over_exposure {
|
ae_over_exposure {
|
||||||
size = [b0 01 00 00];
|
size = [b0 01 00 00];
|
||||||
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
|
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
|
||||||
};
|
};
|
||||||
ae_convergence {
|
ae_convergence {
|
||||||
size = [2c 00 00 00];
|
size = [2c 00 00 00];
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
};
|
};
|
||||||
ae_meter_window {
|
ae_meter_window {
|
||||||
size = [00 01 00 00];
|
size = [00 01 00 00];
|
||||||
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
|
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
|
||||||
};
|
};
|
||||||
ae_lum_gamma {
|
ae_lum_gamma {
|
||||||
size = [82 00 00 00];
|
size = [82 00 00 00];
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user