diff --git a/code/.vscode/settings.json b/code/.vscode/settings.json index 772c12b3c..6d2a35211 100644 --- a/code/.vscode/settings.json +++ b/code/.vscode/settings.json @@ -3,6 +3,10 @@ "prjcfg_hunting_s530.h": "c", "sf_keymng.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" } } \ No newline at end of file diff --git a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h index a5ea5a981..abeb309ea 100755 --- a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h +++ b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h @@ -920,7 +920,8 @@ #define HUNTING_IR_LED_940 DISABLE #define SF_BASE_VERSION "7MD4RCwD3T3" #define HW_S530 1 - +#define PHOTO_ISP_STAMP DISABLE +#define SF_BASE_VERSION_FEA "R2.3" /******************************************************************************************* * LVGL UI Style config diff --git a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c index 0d70eaca9..a2dd483eb 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c +++ b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c @@ -146,7 +146,7 @@ void Movie_CommPoolInit(void) 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 = 2; + mem_cfg.pool_info[id].blk_cnt = 7; mem_cfg.pool_info[id].ddr_id = DDR_ID0; } diff --git a/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h b/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h index 520a6841a..e87c634bf 100755 --- a/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h +++ b/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h @@ -6,7 +6,7 @@ #include "GxVideoFile.h" #include "hdal.h" -#define MOVIE_ISP_LOG ENABLE +#define MOVIE_ISP_LOG DISABLE #if (MOVIE_ISP_LOG == ENABLE) #undef WATERLOGO_FUNCTION diff --git a/code/application/source/cardv/SrcCode/UIApp/Network/WifiAppCmd.c b/code/application/source/cardv/SrcCode/UIApp/Network/WifiAppCmd.c index 9f3d1075a..1bdb86ee7 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Network/WifiAppCmd.c +++ b/code/application/source/cardv/SrcCode/UIApp/Network/WifiAppCmd.c @@ -35,7 +35,7 @@ #include "sys_mempool.h" #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 __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL) diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h old mode 100755 new mode 100644 index 827b4f26c..cfeae633a --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h @@ -66,6 +66,7 @@ #endif + #if (SENSOR_CAPS_COUNT >= 2) #define PHOTO_MAX_CAP_SIZE UIAPP_PHOTO_SIZE_10M #else @@ -77,18 +78,6 @@ #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_6 (6) #define JPG_COMERESSED_RATIO_7 (7) @@ -109,11 +98,29 @@ #define JPG_BRC_INIT_Q 85 #define JPG_BRC_RETRY_CNT 4 #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_LBOUND(TBR) (TBR - (TBR * 15 / 100)) #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 void PhotoExe_RSC_SetSwitch(UINT32 index, UINT32 value); @@ -411,4 +418,5 @@ extern BOOL PhotoExe_GetCapYUV420En(void); extern HD_RESULT PhotoExe_DetSensor(BOOL *plug); +BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len); #endif //_UIAPP_PHOTO_H_ diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c old mode 100755 new mode 100644 index 035908fb3..32207f3b2 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -32,7 +32,7 @@ //#include "sf_mcu.h" #include "IOCfg.h" #include - +#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 #if 1//_TODO @@ -240,6 +240,18 @@ static INT32 PhotoExe_Preview_SliceEncode_DateStamp( IMG_CAP_DATASTAMP_EVENT event); 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 */ PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB; @@ -423,6 +435,7 @@ static UINT32 PhotoExe_GetScreenNailSize(void) ScreenNailSize = CFG_SCREENNAIL_SIZE; uiImageSize = UI_GetData(FL_PHOTO_SIZE); 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; } else { BitStreamSize = 0; @@ -455,7 +468,10 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id) if (uiImageSize < ScreenNailSize) { //BufferSize.w = GetPhotoSizeWidth(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; ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); @@ -514,9 +530,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id) DevSize = GxVideo_GetDeviceSize(DOUT1); #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! - BufferSize.w = CFG_SCREENNAIL_W; - BufferSize.h = CFG_SCREENNAIL_H; + //BufferSize.w = CFG_SCREENNAIL_W; + //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) { BufferSize.w = DevSize.w; @@ -1349,8 +1368,8 @@ void PhotoExe_DZoomOutBK(void) #define VDO_SEN1_SIZE_W 2960// 2560 #define VDO_SEN1_SIZE_H 1664//1440 #else -#define VDO_SEN1_SIZE_W 2960// 2560 -#define VDO_SEN1_SIZE_H 1664//1440 +#define VDO_SEN1_SIZE_W 2592// 2560 +#define VDO_SEN1_SIZE_H 1944//1440 #endif #define VDO_SEN2_SIZE_W 2560 #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}; -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}; AWBT_STATUS awb_status = {0}; //IQT_WDR_PARAM wdr = {0}; - HD_RESULT hd_ret; -UINT16 AD_Value; - 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; + + ae_status.id = AE_ID_1; 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); - /*wdr.id = id; + + /* + wdr.id = id; 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.lum, ae_status.status_info.expect_lum, @@ -1431,16 +1448,53 @@ AD_Value = sf_mcu_get_irshtter(); //wdr.wdr.enable, awb_status.status.cur_r_gain, awb_status.status.cur_b_gain, - awb_status.status.cur_ct, - AD_Value + awb_status.status.cur_ct ); - DBG_ERR("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); - } + //DBG_DUMP("isp Buf=%s\r\n",Buf); 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); @@ -1458,6 +1512,7 @@ void PhotoExe_CommPoolInit(void) HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH); HD_RESULT hd_ret = HD_OK; 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); if (hd_ret != HD_OK) { @@ -1555,7 +1610,8 @@ void PhotoExe_CommPoolInit(void) id ++; 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].ddr_id = DDR_ID0; @@ -1871,11 +1927,15 @@ static void PhotoExe_InitNetworkStream(UINT32 dualCam, USIZE *pImageRatioSize) if (dualCam == DUALCAM_FRONT) { p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1); 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->height_ratio = pImageRatioSize->h; + p_strm->width = ALIGN_CEIL_16(p_strm->height* pImageRatioSize->w/pImageRatioSize->h); + //p_strm->height = PHOTO_STRM_HEIGHT; ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm); + if (p_strm->strm_type== PHOTO_STRM_TYPE_HTTP) { 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); if (p_strm == NULL) return; -// p_strm->enable = PHOTO_PORT_STATE_EN_RUN; - p_strm->enable = PHOTO_PORT_STATE_EN; + p_strm->enable = PHOTO_PORT_STATE_EN_RUN; #if ((SENSOR_CAPS_COUNT == 2) && (SENSOR_INSERT_MASK != 0)) if (System_GetEnableSensor() == SENSOR_1 && i==UIAPP_PHOTO_STRM_ID_2){ 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); 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 else if (dualCam == DUALCAM_BEHIND) { @@ -2368,15 +2427,18 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) USIZE ImageRatioSize = {0}; UINT32 ImageRatioIdx; + +#if 0 + UI_SetData(FL_PHOTO_SIZE, PHOTO_SIZE_5M); +#endif + g_bPhotoOpened = FALSE; localInfo->isStartCapture = FALSE; - //UIMenuStoreInfo *puiPara = sf_ui_para_get(); ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx]; // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; - FileSys_MakeDir(PHOTO_THUMB_PATH); GOIO_Turn_Onoff_IRCUT(1); //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"); usleep(100*1000); } - PhotoExe_CommPoolInit(); dualCam =PhotoExe_InitSensorCount(); 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); PhotoExe_InitDisplayStream(dualCam,&g_photo_ImageRatioSize); - PhotoExe_InitNetworkStream(dualCam,&g_photo_ImageRatioSize); ImageApp_Photo_WiFiConfig(PHOTO_CFG_WIFI_REG_CB ,(UINT32)&PhotoExe_WifiCB); - PHOTO_SENSOR_INFO sen_cfg = {0}; 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; 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) 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 /* open encode path */ @@ -3137,7 +3203,6 @@ INT32 PhotoExe_OnCaptureStop(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArra Photo_setS2Status(FALSE); ImageApp_Photo_CapStop(); } - 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) || \ ((rotate_dir & ISF_VDO_DIR_ROTATE_90) == ISF_VDO_DIR_ROTATE_90) ) { - CHKPNT; dst_w=sz_img.h; dst_h=sz_img.w; }else{ - CHKPNT; dst_w=sz_img.w; dst_h=sz_img.h; } @@ -4039,6 +4102,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void) in = HD_VIDEOENC_IN(0, first_out_port); out = HD_VIDEOENC_OUT(0, first_out_port); ret = hd_videoenc_open(in, out, &venc_path_id); + if (ret != HD_OK ){ DBG_ERR("hd_videoenc_open(%lx, %lx) failed(%d)!\r\n", in, out, ret); 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); + /* 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; } case PHOTO_ENC_JPG_SCREENNAIL: { + UIMenuStoreInfo *puiPara = sf_ui_para_get(); 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}; - bitrate = SCREENNAIL_TARGETBYTERATE * 8; + 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; } @@ -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) { - 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->height = cap_size_h; info->slice_num = slice_num; @@ -4204,18 +4275,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoExe_Slice slice_num = 1; } else{ - PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); UINT32 lines = (buf_size / cap_size_w); - 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); @@ -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) { HD_DIM dim = PhotoExe_Preview_SliceEncode_Get_Encode_Max_Size(); - UINT32 reserved_buffer_height = ((dim.h * 3) / 10); - UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt); + UINT32 reserved_buffer = 0; UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer; return max_buffer_size; @@ -4244,19 +4306,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Info(PhotoExe_SliceS slice_num = 1; } else{ -// slice_num = CFG_JPG_PREVIEW_SLICE_ENC_NUM; - PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); UINT32 lines = (buf_size / cap_size_w); - 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); @@ -4442,6 +4495,27 @@ static INT32 PhotoExe_Preview_SliceEncode_Alloc_Buffer(PhotoExe_MEM_Info* info, 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) { 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 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 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 */ @@ -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); 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); - ret = HD_ERR_SYS; + ret = HD_ERR_NOMEM; goto EXIT; } @@ -4849,11 +4923,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail( VF_GFX_SCALE vf_gfx_scale = {0}; URECT dest_win = {0}; USIZE src_size = {0}, dest_size = {0}; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + + src_size.w = video_frame_in->dim.w; src_size.h = video_frame_in->dim.h; - dest_size.w = CFG_SCREENNAIL_W; - dest_size.h = CFG_SCREENNAIL_H; + dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize); + 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); 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; } +#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) { 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); 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); - ret = HD_ERR_SYS; + ret = HD_ERR_NOMEM; goto EXIT; } @@ -5014,7 +5176,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary( dst_slice_info, 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; } @@ -5133,12 +5295,12 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary( if(quality_old == 1){ 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; restart = TRUE; } - else if(quality_old > CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP){ - quality_new = 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_STEP; restart = TRUE; } else{ @@ -5279,6 +5441,7 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par HD_VIDEO_PXLFMT vproc_out_pxlfmt = 0; PhotoExe_MEM_Info exif_mem_info = {0}; UINT32 enc_accum_size = 0; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); 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; } + +#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(); +#endif + if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ goto EXIT; } @@ -5423,13 +5592,19 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par /* screennail encode */ 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); - if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ goto EXIT; } +#endif 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){ - DBG_DUMP("start\n"); + DBG_IND("start\n"); set_flg(param->flag_id, FLG_PHOTO_SLICE_ENC_STA_STARTED); if(param->callback){ param->callback(param->user_data); @@ -5675,7 +5850,6 @@ typedef struct { UINT8 cnt; lfqueue_t* queue12; /* shared with CB1 */ lfqueue_t* queue23; /* shared with CB3 */ - } PhotoExe_Preview_SliceEncode_CB2_Param; typedef struct { @@ -5695,7 +5869,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data) PHOTO_VID_IN vid_in = PHOTO_VID_IN_1; HD_PATH_ID vproc_path_id; 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; 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); do{ - - vos_perf_mark(&tick1); - - 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; - } + if(param->cnt) + vos_util_delay_ms(param->period); 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)); + memset(queue_ele_out, 0, sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param)); queue_ele_out->frame = video_frame; while (lfqueue_enq(param->queue12, (void*) queue_ele_out) == -1) { @@ -5763,7 +5925,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data) } while(1); - DBG_DUMP("task1 job finished\n"); + DBG_IND("task1 job finished\n"); exit: return ret; @@ -5799,7 +5961,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data) param = (PhotoExe_Preview_SliceEncode_CB2_Param*) user_data; param->cnt = 0; - DBG_DUMP("enter cb2 loop\n"); + DBG_IND("enter cb2 loop\n"); /******************************************************************* * Get vproc info @@ -5858,7 +6020,14 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data) 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 @@ -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); 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; } 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; } @@ -5911,14 +6098,21 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data) /******************************************************************* * Screennail & Thumbnail Encode ******************************************************************/ + UIMenuStoreInfo *puiPara = sf_ui_para_get(); /* 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_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL); + 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)}); +#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){ goto EXIT; } +#endif /* 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}); @@ -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 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 }; - DBG_WRN(" EXIF\r\n"); /* exif */ ExifVendor_Write0thIFD(EXIF_HDL_ID_1); @@ -5967,6 +6160,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data) /* enqueue jpg buffer info */ 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_size = dst_jpg_file.size; queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr; @@ -6013,7 +6207,13 @@ EXIT: 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; } @@ -6042,6 +6242,13 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data) 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 ******************************************************************/ @@ -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 + 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); @@ -6076,7 +6283,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data) 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, 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(); if(SF_CAM_MODE_PHOTO == puiPara->CamMode) { @@ -6117,7 +6324,11 @@ EXIT: 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; } @@ -6256,9 +6467,8 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa cb1_param.queue12 = &queue12; 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; 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.queue23 = &queue23; - DBG_DUMP("resume task2\n"); + DBG_IND("resume task2\n"); task2_param.run = 1; 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.queue23 = &queue23; - DBG_DUMP("resume task3\n"); + DBG_IND("resume task3\n"); task3_param.run = 1; vos_task_resume(task3_param.task_id); diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c index 5db69fca0..f3ea34d3d 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c @@ -319,8 +319,8 @@ void UiDateImprint_InitBuff(void) } else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) { pInfo->MemSize = 0x80000; - - UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont); + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UiDateImprint_GetStampFont(sf_get_screen_nail_width(puiPara->SendPicSize),(char**)&pFont); #if defined(_UI_STYLE_LVGL_) 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) { char *str; @@ -456,7 +456,7 @@ BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len) StrBuf[0] = 0; //Empty String } return FALSE; -} +}*/ char * UiDateImprint_InitStrBuf(void) { char *str=NULL; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c index 84fb63585..04c59ba71 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c @@ -61,6 +61,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = { [MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA 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_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30", }; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c index 0d9570d01..47101405f 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c @@ -471,7 +471,8 @@ static void UIFlowPhoto_OnExeCaptureStart(lv_obj_t* obj) } /* 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"); gPhotoData.State = PHOTO_ST_WARNING_MENU; 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#Support SD hot plug function #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 //#NT#2016/10/04#Lincy Lin -end return; @@ -815,11 +816,18 @@ static void UIFlowPhoto_ScrOpen(lv_obj_t* obj) //#NT#Support SD hot plug function //#if (SDHOTPLUG_FUNCTION == ENABLE) 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 */ gPhotoData.State = PHOTO_ST_WARNING_MENU; UIFlowWrnMsgAPI_Open_StringID(LV_PLUGIN_STRING_ID_STRID_PLEASE_INSERT_SD, 0); return; + #endif } //#endif //#NT#2016/10/04#Lincy Lin -end diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h index 8b448db11..d292d23f3 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h @@ -5,7 +5,7 @@ // Photo #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_COLOR COLOR_EFFECT_STANDARD #define DEFAULT_SCENE SCENE_AUTO @@ -63,7 +63,7 @@ #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #else #if (MOVIE_AI_DEMO == DISABLE) - #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30 + #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30 #else #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #endif @@ -71,8 +71,8 @@ #endif -#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 -#define DEFAULT_MOVIE_SIZE_SINGLE 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_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE #define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h index 787d4ac87..95ab229e1 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h @@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR ImgSize;/* 24M/12M/8M/5M */ CHAR NightMode;/* Max.Range/Balanced/Min.Blur */ CHAR Multishot;/*1P/2P/3P/4P/5P*/ + CHAR MultiShotIntevel;/*0s/1s/2s*/ + CHAR SendMulti;/*OFF/ON*/ CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/ CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/ CHAR VideoLenth; @@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR TimeSend3Switch;/*OFF/ON*/ CHAR TimeSend4Switch;/*OFF/ON*/ CHAR SendType; + CHAR PicUpDailyReport; /////////////////////// #endif @@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR SimIccid[21]; CHAR ServiceProvider[64]; UINT8 SimSignal; - UINT8 SimType; + UINT8 SimType; UINT8 FtpSwitch;/*FTP/OFF/FTPS*/ UINT8 FtpIp[40]; UINT8 FtpPort[5]; @@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo { UINT8 FtpsPort[5]; UINT8 FtpsUsr[40]; UINT8 FtpsPwd[20]; + + UINT8 WifiSwitch; + UINT8 WifiMode; + UINT8 WifiApPWD[16]; + UINT8 Zoom; //============Sifar==============///Payton } UIMenuStoreInfo; @@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE { MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA + MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_2048x2048P30_480x480P30, MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60 diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c index c3c03557e..c3adc12d9 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c @@ -147,9 +147,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { }, [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, 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] = { @@ -171,15 +171,15 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { }, [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, 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] = { - {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, 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] = { @@ -212,9 +212,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { {1, 3, 36, 8, -8, 0}, {1, 4, 30, 80 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, #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, 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 }, @@ -444,6 +444,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = { {MOVIE_SIZE_1920x1080P60, 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_REC_TYPE_CLONE, diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c index 7a25e17ef..8569ce93c 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c @@ -52,8 +52,8 @@ 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_) - {1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M {640, 480, IMAGERATIO_4_3, "VGA"}, // VGA + {1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M #endif //CFG_SCREENNAIL_W //CFG_SCREENNAIL_H diff --git a/code/application/source/sf_app/Makefile b/code/application/source/sf_app/Makefile index 987130de0..1f0b8d02f 100755 --- a/code/application/source/sf_app/Makefile +++ b/code/application/source/sf_app/Makefile @@ -68,7 +68,7 @@ EXTRA_INCLUDE += \ -I$(EXT_DIR)/audio/aud_common/include \ -I$(KFLOW_DIR)/include \ -I$(NVT_DRIVER_DIR)/include \ - -I$(LIBRARY_DIR)/include \ + -I$(LIBRARY_DIR)/include/libnl3 \ -I$(APP_DIR)/include \ -I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \ -I$(NVT_HDAL_DIR)/vendor/media/include \ @@ -258,8 +258,11 @@ SRC = \ ./code/source/utils/sf_aes.c \ ./code/source/debugMng/sf_debug.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 --------------------------------------------- #--------- ENVIRONMENT SETTING -------------------- diff --git a/code/application/source/sf_app/code/include/sf_common.h b/code/application/source/sf_app/code/include/sf_common.h index 6a4d9ba6b..f8afb7548 100755 --- a/code/application/source/sf_app/code/include/sf_common.h +++ b/code/application/source/sf_app/code/include/sf_common.h @@ -62,6 +62,19 @@ extern "C" { } \ } 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); #ifdef __cplusplus diff --git a/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h b/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h index 82948abb8..87075e9d4 100755 --- a/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h +++ b/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h @@ -296,6 +296,20 @@ typedef enum sfPOWEROFF_TYPE_E SF_POWEROFF_BUTT, } SF_POWEROFF_TYPE_E; #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 { unsigned short Year; /* Year > 1970*/ 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); int sf_app_while_flag(void); 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_cq_signal(UINT8 csq); +void sf_mcu_version_get(UINT8 *mcuVer); extern unsigned short TrigType; diff --git a/code/application/source/sf_app/code/include/sf_data_transfer.h b/code/application/source/sf_app/code/include/sf_data_transfer.h new file mode 100644 index 000000000..cc2c4478f --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_data_transfer.h @@ -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__*/ + diff --git a/code/application/source/sf_app/code/include/sf_fileMng.h b/code/application/source/sf_app/code/include/sf_fileMng.h index f55d5f076..71b8171de 100755 --- a/code/application/source/sf_app/code/include/sf_fileMng.h +++ b/code/application/source/sf_app/code/include/sf_fileMng.h @@ -11,6 +11,7 @@ extern "C" { #define MMZBLOCKSIZE 1024 #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) 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); -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_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); SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize); +BOOL sf_check_auto_thumb_file(VOID); #ifdef __cplusplus #if __cplusplus diff --git a/code/application/source/sf_app/code/include/sf_param_enum.h b/code/application/source/sf_app/code/include/sf_param_enum.h index 715fe8574..a3b4bd19d 100755 --- a/code/application/source/sf_app/code/include/sf_param_enum.h +++ b/code/application/source/sf_app/code/include/sf_param_enum.h @@ -184,6 +184,7 @@ extern "C" { #define SF_THUMB_BIG_DIR SF_SD_DISK"\\DCIM\\THUMB\\big" #define SF_THUMB_VIDEO_DIR SF_SD_DISK"\\DCIM\\THUMB\\video" #define DCF_DIR_FREE_CHAR "MEDIA" +#define DCF_FILE_FREE_CHAR "SYFW" #define SF_TRUE 1 #define SF_FALSE 0 @@ -346,6 +347,7 @@ typedef enum sf_IMG_SIZE_E { SF_IMG_SIZE_32M = 0, SF_IMG_SIZE_24M, + SF_IMG_SIZE_16M, SF_IMG_SIZE_12M, SF_IMG_SIZE_8M, SF_IMG_SIZE_5M, @@ -378,6 +380,7 @@ typedef enum sf_MESSAGE_TYPE_E CMD_MCU = 0x1F01, CMD_PARA = 0x1F02, CMD_GPRS = 0x1F03, + CMD_WIFI = 0x1F04, }SF_MESSAGE_TYPE_E; @@ -467,6 +470,14 @@ typedef enum 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{ GPRS_SEARCH_STEP_IDLE = 0x0, diff --git a/code/application/source/sf_app/code/include/sf_svr_send.h b/code/application/source/sf_app/code/include/sf_svr_send.h new file mode 100644 index 000000000..d60ea959c --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_svr_send.h @@ -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__*/ + diff --git a/code/application/source/sf_app/code/include/sf_wifi_svr.h b/code/application/source/sf_app/code/include/sf_wifi_svr.h new file mode 100644 index 000000000..b40864cf3 --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_wifi_svr.h @@ -0,0 +1,946 @@ +#ifndef __SF_WIFI_SERVER__ +#define __SF_WIFI_SERVER__ + + + +#include +#include + + +#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__*/ diff --git a/code/application/source/sf_app/code/source/app/sf_app.c b/code/application/source/sf_app/code/source/app/sf_app.c index 60910c239..85e5e14d2 100755 --- a/code/application/source/sf_app/code/source/app/sf_app.c +++ b/code/application/source/sf_app/code/source/app/sf_app.c @@ -98,7 +98,8 @@ int main(int argc, char *argv[]) printf("*********************************************\n"); //gpio_direction_input(C_GPIO(10)); SINT16 startup = 0; - + SF_MESSAGE_BUF_S stMessageBuf = {0}; + BOOL autosend = FALSE; SF_MUTEX_INIT_LOCK(Param_mutexLock); SF_MUTEX_INIT_LOCK(GPIO_mutexLock); //test_sd_free(); @@ -153,11 +154,39 @@ int main(int argc, char *argv[]) //app_led_pin_init(); //app_upgrade_sd_execute(); app_preinit(); - + //#if app_RegisterNet_start(); + //#endif startup = sf_poweron_type_get(); 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(); @@ -169,14 +198,14 @@ int main(int argc, char *argv[]) app_debug_deinit(); ///////////////////////////// } - else//tese + /*else//tese { SF_MESSAGE_BUF_S stMessageBuf = {0}; stMessageBuf.cmdId = CMD_KEY; stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff sf_com_message_send_to_cardv(&stMessageBuf); - } + }*/ sf_share_mem_file_deinit(); diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c index 5baef7774..2f3c2e814 100755 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -51,6 +51,7 @@ extern "C" { #include "sf_system.h" #include "sf_service.h" #include +#include "sf_wifi_svr.h" extern pthread_mutex_t Param_mutexLock; @@ -500,10 +501,12 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) break; case CMD_SD_STRG_CB_INSERTED: sf_set_card(1); + sf_sd_status_set(SF_SD_OK); break; case CMD_SD_STRG_CB_REMOVED: 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; 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: sf_set_card(1); + sf_sd_status_set(SF_SD_OK); sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1); break; 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); break; case FST_STA_DISK_UNKNOWN_FORMAT: @@ -534,14 +540,19 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) break; case CMD_SD_STRG_CB_UNMOUNT_FINISH: - - break; + sf_set_card(0); + 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: - break; + break; 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_sd_status_set(SF_SD_FULL); /*sf_sd_status_set(SF_SD_FULL); if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { 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; #endif 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(); } - else + else*/ { app_FileSend_start(); } @@ -693,6 +704,23 @@ static SINT32 app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) 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) static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf) { @@ -772,6 +800,9 @@ void* app_message_recv_thread(void *arg) break; case CMD_PARA: app_proccess_cmd_para_update(&stMessagebuf); + break; + case CMD_WIFI: + sf_proccess_cmd_wifi(&stMessagebuf); break; default: break; diff --git a/code/application/source/sf_app/code/source/app/sf_service.c b/code/application/source/sf_app/code/source/app/sf_service.c index 3fd46f03e..9aef92180 100755 --- a/code/application/source/sf_app/code/source/app/sf_service.c +++ b/code/application/source/sf_app/code/source/app/sf_service.c @@ -1018,7 +1018,6 @@ static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam) //sf_thumb_file_creat(); - sf_share_mem_file_init(); s32ret = sf_simcom_ftp_send(1); 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_file_thumb_cfg_clear(); - sf_share_mem_file_down(1); + //sf_file_thumb_cfg_clear(); + //sf_share_mem_file_down(1); sf_set_upload_to_module_flag(0);//test break; -#if 0 + case SF_MCU_STARTUP_TIMELAPSE: case SF_MCU_STARTUP_PIR: - if(pStaticParam->PicPlan == 0) { - s32ret = sf_4G_server_open(pfnParam); - s32ret = app_server_querystatus(SF_CMD_LOGIN_IN,pfnParam,SF_NULL); - 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); - } + //sf_share_mem_file_init(); + sf_check_auto_thumb_file(); + s32ret = sf_simcom_ftp_send(1); - s32ret |= app_server_excute_cmd(pfnParam); -// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); - if(pStaticParam->AliveIp[0] !='\0') { - s32ret = sf_4G_acm_tcp_server_open(pfnParam); - 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); - + stMessageBuf.cmdId = CMD_KEY; + stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; + stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff + sf_com_message_send_to_cardv(&stMessageBuf); break; +#if 0 case SF_MCU_STARTUP_NORMAL: case SF_MCU_STARTUP_RING: sf_thumb_file_creat(); @@ -1113,12 +1096,14 @@ SINT32 app_FileSend_thread(void) pthread_detach(pthread_self()); + sf_share_mem_file_init(); //s32ret = app_file_send_check(stpfncallback.pstaticParam); s32ret = sf_check_ftp_send(1); if(s32ret != SF_SUCCESS) { MLOGE("ERROR:%#x\n", s32ret); ThumbSend.IsRun = 0; + sf_file_thumb_cfg_clear(); sf_share_mem_file_down(1); return s32ret; } @@ -1127,6 +1112,8 @@ SINT32 app_FileSend_thread(void) //if(s32ret == SF_APP_ERROR_NO_SUPPOET) // app_file_transfer_Error_return_server(&stpfncallback); ThumbSend.IsRun = 0; + sf_file_thumb_cfg_clear(); + sf_share_mem_file_down(1); 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_PIR: - /* + #ifdef SF_HARDWARE_TEST app_system_poweroff(SF_POWEROFF_NOT); break; @@ -1392,17 +1379,17 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) s32ret = sf_4G_register_net_auto(pfnParam); 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_USB_net_init(); + //sf_4G_usb_net_apn_cfg(pfnParam); + //sf_USB_net_init(); - s32ret = app_http_IsAuthenrequst(pfnParam); - SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + //s32ret = app_http_IsAuthenrequst(pfnParam); + //SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); s32ret = app_FileSend_thread(); SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); - */ + break; case SF_MCU_STARTUP_WARNING: diff --git a/code/application/source/sf_app/code/source/commMng/sf_share_mem.c b/code/application/source/sf_app/code/source/commMng/sf_share_mem.c index b4117f8d2..0ee2c5c08 100755 --- a/code/application/source/sf_app/code/source/commMng/sf_share_mem.c +++ b/code/application/source/sf_app/code/source/commMng/sf_share_mem.c @@ -194,7 +194,7 @@ SINT32 sf_share_mem_file_down(UINT32 to) 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; } else diff --git a/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c b/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c index 2d490800d..cc381913c 100755 --- a/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c +++ b/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c @@ -12,6 +12,7 @@ #include #include "sf_log.h" #include "sf_fileMng.h" +#include "sf_common.h" #ifdef __cplusplus #if __cplusplus @@ -627,7 +628,7 @@ SINT16 sf_file_subscribe_check(SF_FILE_ATTR_S *pstfileAttr, SF_SEND_FILE_ATTR_S* } #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) { @@ -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); printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType); pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType; + pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileSize = size; 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) -{ - //currentInfo = *pSfCustomerPara; +{ + //currentInfo = *pSfCustomerPara; memcpy(pSfCustomerPara,&pThumbFileCfg,sizeof(pThumbFileCfg)); } @@ -663,6 +665,45 @@ void sf_file_thumb_cfg_clear(void) 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 #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c index 6b379b186..eed1de60a 100755 --- a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c +++ b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c @@ -51,12 +51,12 @@ unsigned short TrigType = 0; unsigned int powerSave_t1 = 0; unsigned char DailyReportStartMode = 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 UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP static UINT32 simCardInsert=0; static UINT8 gModuleSleep = 1; -static UINT8 isSignalReady = 0; +static int isSignalReady = -1; static UINT32 GPRS_ERRNO = 0; static UINT32 SmsCheck = 0; 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*/ #endif -#define APP_POWER_OFF_APO 0 -#define APP_POWER_OFF_BATT_EMPTY 0 +//#define APP_POWER_OFF_APO 0 +//#define APP_POWER_OFF_BATT_EMPTY 0 extern SF_TIME_S sf_get_mcu_poweroff_date(void); 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(); //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) { 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) -{ - return sfMcuTime; +{ + return sfMcuTime; } void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date) @@ -1025,6 +1025,18 @@ unsigned short sf_get_mcu_ver(void) 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); } -UINT8 sf_get_signal_ready(void) +int sf_get_signal_ready(void) { return isSignalReady; } diff --git a/code/application/source/sf_app/code/source/wifi/sf_data_transfer.c b/code/application/source/sf_app/code/source/wifi/sf_data_transfer.c new file mode 100644 index 000000000..3fa4f71b6 --- /dev/null +++ b/code/application/source/sf_app/code/source/wifi/sf_data_transfer.c @@ -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 +#include //malloc +#include +#include +#include //usleep() + +#include +#include +#include +#include +#include + +#include +#include +#include + +#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; +} + + + + diff --git a/code/application/source/sf_app/code/source/wifi/sf_getapinfo.c b/code/application/source/sf_app/code/source/wifi/sf_getapinfo.c new file mode 100644 index 000000000..0a6100ac8 --- /dev/null +++ b/code/application/source/sf_app/code/source/wifi/sf_getapinfo.c @@ -0,0 +1,444 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +//#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 \ No newline at end of file diff --git a/code/application/source/sf_app/code/source/wifi/sf_svr_send.c b/code/application/source/sf_app/code/source/wifi/sf_svr_send.c new file mode 100644 index 000000000..17e79c5a6 --- /dev/null +++ b/code/application/source/sf_app/code/source/wifi/sf_svr_send.c @@ -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 +#include +#include +#include +#include //usleep() + +#include +#include +#include +#include +#include + +#include +#include +#include //stat() +#include + + +#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; +} + diff --git a/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c b/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c new file mode 100644 index 000000000..4dd5518e6 --- /dev/null +++ b/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c @@ -0,0 +1,2601 @@ +#include +#include +#include +#include +#include //usleep() +#include + +#include +#include +#include + +#include +#include +#include +#include +#include //mkdir +#include + +#include +#include +#include +#include + +#include "sf_common.h" +//#include "sf_syslib.h" +//#include "sf_para.h" + +#include "sf_wifi_svr.h" +#include "sf_data_transfer.h" +#include "sf_svr_send.h" +//#include "sf_mcu.h" +//#include "sf_device.h" +//#include "sf_sim.h" +//#include "sf_param_app.h" +//#include "sf_led_app.h" +//#include "sf_customer_app.h" +//#include "sf_4g_common.h" +//#include "sf_4g_app.h" +//#include "sf_sm.h" +#include "UIInfo/UIInfo.h" +#include "sf_param_enum.h" +#include "sf_module.h" +#include "sf_systemMng.h" +#include "sf_commu_mcu_reg.h" +#include "sf_system.h" +#include "sf_storeMng.h" +#include "sf_ledmng.h" + +#if SF_LPA_SDK +#include "lpasdk/api/lpasdk_api.h" +#include "sf_4g_lpa.h" +#endif + +/************************************************************************** + * C O N S T A N T S * + **************************************************************************/ + +/************************************************************************** + * M A C R O S * + **************************************************************************/ +#define WIFI_HW_RTL8189 1 +#define WIFI_HW_HI3881 0 + +#ifndef IFNAMSIZ +/** Maximum length of a interface name */ +#define IFNAMSIZ 16 +#endif +#define IFALIASZ 256 + +#ifndef IF_NAMESIZE +#define IF_NAMESIZE IFNAMSIZ +#endif + +#define IF_HWADDRSIZE 14 + +#define SF_WIFI_NETDEV_NAME "ap0" +#define SF_WIFI_NETDEV_8189_NAME "wlan0" + +/************************************************************************** + * D A T A T Y P E S * + **************************************************************************/ + +/************************************************************************** + * G L O B A L D A T A * + **************************************************************************/ +UINT32 startTime = 0; + +UINT8 isDiskReady = 1; +UINT8 estFileSize = 1; +UINT8 poweroff_mode = 0; +UINT8 CurrentSDCid[16] = {0}; + +//PDT_PARAM_CONTEXT_S* PDT_PARAM_GetCtx(HI_VOID); +UINT32 gFwUpdate = 0; +UINT8 isStopStreaming = 0; + +UINT16 gAppSvrPort; +SINT8 gAppSvrIp[16]; +SINT32 gAppSvrSocket = -1; +SINT32 gSendSocket = -1; + +static pthread_t sf_SvrThreadId = -1; + +SINT8 gAppLocalIp[32]; +SINT8 gAppLocalMac[32]; +SINT8 gAppSerialID[18]; +UINT8 gbAppLocalIp[8]; +UINT8 gbAppLocalMac[32]; + +UINT8 gssidname[MAX_SSID_NAME_LEN]= {"SiFar"}; +UINT8 gpassword[MAX_PASSWORD_LEN]= {0}; +SINT8 gApSSID[32]= {"SiFar-Cisco"}; +SINT8 gApPasswd[MAX_PASSWORD_LEN]= {"abc.1234"}; + +pthread_mutex_t gAppSvrMutex; +UINT32 gDevFileListNums = 0,gDevDirListNums = 0; +MSG_DEV_THUMB_LIST_Get_Data_Rsp_T gDevFileList[9999]; +MSG_DEV_THUMB_DIR_LIST_T gDevDirList[999]; + +UINT16 CurrentWifiCmd = 0; + +UINT8 gFileName[SF_FILENAME_MAXLEN]; +UINT8 SendingFile = 0; + +sysMsg_t sendMsg; +static SF_WIFI_STATUS_E WifiStatus = SF_WIFI_BUTT; + +/************************************************************************** + * E X T E R N A L R E F E R E N C E S * + **************************************************************************/ +extern sem_t gAppSvrSendQueue; +extern UINT8 StopSendFile; +extern UINT8 SendingFile; + +/************************************************************************** + * F U N C T I O N D E C L A R A T I O N S * + **************************************************************************/ +void dataClientListPrint(void); + + + +static UINT32 sf_set_pir_sensitivity_app(UINT8 pirs) +{ + UINT8 digPirLevel[10] = {200, 38, 30, 24, 18, 16, 10, 9, 8, 7}; + UINT8 digPirCount[10] = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1}; + + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + //UIMenuStoreInfo *puiPara = sf_ui_para_get(); + if(pirs >= 10) + return FAIL; + puiPara->PirSensitivity = pirs; + puiPara->DigitPirSensitivity = digPirLevel[pirs]; + puiPara->DigitPirCnt = digPirCount[pirs]; + puiPara->DigitPirWindowTime = 0; + + if(puiPara->PirSensitivity) + { + puiPara->TimelapseSwitch = SF_OFF; + puiPara->TimelapseTime.Hour = 0; + puiPara->TimelapseTime.Min = 0; + puiPara->TimelapseTime.Sec = 0; + //Save_MenuInfo(); + } + + return SUCCESS; +} + +static S32 sf_get_sd_info(UINT32 *pSDStatus, UINT32 *pSDFree, UINT32 *pSDTotalSize) +{ + int fd = -1; + fd = open(SD_PATH2, O_RDONLY,0); + if(fd >= 0) + { + struct statfs diskInfo; + statfs(SD_PATH2, &diskInfo); + /*printf("f_type=%ld\n", diskInfo.f_type); + printf("f_bsize=%ld\n", diskInfo.f_bsize); + printf("f_blocks=%ld\n", diskInfo.f_blocks); + printf("f_bfree=%ld\n", diskInfo.f_bfree); + printf("f_bavail=%ld\n", diskInfo.f_bavail); + printf("f_files=%ld\n", diskInfo.f_files); + printf("f_ffree=%ld\n", diskInfo.f_ffree); + //printf("f_fsid=%ld\n", diskInfo.f_fsid); + printf("f_namelen=%ld\n", diskInfo.f_namelen); + printf("f_frsize=%ld\n", diskInfo.f_frsize); + //printf("f_flags=%ld\n", diskInfo.f_flags); + printf("f_spare=%ld\n", diskInfo.f_spare[0]);*/ + + if(diskInfo.f_bsize > 1024) + { + *pSDTotalSize = (diskInfo.f_blocks * (diskInfo.f_bsize >> 10)) >> 10 ; //blocks * 4096 / 1024 /1024 = MB + *pSDFree = (diskInfo.f_bavail * (diskInfo.f_bsize >> 10)) >> 10 ; + } + else + { + *pSDTotalSize = (diskInfo.f_blocks * diskInfo.f_bsize) >> 10 ; //blocks * 4096 / 1024 /1024 = MB + *pSDFree = (diskInfo.f_bavail * diskInfo.f_bsize) >> 10 ; + } + close(fd); + + if(pSDTotalSize > 0) + *pSDStatus = 0; //SD card SUCESS + else + *pSDStatus = 2; //SD card ERROR + } + else + { + *pSDStatus = 1; //SD card not insert + *pSDFree = 0; + *pSDTotalSize = 0; + } + + printf("pSDStatus = %d\n", *pSDStatus); + printf("pSDFree = %d MB\n", *pSDFree); + printf("pSDTotalSize = %d MB\n", *pSDTotalSize); + + return *pSDStatus; +} + +static void sf_set_zoom(U32 nZoom) +{ + int s32Ret = 0; + char cmd[256]= {0}; + int nwidth = 2492; + int nheight = 1400; + + printf("[sf_set_zoom],nZoom:%d\n",nZoom); + if(nZoom == 2) + { + nwidth = 1280; + nheight = 720; + } + else if(nZoom == 3) + { + nwidth = 640; + nheight = 480; + } + if(nZoom == 4) + { + nwidth = 320; + nheight = 240; + } + if(nZoom == 5) + { + nwidth = 160; + nheight = 120; + } + + // sprintf(cmd, "/usr/local/bin/test_dptz -J -d %d", nZoom); + + sprintf(cmd, "/appfs/bin/test_dptz -J -s %dx%d",nwidth,nheight); + printf("CMD: %s\n", cmd); + s32Ret = system(cmd); + if(s32Ret == SUCCESS) + { + printf("Do Upgrade Success\n"); + return; + } + +} + +SF_WIFI_STATUS_E sf_get_wifi_status(void) +{ + return WifiStatus; +} + +void sf_set_wifi_status(SF_WIFI_STATUS_E enStatus) +{ + if(enStatus < SF_WIFI_BUTT) + WifiStatus = enStatus; + else + printf("Type format error\n"); + return; + +} + +//forbuild function need in other file --start--- +UINT32 sp5kFsFileSizeGet(const char *path) +{ + UINT32 filesize = 0; + struct stat statbuff; + if(stat(path, &statbuff) < 0) + { + printf("failed path:%s size:%ld\n", path, (unsigned long int)statbuff.st_size); + return filesize; + } + else + { + // printf("success path:%s size:%ld\n", path, (unsigned long int)statbuff.st_size); + filesize = statbuff.st_size; + } + return filesize; +} + +void memdump(void *p,int len) +{ + return; + + int i,j,k; + char binstr[80]; + char *buf = p; + /* + printf("p:%x,len:%d\n",p,len); + for(i=0; i DCF_DIR_FILE_NUM_MAX))) + { + tmp = fileKey % (DCF_DIR_FILE_NUM_MAX + 1); + if(tmp == 0) + { + dirKey++; + if(dirKey > DCF_DIR_NUM_MAX) + { + profLogAdd(0,"KEY full!!!"); + if(puiPara.RoundRecord) + { + dirKey = DCF_DIR_NUM_MIN; + } + else + { + return NULL; + } + } + } + } +#endif + + if(imgSize == THUMB_320x240) + { + sprintf((char *)tempPath, "%s/small", THUMB_PATH); + sprintf((char *)path, "%s/%03d", tempPath, dirKey); + } + else if(imgSize == THUMB_1280x960) + { + sprintf((char *)tempPath, "%s/middle", THUMB_PATH); + sprintf((char *)path, "%s/%03d", tempPath, dirKey); + } + else + { + sprintf((char *)tempPath, "%s/large", THUMB_PATH); + sprintf((char *)path, "%s/%03d", tempPath, dirKey); + } + + /****check floder and creat it if that is not exist ***start****/ +#if 0 + printf("Thumb key s"); + ret = sp5kFsFileAttrGet(path, &attribute); + printf("Thumb key m"); + if(ret == FAIL) + { + printf("need creat path\n"); + ret = sp5kFsDirMake(tempPath); + if(ret == FAIL) + { + sp5kFsDirMake(THUMB_PATH); + sp5kFsFileAttrSet(THUMB_PATH, SP5K_FS_ATTR_HIDDEN|SP5K_FS_ATTR_SYSTEM); + sp5kFsDirMake(tempPath); + } + sp5kFsDirMake(path); + printf("Thumb key need creat path"); + } + else //if(attribute & SP5K_FS_ATTR_DIR) + { + printf("path exist not need creat!\n"); + } +#endif + /****check floder and creat it if that is not exist***end****/ + + sprintf((char *)fileName, "%s/%03d%1d%04d.JPG", path, dirKey, fileType, fileKey); + printf("ThumbName:%s", fileName); + return fileName; +} + +//forbuild function need in other file --end--- + + +static void fdInitSets( clientContext_t *pClientHead, SINT32 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 void fdClears(SINT32 clientsd, fd_set *rdfds, fd_set *wrfds, fd_set *errfds) +{ + /* Initialize */ + FD_CLR(clientsd, rdfds); + FD_CLR(clientsd, wrfds); + FD_CLR(clientsd, errfds); +} + +static clientContext_t* AddClientContextToList( clientContext_t *pClientHead, clientContext_t *pClient) +{ + if ( pClientHead != NULL ) + { + pClient->p_next = pClientHead ; + } + return pClient; +} + +static clientContext_t* DeleteClientContext( clientContext_t *pClientHead, clientContext_t *pClient) +{ + clientContext_t *pTemp; + clientContext_t *pPrev = pClientHead; + clientContext_t *pCurr = pClientHead->p_next; + if (pClient == pClientHead) + { + pTemp = pClientHead; + pClientHead = pClientHead->p_next ; + close(pTemp->socket); + free(pTemp); + return pClientHead; + } + + pPrev = pClientHead; + pCurr = pClientHead->p_next; + + while (pCurr != NULL) + { + if (pCurr == pClient) + { + pTemp = pCurr->p_next; + pPrev->p_next = pTemp; + close(pCurr->socket); + free(pCurr); + return pClientHead; + } + + pPrev = pCurr; + pCurr = pCurr->p_next; + } + + return NULL; +} + + +static void cmdClientListPrint(clientContext_t *pHead) +{ + clientContext_t *pClient = pHead; + while ( pClient != NULL ) + { + printf("cmd socket:%d,port:%d,IP:%s\n",pClient->socket,htons(pClient->ClientAddr.sin_port),inet_ntoa(pClient->ClientAddr.sin_addr)); + pClient = pClient->p_next; + } + //printf("list end\n"); +} + +void appsvr_getFileList(UINT8 *dirPath, UINT8 *startFileKey) +{ + DIR *dir = NULL; + struct dirent *ptr = NULL; + UINT32 nFileNums = 0; + + printf("[appsvr_getFileList] dirPath:%s\n", dirPath); + if ((dir=opendir((char *)dirPath)) == NULL) + { + printf("Open dir error..."); + return; + } + printf("open success\n"); + + while ((ptr=readdir(dir)) != NULL) + { + // printf("fileName:|%s|\n",ptr->d_name); + if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir + continue; + else if(ptr->d_type == 8) ///file + { +#if 1 + if((startFileKey[0] == '\0') || (strncmp((char *)(ptr->d_name+4), (char *)startFileKey, 4)) > 0) + { + // printf("[appsvr_getFileList]open \n",nFileNums,idx); + //printf("[appsvr_getFileList]nFileNums:%d, idx:%d, %s %d\n",nFileNums,idx,fname,gDevFileListNums); + // printf("[appsvr_getFileList]nFileNums:%d, %d\n",nFileNums,gDevFileListNums); + strcpy((char *)gDevFileList[nFileNums + gDevFileListNums].fileNameString, (char *)ptr->d_name); + gDevFileList[nFileNums + gDevFileListNums].srcFileType = ptr->d_name[3] - '0'; + //printf("%s\n", g3g75DevFileList[nFileNums - idx + gDevFileListNums].fileName); + nFileNums ++ ; + //printf("[appsvr_getFileList]%d,%s\n",nFileNums - idx, gDevFileList[nFileNums - idx].fileName); + } +#else + strcpy(img_path[img_num],dirPath); + printf("path:%s\n", img_path[img_num]); + strcpy(img_path[img_num++],ptr->d_name); + printf("file:%s\n", img_path[img_num]); + + +#endif + } + else + { + continue; + } + } + closedir(dir); + gDevFileListNums += nFileNums; + return; +} + + +void appsvr_getDirList(UINT8* dirPath, UINT8 *startDirKey) +{ + UINT32 nFileNums = 0; + DIR *dir = NULL; + struct dirent *ptr = NULL; + printf("appsvr_getDirList:%s,startDirKey:%s\n", dirPath,startDirKey); + if ((dir=opendir((char *)dirPath)) == NULL) + { + printf("Open dir error...\n"); + printf("dir path:%s\n", dirPath); + return; + } + printf("dir open success\n"); + while ((ptr=readdir(dir)) != NULL) + { + printf("ptr != NULL ,ptr->d_name:---%s,Type:%d-----\n", ptr->d_name,ptr->d_type); + if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir + continue; + else if(ptr->d_type == 4) ///dir + { +#if 1 + if(strncmp((char *)&ptr->d_name, (char *)startDirKey, 3) >= 0) + { + strcpy((char *)gDevDirList[nFileNums].dirName, (char *)ptr->d_name); + printf("gDevDirList:%s\n", gDevDirList[nFileNums].dirName); + nFileNums++; + } +#else + strcpy(img_path[img_num],basePath); + printf("path:%s\n", img_path[img_num]); + strcpy(img_path[img_num++],ptr->d_name); + printf("file:%s\n", img_path[img_num]); +#endif + } + else + { + continue; + } + } + + gDevDirListNums = nFileNums; + closedir(dir); + printf("appsvr_getDirList e,gDevDirListNums:%d >>>>>\n",gDevDirListNums); +} + + +UINT8 appCmpFileList(void) +{ +#if 0 + UINT32 thumbNum,sourceNum,sdTotalFile; + UINT16 fileType, dirKey, fileKey; + UINT32 i = 0; + UINT8 fileName[32] = {0}; + printf("appCmpFileList s"); + appCreatThumbList(fileName); + printf("appCmpFileList m"); + sp5kDcfFsInfoGet(SP5K_DCF_INFO_TOTAL_FILENUM,&sdTotalFile); + printf("thumbNum=%d,sourceNum=%d\n",gDevFileListNums,sdTotalFile); + if(gDevFileListNums <= sdTotalFile) + { + printf("appCmpFileList no need delete file\n"); + //return 0; + } + + for(; i < gDevFileListNums; i++) + { + + //appThumbNameToKey(&fileType, &dirKey, &fileKey, gDevFileList[i].fileNameString);ERROR:dirKey always zero + //printf("dirkey=%d\n",dirKey); + sprintf(fileName,"D:/DCIM/%.3s%s/%s%.4s%s", + gDevFileList[i].fileNameString,DCF_DIR_FREE_CHAR,DCF_FILE_FREE_CHAR,gDevFileList[i].fileNameString+4, + (gDevFileList[i].fileNameString[3] == '0' ? ".JPG" : (gDevFileList[i].fileNameString[3] == '1' ? ".MP4" : ".MP4"))); + //profLogPrintf(0,"file:%s", fileName); + //printf("str:%s,name:%s,\n",gDevFileList[i].fileNameString,fileName); + if(appFileExistCheck(fileName)) + { + //profLogPrintf(0,"continue" ); + continue; + } + else + { + //appThumbKeyToName(THUMB_320x240, fileType, dirKey, fileKey, fileName); + sprintf(fileName, "%s/small/%.3s/%s", THUMB_PATH, gDevFileList[i].fileNameString, gDevFileList[i].fileNameString); + //printf("del thumb:%s\n", fileName); + remove(fileName); + //profLogPrintf(0,"del %s", fileName); + } + } + printf("appCmpFileList e"); +#endif + return SUCCESS; +} + + +void appCreatThumbList(S8 *fileName)//start file name example: 10010032.JPG +{ + UINT16 i = 0; + UINT8 dirPath[50] = {0}; + UINT8 startDirKey[5] = {0}; + UINT8 startFileKey[5] = {0}; + UINT8 temp[5] = {0}; + + printf("fileName:%s\n",fileName); + + if(fileName != NULL && fileName[0] != '\0' && fileName[0] != '0') + { + strncpy((char *)startDirKey, (char *)fileName, 3); + strncpy((char *)startFileKey, (char *)fileName+4, 4); + } + else + { + // startDirKey[0] = '\0'; + // startFileKey[0] = '\0'; + strncpy((char *)startDirKey, "100", 3); + strncpy((char *)startFileKey, "0001", 4); + } + + memset(gDevFileList, 0, sizeof(gDevFileList)); + gDevFileListNums = 0; + printf("get dir s\n"); + sprintf((char *)dirPath, "%s/", THUMB_PATH); + + +// appsvr_getDirList(dirPath, startDirKey); + +// printf("get dir e\n"); + // strcpy((char *)gDevDirList[0].dirName, dirPath); + + // while((gDevDirList[i].dirName[0] != '\0') && (i <= DCF_DIR_NUM_MAX)) + { + printf("i=%d,dir:%s\n", i, gDevDirList[i].dirName); + // printf("get file s\n"); + sprintf((char *)dirPath, "%s/%s", THUMB_PATH, gDevDirList[i].dirName); + + if(strcmp((char *)gDevDirList[i].dirName, (char *)startDirKey) == 0) + { + appsvr_getFileList(dirPath, startFileKey); + } + else + { + appsvr_getFileList(dirPath, temp); + } + printf("get file e\n"); + + i++; + } + + + //appsvr_getFileList(dirPath, startDirKey); + +#if 0 + extern void sioCtrl(UINT32 opt); + sioCtrl(0); + printf("appCreatThumbList end\n"); + for(i=0; i < gDevFileListNums; i++) + { + printf("%s\n",gDevFileList[i].fileName); + } +#endif +} + +/*----------------------------------------------------------*/ +static UINT32 sf_get_mac_addr(char *ifName, UINT8 *MacBuf) +{ + struct ifreq ifreq; + int sock = 0; + int i = 0; + + sock = socket(AF_INET, SOCK_STREAM, 0); + if(sock < 0) + { + printf("error sock"); + return 2; + } + + strcpy(ifreq.ifr_name, ifName); + if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0) + { + printf("error ioctl"); + return 3; + } + + for(i = 0; i < 6; i++) + { + sprintf((char *)MacBuf+3*i, "%02X:", (unsigned char)ifreq.ifr_hwaddr.sa_data[i]); + } + MacBuf[strlen((char *)MacBuf) - 1] = 0; + printf("MAC: %s\n", MacBuf); + + return 0; +} + +void sf_app_Get_Camera_Info(MSG_DEV_INFO_Get_Rsp_T *camInfo) +{ + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + + printf("camInfo:%x\n",camInfo->cmdRet); + printf("[sf_app_Get_Camera_Info],sf_get_sifar_param\n"); + + camInfo->cmdRet = 0; + //strcpy((char *)camInfo->protocolVersion, "1.0"); + + printf("[sf_app_Get_Camera_Info],protocolVersion\n"); + camInfo->devType = 0; + //strcpy((char *)camInfo->devId, "1.0.0.1"); + + printf("[sf_app_Get_Camera_Info],devId\n"); + camInfo->batLevel = 5;//sf_get_battery_level(1); + if(camInfo->batLevel < 1) + camInfo->batLevel = 1; + + printf("[sf_app_Get_Camera_Info],sf_get_Battery_Level\n"); + + //camInfo->batteryPercent = camInfo->batLevel * 20; + camInfo->batteryPercent = 1;//sf_get_battery_percent(1); + camInfo->batteryType = 0; + + + UINT32 SDFree; /* SD卡剩余容量 MB */ + UINT32 SDTotalSize; /* SD卡总容量MB */ + UINT32 SDStatus; /*0:正常 1:未插卡 2:错误*/ + sf_get_sd_info(&SDStatus, &SDFree, &SDTotalSize); + camInfo->SDStatus = htonl(SDStatus); + camInfo->SDFree = htonl(SDFree); + camInfo->SDTotalSize = htonl(SDTotalSize); + + printf("[sf_app_Get_Camera_Info],get_sd_info\n"); +#ifdef SF_SK + //camInfo->GpsLongitude = htonl(0); + //camInfo->GpsLatitude = htonl(0); +#endif + strcpy((char *)camInfo->hwType, "REVEAL-SK"); + //S8 strTemp[16]= {0}; + //sf_get_sys_version(strTemp); + + strcpy((char *)camInfo->swVer, SF_BASE_VERSION); + printf("[sf_app_Get_Camera_Info],sf_get_sys_version\n"); + + //sf_get_sifar_version(strTemp); + strcpy((char *)camInfo->swVer1, SF_BASE_VERSION_FEA); + printf("[sf_app_Get_Camera_Info],sf_get_sifar_version\n"); + + //UINT8 mcuVersion=0, mcuSubVersion=0; + //sf_mcu_ver_get(&mcuVersion, &mcuSubVersion); + printf("[sf_app_Get_Camera_Info],sf_mcu_version_get\n"); + + //char mcuVer[10]= {0}; + sf_mcu_version_get(camInfo->McuVer); + //sprintf(mcuVer, "%02d.%02d.%02d", mcuVersion/16, mcuVersion%16, mcuSubVersion); + //strcpy((char *)camInfo->McuVer,mcuVer); + + strcpy((char *)camInfo->moduleVer, puiPara->ModuleVer); + strcpy((char *)camInfo->moduleIMEI, puiPara->ModuleImei); + + //UINT8 signalValue=0; + //sf_get_signal_level(&signalValue); + camInfo->signalLevel = puiPara->SimSignal; + printf("[sf_app_Get_Camera_Info],sf_get_signal_level\n"); + + //char strIccid[32]= {0}; + //sf_get_iccid(strIccid); + printf("[sf_app_Get_Camera_Info],sf_get_iccid\n"); + + strcpy((char *)camInfo->SimICCID, puiPara->SimIccid); + if(WIFI_TYPE_8189FS == sf_get_wifi_type()) + { + sf_get_mac_addr(SF_WIFI_NETDEV_8189_NAME, camInfo->WifiMac); + } + else if(WIFI_TYPE_HI3881 == sf_get_wifi_type()) + { + sf_get_mac_addr(SF_WIFI_NETDEV_NAME, camInfo->WifiMac); + } + + camInfo->suffix = htons(0xFFEE); + printf("[sf_app_Get_Camera_Info],End\n"); +} + +void sf_app_Get_Camera_Para(MSG_DEV_Param_Get_Rsp_T *CamPara) +{ + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + + //printf("[sf_app_Get_Camera_Para],snapnum:%d\n",puiPara->snapnum); + CamPara->cmdRet = 0; + + CamPara->zoom = puiPara->Zoom; + + if(puiPara->CamMode == 0) + { + CamPara->cameraMode = 0; + } + else if (puiPara->CamMode == 2) + { + CamPara->cameraMode = 1; + } + else if (puiPara->CamMode == 1) + { + CamPara->cameraMode = 2; + } + else + { + CamPara->cameraMode = 0; + } + + printf("Camera Mode:%d\n", CamPara->cameraMode); + + //CamPara->cameraMode = puiPara->CamMode; + + if(puiPara->ImgSize == 3) + { + CamPara->imageSize = 0; + } + else if(puiPara->ImgSize == 4) + { + CamPara->imageSize = 1; + } + else if(puiPara->ImgSize == 2) + { + CamPara->imageSize = 2; + } + else + { + CamPara->imageSize = 2; + } + + printf("Image Size:%d\n", CamPara->imageSize); + + //CamPara->imageSize = puiPara->ImgSize; + + CamPara->multiShot = puiPara->Multishot-1; + CamPara->multiInterval = puiPara->MultiShotIntevel; + CamPara->sendMulti = puiPara->SendMulti; + CamPara->PirSensitivity = puiPara->PirSensitivity; + + CamPara->timer = puiPara->WorkTime1Switch; + CamPara->timerStartHour = puiPara->WorkTime[0].StartTime.Hour; + CamPara->timerStartMinute = puiPara->WorkTime[0].StartTime.Min; + CamPara->timerEndHour = puiPara->WorkTime[0].StopTime.Hour; + CamPara->timerEndMinute = puiPara->WorkTime[0].StopTime.Min; + printf("timer:%d\n", puiPara->WorkTime1Switch); + printf("TimerHstart[0]:%d\n", puiPara->WorkTime[0].StartTime.Hour); + printf("TimerMstart[0]:%d\n", puiPara->WorkTime[0].StartTime.Min); + printf("TimerHstop[0]:%d\n", puiPara->WorkTime[0].StopTime.Hour); + printf("TimerMstop[0]:%d\n", puiPara->WorkTime[0].StopTime.Min); + + CamPara->maxNum = puiPara->SendMaxNum;//MaxNumber + CamPara->delay = puiPara->PirDelaySwitch;//DelayFlag + CamPara->delayHour = puiPara->PirDelayTime.Day; + CamPara->delayMinute = puiPara->PirDelayTime.Min; + CamPara->delaySecond = puiPara->PirDelayTime.Sec; + + CamPara->SDLoop = puiPara->SdLoopSwitch;//SDLoop + CamPara->flashPower = puiPara->FlashLed; + CamPara->nightMode = puiPara->NightMode;//ExposureTime + + CamPara->sendType = puiPara->SendType;// + CamPara->sendFirstTimeH = puiPara->TimeSend1.Hour;// + CamPara->sendFirstTimeM = puiPara->TimeSend1.Min;// + CamPara->sendSecondTimeH = puiPara->TimeSend2.Hour;// + CamPara->sendSecondTimeM = puiPara->TimeSend2.Min;// + + CamPara->SMSCtrl = puiPara->GprsMode; + CamPara->videoSize = puiPara->VideoSize; + CamPara->videoTime = puiPara->VideoLenth-5; + CamPara->batType = puiPara->BatteryType; + + CamPara->cameraID = puiPara->CamNameSwitch == 0 ? 1:0; + strcpy((char *)CamPara->cameraIDstr, (char *)puiPara->CamNameStr); + + CamPara->dateTimeAuto = puiPara->DateAuto; + CamPara->timeZone = 0; + + CamPara->gpsSwitch = puiPara->GpsSwitch; + CamPara->gpsSendType = puiPara->GpsNumber; + + + CamPara->timelapse = puiPara->TimelapseSwitch;//TimelapseFlag + CamPara->timelapseHour = puiPara->TimelapseTime.Hour;//TimelapseHour + CamPara->timelapseMin = puiPara->TimelapseTime.Min;//TimelapseMinute + CamPara->timelapseSec = puiPara->TimelapseTime.Sec;//TimelapseSecond + + CamPara->picUponDailyReport = puiPara->PicUpDailyReport; + + CamPara->suffix = htons(MSG_END_FIX); +} + +void sf_camera_name_check(SF_CHAR* str) +{ + SINT16 i = 0; + SINT16 len = 0; + + len = strlen(str); + if(len > 4) + { + str[4] = '\0'; + len = 4; + } + + printf("str:%s,len:%d\n", str, len); + for(i = 0; i < len; i++) + { + if((str[i] >= 'a') && (str[i] <= 'z')) + { + str[i] = toupper(str[i]); + } + else if(((str[i] >= 'A') && (str[i] <= 'Z')) + || ((str[i] >= '1') && (str[i] <= '9')) + || (str[i] == ' ')) + { + //nothing to do + } + else + { + str[i] = ' '; + } + } +} + + +SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) +{ + SINT32 i=0,j=0; + UINT32 offset; + UINT16 PreFind=0; + UINT8 *bufAddr=NULL; + APP_SVR_PACKET_T *pMsgStruct; + APP_SVR_PACKET_T msgParse; + UINT16 msgTotolLen=0, msgEndVal=0, tmp=0; + SINT32 nRet = 0; + UINT32 sendSize = 0; + UINT32 fileListSize = 0; + + //SINT16 acPara=0; + //SINT16 acPara1=0; + SINT8 ret = -1; + SINT8 respFlag = -1; /*0:no response 1:prive response 2:global response 3:reboot*/ + //UINT8 * pDevId=NULL; + UINT8 uTemp=0; + //UINT8 gpioVal=-1; + //SINT32 gpioNum=-1; + + SINT32 fileFd = 0; + UINT32 fSize = 0; + //UINT8 *fileBuf; + //UINT32 nFWFileSize = 0; + UINT32 temp = 0; + UINT8 tempbuf[20] = {0}; + UINT8 tempbuf2[20] = {0}; + //UINT8 sSSid[MAX_SSID_NAME_LEN]; + //SINT8 keydata[17] = {"\0"}; + //uiPara_t *pPara; + //SINT8 sRecentFile[64]= {"\0"}; + //forbuild sysMsg_t msg; + struct stat fstat; + struct tm *mtime;//atime, ctime; + SF_PARA_TIME_S time; + UINT32 curMode = 0; + CHAR fileName[SF_FILENAME_MAXLEN]; + UINT16 dirKey, fileKey, fileType; + UINT32 keyMap = 0; + UINT8 function = 0; + + static UINT32 zmFactor[] = {1000,2000,3018,4000}; + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + UINT8 paraNeedReboot = 0; + UINT8 paramSaveFlag = 0; +// HI_MESSAGE_S stMessage; + + //printf("[sf_svr_packet_proc]dataLen: %d\n",dataLen); + + if(poweroff_mode == POWEROFF_COUNTDOWN) + { + printf("Going power off, ignore cmd.\n"); + return FAIL; + } + + if(NULL == pAppData || dataLen < 11) + { + printf("ERROR:input para error in sf_svr_packet_proc() \n"); + return -1; + } + + bufAddr = pAppData; + for(offset = 0; offset < dataLen && offset < sizeof(APP_SVR_PACKET_T);) + { + //PreFind = (UINT16)bufAddr[offset+1]<<8 + bufAddr[offset]; + PreFind = bufAddr[offset+1]<<8; + PreFind += bufAddr[offset]; + + if( htons(MSG_PRE_FIX) == PreFind ) + { + /* parse the message */ + pMsgStruct = (APP_SVR_PACKET_T *)((SINT8 *)bufAddr+offset); + memset((void *)&msgParse, 0, sizeof(msgParse)); + + /*get the msgLen*/ + msgParse.msglen = ntohs(pMsgStruct->msglen); + msgParse.cmd = ntohs(pMsgStruct->cmd); + msgParse.rsp = ntohs(pMsgStruct->rsp); + + /* totolen: = msgLen+magic +len*/ + msgTotolLen = (msgParse.msglen) + 2*(sizeof(UINT16)); + + //printf("[sf_svr_packet_proc]msgTotolLen: %d,sizeof(msgParse):%d",msgTotolLen,sizeof(msgParse)); + //printf("[sf_svr_packet_proc]msgTotolLen: %d,sizeof(msgParse):%d,i:%d\n",msgTotolLen,sizeof(msgParse),i); + + uTemp = bufAddr[offset + msgTotolLen - 2]; + msgEndVal = uTemp << 8; + uTemp = bufAddr[offset + msgTotolLen - 1]; + msgEndVal += uTemp; + + /*parse the msglen valid*/ + if(dataLen < msgTotolLen)//(msgTotolLen != dataLen ) + { + printf("[sf_svr_packet_proc]:recv the error length msg, just drop! t_len[%d] rcv_len[%d]\n",msgTotolLen, dataLen); + + for( j=0; jmsgBuf.GetHeartPackage.reserve; + //printf("[WIFI_SET_CAMERA_CONNECT]id=%d\n", uTemp); + msgParse.msgBuf.rGetHeartPackage.cmdRet = 0; + msgParse.msgBuf.rGetHeartPackage.suffix = htons(MSG_END_FIX); + msgParse.msglen = htons(sizeof(MSG_DEV_Heart_Send_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + +#ifndef __x86_64__ + // printf("~"); + // fflush(stdout); +#endif + } + else + { + respFlag = 0; + } + break; + case WIFI_GET_CAMERA_INFORMATIION: //o + printf("[WIFI_GET_CAMERA_INFORMATIION],msgParse.msgBuf.rgetDevInfo:%x\n",msgParse.msgBuf.rgetDevInfo.cmdRet); + sf_app_Get_Camera_Info(&msgParse.msgBuf.rgetDevInfo); + msgParse.msglen = htons(sizeof(MSG_DEV_INFO_Get_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + break; + + case WIFI_GET_CAMERA_PARAM: //o + printf("[WIFI_GET_CAMERA_PARAM]\n"); + sf_app_Get_Camera_Para(&msgParse.msgBuf.rgetDevParam); + /* add the cmd + resp total 2*2 bytes */ + msgParse.msglen = htons(sizeof(MSG_DEV_Param_Get_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + break; + + case WIFI_GET_CAMERA_THUMB_LIST: //o + strcpy((char *)fileName, (char *)pMsgStruct->msgBuf.getThumbList.fileName); + printf("[WIFI_GET_FILE_THUMBLIST],fileName:%s\n",fileName); + appCreatThumbList(fileName); + + memset((void *)&msgParse, 0, sizeof(msgParse)); + msgParse.magicNum = htons(MSG_PRE_FIX); + msgParse.msglen = htons(sizeof(MSG_DEV_THUMB_LIST_Get_Rsp_T) + 2*sizeof(UINT16)); + msgParse.cmd = pMsgStruct->cmd; + msgParse.rsp = htons(MSG_WIFI_2_APP); + msgParse.msgBuf.rgetThumbList.cmdRet = 0; + msgParse.msgBuf.rgetThumbList.fileNums = htonl(gDevFileListNums); + msgParse.msgBuf.rgetThumbList.packageSize = htonl(gDevFileListNums*sizeof(MSG_DEV_THUMB_LIST_Get_Data_Rsp_T)); + msgParse.msgBuf.rgetThumbList.suffix = htons(MSG_END_FIX); + /* add the magic + len total 2*2 bytes; */ + temp = ntohs(msgParse.msglen); + send(fd, (void *)(&msgParse), (temp + sizeof(UINT16)*2), 0); + + //memdump((&msgParse), (temp + sizeof(UINT16)*2)); + sendSize = 0; + fileListSize = gDevFileListNums*sizeof(MSG_DEV_THUMB_LIST_Get_Data_Rsp_T); + printf("start send fileList,sendSize:%d,gDevFileListNums:%d,fileListSize:%d\n",sendSize,gDevFileListNums,fileListSize); + while(sendSize < fileListSize) + { + // printf("sending fileList,sendSize:%d\n",sendSize); + nRet = send(fd, (void *)(gDevFileList)+sendSize, fileListSize-sendSize, 0); + sendSize += (nRet > 0 ? nRet : 0); + if(nRet < 0) + { + i++; + if(i > 100) + { + break; + } + } + else + { + i = 0; + } + usleep(30*1000); + // printf("nRet = %d\n", nRet); + } + + for(i =0 ; i<16; i++) + printf("%s\n",gDevFileList[i].fileNameString); + + memdump(gDevFileList, sendSize); + + if(sendSize == fileListSize) + { + printf("send success,fileSize=%d,sendSize=%d\n", fileListSize, sendSize); + } + else + { + printf("send failed, time out!fileSize=%d,sendSize=%d\n", fileListSize, sendSize); + } + respFlag = 0; + sleep(2); + break; +#if 1 + case WIFI_GET_CAMERA_HD_FILE: // + printf("[WIFI_GET_CAMERA_HD_FILE],type:%d,dirName:%s\n",pMsgStruct->msgBuf.getHdFile.type,pMsgStruct->msgBuf.getHdFile.dirName); + if(pMsgStruct->msgBuf.getHdFile.type == 0) //thumbnail + { + strcpy((char *)tempbuf, (char *)pMsgStruct->msgBuf.getHdFile.dirName); + strncpy((char *)tempbuf2, (char *)pMsgStruct->msgBuf.getHdFile.dirName, 3); + sprintf((char *)gFileName, "%s/%s/%s", THUMB_PATH, tempbuf2, tempbuf); + } + else if(pMsgStruct->msgBuf.getHdFile.type == 1) //srouce file + { + strcpy((char *)tempbuf, (char *)pMsgStruct->msgBuf.getHdFile.dirName); + strncpy((char *)tempbuf2, (char *)tempbuf, 3); + tempbuf[8] = '\0'; + sprintf((char *)gFileName, "D:/DCIM/%s%s/%s%s%s", + tempbuf2, + DCF_DIR_FREE_CHAR, + DCF_FILE_FREE_CHAR, + tempbuf+4, + (tempbuf[3] == '0' ? ".JPG" : (tempbuf[3] == '1' ? ".MP4" : ".MP4"))); + } + else + { + strcpy((char *)gFileName, (char *)pMsgStruct->msgBuf.getHdFile.dirName); + } + printf("%s\n", (char *)gFileName); + sendMsg.cmd = SEND_FILE; + sendMsg.param = fd; + //ret = sp5kOsQueueSend(gAppSvrSendQueue, &msg, TX_NO_WAIT); + sem_post(&gAppSvrSendQueue); + respFlag = 0; + break; +#endif + case WIFI_SET_CAMERA_Zoom: // + printf("[WIFI_SET_CAMERA_Zoom],Zoom:%d\n",puiPara->Zoom); + puiPara->Zoom = pMsgStruct->msgBuf.deviceZoomSet.zoom; + puiPara->Zoom = (puiPara->Zoom > 4 ? 1 : puiPara->Zoom); + + //forbuild sp5kModeGet(&curMode); + curMode = 0;//forbuild + printf("mode = 0x%x, zoom = %d,\n", curMode, puiPara->Zoom); + printf(" factor = %d\n", zmFactor[puiPara->Zoom]); + //forbuild sp5kZoomFactorSet(curMode, zmFactor[puiPara.zoom]); + sf_set_zoom(puiPara->Zoom); + respFlag = 2; + paramSaveFlag = 0; + break; + + case WIFI_SET_CAMERA_CameraMode: + { + U8 saveMode, tmpMode; + + saveMode = puiPara->CamMode; + if(saveMode == 0) + { + saveMode = 0; + } + else if (saveMode == 1) + { + saveMode = 2; + } + else if (saveMode == 2) + { + saveMode = 1; + } + + printf("[WIFI_SET_CAMERA_CameraMode],cameraMode:%d,savemode:%d\n",pMsgStruct->msgBuf.setCameraMode.cameraMode,saveMode); + + if(saveMode != pMsgStruct->msgBuf.setCameraMode.cameraMode) + { + tmpMode = pMsgStruct->msgBuf.setCameraMode.cameraMode; + + if(tmpMode == 0) + { + puiPara->CamMode = SF_CAMMODE_PIC; + } + else if (tmpMode == 1) + { + puiPara->CamMode = SF_CAMMODE_PV; + } + else if (tmpMode == 2) + { + puiPara->CamMode = SF_CAMMODE_VIDEO; + } + else + { + puiPara->CamMode = SF_CAMMODE_PIC; + } + + //sf_set_cam_mode(puiPara->CamMode); + respFlag = 2; + paramSaveFlag = 1; + } + else + { + respFlag = 2; + } + } + break; + + case WIFI_SET_CAMERA_ImageSize: //O + { + U8 tmpValue; + printf("[WIFI_SET_CAMERA_ImageSize],ImgSize:%d\n",puiPara->ImgSize); + tmpValue = pMsgStruct->msgBuf.setImageSize.imageSize; + + if(tmpValue == 0) + { + puiPara->ImgSize = SF_IMG_SIZE_24M; + } + else if(tmpValue == 1) + { + puiPara->ImgSize = SF_IMG_SIZE_12M; + } + else if(tmpValue == 2) + { + puiPara->ImgSize = SF_IMG_SIZE_8M; + } + else if(tmpValue == 3) + { + puiPara->ImgSize = SF_IMG_SIZE_16M; + } + else if(tmpValue == 2) + { + puiPara->ImgSize = SF_IMG_SIZE_32M; + } + else + { + puiPara->ImgSize = SF_IMG_SIZE_8M; + } + //sf_set_img_size(puiPara->ImgSize); + + respFlag = 2; + paramSaveFlag = 1; + } + break; + + case WIFI_SET_CAMERA_MultiShot: //O + printf("Multishot:%d\nMultishotInterval:%d\n,SendMultishot:%d\n", pMsgStruct->msgBuf.setMultiShot.multiShot, + pMsgStruct->msgBuf.setMultiShot.multiInterval, + pMsgStruct->msgBuf.setMultiShot.sendMulti); + puiPara->Multishot = pMsgStruct->msgBuf.setMultiShot.multiShot % 3+1; + puiPara->MultiShotIntevel = pMsgStruct->msgBuf.setMultiShot.multiInterval % 3; + puiPara->SendMulti = pMsgStruct->msgBuf.setMultiShot.sendMulti % 2; + //sf_set_cam_mode(puiPara->CamMode); + if(puiPara->SendMulti == 0) + { + puiPara->SendMultishotIndex2 = 0; + puiPara->SendMultishotIndex3 = 0; + } + else + { + if(puiPara->Multishot == 0) + { + puiPara->SendMultishotIndex2 = 0; + puiPara->SendMultishotIndex3 = 0; + } + else if(puiPara->Multishot == 1) + { + puiPara->SendMultishotIndex2 = 1; + puiPara->SendMultishotIndex3 = 0; + } + else + { + puiPara->SendMultishotIndex2 = 1; + puiPara->SendMultishotIndex3 = 1; + } + } + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_PirSensitivity: //O + printf("[WIFI_SET_CAMERA_PirSensitivity],DigitPirSensitivity:%d\n",pMsgStruct->msgBuf.setPirSensitivity.PirSensitivity); + sf_set_pir_sensitivity_app(pMsgStruct->msgBuf.setPirSensitivity.PirSensitivity % 10); + + /*puiPara->PirSensitivity = pMsgStruct->msgBuf.setPirSensitivity.PirSensitivity % 10; + if(puiPara->PirSensitivity) + { + puiPara->TimelapseFlag = 0; + puiPara->PirSwitch = 1; + } + else + { + puiPara->PirSwitch = 0; + }*/ + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_Timer: //O + printf("[WIFI_SET_CAMERA_Timer],timer:%d\n",pMsgStruct->msgBuf.setTimer.timer); + puiPara->WorkTime1Switch = !!pMsgStruct->msgBuf.setTimer.timer; + puiPara->WorkTime[0].StartTime.Hour = pMsgStruct->msgBuf.setTimer.timerStartHour % 24; + puiPara->WorkTime[0].StartTime.Min = pMsgStruct->msgBuf.setTimer.timerStartMinute % 60; + puiPara->WorkTime[0].StopTime.Hour = pMsgStruct->msgBuf.setTimer.timerEndHour % 24; + puiPara->WorkTime[0].StopTime.Min = pMsgStruct->msgBuf.setTimer.timerEndMinute % 60; + printf("timer:%d\n", puiPara->WorkTime1Switch); + printf("TimerHstart[0]:%d\n", puiPara->WorkTime[0].StartTime.Hour); + printf("TimerMstart[0]:%d\n", puiPara->WorkTime[0].StartTime.Min); + printf("TimerHstop[0]:%d\n", puiPara->WorkTime[0].StopTime.Hour); + printf("TimerMstop[0]:%d\n", puiPara->WorkTime[0].StopTime.Min); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_MaxNum: //O + printf("[WIFI_SET_CAMERA_MaxNum],SendMaxNum:%d\n",pMsgStruct->msgBuf.setMaxNum.maxNum); + puiPara->SendMaxNum = pMsgStruct->msgBuf.setMaxNum.maxNum % 100; + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_Delay: //O + printf("[WIFI_SET_CAMERA_Delay],delay:%d\n",pMsgStruct->msgBuf.setDelay.delay); + puiPara->PirDelaySwitch = !!pMsgStruct->msgBuf.setDelay.delay; + puiPara->PirDelayTime.Hour = pMsgStruct->msgBuf.setDelay.delayHour % 24; + puiPara->PirDelayTime.Min = pMsgStruct->msgBuf.setDelay.delayMinute % 60; + puiPara->PirDelayTime.Sec = pMsgStruct->msgBuf.setDelay.delaySecond % 60; + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_SDLoop: //O + printf("[WIFI_SET_CAMERA_SDLoop],SDLoop:%d\n",pMsgStruct->msgBuf.setSDLoop.SDLoop); + puiPara->SdLoopSwitch = !!pMsgStruct->msgBuf.setSDLoop.SDLoop; + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_FlashPower: //O + printf("[WIFI_SET_CAMERA_FlashPower],flashPower:%d\n",pMsgStruct->msgBuf.setFlashPower.flashPower); + + puiPara->FlashLed = !!pMsgStruct->msgBuf.setFlashPower.flashPower; + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_NightMode: //O + printf("[WIFI_SET_CAMERA_NightMode],nightMode:%d\n",pMsgStruct->msgBuf.setNightMode.nightMode); + puiPara->NightMode = pMsgStruct->msgBuf.setNightMode.nightMode % 3; + //sf_set_img_size(puiPara->ImgSize); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_SendType: //O + printf("[WIFI_SET_CAMERA_SendType],sendType:%d\n",pMsgStruct->msgBuf.setSendType.sendType); + if(puiPara->GprsMode == 0) + { + puiPara->SendType = pMsgStruct->msgBuf.setSendType.sendType % 3; + puiPara->TimeSend1.Hour = pMsgStruct->msgBuf.setSendType.sendFirstTimeH % 24; + puiPara->TimeSend1.Min = pMsgStruct->msgBuf.setSendType.sendFirstTimeM % 60; + puiPara->TimeSend2.Hour = pMsgStruct->msgBuf.setSendType.sendSecondTimeH % 24; + puiPara->TimeSend2.Min = pMsgStruct->msgBuf.setSendType.sendSecondTimeM % 60; + + if(puiPara->SendType == 0) + { + puiPara->TimeSend1Switch = 0; + puiPara->TimeSend2Switch = 0; + //puiPara->TimeSend3 = 0; + //puiPara->TimeSend4 = 0; + } + else if(puiPara->SendType == 1) + { + puiPara->TimeSend1Switch = 1; + puiPara->TimeSend2Switch = 0; + //puiPara->TimeSend3 = 0; + //puiPara->TimeSend4 = 0; + } + else // if(puiPara->SendType == 2) + { + puiPara->TimeSend1Switch = 1; + puiPara->TimeSend2Switch = 1; + } + } + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_SMSCtrl: //O + puiPara->GprsMode = pMsgStruct->msgBuf.setSMSCtrl.SMSCtrl; + + if((puiPara->GprsMode == 1) || (puiPara->GprsMode == 2)) + { + puiPara->SendType = 0; + puiPara->TimeSend1Switch = 0; + puiPara->TimeSend2Switch = 0; + if((puiPara->GprsMode == 1) && (puiPara->PirDelaySwitch == SF_OFF)) + { + puiPara->PirDelaySwitch = SF_ON; + puiPara->PirDelayTime.Hour = 0; + puiPara->PirDelayTime.Min = 0; + puiPara->PirDelayTime.Sec = 15; + } + } + + + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_VideoSize://err + printf("[WIFI_SET_CAMERA_VideoSize],videoSize:%d\n",pMsgStruct->msgBuf.setVideoSize.videoSize); + puiPara->VideoSize = pMsgStruct->msgBuf.setVideoSize.videoSize % 3; + //forbuild appMediaAttrUpdate(puiPara.VideoSize); + //sf_set_video_size(puiPara->VideoSize); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_VideoTime: //O + printf("[WIFI_SET_CAMERA_VideoTime],videoTime:%d\n",pMsgStruct->msgBuf.setVideoTime.videoTime); + puiPara->VideoLenth = pMsgStruct->msgBuf.setVideoTime.videoTime+5; + //puiPara->VideoLenth = (puiPara->VideoLenth > 55 ? 0 : puiPara->VideoLenth); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_BatteryType: //O + printf("[WIFI_SET_CAMERA_BatteryType],batType:%d\n",pMsgStruct->msgBuf.setBatType.batType); + puiPara->BatteryType = pMsgStruct->msgBuf.setBatType.batType; + puiPara->BatteryType = (puiPara->BatteryType > 3 ? 0 : puiPara->BatteryType); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_CameraID: //O + printf("[WIFI_SET_CAMERA_CameraID],cameraID:%d\n",pMsgStruct->msgBuf.setCameraID.cameraID); + puiPara->CamNameSwitch = pMsgStruct->msgBuf.setCameraID.cameraID ? 0 : 1; + strncpy(puiPara->CamNameStr, (char *)pMsgStruct->msgBuf.setCameraID.cameraIDstr, 4); //Use SF_STRNCPY to avoid that APP has not send '\0'. + sf_camera_name_check(puiPara->CamNameStr); + puiPara->CamNameStr[4] = '\0'; + printf("Camid:%d,str:%s\n", puiPara->CamNameSwitch, puiPara->CamNameStr); + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_DateTime: //O + printf("[WIFI_SET_CAMERA_DateTime],DateAuto:%d\n",pMsgStruct->msgBuf.setDateTime.dateTimeAuto); + puiPara->DateAuto = !pMsgStruct->msgBuf.setDateTime.dateTimeAuto; //NTPAuto 0: Auto , 1: Manual + //puiPara->NTPZone = pMsgStruct->msgBuf.setDateTime.timeZone % 7; + time.Year = htons(pMsgStruct->msgBuf.setDateTime.year); + time.Mon = pMsgStruct->msgBuf.setDateTime.month % 13; + time.Day = pMsgStruct->msgBuf.setDateTime.day % 32; + time.Hour = pMsgStruct->msgBuf.setDateTime.hour % 24; + time.Min = pMsgStruct->msgBuf.setDateTime.minute % 60; + time.Sec = pMsgStruct->msgBuf.setDateTime.second % 60; + if(puiPara->DateAuto == 1) //1: Manual + { + printf("Set RTC %d %d %d %d:%d%d\n", time.Year, time.Mon, time.Day, time.Hour, time.Min, time.Sec); + sf_sys_rtc_time_set(&time); + } + respFlag = 2; + break; + + case WIFI_SET_CAMERA_GPS: //o + printf("[WIFI_SET_CAMERA_GPS],gpsSendType:%d\n",pMsgStruct->msgBuf.setGPS.gpsSendType); + #if SF_GPS_SUPPORT + puiPara->GpsSwitch = pMsgStruct->msgBuf.setGPS.gpsSwitch % 2; + puiPara->GpsNumber = pMsgStruct->msgBuf.setGPS.gpsSendType % 3; + #endif + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_timeLapse: //O + printf("[WIFI_SET_CAMERA_timeLapse],timelapse:%d\n",pMsgStruct->msgBuf.setTimeLapseTime.timelapse); + puiPara->TimelapseSwitch = pMsgStruct->msgBuf.setTimeLapseTime.timelapse % 2; + puiPara->TimelapseTime.Hour = pMsgStruct->msgBuf.setTimeLapseTime.timelapseHour % 24; + puiPara->TimelapseTime.Min = pMsgStruct->msgBuf.setTimeLapseTime.timelapseMin % 60; + puiPara->TimelapseTime.Sec = pMsgStruct->msgBuf.setTimeLapseTime.timelapseSec % 60; + if(puiPara->TimelapseSwitch) + { + sf_set_pir_sensitivity_app(0); + } + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_PicUponDailyReport: //O + printf("[WIFI_SET_CAMERA_PicUponDailyReport],picUponDailyReport:%d\n",pMsgStruct->msgBuf.setDailyReport.picUponDailyReport); + puiPara->PicUpDailyReport = pMsgStruct->msgBuf.setDailyReport.picUponDailyReport; + respFlag = 2; + paramSaveFlag = 1; + break; + + case WIFI_SET_CAMERA_WifiPWD: // + printf("[WIFI_CONTROL_CAMERA_ModifyPWD],pwd:%s\n",pMsgStruct->msgBuf.setWifiPWD.newPWD); + strncpy((char *)puiPara->WifiApPWD, (char *)pMsgStruct->msgBuf.setWifiPWD.newPWD, 16); + printf("new AP PWD: %s\n", puiPara->WifiApPWD); + paraNeedReboot = 1; + //sp5kHostMsgSend(APP_UI_MSG_WIFI_REBOOT, 0); + poweroff_mode = POWEROFF_KEYREBOOT; + //forbuild appPowerOffUiMsgSend(APP_POWER_OFF_NORMAL);/**/ + respFlag = 2; + paramSaveFlag = 1; + break; + + + case WIFI_CONTROL_CAMERA_FormatSDCard: //err + printf("[WIFI_CONTROL_CAMERA_FormatSDCard],format:%d\n",pMsgStruct->msgBuf.ctrlFormat.format); + if(pMsgStruct->msgBuf.ctrlFormat.format == 1) + { + //ret = appDiskFormat(SP5K_DRIVE_SD); + + //sf_sd_format(); + //ret = sf_sd_card_format(); + + /*if(ret == SF_SD_FORMAT_SUCUSS) + { + sleep(1); + sf_dcf_init(); + if((sf_get_sd_status() == SF_SD_FULL) || ((sf_get_sd_status() == SF_SD_OK))) + { + system("umount /sdcard/mmcblk0p1"); + sleep(1); + //system("mount /dev/mmcblk0p1 /sdcard/mmcblk0p1"); + } + ret = 0; + } + else + { + ret = 0x10; + }*/ + } + msgParse.msgBuf.camreaSetRsp.cmdRet = ret; + msgParse.msgBuf.camreaSetRsp.suffix = htons(MSG_END_FIX); + msgParse.msglen = htons(sizeof(MSG_DEV_SET_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + break; + + case WIFI_CONTROL_CAMERA_Reboot: //err + printf("[WIFI_CONTROL_CAMERA_Reboot],reboot:%d\n",pMsgStruct->msgBuf.ctrlReboot.reboot); + tmp = pMsgStruct->msgBuf.ctrlReboot.reboot; + poweroff_mode = POWEROFF_KEYREBOOT; + paraNeedReboot = 1; + //forbuild appPowerOffUiMsgSend(APP_POWER_OFF_NORMAL); + respFlag = 2; + break; + + case WIFI_CONTROL_CAMERA_Recovery: // + printf("[WIFI_CONTROL_CAMERA_Recovery]\n"); + //sf_reset_para(); + //sf_daily_report_count_clear(); + paraNeedReboot = 1; + respFlag = 2; + break; + + case WIFI_CONTROL_CAMERA_CloseAPMode: //err + printf("[WIFI_CONTROL_CAMERA_CloseAPMode]\n"); + //poweroff_mode = POWEROFF_PVDOWN; + //appGoToPoweroff(); + //appPowerOffUiMsgSend(APP_POWER_OFF_NORMAL); + //jiamin:reset all para + //app_in = 0; + //isStopStreaming = 1; + app_poweroff_time_clear(); +#if 0//forrun + poweroff_mode = POWEROFF_COUNTDOWN; +#endif + //forbuild appGoToPir(); + respFlag = 2; + break; + + case WIFI_CONTROL_CAMERA_FileTransfer: + + keyMap = ntohl(pMsgStruct->msgBuf.ctrlFileTransfer.PORT); + function = pMsgStruct->msgBuf.ctrlFileTransfer.function; + printf("[WIFI_CONTROL_CAMERA_FileTransfer], keyMap=%d, function=%d,type:%d\n",keyMap,function,pMsgStruct->msgBuf.ctrlFileTransfer.type); + if(function) + { + if(pMsgStruct->msgBuf.ctrlFileTransfer.type == 0) //thumbnail + { + //strcpy((char *)tempbuf, (char *)pMsgStruct->msgBuf.ctrlFileTransfer.fileName); + memcpy((char *)tempbuf, (char *)pMsgStruct->msgBuf.ctrlFileTransfer.fileName,strlen((char *)pMsgStruct->msgBuf.ctrlFileTransfer.fileName)); + + sprintf((char *)fileName, "%s/%s", THUMB_PATH, tempbuf); + + } + else if(pMsgStruct->msgBuf.ctrlFileTransfer.type == 1) //srouce file + { + strcpy((char *)tempbuf, (char *)pMsgStruct->msgBuf.ctrlFileTransfer.fileName); + strncpy((char *)tempbuf2, (char *)pMsgStruct->msgBuf.ctrlFileTransfer.fileName +1, 3); + + tempbuf[8] = '\0'; + sprintf((char *)fileName, "%s/DCIM/%s%s/%s%s%s", + SD_PATH, + tempbuf2, + DCF_DIR_FREE_CHAR, + DCF_FILE_FREE_CHAR, + tempbuf+4, + (tempbuf[3] == '0' ? ".JPG" : (tempbuf[3] == '1' ? ".MP4" : ".MP4"))); + } + else + { + sprintf((char *)fileName, "./%s",pMsgStruct->msgBuf.ctrlFileTransfer.fileName); + } + // printf("rec file cmd:%s\n", fileName); + } + else + { + fileName[0] = '\0'; + printf("stop send\n"); + } + + + memset((void *)&msgParse, 0, sizeof(msgParse)); + // printf("Send File:%s,addr:%x\n",fileName,(U32)&msgParse.msgBuf.rctrlFileTransferInfo.fileName[0]); + + if(fileName[0] != '\0') + { + memcpy((char *)&msgParse.msgBuf.rctrlFileTransferInfo.fileName[0], (char *)fileName+strlen((char *)fileName)-12, 12); + memcpy((char *)&msgParse.msgBuf.rctrlFileTransferInfo.filePath[0], (char *)fileName, strlen((char *)fileName)-12); + //msgParse.msgBuf.rctrlFileTransferInfo.fileName[13]=0; + // msgParse.msgBuf.rctrlFileTransferInfo.filePath[13]=0; + msgParse.msgBuf.rctrlFileTransferInfo.type = (tempbuf[3] == '0' ? 0 : (tempbuf[3] == '1' ? 1 : 1)); + } + // printf("Send File:%s,function:%d,len:%d\n",msgParse.msgBuf.rctrlFileTransferInfo.fileName,function,strlen((char *)msgParse.msgBuf.rctrlFileTransferInfo.fileName)); + if(function == 2)//download + { + fileFd = open((char *)fileName, O_RDONLY); + if(fileFd > 0) + { + fSize = sp5kFsFileSizeGet((char *)fileName); + msgParse.msgBuf.rctrlFileTransferInfo.fileSize = htonl(fSize); + // printf("fileSize = %d\n", fSize); + + stat( fileName, &fstat); + mtime = localtime((time_t *)&fstat.st_mtime); + + //forbuild sp5kFsFileTimeGet(fileName, &atime, &mtime, &ctime); + msgParse.msgBuf.rctrlFileTransferInfo.year = htons(mtime->tm_year); + 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; + + close(fileFd); + ret = sf_DataMapSet(keyMap, function, fileName, fSize); + } + else + { + ret = DATA_CMD_OPEN_FILE_FAIL;/*fileOpen fail*/ + } + } + else if(function == 1)//upload + { + fSize = ntohl(pMsgStruct->msgBuf.ctrlFileTransfer.fileSize); + ret = sf_DataMapSet(keyMap, function, fileName, fSize); + } + else //stop + { + fSize = 0; + ret = sf_DataMapSet(keyMap, function, fileName, fSize); + } + + // printf("cmdRet=0x%02x\n", ret); + + msgParse.magicNum = htons(MSG_PRE_FIX); + msgParse.msglen = htons(sizeof(MSG_DEV_FileTransfer_Infor_Rsp_T) + 2*sizeof(UINT16)); + msgParse.cmd = pMsgStruct->cmd; + msgParse.rsp = htons(MSG_WIFI_2_APP); + msgParse.msgBuf.rctrlFileTransferInfo.cmdRet = ret; + msgParse.msgBuf.rctrlFileTransferInfo.suffix = htons(MSG_END_FIX); + /* add the magic + len total 2*2 bytes; */ + temp = ntohs(msgParse.msglen); + send(fd, (void *)(&msgParse), (temp + sizeof(UINT16)*2), 0); + //usleep(1*1000); + memdump((&msgParse), (temp + sizeof(UINT16)*2)); + respFlag = 0; + break; + + case WIFI_CONTROL_CAMERA_StopTransfer: // + appSvrStopSendFile(); + respFlag = 2; + break; + + case WIFI_CONTROL_CAMERA_DeleteFile: //O + printf("[WIFI_SET_FILE_DeleteFile],fileName:%s\n",pMsgStruct->msgBuf.ctrlDelFile.fileName); + strcpy((char *)fileName, (char *)pMsgStruct->msgBuf.ctrlDelFile.fileName); + if(strlen((char *)fileName) == 12) // only file name + { + appThumbNameToKey((thumbType_t *)&fileType, &dirKey, &fileKey, fileName); + appThumbKeyToName(THUMB_320x240, fileType, dirKey, fileKey, fileName); + ret = remove((char *)fileName); + printf("delete thumb name=%s ret=%d\n",fileName,ret); + if(fileType == STILL_THUMB) + sprintf((char *)fileName,"./%3dMEDIA/%s%04d.JPG", dirKey, DCF_FILE_FREE_CHAR, fileKey); + else + sprintf((char *)fileName,"./%3dMEDIA/%s%04d.MP4", dirKey, DCF_FILE_FREE_CHAR, fileKey); + ret = remove((char *)fileName); + + } + else // path + file name + { + ret = remove((char *)fileName); + } + + msgParse.msgBuf.rctrlDelFile.cmdRet = (ret ? 1 : 0); + msgParse.msgBuf.rctrlDelFile.suffix = htons(MSG_END_FIX); + /* add the cmd + resp total 2*2 bytes */ + msgParse.msglen = htons(sizeof(MSG_DEV_DelFile_Ctrl_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + break; + + case WIFI_CONTROL_CAMERA_CheckThumb: + appCmpFileList(); + respFlag = 2; + break; + + case WIFI_CONTROL_CAMERA_SHOOT: + printf("[WIFI_SET_CAMERA_SHOOT]\n"); +#if 1 + /* during send pic, can not capture*/ + if((sf_4G_status_get() == SF_4G_SENDING) || (!((sf_sd_status_get()== SF_SD_OK) || (sf_sd_status_get()== SF_SD_FULL)))) + { + //nothing to do + } + else + { + // sf_ctrl_snap(); + + /*if(sf_get_media_work_status() == SF_MEDIA_PIC) + { + printf("Media Already PIC!\n"); + + } + else + { + + if(puiPara->CamMode == SF_CAMMODE_VIDEO) + { + sf_set_media_work_status(SF_MEDIA_VIDEO); + } + + + //turn off busy led. + //priMonitorPause =1; + sf_set_pir_monitor_flag(1); + sf_set_busy_led_off(); + usleep(100000); + + + if(sf_is_night_mode()) + { + //mw_enable_day_night_mode(1); + sf_set_day_night_mode(2); + } + else + { + //mw_enable_day_night_mode(0); + sf_set_day_night_mode(1); + } + + sf_bpi_msg_data_snd(SY_MSG_KEY_TEST_PRESS,(unsigned char*)NULL); + }*/ + } + +#endif + respFlag = 2;//forbuild + break; + + + + case WIFI_CONTROL_CAMERA_Update: // + uTemp = htonl(pMsgStruct->msgBuf.ctrlUpdate.updateType); + printf("[WIFI_CTRL_UPGRADE],fSize:%d\n",fSize); +#if 1//forbuild + //sf_app_msg_data_snd(SY_MSG_UPGRADE_FW,(unsigned char*)NULL); +#endif + respFlag = 2;//forbuild + break; + + case WIFI_CONTROL_CAMERA_Debug: //O + puiPara->DebugMode = pMsgStruct->msgBuf.setDebugMode.debugMode % 2; + printf("[WIFI_CONTROL_CAMERA_Debug]DebugMode:%d\n", puiPara->DebugMode); + if(puiPara->DebugMode) + { + //sf_led_flash_start(SF_LED_FAST_FLAH, Sf_LED_SD_G); + } + else + { + //sf_led_flash_stop(Sf_LED_SD_G); + //sf_set_sd_led_status(); + + } + paramSaveFlag = 1; + respFlag = 2; + break; +#if SF_LPA_SDK + extern void sf_4g_operator_scan(UINT8 mode); + extern void sf_network_select(UINT8 profileId); + + + case WIFI_CONTROL_CAMERA_Network_Scan: + sf_set_wifi_socket(fd); + sf_set_wifi_cmd(WIFI_CONTROL_CAMERA_Network_Scan); + sf_4g_operator_scan(pMsgStruct->msgBuf.ctrlNetworkScan.networkCtrl); + respFlag = 0; + break; + + case WIFI_CONTROL_CAMERA_Network_Select: + sf_set_wifi_socket(fd); + sf_set_wifi_cmd(WIFI_CONTROL_CAMERA_Network_Select); + sf_network_select(pMsgStruct->msgBuf.ctrlNetworkSelect.profileId); + respFlag = 0; + break; +#endif + + default: + msgParse.msgBuf.camreaSetRsp.cmdRet = -1; + msgParse.msgBuf.camreaSetRsp.suffix = htons(MSG_END_FIX); + /* add the cmd + resp total 2*2 bytes */ + msgParse.msglen = htons(sizeof(MSG_DEV_SET_Rsp_T) + 2*sizeof(UINT16) ); + respFlag = 1; + break; + } + + + if(respFlag) + { + if(paramSaveFlag) + { + //sf_set_param_save_flag(); + //sf_param_save_flash(); + } + + if(respFlag == 2) + { + msgParse.msgBuf.camreaSetRsp.cmdRet = 0; + msgParse.msgBuf.camreaSetRsp.suffix = htons(MSG_END_FIX); + msgParse.msglen = htons(sizeof(MSG_DEV_SET_Rsp_T) + 2*sizeof(UINT16) ); + } + + /* used for response */ + msgParse.magicNum = htons(MSG_PRE_FIX); + msgParse.cmd = pMsgStruct->cmd; + msgParse.rsp = htons(MSG_WIFI_2_APP); + /* add the magic + len total 2*2 bytes; */ + tmp=ntohs(msgParse.msglen); +#if 1 +#ifndef __x86_64__ + if(htons(WIFI_GET_CAMERA_CONNECT) != msgParse.cmd) +#endif + { + printf("send:\n"); + memdump((void *)(&msgParse), (tmp + sizeof(UINT16)*2)); + } +#endif + send( fd,(void *)(&msgParse), (tmp + sizeof(UINT16)*2), 0); + //printf("send cmd = %d\n", htons(msgParse.cmd)); +#if 0 + printf("[app_agent]:send msg OK, msg_len[%d],data_len:[%d],cmd:[0x%x],rsp[0x%x]\n", + (tmp+4), tmp, ntohs(msgParse.cmd), ntohs(msgParse.rsp) ); +#endif + //reply to app, then reboot + if(respFlag == 3) + { + printf("send msg wifi station\n"); + usleep(1000); + //forbuild sp5kHostMsgSend(APP_UI_MSG_WIFI_FINISH,0); + } + + if(paraNeedReboot) + { + //sf_sys_reboot(); + } + } + } + } + else + { + //continue; //modify by leib@2015-06-04; fix me fixme + //break; + offset++; + printf("offset=%d\n",offset); + } + } + + return ntohs(pMsgStruct->cmd); +} + +static int connectNum=0; +static char clientMacList[24]={0}; +#if 0 +int sf_add_ip_to_list(char *macbuf) +{ + + int ret= SF_FAILURE; + + if(clientMacList[0] == '\0') + { + strcpy(clientMacList, macbuf); + printf("Device %s add to list.\n", macbuf); + connectNum++; + + ret = SF_SUCCESS; + } + /* + else if(strcmp(macbuf, clientMacList) == 0) + { + printf("Device %s Already in list.\n", macbuf); + ret = SF_SUCCESS; + } + */ + + return ret; +} +#endif + +static void sf_delete_ip_from_list(void) +{ + if(clientMacList[0] != '\0') + { + + printf("Device %s delete from list.\n", clientMacList); + memset(clientMacList, 0, 24); + connectNum--; + return; + + } +} + + +int sf_is_ip_in_list(char *macbuf) +{ + int ret = SF_FAILURE; + + if(clientMacList[0] !='\0') + { + if(strcmp(clientMacList, macbuf) == 0) + { + ret = SF_SUCCESS; + } + } + + return ret; + +} + + + + +void *sf_server_accept_thread(void *pData) +{ + SINT32 nbytes=0; + SINT32 new_fd, clientLength, on; + + SINT32 ret = 0 ; + struct sockaddr_in cliAddr; + fd_set rdfds, wrfds, errfds; + clientContext_t *pClientContextHead = NULL ; + clientContext_t *pClient = NULL ; + SINT32 maxSD = -1; + struct timeval timeout = {10, 0}; + static int nerrno_nums =0; + int nlasterr_socket =0; + //socklen_t len; + //struct sockaddr_in addr; + struct sockaddr_in addrSend; + + //UINT8 tmpBuf[50]; + + printf("[sf_server_accept_thread] start...\n"); + + gAppSvrSocket = socket(AF_INET, SOCK_STREAM, 0); + if (gAppSvrSocket < 0) + { + printf("[Error][sf_server_accept_thread] socket,ret:%x\n", gAppSvrSocket); + return NULL; + } + + printf("[sf_server_accept_thread],Server Socket:%d\n", gAppSvrSocket); + + on = 1 ; + ret = setsockopt(gAppSvrSocket, IPPROTO_TCP, SO_KEEPALIVE, &on, sizeof(on)); + if ( ret < 0 ) + { + printf("[Error][sf_server_accept_thread] setsockopt,ret:%x\n", ret); + } + + ret = setsockopt( gAppSvrSocket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof( on ) ); + if( ret < 0 ) + { + printf("[Error][sf_server_accept_thread] SO_REUSEADDR,ret:%d \n", ret); + return NULL; + } + + memset(&addrSend, 0, sizeof(addrSend)); + //addrSend.sin_addr.s_addr = inet_addr(gAppSvrIp); + addrSend.sin_addr.s_addr = INADDR_ANY; + addrSend.sin_port = htons(gAppSvrPort); + addrSend.sin_family = AF_INET; + ret = bind(gAppSvrSocket, (struct sockaddr*)&addrSend, sizeof(addrSend)); + if( ret < 0 ) + { + printf("[Error][sf_server_accept_thread] bind:%d \n", ret); + return NULL; + } + + ret = listen(gAppSvrSocket, LISTEN_PARAM) ; + if(ret < 0) + { + printf("[Error][sf_server_accept_thread]listen:%d\n", ret); + close(gAppSvrSocket); + return NULL; + } + + clientLength = sizeof(cliAddr); + maxSD = gAppSvrSocket; + while (1) + { + + fdInitSets(pClientContextHead,gAppSvrSocket,&rdfds,&wrfds,&errfds); + timeout.tv_sec = 30; + timeout.tv_usec = 0; + ret = select(maxSD+1, &rdfds, NULL, &errfds, &timeout) ; + if (ret > 0) + { + // printf("[sf_server_accept_thread]select,rdfds:%d,errfds:%d\n",rdfds,errfds); + if (FD_ISSET(gAppSvrSocket, &rdfds)) + { + new_fd = accept(gAppSvrSocket, (struct sockaddr *) &cliAddr, (socklen_t *)&clientLength); + if (new_fd < 0) + { + printf("[Error][sf_server_accept_thread]accept:%d\n",new_fd); + continue; + } + else + { + printf("\n\n[Port:8866]new client's socket:%d --------oliver\n", new_fd); + printf("cmd client.IP:%s, Port:%d\n\n\n", inet_ntoa(cliAddr.sin_addr), htons(cliAddr.sin_port)); + + /* + if(SF_SUCCESS != sf_add_ip_to_list(inet_ntoa(cliAddr.sin_addr))) + { + printf("Already device connected ,Pls Wait!"); + continue; + } + */ + + //ret = 1 ; + //ioctlsocket(new_fd,FIONBIO,&ret); /* set/clear non-blocking i/o */ + UINT32 flags = fcntl(new_fd, F_GETFL, 0); //获取文件的flags值。 + fcntl(new_fd, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式; + + pClient = (clientContext_t *) malloc(sizeof(clientContext_t)); + memset(pClient, 0, sizeof(clientContext_t)); + pClient->socket = new_fd ; + pClientContextHead = AddClientContextToList(pClientContextHead,pClient); + if(maxSD < pClient->socket) + maxSD = pClient->socket; + memcpy(&pClient->ClientAddr, &cliAddr, sizeof(struct sockaddr_in)); + cmdClientListPrint(pClientContextHead); + } + } + + /* Error occured */ + if (FD_ISSET(gAppSvrSocket, &errfds)) + { + printf("[Error][sf_server_accept_thread] while accepting socket: %d.\n", errno/*getSocketError(gAppSvrSocket)*/); + continue; + } + + pClient = pClientContextHead ; + //appSvrResponseSocketSet(pClient->socket); //bad method it will error at socket over one---oliver + + while(pClient != NULL) + { + //sf_set_wifi_status(SF_WIFI_CON); + if (FD_ISSET(pClient->socket, &rdfds)) + { + memset(pClient->szBuffer,0,PACKET_MAX_LEN); + nbytes = recv(pClient->socket, pClient->szBuffer, PACKET_MAX_LEN, 0); + if( nbytes <= 0 ) + { + // if (FD_ISSET(pClient->socket, &errfds)) + { + printf("errno: %d,pClient->socket=%d.\n", errno,pClient->socket); + //memdump(pClient, sizeof(clientContext_t)); + if(errno != 11) + { + fdClears(pClient->socket,&rdfds,&wrfds,&errfds); + pClientContextHead = DeleteClientContext(pClientContextHead,pClient); + pClient = pClientContextHead; + printf("errno != 11; delete client\n"); + + sf_delete_ip_from_list(); + + cmdClientListPrint(pClientContextHead); + } + else + { + if(nlasterr_socket == 0) + nlasterr_socket = pClient->socket; + if(nlasterr_socket == pClient->socket) + nerrno_nums++; + if(nlasterr_socket >= 10) + { + fdClears(pClient->socket,&rdfds,&wrfds,&errfds); + printf("errno overmax; delete client,socket:%d\n",pClient->socket); + pClientContextHead = DeleteClientContext(pClientContextHead,pClient); + pClient = pClientContextHead; + + cmdClientListPrint(pClientContextHead); + } + } + continue; + } + } + else + { + //printf("[success][sf_server_accept_thread] pClient->socket=%d.\n", pClient->socket); + //memdump(pClient->szBuffer, nbytes); + } + +#if 1//debug +#ifndef __x86_64__ + if(pClient->szBuffer[5] != WIFI_GET_CAMERA_CONNECT) +#endif + { + printf("receive: %d Byte\n", nbytes); + memdump(pClient->szBuffer, nbytes); + } +#endif + + pClient->totalBytes = nbytes; + ret = sf_svr_packet_proc(pClient->socket,pClient->szBuffer,nbytes); + + /*forbuild if(gFwUpdate == 1) + { + appFirmwareUpdate(); + gFwUpdate = 0; + }*/ + } + else + { + usleep(10*1000); /* ms */ + + } + + /* Check in Exception Set */ + if (FD_ISSET(pClient->socket, &errfds)) + { + printf("[Error][sf_server_accept_thread] the socket errno: %d.\n", errno/*getSocketError(pClient->socket)*/); + fdClears(pClient->socket,&rdfds,&wrfds,&errfds); + pClient = DeleteClientContext(pClientContextHead,pClient); + printf("fordebug: delete client program dead 1\n"); + if ( pClient == NULL ) + { + pClientContextHead = NULL ; + } + printf("fordebug: delete client program dead 2\n"); + continue; + } + + /* Move to next node on the list */ + pClient = pClient->p_next ; + } + } + else if ( ret == 0 ) + { + usleep(1*1000); /* ms */ + } + else + { + printf("[Error][sf_server_accept_thread]nbytes %d,close\n", nbytes ); + pClient = pClientContextHead ; + while (pClient != NULL) + { + fdClears(pClient->socket,&rdfds,&wrfds,&errfds); + pClient = DeleteClientContext(pClientContextHead,pClient); + } + + close(gAppSvrSocket); + + gAppSvrSocket = -1; + + //sf_set_wifi_status(SF_WIFI_FAIL); + + return NULL; + } + } +} + + +void sf_server_init(SINT8 *pSvrIp, UINT16 nSvrPort) +{ + //UINT32 i, j; + //SINT32 s32Ret; + //UINT8 mac[16]; + + if(pSvrIp == NULL) + { + strcpy((char *)gAppSvrIp, "192.168.1.1"); + gAppSvrPort=8866; + } + else + { + strcpy((char *)gAppSvrIp, (char *)pSvrIp); + gAppSvrPort = nSvrPort; + } + + printf("IP:%s Port:%d\n", gAppSvrIp, gAppSvrPort); + //forbuild sf_getb_ipmac(gbAppLocalIp,gbAppLocalMac,gAppLocalIp,gAppLocalMac); + //printf("[appsvr_init_cmd]IP:%s, MAC:%s,SerialID:%s,%d.%d.%d.%d\n",gAppLocalIp ,gAppLocalMac,gAppSerialID,gbAppLocalIp[3],gbAppLocalIp[2],gbAppLocalIp[1],gbAppLocalIp[0] ); + + //forbuild sf_get_sid(gAppSerialID); + //printf("[appsvr_init_cmd]IP:%s, MAC:%s,SerialID:%s,%d.%d.%d.%d\n",gAppLocalIp ,gAppLocalMac,gAppSerialID,gbAppLocalIp[3],gbAppLocalIp[2],gbAppLocalIp[1],gbAppLocalIp[0] ); + + /*s32Ret = */pthread_create(&sf_SvrThreadId, NULL, sf_server_accept_thread, NULL); + + //usleep(5000); +} + + +static char SSID_STR[128]={0}; +void sf_get_wifi_ssid(char *ssid) +{ + if(SSID_STR[0] != '\0') + { + strcpy(ssid, SSID_STR); + printf("SSID:%s\n", ssid); + } + return; +} + +UINT8 sf_get_wifi_type(void) +{ + static int read_flag = 0; + static UINT8 wifi_type = WIFI_TYPE_NONE; + + if (!read_flag) { + read_flag = 1; + char str_content[256]={0}; + char *file_path = "/sys/bus/sdio/devices/mmc1:0001:1/uevent"; + FILE *fp = NULL; + //int retryTime=0; + fp = fopen(file_path, "r"); + + if(NULL == fp) + { + return wifi_type; + } + + + /* + while (NULL == fp) { + printf("****Open %s error\n", file_path); + if(retryTime>5) + { + read_flag = 0; + return WIFI_TYPE_NONE; + } + sleep(1); + retryTime++; + + fp = fopen(file_path, "r"); + } + + */ + + while(fgets(str_content, 256, fp) != NULL) + { + + printf("Wifi File content:%s\n", str_content); + + if(strstr(str_content, "024C:F179") != NULL) + { + wifi_type = WIFI_TYPE_8189FS; + } + else if(strstr(str_content, "0296:5347") != NULL) + { + wifi_type = WIFI_TYPE_HI3881; + } + + } + + fclose(fp); + read_flag = 0; + } + + return wifi_type; +} + + + +int sf_getb_mac(char *ifName, UINT8 *pbMacAddr) +{ + struct ifreq ifreq; + int sock = 0; + int i = 0; + + sock = socket(AF_INET, SOCK_STREAM, 0); + if(sock < 0) + { + printf("error sock"); + return 2; + } + + strcpy(ifreq.ifr_name, ifName); + if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0) + { + printf("error ioctl"); + return 3; + } + + for(i = 0; i < 6; i++) + { + pbMacAddr[i]=(unsigned char)ifreq.ifr_hwaddr.sa_data[i]; + } + + printf("MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", pbMacAddr[0],pbMacAddr[1],pbMacAddr[2],pbMacAddr[3],pbMacAddr[4],pbMacAddr[5]); + + return 0; +} + +void sf_wifi_hw_init(void) +{ + int ret=0; + UINT8 smac[12]= {0}; + char scmd[256]= {0}; + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + char sSSID[128]= {0}; + + //ret = system("modprobe cfg80211"); + + if(WIFI_TYPE_8189FS == sf_get_wifi_type()) + { + //ret = system("insmod /appfs/8189fs.ko"); + //sleep(2); + + sf_getb_mac(SF_WIFI_NETDEV_8189_NAME, smac); + // ret = system("ifconfig ap0 192.168.1.1 netmask 255.255.255.0 up"); + // ret = system("hostapd -ddd /etc/hostapd/hostapd.conf &"); + sprintf(sSSID,"REVEAL_%02X%02X%02X",smac[3],smac[4],smac[5]); + + strcpy(SSID_STR, sSSID); + + ret = system("ifconfig wlan0 192.168.1.1 netmask 255.255.255.0 up"); + //ret = system("hostapd -ddd /appfs/etc/hostapd/hostapd-8189.conf &"); + //ret = system("udhcpd /appfs/etc/udhcpd-8189.conf"); + + sprintf(scmd,"/appfs/bin/hostap.sh wpawpa2 %s %s 6 %s",sSSID,puiPara->WifiApPWD,SF_WIFI_NETDEV_8189_NAME); + ret = system(scmd); + ret = system("udhcpd /appfs/etc/udhcpd-8189.conf"); + } + else if(WIFI_TYPE_HI3881 == sf_get_wifi_type()) + { + //ret = system("insmod /appfs/hi3881.ko g_mode=1"); + //sleep(2); + + sf_getb_mac(SF_WIFI_NETDEV_NAME, smac); + // ret = system("ifconfig ap0 192.168.1.1 netmask 255.255.255.0 up"); + // ret = system("hostapd -ddd /etc/hostapd/hostapd.conf &"); + sprintf(sSSID,"REVEAL_%02X%02X%02X",smac[3],smac[4],smac[5]); + + strcpy(SSID_STR, sSSID); + sprintf(scmd,"echo \"ap0 alg_cfg tpc_mode 0\" >/sys/hisys/hipriv "); + ret =system(scmd); + sprintf(scmd,"echo \"ap0 intrf_mode 0 0 0 0 0\" >/sys/hisys/hipriv "); + ret =system(scmd); + sprintf(scmd,"echo \"ap0 set_sta_pm_on 0\" >/sys/hisys/hipriv "); + ret =system(scmd); + printf("%s",scmd); + + sprintf(scmd,"/appfs/bin/hostap.sh wpawpa2 %s %s 6 %s",sSSID,puiPara->WifiApPWD,SF_WIFI_NETDEV_NAME); + ret = system(scmd); + ret = system("udhcpd /appfs/etc/udhcpd.conf"); + } + else + { + //sf_mcu_rebootall(0); + } + + if(ret != 0) + { + printf("wifi hw init failed!scmd:%s\n",scmd); + } +} + +void *sf_wifi_sevrer_init(void *pNull) +{ + startTime = times(NULL); + // UINT32 pSDStatus, pSDFree, pSDTotalSize; + //sf_get_sd_info(&pSDStatus, &pSDFree, &pSDTotalSize);//fordebug + //usleep(1000*1000); + + sf_DataSvrInit(); + printf("wifi server data channel start....\n"); + appSvrSendInit(); + sf_server_init(NULL, 0); + printf("wifi server start\n"); + sf_sys_status_led_set(SF_LED_SYS_STATE_WIFI_CONNECTED); + sf_set_wifi_status(SF_WIFI_OK); + //sf_wifi_led_light_up_start(); +#if 0 + while(1)//(!poweroff_mode) + { + //sleep(1); + UINT8 buf[20]; + sleep(1); + printf("cmd>"); + scanf("%s", buf); + if(strstr((char *)buf, "ui")) + { + sf_UiParaPrint(); + } + else if(strstr((char *)buf, "cl")) + { + dataClientListPrint(); + } + else if(strstr((char *)buf, "delay")) + { + puiPara.DelayFlag = 0; + sf_UIParaSave(); + } + else if(strstr((char *)buf, "sd")) + { + sf_format_sd_card(); + } + else if(strstr((char *)buf, "del")) + { + printf("del:%d\no", remove("/app/sd/1.txt")); + } + } +#endif + while(1) + sleep(5); + return NULL; +} + + +void sf_wifi_app_start(void) +{ + pthread_t tid; + + sf_wifi_hw_init(); + sleep(1); + + pthread_create(&tid,NULL,(void*)sf_wifi_sevrer_init,(void *)NULL); +} + diff --git a/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi b/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi index 2ac455571..a7e23d51f 100755 --- a/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi +++ b/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi @@ -7,7 +7,7 @@ version-info = [00 01 00 01]; ae_expect_lum { 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 { size = [50 01 00 00]; @@ -15,7 +15,7 @@ }; ae_over_exposure { 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 { size = [2c 00 00 00]; @@ -23,11 +23,11 @@ }; ae_curve_gen_movie { 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 { 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 { size = [82 00 00 00]; diff --git a/code/hdal/vendor/isp/configs/dtsi/os05b10_awb_0.dtsi b/code/hdal/vendor/isp/configs/dtsi/os05b10_awb_0.dtsi index ea082ad4e..dbeef5544 100755 --- a/code/hdal/vendor/isp/configs/dtsi/os05b10_awb_0.dtsi +++ b/code/hdal/vendor/isp/configs/dtsi/os05b10_awb_0.dtsi @@ -19,7 +19,7 @@ }; awb_target { 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 { size = [60 00 00 00]; diff --git a/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi b/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi index 3b6a70520..2774d6a71 100755 --- a/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi +++ b/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi @@ -11,7 +11,7 @@ }; iq_nr { size = [f4 12 00 00]; - data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 08 00 00 00 00 00 00 00 69 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 07 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 00 00 00 00 07 00 00 00 0a 00 00 00 0c 00 00 00 0e 00 00 00 10 00 00 00 11 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 08 00 00 00 00 00 00 00 64 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 05 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 0a 00 00 00 0f 00 00 00 12 00 00 00 15 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2b 00 00 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 0c 00 00 00 11 00 00 00 15 00 00 00 18 00 00 00 1b 00 00 00 1e 00 00 00 20 00 00 00 23 00 00 00 25 00 00 00 27 00 00 00 29 00 00 00 2a 00 00 00 2c 00 00 00 2e 00 00 00 30 00 00 00 31 00 00 00 0c 00 00 00 00 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 01 95 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 04 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 12 00 00 00 14 00 00 00 17 00 00 00 19 00 00 00 1b 00 00 00 1d 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 13 00 00 00 1b 00 00 00 21 00 00 00 26 00 00 00 2a 00 00 00 2f 00 00 00 32 00 00 00 36 00 00 00 39 00 00 00 3c 00 00 00 3f 00 00 00 42 00 00 00 45 00 00 00 47 00 00 00 4a 00 00 00 4c 00 00 00 0e 00 00 00 00 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 08 00 00 00 0b 00 00 00 0d 00 00 00 10 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 18 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 1d 00 00 00 1e 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 11 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 0d 00 00 00 08 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 05 00 00 00 08 00 00 00 0a 00 00 00 0b 00 00 00 10 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0e 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 10 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 00 00 00 00 06 00 00 00 09 00 00 00 0b 00 00 00 0c 00 00 00 12 00 00 00 00 00 00 00 16 00 00 00 20 00 00 00 27 00 00 00 2d 00 00 00 32 00 00 00 37 00 00 00 3c 00 00 00 40 00 00 00 44 00 00 00 48 00 00 00 4b 00 00 00 4e 00 00 00 52 00 00 00 55 00 00 00 58 00 00 00 5b 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; + data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 cd 05 00 00 92 09 00 00 e1 0d 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 0b 00 00 00 0c 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 0d 00 00 00 0c 00 00 00 64 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0c 00 00 00 06 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 01 95 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 12 00 00 00 14 00 00 00 17 00 00 00 19 00 00 00 1b 00 00 00 1d 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 00 00 00 00 0f 00 00 00 15 00 00 00 1a 00 00 00 1e 00 00 00 21 00 00 00 25 00 00 00 28 00 00 00 2a 00 00 00 2d 00 00 00 30 00 00 00 32 00 00 00 34 00 00 00 36 00 00 00 38 00 00 00 3a 00 00 00 3c 00 00 00 0e 00 00 00 03 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 08 00 00 00 0b 00 00 00 0d 00 00 00 10 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 18 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 1d 00 00 00 1e 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 11 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0f 00 00 00 03 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 05 00 00 00 08 00 00 00 0a 00 00 00 0b 00 00 00 10 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0f 00 00 00 01 00 00 00 50 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 10 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 00 00 00 00 06 00 00 00 09 00 00 00 0b 00 00 00 0c 00 00 00 12 00 00 00 00 00 00 00 16 00 00 00 20 00 00 00 27 00 00 00 2d 00 00 00 32 00 00 00 37 00 00 00 3c 00 00 00 40 00 00 00 44 00 00 00 48 00 00 00 4b 00 00 00 4e 00 00 00 52 00 00 00 55 00 00 00 58 00 00 00 5b 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; }; iq_cfa { size = [54 05 00 00]; @@ -23,31 +23,31 @@ }; iq_gamma { size = [94 0e 00 00]; - data = [00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 19 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 32 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 4b 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 64 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 00 00 00 00 25 00 00 00 49 00 00 00 6b 00 00 00 8b 00 00 00 a9 00 00 00 c6 00 00 00 e1 00 00 00 f1 00 00 00 01 01 00 00 11 01 00 00 21 01 00 00 30 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 68 01 00 00 75 01 00 00 82 01 00 00 8f 01 00 00 9b 01 00 00 a6 01 00 00 b1 01 00 00 bc 01 00 00 c7 01 00 00 d1 01 00 00 db 01 00 00 e4 01 00 00 ed 01 00 00 f6 01 00 00 fe 01 00 00 06 02 00 00 0d 02 00 00 14 02 00 00 1b 02 00 00 22 02 00 00 29 02 00 00 30 02 00 00 36 02 00 00 3d 02 00 00 44 02 00 00 4b 02 00 00 52 02 00 00 59 02 00 00 5f 02 00 00 66 02 00 00 6d 02 00 00 73 02 00 00 7a 02 00 00 80 02 00 00 87 02 00 00 8d 02 00 00 93 02 00 00 9a 02 00 00 a0 02 00 00 a6 02 00 00 ac 02 00 00 b3 02 00 00 b9 02 00 00 bf 02 00 00 c5 02 00 00 cb 02 00 00 d1 02 00 00 d7 02 00 00 dd 02 00 00 e3 02 00 00 e8 02 00 00 ee 02 00 00 f4 02 00 00 fa 02 00 00 ff 02 00 00 04 03 00 00 09 03 00 00 0e 03 00 00 13 03 00 00 18 03 00 00 1d 03 00 00 21 03 00 00 26 03 00 00 2b 03 00 00 30 03 00 00 35 03 00 00 3a 03 00 00 3e 03 00 00 43 03 00 00 48 03 00 00 4d 03 00 00 51 03 00 00 56 03 00 00 5b 03 00 00 5f 03 00 00 64 03 00 00 68 03 00 00 6d 03 00 00 72 03 00 00 76 03 00 00 7b 03 00 00 7f 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 91 03 00 00 95 03 00 00 99 03 00 00 9e 03 00 00 a2 03 00 00 a6 03 00 00 ab 03 00 00 af 03 00 00 b3 03 00 00 b7 03 00 00 bb 03 00 00 bf 03 00 00 c4 03 00 00 c8 03 00 00 cc 03 00 00 d0 03 00 00 d4 03 00 00 d8 03 00 00 dc 03 00 00 e0 03 00 00 e4 03 00 00 e8 03 00 00 eb 03 00 00 ef 03 00 00 f3 03 00 00 f7 03 00 00 fb 03 00 00 ff 03 00 00 07 00 00 00 00 00 00 00 23 00 00 00 44 00 00 00 61 00 00 00 7d 00 00 00 98 00 00 00 b1 00 00 00 c4 00 00 00 d7 00 00 00 e9 00 00 00 fb 00 00 00 0c 01 00 00 1d 01 00 00 2c 01 00 00 3b 01 00 00 49 01 00 00 57 01 00 00 64 01 00 00 72 01 00 00 7f 01 00 00 8c 01 00 00 98 01 00 00 a5 01 00 00 b1 01 00 00 bd 01 00 00 c9 01 00 00 d5 01 00 00 e0 01 00 00 eb 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 16 02 00 00 20 02 00 00 2a 02 00 00 34 02 00 00 3e 02 00 00 48 02 00 00 51 02 00 00 5a 02 00 00 63 02 00 00 6c 02 00 00 75 02 00 00 7e 02 00 00 86 02 00 00 8e 02 00 00 96 02 00 00 9e 02 00 00 a6 02 00 00 ae 02 00 00 b5 02 00 00 bd 02 00 00 c4 02 00 00 cb 02 00 00 d2 02 00 00 d9 02 00 00 e0 02 00 00 e7 02 00 00 ed 02 00 00 f4 02 00 00 fa 02 00 00 00 03 00 00 06 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1d 03 00 00 23 03 00 00 28 03 00 00 2e 03 00 00 33 03 00 00 38 03 00 00 3d 03 00 00 42 03 00 00 47 03 00 00 4c 03 00 00 51 03 00 00 56 03 00 00 5a 03 00 00 5f 03 00 00 63 03 00 00 67 03 00 00 6c 03 00 00 70 03 00 00 74 03 00 00 78 03 00 00 7c 03 00 00 80 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 8f 03 00 00 93 03 00 00 97 03 00 00 9a 03 00 00 9e 03 00 00 a1 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 ce 03 00 00 d1 03 00 00 d3 03 00 00 d6 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e2 03 00 00 e4 03 00 00 e7 03 00 00 ea 03 00 00 ed 03 00 00 ef 03 00 00 f2 03 00 00 f5 03 00 00 f7 03 00 00 fa 03 00 00 fc 03 00 00 ff 03 00 00 05 00 00 00 00 00 00 00 2b 00 00 00 50 00 00 00 6a 00 00 00 86 00 00 00 a2 00 00 00 bd 00 00 00 d5 00 00 00 ec 00 00 00 00 01 00 00 11 01 00 00 21 01 00 00 2e 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 6a 01 00 00 78 01 00 00 86 01 00 00 93 01 00 00 a0 01 00 00 ad 01 00 00 ba 01 00 00 c6 01 00 00 d3 01 00 00 df 01 00 00 ea 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 17 02 00 00 22 02 00 00 2c 02 00 00 36 02 00 00 40 02 00 00 4a 02 00 00 54 02 00 00 5d 02 00 00 66 02 00 00 70 02 00 00 78 02 00 00 81 02 00 00 8a 02 00 00 92 02 00 00 9a 02 00 00 a2 02 00 00 aa 02 00 00 b2 02 00 00 ba 02 00 00 c1 02 00 00 c9 02 00 00 d0 02 00 00 d7 02 00 00 de 02 00 00 e5 02 00 00 eb 02 00 00 f2 02 00 00 f8 02 00 00 fe 02 00 00 04 03 00 00 0b 03 00 00 10 03 00 00 16 03 00 00 1c 03 00 00 22 03 00 00 27 03 00 00 2c 03 00 00 32 03 00 00 37 03 00 00 3c 03 00 00 41 03 00 00 46 03 00 00 4b 03 00 00 4f 03 00 00 54 03 00 00 59 03 00 00 5d 03 00 00 61 03 00 00 66 03 00 00 6a 03 00 00 6e 03 00 00 72 03 00 00 76 03 00 00 7a 03 00 00 7e 03 00 00 82 03 00 00 86 03 00 00 89 03 00 00 8d 03 00 00 91 03 00 00 94 03 00 00 98 03 00 00 9b 03 00 00 9e 03 00 00 a2 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 be 03 00 00 c1 03 00 00 c3 03 00 00 c6 03 00 00 c9 03 00 00 cc 03 00 00 cf 03 00 00 d1 03 00 00 d4 03 00 00 d7 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e1 03 00 00 e4 03 00 00 e6 03 00 00 e9 03 00 00 eb 03 00 00 ee 03 00 00 f0 03 00 00 f3 03 00 00 f5 03 00 00 f8 03 00 00 fa 03 00 00 fd 03 00 00 ff 03 00 00]; + data = [00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1d 00 00 00 39 00 00 00 56 00 00 00 72 00 00 00 8e 00 00 00 aa 00 00 00 c4 00 00 00 dd 00 00 00 ee 00 00 00 ff 00 00 00 0f 01 00 00 20 01 00 00 2f 01 00 00 3e 01 00 00 4e 01 00 00 5e 01 00 00 6d 01 00 00 7d 01 00 00 8c 01 00 00 9c 01 00 00 ab 01 00 00 bb 01 00 00 cb 01 00 00 db 01 00 00 fa 01 00 00 19 02 00 00 38 02 00 00 58 02 00 00 77 02 00 00 96 02 00 00 b6 02 00 00 d5 02 00 00 f4 02 00 00 13 03 00 00 32 03 00 00 52 03 00 00 90 03 00 00 cf 03 00 00 0d 04 00 00 4b 04 00 00 c8 04 00 00 45 05 00 00 c2 05 00 00 3f 06 00 00 bc 06 00 00 38 07 00 00 b5 07 00 00 32 08 00 00 af 08 00 00 2c 09 00 00 a9 09 00 00 25 0a 00 00 a2 0a 00 00 1f 0b 00 00 9c 0b 00 00 19 0c 00 00 96 0c 00 00 12 0d 00 00 8f 0d 00 00 0c 0e 00 00 89 0e 00 00 06 0f 00 00 83 0f 00 00 ff 0f 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 19 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 32 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 4b 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 64 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 00 00 00 00 25 00 00 00 49 00 00 00 6b 00 00 00 8b 00 00 00 a9 00 00 00 c6 00 00 00 e1 00 00 00 f1 00 00 00 01 01 00 00 11 01 00 00 21 01 00 00 30 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 68 01 00 00 75 01 00 00 82 01 00 00 8f 01 00 00 9b 01 00 00 a6 01 00 00 b1 01 00 00 bc 01 00 00 c7 01 00 00 d1 01 00 00 db 01 00 00 e4 01 00 00 ed 01 00 00 f6 01 00 00 fe 01 00 00 06 02 00 00 0d 02 00 00 14 02 00 00 1b 02 00 00 22 02 00 00 29 02 00 00 30 02 00 00 36 02 00 00 3d 02 00 00 44 02 00 00 4b 02 00 00 52 02 00 00 59 02 00 00 5f 02 00 00 66 02 00 00 6d 02 00 00 73 02 00 00 7a 02 00 00 80 02 00 00 87 02 00 00 8d 02 00 00 93 02 00 00 9a 02 00 00 a0 02 00 00 a6 02 00 00 ac 02 00 00 b3 02 00 00 b9 02 00 00 bf 02 00 00 c5 02 00 00 cb 02 00 00 d1 02 00 00 d7 02 00 00 dd 02 00 00 e3 02 00 00 e8 02 00 00 ee 02 00 00 f4 02 00 00 fa 02 00 00 ff 02 00 00 04 03 00 00 09 03 00 00 0e 03 00 00 13 03 00 00 18 03 00 00 1d 03 00 00 21 03 00 00 26 03 00 00 2b 03 00 00 30 03 00 00 35 03 00 00 3a 03 00 00 3e 03 00 00 43 03 00 00 48 03 00 00 4d 03 00 00 51 03 00 00 56 03 00 00 5b 03 00 00 5f 03 00 00 64 03 00 00 68 03 00 00 6d 03 00 00 72 03 00 00 76 03 00 00 7b 03 00 00 7f 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 91 03 00 00 95 03 00 00 99 03 00 00 9e 03 00 00 a2 03 00 00 a6 03 00 00 ab 03 00 00 af 03 00 00 b3 03 00 00 b7 03 00 00 bb 03 00 00 bf 03 00 00 c4 03 00 00 c8 03 00 00 cc 03 00 00 d0 03 00 00 d4 03 00 00 d8 03 00 00 dc 03 00 00 e0 03 00 00 e4 03 00 00 e8 03 00 00 eb 03 00 00 ef 03 00 00 f3 03 00 00 f7 03 00 00 fb 03 00 00 ff 03 00 00 07 00 00 00 00 00 00 00 23 00 00 00 44 00 00 00 61 00 00 00 7d 00 00 00 98 00 00 00 b1 00 00 00 c4 00 00 00 d7 00 00 00 e9 00 00 00 fb 00 00 00 0c 01 00 00 1d 01 00 00 2c 01 00 00 3b 01 00 00 49 01 00 00 57 01 00 00 64 01 00 00 72 01 00 00 7f 01 00 00 8c 01 00 00 98 01 00 00 a5 01 00 00 b1 01 00 00 bd 01 00 00 c9 01 00 00 d5 01 00 00 e0 01 00 00 eb 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 16 02 00 00 20 02 00 00 2a 02 00 00 34 02 00 00 3e 02 00 00 48 02 00 00 51 02 00 00 5a 02 00 00 63 02 00 00 6c 02 00 00 75 02 00 00 7e 02 00 00 86 02 00 00 8e 02 00 00 96 02 00 00 9e 02 00 00 a6 02 00 00 ae 02 00 00 b5 02 00 00 bd 02 00 00 c4 02 00 00 cb 02 00 00 d2 02 00 00 d9 02 00 00 e0 02 00 00 e7 02 00 00 ed 02 00 00 f4 02 00 00 fa 02 00 00 00 03 00 00 06 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1d 03 00 00 23 03 00 00 28 03 00 00 2e 03 00 00 33 03 00 00 38 03 00 00 3d 03 00 00 42 03 00 00 47 03 00 00 4c 03 00 00 51 03 00 00 56 03 00 00 5a 03 00 00 5f 03 00 00 63 03 00 00 67 03 00 00 6c 03 00 00 70 03 00 00 74 03 00 00 78 03 00 00 7c 03 00 00 80 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 8f 03 00 00 93 03 00 00 97 03 00 00 9a 03 00 00 9e 03 00 00 a1 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 ce 03 00 00 d1 03 00 00 d3 03 00 00 d6 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e2 03 00 00 e4 03 00 00 e7 03 00 00 ea 03 00 00 ed 03 00 00 ef 03 00 00 f2 03 00 00 f5 03 00 00 f7 03 00 00 fa 03 00 00 fc 03 00 00 ff 03 00 00 05 00 00 00 00 00 00 00 0d 00 00 00 1f 00 00 00 33 00 00 00 4b 00 00 00 65 00 00 00 82 00 00 00 9c 00 00 00 b6 00 00 00 cd 00 00 00 e3 00 00 00 f7 00 00 00 0a 01 00 00 1c 01 00 00 2e 01 00 00 3e 01 00 00 4e 01 00 00 5d 01 00 00 6c 01 00 00 7a 01 00 00 88 01 00 00 95 01 00 00 a1 01 00 00 ad 01 00 00 b9 01 00 00 c6 01 00 00 d2 01 00 00 de 01 00 00 ea 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 17 02 00 00 22 02 00 00 2d 02 00 00 37 02 00 00 42 02 00 00 4c 02 00 00 56 02 00 00 5f 02 00 00 69 02 00 00 72 02 00 00 7b 02 00 00 84 02 00 00 8d 02 00 00 96 02 00 00 9e 02 00 00 a7 02 00 00 af 02 00 00 b7 02 00 00 bf 02 00 00 c7 02 00 00 ce 02 00 00 d5 02 00 00 dd 02 00 00 e4 02 00 00 eb 02 00 00 f2 02 00 00 f8 02 00 00 ff 02 00 00 05 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1e 03 00 00 24 03 00 00 2a 03 00 00 2f 03 00 00 35 03 00 00 3a 03 00 00 3f 03 00 00 44 03 00 00 4a 03 00 00 4e 03 00 00 53 03 00 00 58 03 00 00 5d 03 00 00 61 03 00 00 66 03 00 00 6a 03 00 00 6f 03 00 00 73 03 00 00 77 03 00 00 7b 03 00 00 7f 03 00 00 83 03 00 00 87 03 00 00 8b 03 00 00 8e 03 00 00 92 03 00 00 96 03 00 00 99 03 00 00 9d 03 00 00 a0 03 00 00 a3 03 00 00 a7 03 00 00 aa 03 00 00 ad 03 00 00 b0 03 00 00 b3 03 00 00 b6 03 00 00 ba 03 00 00 bc 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 cd 03 00 00 d0 03 00 00 d3 03 00 00 d5 03 00 00 d8 03 00 00 db 03 00 00 dd 03 00 00 e0 03 00 00 e2 03 00 00 e5 03 00 00 e7 03 00 00 ea 03 00 00 ec 03 00 00 ef 03 00 00 f1 03 00 00 f3 03 00 00 f6 03 00 00 f8 03 00 00 fa 03 00 00 fd 03 00 00 ff 03 00 00]; }; iq_ccm { size = [40 02 00 00]; - data = [00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 19 00 00 47 01 a9 ff 10 00 a7 ff 9a 01 c0 ff 0b 00 82 ff 73 01 82 84 80 80 80 86 8b 82 7e 7e 7e 80 80 80 80 80 80 80 80 80 80 80 80 84 00 00 ed ff ff ff f2 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 17 00 00 00 24 00 00 00 30 00 00 00 1a 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f5 ff ff ff d8 0e 00 00 38 01 be ff 09 00 8f ff 80 01 f1 ff 08 00 6b ff 8c 01 84 82 80 80 80 86 86 84 80 7e 80 80 80 80 80 80 80 80 80 80 80 80 80 86 00 00 eb ff ff ff f5 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 0e 00 00 00 13 00 00 00 1f 00 00 00 2c 00 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f3 ff ff ff a0 0b 00 00 38 01 cd ff fb ff 66 ff b0 01 eb ff 25 00 ca fe 11 02 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 19 00 00 63 01 a7 ff 0f 00 a7 ff 9a 01 c0 ff 0b 00 82 ff 73 01 82 88 91 88 8b 8b 88 86 84 7e 7e 80 80 80 80 80 80 80 80 80 80 80 80 84 00 00 fa ff ff ff fc ff ff ff 04 00 00 00 05 00 00 00 0f 00 00 00 18 00 00 00 24 00 00 00 31 00 00 00 3e 00 00 00 1d 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc ff ff ff d8 0e 00 00 4c 01 be ff 09 00 8f ff 80 01 f1 ff 08 00 6b ff 8c 01 82 82 8b 8b 88 88 88 86 84 7e 80 80 80 80 80 80 80 80 80 80 80 80 80 86 00 00 f3 ff ff ff fe ff ff ff 00 00 00 00 06 00 00 00 0c 00 00 00 15 00 00 00 1d 00 00 00 29 00 00 00 35 00 00 00 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 ff ff ff a0 0b 00 00 38 01 cd ff fb ff 66 ff b0 01 eb ff 25 00 ca fe 11 02 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]; }; iq_color { size = [ec 06 00 00]; - data = [00 00 00 00 80 80 40 10 00 00 00 00 00 00 00 00 00 00 00 00 00 14 0f 0a 05 00 00 00 00 00 00 00 00 00 05 0a 0f 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 9e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 00 00 00 80 00 00 00 8a 00 00 00 94 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 8d aa 58 33 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 7c ff b7 7e 4f 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 64 00 00 00 73 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 82 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 6e c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 46 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 78 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00]; + data = [00 00 00 00 80 80 40 10 00 00 00 00 00 00 00 00 00 00 00 00 00 14 0f 0a 05 00 00 00 00 00 00 00 00 00 05 0a 0f 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 a3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 00 00 00 80 00 00 00 8a 00 00 00 94 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 94 aa 58 33 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 7c ff b7 7e 4f 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 64 00 00 00 73 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 82 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 6e c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 46 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 78 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00]; }; iq_contrast { size = [b0 00 00 00]; - data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 87 05 05 0a 19 19 19 19 0f 05 87 05 05 0a 14 21 21 1d 11 0a 87 04 04 12 1e 25 25 1e 1b 17 8d 0a 18 26 32 3f 49 44 39 2d 8d 04 05 12 1e 2b 35 30 25 19 97 1e 1e 1e 1e 1e 1e 1e 1e 1e af 1e 1e 1e 1e 1e 1e 1e 1e 1e be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 19 19 1e 23 23 23 23 23 19 87 19 19 1e 28 35 35 31 25 1e 88 2b 2f 35 37 3c 3c 35 32 2e 8d 15 1f 28 30 37 37 37 37 2d 97 0e 0f 1c 28 28 28 28 28 23 96 00 0a 19 1e 1e 1e 1e 14 0a 96 00 05 0a 14 14 14 14 0a 00 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; }; iq_edge { size = [e0 05 00 00]; - data = [01 00 00 00 00 00 00 00 80 00 00 00 31 00 00 00 00 30 60 82 a0 c8 e0 ff ff e0 c0 aa 9a 90 88 80 1e 30 3c 46 52 55 55 55 55 55 55 4f 4f 4e 4e 4e 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 08 00 00 00 28 00 00 00 f0 00 00 00 00 01 00 00 40 50 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 8c 00 00 00 78 00 00 00 04 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 48 00 00 00 60 00 00 00 6e 00 00 00 82 00 00 00 2a 60 00 00 b4 00 00 00 80 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 82 00 00 00 82 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 02 00 00 00 54 00 00 00 6e 00 00 00 87 00 00 00 a0 00 00 00 14 60 00 00 e1 00 00 00 b4 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8b 00 00 00 78 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 64 00 00 00 87 00 00 00 91 00 00 00 9a 00 00 00 18 50 00 00 00 02 00 00 b4 00 00 00 00 00 00 00 7e 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 80 00 00 00 6e 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 80 00 00 00 96 00 00 00 a0 00 00 00 dc 00 00 00 18 50 00 00 2b 01 00 00 b4 00 00 00 00 00 00 00 7e 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 88 00 00 00 54 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 a0 00 00 00 bc 00 00 00 cd 00 00 00 f0 00 00 00 18 60 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 7e 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 6e 00 00 00 46 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 0e 01 00 00 40 01 00 00 54 01 00 00 96 01 00 00 18 60 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 7e 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 50 00 00 00 50 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 c4 00 00 00 7c 01 00 00 90 01 00 00 c2 01 00 00 20 54 00 00 00 01 00 00 b4 00 00 00 1c 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 d2 00 00 00 fc 00 00 00 00 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 46 00 00 00 18 01 00 00 42 01 00 00 5e 01 00 00 14 80 00 00 80 00 00 00 b4 00 00 00 2a 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 0e 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 5a 00 00 00 5a 00 00 00 09 00 00 00 06 00 00 00 04 00 00 00 04 00 00 00 18 01 00 00 5e 01 00 00 7a 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 0f 00 00 00 80 00 00 00 01 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 01 00 00 00 03 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 18 01 00 00 5e 01 00 00 85 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 18 01 00 00 bc 01 00 00 53 02 00 00 5b 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 01 00 00 be 01 00 00 58 02 00 00 6c 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00]; + data = [01 00 00 00 00 00 00 00 80 00 00 00 31 00 00 00 21 49 6a 85 a9 d1 ef ff ff e0 c0 aa 9a 90 88 80 28 30 36 3a 40 48 4b 4b 4b 4b 46 46 46 46 46 46 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 08 00 00 00 28 00 00 00 f0 00 00 00 00 01 00 00 40 50 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 0a 00 00 00 08 00 00 00 04 00 00 00 02 00 00 00 48 00 00 00 70 00 00 00 7e 00 00 00 82 00 00 00 18 50 00 00 c8 00 00 00 b4 00 00 00 00 00 00 00 5f 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 78 00 00 00 78 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 54 00 00 00 7e 00 00 00 87 00 00 00 a0 00 00 00 14 50 00 00 b4 00 00 00 64 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 00 00 00 00 3c 00 00 00 62 00 00 00 70 00 00 00 7e 00 00 00 30 50 00 00 af 00 00 00 46 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 01 00 00 00 46 00 00 00 5f 00 00 00 64 00 00 00 82 00 00 00 30 50 00 00 b0 00 00 00 50 00 00 00 00 00 00 00 79 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 a0 00 00 00 8c 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 a0 00 00 00 bc 00 00 00 d2 00 00 00 f0 00 00 00 20 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 69 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 0e 01 00 00 40 01 00 00 54 01 00 00 96 01 00 00 12 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 48 00 00 00 48 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 c4 00 00 00 7c 01 00 00 a4 01 00 00 c2 01 00 00 14 46 00 00 00 01 00 00 b4 00 00 00 1c 00 00 00 64 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 d2 00 00 00 fc 00 00 00 00 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 46 00 00 00 18 01 00 00 42 01 00 00 5e 01 00 00 14 80 00 00 80 00 00 00 b4 00 00 00 2a 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 0e 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 5a 00 00 00 5a 00 00 00 09 00 00 00 06 00 00 00 04 00 00 00 04 00 00 00 18 01 00 00 5e 01 00 00 7a 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 0f 00 00 00 80 00 00 00 01 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 01 00 00 00 03 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 18 01 00 00 5e 01 00 00 85 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 18 01 00 00 bc 01 00 00 53 02 00 00 5b 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 01 00 00 be 01 00 00 58 02 00 00 6c 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00]; }; iq_3dnr { size = [64 1f 00 00]; - data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 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 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 46 00 00 00 46 00 00 00 00 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 fa 00 00 00 fa 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 11 00 00 00 10 00 00 00 10 00 00 00 11 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 21 00 00 00 21 00 00 00 1c 00 00 00 1c 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 08 00 00 00 10 00 00 00 03 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 04 0c 04 01 00 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 e0 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 36 00 00 00 20 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 22 01 00 00 22 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 17 00 00 00 16 00 00 00 16 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 23 00 00 00 23 00 00 00 1e 00 00 00 1e 00 00 00 19 00 00 00 19 00 00 00 19 00 00 00 19 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 03 05 14 0a 01 01 0a 04 01 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 08 00 00 00 f4 01 00 00 18 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 0c 00 00 00 1c 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 c8 00 00 00 c8 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 28 50 20 10 08 10 00 00 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1a 00 00 00 19 00 00 00 19 00 00 00 1a 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 5a b4 20 10 08 14 00 00 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 bc 02 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 80 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 20 03 00 00 20 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 3c 00 00 00 3c 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 20 a0 c8 64 40 10 20 08 02 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1d 00 00 00 1c 00 00 00 1c 00 00 00 1d 00 00 00 1b 00 00 00 1b 00 00 00 1b 00 00 00 1b 00 00 00 5e 01 00 00 54 01 00 00 54 01 00 00 54 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 48 00 00 00 48 00 00 00 43 00 00 00 43 00 00 00 3e 00 00 00 3e 00 00 00 3e 00 00 00 3e 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 20 b4 c8 80 40 10 20 08 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 2c 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 20 03 00 00 20 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 96 00 00 00 96 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 2c 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 18 01 00 00 18 01 00 00 18 01 00 00 18 01 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 48 b4 c8 80 40 10 40 0c 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 80 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 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 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 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 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 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 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; + data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 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 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 46 00 00 00 46 00 00 00 00 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 fa 00 00 00 fa 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 11 00 00 00 10 00 00 00 10 00 00 00 11 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 21 00 00 00 21 00 00 00 1c 00 00 00 1c 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 08 00 00 00 10 00 00 00 03 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 04 0c 04 02 00 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 e0 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 30 00 00 00 48 00 00 00 20 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 22 01 00 00 22 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 17 00 00 00 16 00 00 00 16 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 23 00 00 00 23 00 00 00 1e 00 00 00 1e 00 00 00 19 00 00 00 19 00 00 00 19 00 00 00 19 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 0a 0a 02 01 0a 04 01 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 08 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 30 00 00 00 48 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 0c 00 00 00 1c 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 c8 00 00 00 c8 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 19 3c 10 08 04 10 00 00 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 96 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 30 00 00 00 48 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 40 01 00 00 40 01 00 00 40 01 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 50 00 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1f 00 00 00 1e 00 00 00 1e 00 00 00 1f 00 00 00 1d 00 00 00 1d 00 00 00 1d 00 00 00 1d 00 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 fa 00 00 00 fa 00 00 00 fa 00 00 00 fa 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 19 46 0f 08 02 00 00 00 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 bc 02 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 40 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 18 00 00 00 0c 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 b4 00 00 00 b4 00 00 00 00 00 00 00 1c 02 00 00 1c 02 00 00 1c 02 00 00 80 02 00 00 80 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 e6 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 d2 00 00 00 d2 00 00 00 d2 00 00 00 d2 00 00 00 34 00 00 00 34 00 00 00 2f 00 00 00 2f 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 50 78 14 08 02 00 00 00 00 00 00 0c 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 40 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1d 00 00 00 1c 00 00 00 1c 00 00 00 1d 00 00 00 1b 00 00 00 1b 00 00 00 1b 00 00 00 1b 00 00 00 5e 01 00 00 54 01 00 00 54 01 00 00 54 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 48 00 00 00 48 00 00 00 43 00 00 00 43 00 00 00 3e 00 00 00 3e 00 00 00 3e 00 00 00 3e 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 b4 c8 14 0a 05 20 08 02 00 00 00 0c 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 2c 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 20 03 00 00 20 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 96 00 00 00 96 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 2c 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 18 01 00 00 18 01 00 00 18 01 00 00 18 01 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 32 64 14 0a 05 40 0c 02 00 00 00 0c 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 80 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 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 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 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 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 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 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 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 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 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 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 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 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; }; iq_wdr { size = [e4 02 00 00]; - data = [01 00 00 00 01 00 00 00 20 00 00 00 12 00 00 00 80 00 00 00 05 00 00 00 03 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 07 00 00 00 0f 00 00 00 17 00 00 00 1f 00 00 00 23 00 00 00 27 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 e6 0f 00 00 a6 0f 00 00 29 0f 00 00 cf 0e 00 00 64 0e 00 00 e8 0d 00 00 5e 0d 00 00 14 0d 00 00 c7 0c 00 00 78 0c 00 00 27 0c 00 00 d5 0b 00 00 81 0b 00 00 2e 0b 00 00 da 0a 00 00 86 0a 00 00 33 0a 00 00 e1 09 00 00 90 09 00 00 41 09 00 00 f3 08 00 00 a7 08 00 00 5e 08 00 00 16 08 00 00 d1 07 00 00 8e 07 00 00 4d 07 00 00 0f 07 00 00 d3 06 00 00 99 06 00 00 62 06 00 00 fb 05 00 00 9c 05 00 00 46 05 00 00 f8 04 00 00 b0 04 00 00 70 04 00 00 35 04 00 00 00 04 00 00 a4 03 00 00 57 03 00 00 e4 02 00 00 94 02 00 00 5b 02 00 00 31 02 00 00 12 02 00 00 fb 01 00 00 e9 01 00 00 dc 01 00 00 d1 01 00 00 c8 01 00 00 c1 01 00 00 bb 01 00 00 b7 01 00 00 b3 01 00 00 b0 01 00 00 ad 01 00 00 ab 01 00 00 a9 01 00 00 a7 01 00 00 a6 01 00 00 a4 01 00 00 a3 01 00 00 a2 01 00 00 18 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00]; + data = [01 00 00 00 01 00 00 00 20 00 00 00 12 00 00 00 80 00 00 00 05 00 00 00 03 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 07 00 00 00 0f 00 00 00 17 00 00 00 1f 00 00 00 23 00 00 00 27 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 e6 0f 00 00 a6 0f 00 00 29 0f 00 00 cf 0e 00 00 64 0e 00 00 e8 0d 00 00 5e 0d 00 00 14 0d 00 00 c7 0c 00 00 78 0c 00 00 27 0c 00 00 d5 0b 00 00 81 0b 00 00 2e 0b 00 00 da 0a 00 00 86 0a 00 00 33 0a 00 00 e1 09 00 00 90 09 00 00 41 09 00 00 f3 08 00 00 a7 08 00 00 5e 08 00 00 16 08 00 00 d1 07 00 00 8e 07 00 00 4d 07 00 00 0f 07 00 00 d3 06 00 00 99 06 00 00 62 06 00 00 fb 05 00 00 9c 05 00 00 46 05 00 00 f8 04 00 00 b0 04 00 00 70 04 00 00 35 04 00 00 00 04 00 00 a4 03 00 00 57 03 00 00 e4 02 00 00 94 02 00 00 5b 02 00 00 31 02 00 00 12 02 00 00 fb 01 00 00 e9 01 00 00 dc 01 00 00 d1 01 00 00 c8 01 00 00 c1 01 00 00 bb 01 00 00 b7 01 00 00 b3 01 00 00 b0 01 00 00 ad 01 00 00 ab 01 00 00 a9 01 00 00 a7 01 00 00 a6 01 00 00 a4 01 00 00 a3 01 00 00 a2 01 00 00 14 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00]; }; iq_shdr { size = [ec 01 00 00]; @@ -67,7 +67,7 @@ }; iq_post_sharpen { size = [4c 02 00 00]; - data = [01 00 00 00 00 00 00 00 19 32 32 32 30 2f 2c 27 26 25 24 23 23 23 23 23 23 23 02 af fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff c8 00 2c 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 2c 01 90 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 5e 01 c2 01 50 50 50 80 ff 00 40 80 80 00 48 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 37 01 f4 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 32 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 51 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 00 00]; + data = [00 00 00 00 00 00 00 00 19 32 32 32 30 2f 2c 27 26 25 24 23 23 23 23 23 23 23 02 af fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff c8 00 2c 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 2c 01 90 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 5e 01 c2 01 50 50 50 80 ff 00 40 80 80 00 48 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 37 01 f4 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 32 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 51 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 00 00]; }; iq_ycurve { size = [08 02 00 00]; diff --git a/code/hdal/vendor/output/libvendor_ai2_pub.a b/code/hdal/vendor/output/libvendor_ai2_pub.a index bdab48592..7be1ae454 100755 Binary files a/code/hdal/vendor/output/libvendor_ai2_pub.a and b/code/hdal/vendor/output/libvendor_ai2_pub.a differ diff --git a/code/hdal/vendor/output/libvendor_ai2_pub2.a b/code/hdal/vendor/output/libvendor_ai2_pub2.a index 253d8491c..f74ad9cf8 100755 Binary files a/code/hdal/vendor/output/libvendor_ai2_pub2.a and b/code/hdal/vendor/output/libvendor_ai2_pub2.a differ diff --git a/code/lib/source/sifar/code/include/sf_battery.h b/code/lib/source/sifar/code/include/sf_battery.h index 2d33a1904..a19cf1006 100755 --- a/code/lib/source/sifar/code/include/sf_battery.h +++ b/code/lib/source/sifar/code/include/sf_battery.h @@ -22,5 +22,6 @@ void sf_set_night_led_flag(UINT8 flag); UINT32 sf_battery_level_get(void); void sf_view_osd_battery_draw(UINT8 bShow); UINT8 sf_battery_value_get(UINT8 nightMode); +UINT8 sf_battery_type_get(void); #endif diff --git a/code/lib/source/sifar/code/source/common/sf_battery.c b/code/lib/source/sifar/code/source/common/sf_battery.c index 99b285a0c..dbbf60778 100755 --- a/code/lib/source/sifar/code/source/common/sf_battery.c +++ b/code/lib/source/sifar/code/source/common/sf_battery.c @@ -1096,5 +1096,20 @@ UINT8 sf_battery_value_get(UINT8 nightMode) 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 diff --git a/code/na51089_linux_sdk_app_filelist.txt b/code/na51089_linux_sdk_app_filelist.txt index 3221d81e2..e4105644e 100755 --- a/code/na51089_linux_sdk_app_filelist.txt +++ b/code/na51089_linux_sdk_app_filelist.txt @@ -1,6 +1,6 @@ ; Source Insight Project File List ; 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 ; ; 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_datahttp.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_debug.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_server.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_ftp.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_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_service.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_systemMng.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_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\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_server.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_module.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_ledmng.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\gpio\sf_hal_gpio.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\sf_aes.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\iot_export_awss.h application\source\sf_app\component\liveMng\inc\exports\iot_export_coap.h diff --git a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb deleted file mode 100644 index 58540b0c9..000000000 Binary files a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb and /dev/null differ diff --git a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts deleted file mode 100644 index fa2e3c18e..000000000 --- a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts +++ /dev/null @@ -1,1181 +0,0 @@ -# 1 "nvt-evb.dts" -# 1 "" -# 1 "" -# 1 "nvt-evb.dts" - - - - - - - -/dts-v1/; -# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" 1 -# 13 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" -# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/gpio.h" 1 -# 14 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" 2 -# 10 "nvt-evb.dts" 2 -# 1 "nvt-peri.dtsi" 1 -# 10 "nvt-peri.dtsi" -# 1 "nvt-basic.dtsi" 1 -# 9 "nvt-basic.dtsi" -# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" 1 -# 9 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" -# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/irq.h" 1 -# 10 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" 2 -# 10 "nvt-basic.dtsi" 2 - -/ { - model = "Novatek NA51089"; - compatible = "novatek,na51089", "nvt,ca9"; - interrupt-parent = <&gic>; - #address-cells = <1>; - #size-cells = <1>; - - cpus { - #address-cells = <1>; - #size-cells = <0>; - - cpu0: cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-a9"; - reg = <0x0>; - next-level-cache = <&L2>; - clock-frequency = <960000000>; - }; - }; - - cg@f0020000 { - compatible = "nvt,core_clk"; - reg = <0xf0020000 0x1000>; - }; - - - periph_clk: periph_clk { - compatible = "nvt,periph_clk"; - #clock-cells = <0>; - clock-output-names = "periph_clk"; - }; - - global_timer@ffd00200 { - compatible = "arm,cortex-a9-global-timer"; - reg = <0xffd00200 0x20>; - interrupts = <1 11 0xf01>; - clocks = <&periph_clk>; - }; - - private_timer@ffd00600 { - compatible = "arm,cortex-a9-twd-timer"; - reg = <0xffd00600 0x20>; - interrupts = <1 13 0xf01>; - clocks = <&periph_clk>; - }; - - pmu { - compatible = "arm,cortex-a9-pmu"; - interrupts = <0 112 4>; - interrupt-affinity = <&cpu0>; - }; - - L2: cache-controller@ffe00000 { - compatible = "arm,pl310-cache"; - reg = <0xffe00000 0x1000>; - interrupts = <0 96 4>; - cache-unified; - arm,shared-override; - cache-level = <2>; - arm,data-latency = <2 2 2>; - arm,tag-latency = <2 2 2>; - }; - - gic: interrupt-controller@0xffd00000 { - compatible = "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - interrupt-controller; - reg = <0xffd01000 0x1000>, - <0xffd00100 0x1000>; - }; - - scu: snoop-control-unit@0xffd00000 { - compatible = "arm,cortex-a9-scu"; - reg = <0xffd00000 0x100>; - }; -}; -# 11 "nvt-peri.dtsi" 2 - -/ { - chosen { - bootargs = " "; - }; - - aliases { - mmc0 = &mmc0; - mmc1 = &mmc1; - }; - - uart@f0290000 { - compatible = "ns16550a"; - reg = <0xf0290000 0x1000>; - interrupts = <0 43 4>; - baud = <115200>; - reg-shift = <2>; - reg-io-width = <4>; - no-loopback-test = <1>; - clock-frequency = <24000000>; - fifo-size = <64>; - uart_id = <0>; - }; - - uart@f0300000 { - compatible = "ns16550a"; - reg = <0xf0300000 0x1000>; - interrupts = <0 44 4>; - baud = <115200>; - reg-shift = <2>; - reg-io-width = <4>; - no-loopback-test = <1>; - clock-frequency = <48000000>; - fifo-size = <64>; - hw_flowctrl = <0>; - rx_trig_level = <3>; - uart_id = <1>; - }; - - uart@f0310000 { - compatible = "ns16550a"; - reg = <0xf0310000 0x1000>; - interrupts = <0 45 4>; - baud = <115200>; - reg-shift = <2>; - reg-io-width = <4>; - no-loopback-test = <1>; - clock-frequency = <48000000>; - fifo-size = <64>; - hw_flowctrl = <0>; - rx_trig_level = <3>; - uart_id = <2>; - }; - - kdrv_rpc: cc@f0090000 { - compatible = "kdrv_rpc"; - reg = <0xf0090000 0x300>; - interrupts = <0 59 4>; - }; - - mmc0: mmc@f0420000 { - compatible = "nvt,nvt_mmc"; - reg = <0xf0420000 0x1000>; - interrupts = <0 30 4>; - max-frequency = <48000000>; - voltage-switch = <0>; - max-voltage = <3300>; - bus-width = <4>; - neg-sample-edge = <0>; - driving = <15 15 15 20 15 15 25 25 25 25 25 25>; - cd_gpio = <(9) 0x0 0x0>; - card_power_gpio = <(7 + 0x20) 0x0>; - - - }; - - mmc1: mmc@f0500000 { - compatible = "nvt,nvt_mmc2"; - reg = <0xf0500000 0x1000>; - interrupts = <0 31 4>; - max-frequency = <48000000>; - voltage-switch = <0>; - max-voltage = <3300>; - bus-width = <4>; - neg-sample-edge = <0>; - driving = <15 8 8 20 8 8 20 8 8 20 8 8>; - cd_gpio = <0 0x0 0x1>; - - - - }; - - nand: nand@f0400000 { - #address-cells = <2>; - #size-cells = <2>; - compatible = "nvt,nvt_spinand"; - reg = <0xf0400000 0x1000>; - interrupts = <0 29 4>; - clock-frequency = <96000000>; - nvt-devname = "spi_nand.0"; - }; - - nor: nor@f0400000 { - #address-cells = <2>; - #size-cells = <2>; - compatible = "nvt,nvt_spinor"; - reg = <0xf0400000 0x1000>; - interrupts = <0 29 4>; - clock-frequency = <120000000>; - nvt-devname = "spi_nor.0"; - trace-stdtable = <0>; - }; - - gpio: gpio@f0070000 { - compatible = "nvt,nvt_gpio"; - reg = <0xf0070000 0x10000>; - interrupts = <0 24 4>; - #gpio-cells = <2>; - }; - - eth@f02b0000 { - compatible = "nvt,synopsys_eth"; - reg = <0xf02b0000 0x3800>; - interrupts = <0 34 4>; - sp-clk = <0>; - ref-clk-out = <0>; - }; - - phy@f02b3800 { - compatible = "nvt,eth_phy"; - reg = <0xf02b3800 0x400>; - }; - - wdt@f0050000 { - compatible = "nvt,nvt_wdt"; - reg = <0xf0050000 0x10000>; - interrupts = <0 57 4>; - }; - - pwm: pwm@f0210000 { - compatible = "nvt,nvt_kdrv_pwm"; - reg = <0xf0210000 0x2000>; - interrupts = <0 26 4>; - }; - - adc@f0260000 { - compatible = "nvt,nvt_adc"; - reg = <0xf0260000 0x1000>; - interrupts = <0 47 4>; - #io-channel-cells = <1>; - }; - - rtc@f0060000 { - compatible = "nvt,nvt_rtc"; - reg = <0xf0060000 0x100>; - interrupts = <0 56 4>; - }; - - drtc@f00b0000 { - compatible = "nvt,nvt_drtc"; - reg = <0xf00b0000 0x100>; - }; - - crypto: crypto@f0620000 { - compatible = "nvt,nvt_crypto"; - reg = <0xf0620000 0x100>; - interrupts = <0 38 4>; - mclk = <1>; - }; - - hash: hash@f0670000 { - compatible = "nvt,nvt_hash"; - reg = <0xf0670000 0x100>; - interrupts = <0 28 4>; - mclk = <1>; - }; - - rsa: rsa@f06a0000 { - compatible = "nvt,nvt_rsa"; - reg = <0xf06a0000 0x100>; - interrupts = <0 20 4>; - mclk = <1>; - }; - - top: top@f0010000 { - compatible = "nvt,nvt_top"; - reg = <0xf0010000 0x2000 - 0xf0030000 0x2000 - 0xf0070000 0x10000>; - }; - - sie@f0c00000 { - compatible = "nvt,drv_sie"; - reg = <0xf0c00000 0x900 - 0xf0d20000 0x900 - 0xF0D30000 0x900>; - interrupts = <0 1 4 - 0 2 4 - 0 3 4>; - - }; - - tge@f0cc0000 { - compatible = "nvt,kdrv_tge"; - reg = <0xf0cc0000 0x150>; - interrupts = <0 22 4>; - }; - - rhe@f0ce0000 { - compatible = "nvt,kdrv_rhe"; - reg = <0xf0ce0000 0x900>; - interrupts = <0 13 4>; - }; - - ime@f0c40000 { - compatible = "nvt,kdrv_ime"; - reg = <0xf0c40000 0x1000>; - interrupts = <0 6 4>; - }; - - ife2@f0d00000 { - compatible = "nvt,kdrv_ife2"; - reg = <0xf0d00000 0x100>; - interrupts = <0 9 4>; - }; - - ise@f0c90000 { - compatible = "nvt,kdrv_ise"; - reg = <0xf0c90000 0x100>; - interrupts = <0 21 4 - 0 85 4>; - }; - - ipe@f0c30000 { - compatible = "nvt,kdrv_ipe"; - reg = <0xf0c30000 0x900>; - interrupts = <0 5 4>; - }; - - ife@f0c70000 { - compatible = "nvt,kdrv_ife"; - reg = <0xf0c70000 0x800>; - interrupts = <0 8 4>; - }; - - vpe@f0cd0000 { - compatible = "nvt,kdrv_vpe"; - reg = <0xf0cd0000 0x1040>; - interrupts = <0 62 4>; - }; - - ai@f0c60000 { - compatible = "nvt,kdrv_ai"; - reg = <0xf0c60000 0x23c - 0xf0d50000 0x114 - 0xf0cb0000 0x22c>; - interrupts = <0 14 4 - 0 13 4 - 0 11 4>; - clock-frequency = <600000000 480000000 600000000>; - }; - - md@f0c10000 { - compatible = "nvt,kdrv_md"; - reg = <0xf0c10000 0x150>; - interrupts = <0 46 4>; - clock-frequency = <240000000>; - }; - dis@f0c50000 { - compatible = "nvt,kdrv_dis"; - reg = <0xf0c50000 0x114>; - interrupts = <0 10 4>; - }; - - coe@f0a11000 { - compatible = "nvt,nvt_coe"; - reg = <0xf0a11000 0x2c0>; - }; - - dce@f0c20000 { - compatible = "nvt,kdrv_dce"; - reg = <0xf0c20000 0x650>; - interrupts = <0 7 4>; - }; - - ive@f0d70000 { - compatible = "nvt,kdrv_ive"; - reg = <0xf0d70000 0x6c>; - interrupts = <0 53 4>; - }; - - sde@f0d90000 { - compatible = "nvt,kdrv_sde"; - reg = <0xf0d90000 0x90>; - interrupts = <0 74 4>; - }; - - ide@f0800000 { - compatible = "nvt,nvt_ide"; - reg = <0xf0800000 0x1000>; - interrupts = <0 48 4>; - }; - - dsi@f0840000 { - compatible = "nvt,nvt_dsi"; - reg = <0xf0840000 0x1000>; - interrupts = <0 50 4>; - }; - - csi@f0280000 { - compatible = "nvt,nvt_csi"; - reg = <0xf0280000 0x100 - 0xf0330000 0x100>; - interrupts = <0 54 4 - 0 55 4>; - }; - - lvds@f0270000 { - compatible = "nvt,nvt_lvds"; - reg = <0xF0270000 0x200 - 0xF0370000 0x200>; - interrupts = <0 54 4 - 0 55 4>; - }; - - senphy@f06b0000 { - compatible = "nvt,nvt_senphy"; - reg = <0xF06B0000 0x100>; - }; - - ssenif@f0xx0000 { - compatible = "nvt,nvt_ssenif"; - reg = <0xF02C0000 0x2000>; - interrupts = <0 61 4>; - }; - - sif@f0240000 { - compatible = "nvt,nvt_sif"; - reg = <0xf0240000 0x200>; - interrupts = <0 40 4>; - clock-frequency = <1000000>; - }; - - graphic@f0c80000 { - compatible = "nvt,nvt_graphic"; - reg = <0xF0C80000 0x300 - 0xF0D10000 0x100>; - interrupts = <0 18 4 - 0 19 4>; - }; - - affine@f0ca0000 { - compatible = "nvt,nvt_affine"; - reg = <0xF0CA0000 0x100>; - interrupts = <0 52 4>; - }; - - h26x@f0a10000 { - compatible = "nvt,nvt_h26x"; - reg = <0xf0a10000 0xa00>; - interrupts = <0 16 4>; - power_saving = <0>; - }; - - timer@f0040000 { - compatible = "nvt,nvt_timer"; - reg = <0xf0040000 0x300>; - interrupts = <0 0 4>; - }; - - eac@f0640000 { - compatible = "nvt,nvt_eac"; - reg = <0xF0640000 0x200>; - }; - - jpg@f0a00000 { - compatible = "nvt,nvt_jpg"; - reg = <0xf0a00000 0x100>; - interrupts = <0 17 4>; - }; - - nvt_usb2host@f0600000 { - compatible = "nvt,ehci-nvtivot"; - reg = <0xf0600000 0x10000>; - interrupts = <0 27 4>; - }; - - nvt_usb2dev@f0600000 { - compatible = "nvt,fotg200_udc"; - reg = <0xf0600000 0x10000>; - interrupts = <0 27 4>; - }; - - nvt_usb_chrg@f0600000 { - compatible = "nvt,nvt_usb_chrgdet"; - reg = <0xf0600000 0x10000>; - }; - - dai@f0630000 { - compatible = "nvt,nvt_dai"; - reg = <0xF0630000 0xbc>; - interrupts = <0 15 4>; - }; - - rotate@f0cf0000 { - compatible = "nvt,nvt_rotation"; - reg = <0xF0CF0000 0x100>; - interrupts = <0 81 4>; - }; - - drvdump@0 { - compatible = "nvt,nvt_drvdump"; - }; - - dsp@f1430000 { - compatible = "nvt,nvt_dsp"; - reg = <0xF1430000 0x200 - 0xF2000000 0x1000000 - 0xF1440000 0x200 - 0xF3000000 0x1000000>; - interrupts = <0 76 4 - 0 77 4>; - }; - - spi0: spi@f0230000 { - compatible = "nvt,nvt_spi"; - reg = <0xf0230000 0x10000>; - interrupts = <0 35 4>; - dma-support = <0>; - nvt-devname = <0>; - }; - - spi1: spi@f0320000 { - compatible = "nvt,nvt_spi"; - reg = <0xf0320000 0x10000>; - interrupts = <0 36 4>; - dma-support = <0>; - nvt-devname = <1>; - }; - - spi2: spi@f0340000 { - compatible = "nvt,nvt_spi"; - reg = <0xf0340000 0x10000>; - interrupts = <0 37 4>; - dma-support = <0>; - nvt-devname = <2>; - }; - - sdp@f0390000 { - compatible = "nvt,nvt_sdp"; - reg = <0xf0390000 0x28>; - interrupts = <0 12 4>; - }; - - tse@f0650000 { - compatible = "nvt,nvt_tse"; - reg = <0xF0650000 0x90>; - interrupts = <0 23 4>; - }; - - remote@f0250000 { - compatible = "nvt,nvt_remote"; - reg = <0xf0250000 0x28>; - interrupts = <0 25 4>; - }; - - rng: rng@f0680000 { - compatible = "nvt,nvt_rng"; - reg = <0xf0680000 0x100>; - }; - - nvt_arb@f0000000 { - compatible = "nvt,nvt_arb"; - reg = <0xF0000000 0xA000 - 0xF0FE0000 0x300>; - interrupts = <0 33 4>; - }; - - nvt_otp@f0660000 { - compatible = "nvt,nvt_otp"; - reg = <0xF0660000 0x70>; - }; - - kdrv_ipp { - clock-frequency = <240000000>; - }; - - uvcp: uvcp@f0690000 { - compatible = "nvt,nvt_uvcp"; - reg = <0xf0690000 0x200>; - interrupts = <0 59 4>; - }; - pll_preset@0 { - pll3{pll_config = <3 0 0>;}; - pll4{pll_config = <4 0 0>;}; - pll5{pll_config = <5 297000000 1>;}; - pll6{pll_config = <6 0 0>;}; - pll7{pll_config = <7 0 0>;}; - pll8{pll_config = <8 0 0>;}; - pll9{pll_config = <9 0 0>;}; - pll11{pll_config = <11 0 0>;}; - pll12{pll_config = <12 0 1>;}; - }; -}; -# 11 "nvt-evb.dts" 2 -# 1 "nvt-top.dtsi" 1 -&top { - sdio{pinmux = <0x5>;}; - sdio2{pinmux = <0x5>;}; - sdio3{pinmux = <0x0>;}; - nand{pinmux = <0x5>;}; - sensor{pinmux = <0x0>;}; - sensor2{pinmux = <0x0>;}; - mipi_lvds{pinmux = <0x0>;}; - i2c{pinmux = <0x40>;}; - sif{pinmux = <0x0>;}; - uart{pinmux = <0x1021>;}; - spi{pinmux = <0x0>;}; - sdp{pinmux = <0x0>;}; - remote{pinmux = <0x0>;}; - pwm{pinmux = <0x8000>;}; - pwm2{pinmux = <0x000000>;}; - ccnt{pinmux = <0x0>;}; - audio{pinmux = <0x0>;}; - lcd{pinmux = <0x0>;}; - tv{pinmux = <0x0>;}; - eth{pinmux = <0x0>;}; - misc{pinmux = <0x0>;}; -}; -# 12 "nvt-evb.dts" 2 -# 1 "nvt-i2c.dtsi" 1 - - - - - - - -/ { - i2c0: i2c@f0220000 { compatible = "nvt,nvt_i2c"; reg = <0xf0220000 0x100>; interrupts = <0 41 4>; clock-frequency = <400000>; id = <0>; }; - i2c1: i2c2@f0350000 { compatible = "nvt,nvt_i2c"; reg = <0xf0350000 0x100>; interrupts = <0 42 4>; clock-frequency = <400000>; id = <1>; }; - i2c2: i2c3@f03a0000 { compatible = "nvt,nvt_i2c"; reg = <0xf03a0000 0x100>; interrupts = <0 60 4>; clock-frequency = <50000>; id = <2>; }; -}; -# 13 "nvt-evb.dts" 2 -# 1 "nvt-gpio.dtsi" 1 -&top { -# 201 "nvt-gpio.dtsi" - pgpio11{gpio_config = <(11 + 0x20) 1>;}; - - pgpio2{gpio_config = <(2 + 0x20) 1>;}; -}; -# 14 "nvt-evb.dts" 2 -# 1 "nvt-peri-dev.dtsi" 1 -# 11 "nvt-peri-dev.dtsi" -&i2c0 { - #address-cells = <1>; - #size-cells = <0>; - - - - - - -}; - -&i2c1 { - #address-cells = <1>; - #size-cells = <0>; -}; - -&i2c2 { - #address-cells = <1>; - #size-cells = <0>; -}; - -&spi0 { - status = "okay"; - #address-cells = <1>; - #size-cells = <0>; -# 44 "nvt-peri-dev.dtsi" -}; - -&spi1 { - status = "okay"; -}; - -&spi2 { - status = "okay"; -}; -# 15 "nvt-evb.dts" 2 -# 1 "nvt-audio.dtsi" 1 - - - - - - - -/ { - audio@1 { type = "none"; i2s_ctrl = <0>; sif_channel = <0>; gpio_cold_reset = <0>; gpio_data = <0>; gpio_clk = <0>; gpio_cs = <0>; adc_zero = <0>; }; - audio@2 { type = "embedded"; i2s_ctrl = <4>; sif_channel = <0>; gpio_cold_reset = <0>; gpio_data = <0>; gpio_clk = <0>; gpio_cs = <0>; adc_zero = <0>; }; -}; -# 16 "nvt-evb.dts" 2 -# 1 "nvt-display.dtsi" 1 - - - - - - - -# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/pinctrl/nvt_lcd.h" 1 -# 9 "nvt-display.dtsi" 2 -# 25 "nvt-display.dtsi" -/ { - display { type = "lcd"; lcd_ctrl = <1>; sif_channel = <4>; gpio_cs = <(7 + 0x20)>; gpio_clk = <(8 + 0x20)>; gpio_data = <(9 + 0x20)>; }; - logo { enable = <1>; lcd_type = <5>; lcd_rotate = <270>; lcd_reset = <(1 + 0x60)>; lcd_bl_gpio = <(11 + 0x20) 1>; lcd_power = <(8 + 0x20) 1>;}; -}; -# 17 "nvt-evb.dts" 2 -# 1 "nvt-media.dtsi" 1 -# 10 "nvt-media.dtsi" -# 1 "nvt-basic.dtsi" 1 -# 11 "nvt-basic.dtsi" -/ { - model = "Novatek NA51089"; - compatible = "novatek,na51089", "nvt,ca9"; - interrupt-parent = <&gic>; - #address-cells = <1>; - #size-cells = <1>; - - cpus { - #address-cells = <1>; - #size-cells = <0>; - - cpu0: cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-a9"; - reg = <0x0>; - next-level-cache = <&L2>; - clock-frequency = <960000000>; - }; - }; - - cg@f0020000 { - compatible = "nvt,core_clk"; - reg = <0xf0020000 0x1000>; - }; - - - periph_clk: periph_clk { - compatible = "nvt,periph_clk"; - #clock-cells = <0>; - clock-output-names = "periph_clk"; - }; - - global_timer@ffd00200 { - compatible = "arm,cortex-a9-global-timer"; - reg = <0xffd00200 0x20>; - interrupts = <1 11 0xf01>; - clocks = <&periph_clk>; - }; - - private_timer@ffd00600 { - compatible = "arm,cortex-a9-twd-timer"; - reg = <0xffd00600 0x20>; - interrupts = <1 13 0xf01>; - clocks = <&periph_clk>; - }; - - pmu { - compatible = "arm,cortex-a9-pmu"; - interrupts = <0 112 4>; - interrupt-affinity = <&cpu0>; - }; - - L2: cache-controller@ffe00000 { - compatible = "arm,pl310-cache"; - reg = <0xffe00000 0x1000>; - interrupts = <0 96 4>; - cache-unified; - arm,shared-override; - cache-level = <2>; - arm,data-latency = <2 2 2>; - arm,tag-latency = <2 2 2>; - }; - - gic: interrupt-controller@0xffd00000 { - compatible = "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - interrupt-controller; - reg = <0xffd01000 0x1000>, - <0xffd00100 0x1000>; - }; - - scu: snoop-control-unit@0xffd00000 { - compatible = "arm,cortex-a9-scu"; - reg = <0xffd00000 0x100>; - }; -}; -# 11 "nvt-media.dtsi" 2 - -/ { - nvtmpp { - compatible = "nvt,nvtmpp"; - }; - - isf_stream { - compatible = "nvt,isf_stream"; - }; - - isf_flow { - compatible = "nvt,isf_flow"; - }; - - isf_vdocap { - compatible = "nvt,isf_vdocap"; - }; - - isf_vdoprc { - compatible = "nvt,isf_vdoprc"; - }; - - isf_dummy { - compatible = "nvt,isf_dummy"; - }; - - isf_vdoenc { - compatible = "nvt,isf_vdoenc"; - }; - - isf_vdodec { - compatible = "nvt,isf_vdodec"; - }; - - isf_vdoout { - compatible = "nvt,isf_vdoout"; - }; - - dispobj { - compatible = "nvt,nvt_dispobj"; - }; - - dispdev { - compatible = "nvt,nvt_dispdev"; - }; - - audio { - compatible = "nvt,nvt_audio"; - }; - - msdcnvt { - compatible = "nvt,msdcnvt"; - }; - - msdcnvt_adj { - compatible = "nvt,msdcnvt_adj"; - }; - - msdcnvt_custom_si { - compatible = "nvt,msdcnvt_custom_si"; - }; - - wavstudio { - compatible = "nvt,wavstudio"; - }; - - isf_audenc { - compatible = "nvt,isf_audenc"; - }; - - isf_auddec { - compatible = "nvt,isf_auddec"; - }; - - isf_audcap { - compatible = "nvt,isf_audcap"; - }; - - isf_audout { - compatible = "nvt,isf_audout"; - }; - - nvt_ipc { - compatible = "nvt,nvt_ipc"; - }; -}; -# 18 "nvt-evb.dts" 2 -# 1 "nvt-mem-tbl.dtsi" 1 - - - - - - -/ { - - nvt_memory_cfg { - #address-cells = <1>; - #size-cells = <1>; - dram { reg = <0x00000000 0x08000000>; }; - shmem{ reg = <0x00007E00 0x00000200>; }; - loader { reg = <0x01000000 0x00080000>; }; - fdt { reg = <0x01800000 0x00040000>; }; - rtos { reg = <0x01840000 0x00FC0000>; }; - linuxtmp{ reg = <0x02800000 0x04000000>; }; - uboot{ reg = <0x06800000 0x01640000>; }; - logo-fb{ reg = <0x07E40000 0x001C0000>; }; - }; - - - memory { device_type = "memory"; reg = <0x00000000 0x01800000 0x02000000 0x01600000>; }; - - - reserved-memory { - #address-cells = <1>; - #size-cells = <1>; - ranges; - }; - - - - - - - libc-heap { size = <0x00200000>; }; - - hdal-memory { - #address-cells = <1>; - #size-cells = <1>; - media { reg = <0x03600000 0x04A00000>; }; - }; - - hdal-maxpath-cfg { - - vdocap_active_list = <1 0 0 0 0 0 0 0>; - vdoprc_maxdevice = <2>; - vdoenc_maxpath = <4>; - vdodec_maxpath = <3>; - vdoout_maxdevice = <1>; - adocap_maxdevice = <1>; - adoout_maxdevice = <2>; - adoenc_maxpath = <1>; - adodec_maxpath = <1>; - - gfx_maxjob = <2>; - - stamp_maximg = <9>; - - vdoprc_maxstamp = <4 4>; - - vdoprc_maxmask = <4 4>; - vdoenc_maxstamp = <9 9>; - vdoenc_maxmask = <0 64>; - vdoout_maxstamp = <0 16>; - vdoout_maxmask = <0 64>; - }; -}; -# 19 "nvt-evb.dts" 2 -# 1 "nvt-storage-partition.dtsi" 1 - - - - - - - -&nor { - partition_loader { label = "loader"; reg = <0x0 0x0000000 0x0 0x10000>; }; - partition_fdt { label = "fdt"; reg = <0x0 0x10000 0x0 0x10000>; }; - partition_fdt.restore { label = "fdt.restore"; reg = <0x0 0x20000 0x0 0x10000>; }; - partition_fdt.app { label = "fdt.app"; reg = <0x0 0x30000 0x0 0x20000>; }; - partition_uboot { label = "uboot"; reg = <0x0 0x50000 0x0 0xA0000>; }; - partition_uenv { label = "uenv"; reg = <0x0 0xF0000 0x0 0x10000>; }; - partition_kernel { label = "kernel"; reg = <0x0 0x100000 0x0 0x290000>; }; - partition_rootfs { label = "rootfs"; reg = <0x0 0x390000 0x0 0x3E0000>; }; - partition_rootfs1 { label = "rootfs1"; reg = <0x0 0x770000 0x0 0xB00000>; }; - partition_rtos { label = "rtos"; reg = <0x0 0x1270000 0x0 0x900000>; }; - partition_app { label = "app"; reg = <0x0 0x1B70000 0x0 0x50000>; }; - partition_sys { label = "sys"; reg = <0x0 0x1CC0000 0x0 0x10000>; }; - partition_all { label = "all"; reg = <0x0 0x0000000 0x0 0x2000000>; }; -}; -# 20 "nvt-evb.dts" 2 -# 1 "nvt-info.dtsi" 1 - - - - - - - -/ { - nvt_info { - BIN_NAME = "FW98565A"; - BIN_NAME_T = "FW98565T"; - RTOS_APP_MAIN = "cardv"; - - EMBMEM_BLK_SIZE = "0x10000"; -# 24 "nvt-info.dtsi" - EMBMEM = "EMBMEM_SPI_NOR"; -# 34 "nvt-info.dtsi" - FW_TYPE = "FW_TYPE_PARTIAL"; - - - - - - UI_STYLE = "UI_STYLE_LVGL"; - - - - - - NVT_CFG_APP_EXTERNAL = "hostapd wireless_tool iperf-3 wpa_supplicant dhd_priv"; - - NVT_CFG_APP = "mem cardv memcpy isp_demon sf_app"; - - NVT_ROOTFS_ETC = ""; - - NVT_BINARY_FILE_STRIP = "yes"; - - NVT_CFG_KERNEL_CFG = "na51089_evb_cardv_defconfig_release"; - - NVT_MAKE_POST = "make_post.sh"; - - NVT_SAMPLES_INSTALL = "DISABLE"; - - NVT_CFG_UBOOT_CFG = ""; - - - - - - - - NVT_LINUX_SMP = "NVT_LINUX_SMP_OFF"; - - - - - - - - NVT_CHIP_ID = "CHIP_NA51089"; - - - - - - - - NVT_LINUX_COMPRESS = "NVT_LINUX_COMPRESS_GZ"; - - - - - - - - NVT_DEFAULT_NETWORK_BOOT_PROTOCOL = "NVT_DEFAULT_NETWORK_BOOT_PROTOCOL_STATIC_IP"; -# 103 "nvt-info.dtsi" - NVT_ROOTFS_TYPE = "NVT_ROOTFS_TYPE_RAMDISK"; -# 113 "nvt-info.dtsi" - LCD1 = "disp_if8b_lcd1_psd200_st7789v"; -# 126 "nvt-info.dtsi" - SENSOR1 = "sen_os05b10"; - SENSOR1_CFG = "sen_os05b10_565"; - SENSOR2 = "sen_off"; - SENSOR2_CFG = "sen_off"; - - - - - - NVT_ROOTFS_RW_PART_EN = "NVT_ROOTFS_RW_PART_EN_ON"; - - - - - - - NVT_ETHERNET = "NVT_ETHERNET_NONE"; -# 151 "nvt-info.dtsi" - NVT_SDIO_WIFI = "NVT_SDIO_WIFI_RTK"; - - - - - - NVT_USB_WIFI = "NVT_USB_WIFI_NONE"; - - - - - - NVT_USB_4G = "NVT_USB_4G_NONE"; - - - - - - - WIFI_RTK_MDL = "WIFI_RTK_MDL_8189"; - - - - - - - - WIFI_BRCM_MDL = "WIFI_BRCM_MDL_43456c5_ampk6256c5"; - - - - - - - WIFI_NVT_MDL = "WIFI_NVT_MDL_18211"; - - - - - - - NVT_CURL_SSL = "NVT_CURL_SSL_OPENSSL"; -# 201 "nvt-info.dtsi" - NVT_UBOOT_ENV_IN_STORG_SUPPORT = "NVT_UBOOT_ENV_IN_STORG_SUPPORT_OFF"; - - - - - - - TOUCH = "TOUCH_OFF"; - - - - - - - UBOOT_ONLY_LOAD_LINUX = "UBOOT_ONLY_LOAD_LINUX_ON"; - - }; -}; -# 21 "nvt-evb.dts" 2 -# 1 "nvt-nvtpack.dtsi" 1 - - - - - - - -&nor { - - - - - nvtpack { - ver = "NVTPACK_FW_INI_16072017"; - method = <1>; - index { - id0 { partition_name = "loader"; source_file = ""; }; - id1 { partition_name = "fdt"; source_file = "nvt-evb.bin"; }; - id2 { partition_name = "fdt.restore"; source_file = ""; }; - id3 { partition_name = "fdt.app"; source_file = "../application.bin"; }; - id4 { partition_name = "uboot"; source_file = "u-boot.bin"; }; - id5 { partition_name = "uenv"; source_file = ""; }; - id6 { partition_name = "kernel"; source_file = "uImage.bin"; }; - id7 { partition_name = "rootfs"; source_file = "rootfs.ramdisk.bin"; }; - id8 { partition_name = "rootfs1"; source_file = "rootfs_1.squash.bin"; }; - id9 { partition_name = "rtos"; source_file = "../rtos-main.bin"; }; - id10 { partition_name = "app"; source_file = "appfs.cardv.jffs2.nor.bin"; }; - id11 { partition_name = "sys"; source_file = ""; }; - }; - }; -}; -# 21 "nvt-evb.dts" 2 diff --git a/rtos/code/.vscode/c_cpp_properties.json b/rtos/code/.vscode/c_cpp_properties.json index 71244df5f..bedff0658 100644 --- a/rtos/code/.vscode/c_cpp_properties.json +++ b/rtos/code/.vscode/c_cpp_properties.json @@ -5,7 +5,7 @@ "includePath": [ "${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", "cStandard": "c11", "cppStandard": "gnu++14", diff --git a/rtos/code/.vscode/settings.json b/rtos/code/.vscode/settings.json new file mode 100644 index 000000000..1c38c3243 --- /dev/null +++ b/rtos/code/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "uiappphoto_param.h": "c" + } +} \ No newline at end of file diff --git a/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c b/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c index 82300decb..983c19781 100644 --- a/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c +++ b/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c @@ -169,10 +169,11 @@ static HD_RESULT flowpreview_mem_relayout(void) } #endif - + UIMenuStoreInfo *puiPara = sf_ui_para_get(); // config common pool (screennail image) 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].ddr_id = DDR_ID0; // config common pool (thumbnail image) diff --git a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h index a666d0064..7754cdd49 100755 --- a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h +++ b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h @@ -98,7 +98,7 @@ #define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot" #define POWERON_BOOT_REPORT ENABLE #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_RECORD DISABLE #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 #endif -#define DRAM_SIZE_64MB_DISP_OFF DISABLE +#define DRAM_SIZE_64MB_DISP_OFF ENABLE #if (DRAM_SIZE_64MB_DISP_OFF==ENABLE) #undef POWERONLOGO_FUNCTION @@ -936,7 +936,7 @@ #define HUNTING_CAMERA_SYS_PARTITION_NAME sys #define HUNTING_CAMERA_BOOT_LINUX 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_PREVIEW_SLICE_ENC_FUNC ENABLE #define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c b/rtos/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c index ef56d2036..a3fe1db8f 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_CommPoolInit.c @@ -102,7 +102,79 @@ /////////////////////////////////////////////////////////////////////////////// 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) { UINT32 id=0; @@ -161,7 +233,7 @@ void Movie_CommPoolInit(void) 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 = 2; + mem_cfg.pool_info[id].blk_cnt = 7; 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); } +#endif + void Movie_CommPool_AI2_Init(void) { #if (ALG_FUNC_AI2 == ENABLE) diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index 633b52d93..2899d0218 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -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) { @@ -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); 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) { @@ -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); MovieFast_SetRecParamByRecID(gMovie_Clone_Info[i].rec_id); + MovieFast_SetAq(ImageApp_MovieMulti_GetVdoEncPort(gMovie_Clone_Info[i].rec_id), 4); } mask <<= 1; @@ -820,6 +836,13 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) #endif 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) HD_AUDIOCAP_ANR audio_cfg_param = {0}; @@ -859,7 +882,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) #endif MovieFast_InstallID(); - vos_util_delay_ms(500); + vos_util_delay_ms(330); //Set_AEMODE(1); //vos_util_delay_ms(500); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h index ea5ba1ef4..408f2aee9 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.h @@ -6,7 +6,7 @@ #include "GxVideoFile.h" #include "hdal.h" -#define MOVIE_ISP_LOG ENABLE +#define MOVIE_ISP_LOG DISABLE #if (MOVIE_ISP_LOG == ENABLE) #undef WATERLOGO_FUNCTION diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h index 9d6f1711c..1baf8c8ce 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h @@ -109,7 +109,7 @@ #define JPG_BRC_INIT_Q 85 #define JPG_BRC_RETRY_CNT 4 #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_LBOUND(TBR) (TBR - (TBR * 15 / 100)) #define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6) diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c index 343d3be8a..457f30b15 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -364,11 +364,13 @@ static UINT32 PhotoExe_GetScreenNailSize(void) UINT32 uiImageSize, ScreenNailSize; UINT32 BitStreamSize; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); ScreenNailSize = CFG_SCREENNAIL_SIZE; uiImageSize = UI_GetData(FL_PHOTO_SIZE); 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 { BitStreamSize = 0; } @@ -400,7 +402,9 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id) if (uiImageSize < ScreenNailSize) { //BufferSize.w = GetPhotoSizeWidth(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; ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); @@ -459,9 +463,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id) DevSize = GxVideo_GetDeviceSize(DOUT1); #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! - BufferSize.w = CFG_SCREENNAIL_W; - BufferSize.h = CFG_SCREENNAIL_H; + //BufferSize.w = CFG_SCREENNAIL_W; + //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) { 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_RESULT hd_ret = HD_OK; 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); if (hd_ret != HD_OK) { @@ -1435,7 +1443,8 @@ void PhotoExe_CommPoolInit(void) g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0; id ++; 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].ddr_id = DDR_ID0; @@ -3877,11 +3886,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void) case PHOTO_ENC_JPG_SCREENNAIL: { - 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); + UIMenuStoreInfo *puiPara = sf_ui_para_get(); - dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}; - bitrate = SCREENNAIL_TARGETBYTERATE * 8; + 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); + //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; } @@ -4644,11 +4658,14 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail( VF_GFX_SCALE vf_gfx_scale = {0}; URECT dest_win = {0}; USIZE src_size = {0}, dest_size = {0}; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); src_size.w = video_frame_in->dim.w; src_size.h = video_frame_in->dim.h; - dest_size.w = CFG_SCREENNAIL_W; - dest_size.h = CFG_SCREENNAIL_H; + dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize); + 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); 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 ******************************************************************/ + UIMenuStoreInfo *puiPara = sf_ui_para_get(); /* 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); if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c index d903eb46e..d6979171e 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIDateImprint.c @@ -308,8 +308,10 @@ void UiDateImprint_InitBuff(void) } else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) { 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_) pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf()); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c index 7bc57f023..cb24149cb 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -189,8 +189,11 @@ static HD_RESULT set_enc_cfg(void) HD_VIDEOENC_PATH_CONFIG video_enc_path_config = {0}; HD_RESULT hd_ret; UINT32 u32W, u32H; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); 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 PriTargetUBoundBytes = PRIMARY_TARGETBYTERATE_UBOUND(PriTargetBytes); @@ -213,12 +216,15 @@ static HD_RESULT set_enc_cfg(void) } //screennail image - u32W = CFG_SCREENNAIL_W; - u32H = CFG_SCREENNAIL_H; + //u32W = CFG_SCREENNAIL_W; + //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.max_dim.w = u32W; 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.svc_layer = HD_SVC_DISABLE; video_enc_path_config.max_mem.ltr = FALSE; @@ -525,11 +531,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void) UINT32 uiImageSize, ScreenNailSize; UINT32 BitStreamSize; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); ScreenNailSize = CFG_SCREENNAIL_SIZE; uiImageSize = UI_GetData(FL_PHOTO_SIZE); 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 { BitStreamSize = 0; } @@ -1053,7 +1061,8 @@ static ER PhotoFast_CaptureInit(void) PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_PRIMARY]); // 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]); // allocate thumbnail captured resolution @@ -1186,8 +1195,10 @@ static void PhotoFast_CaptureStart(HD_VIDEO_FRAME *p_video_frame) /* --- The flow of encoded screenail image. ---*/ memset(&gfx_scale, 0, sizeof(VF_GFX_SCALE)); //scale to screennail resolution - u32W = CFG_SCREENNAIL_W; - u32H = CFG_SCREENNAIL_H; + //u32W = CFG_SCREENNAIL_W; + //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.h = p_video_frame->dim.h; dest_size.w = u32W; @@ -1552,7 +1563,12 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg) g_bFrmCnt = 0; 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()) { case DX_HUNTING_MODE_PHOTO: 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_CAMERA_PHOTO_MOVIE: - vos_perf_list_mark("sie_vd", __LINE__, 3); vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_CHGMODE); break; diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c index 040fd8bee..d2a893b73 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c @@ -13,10 +13,11 @@ #include "sys_fastboot.h" #include "UIApp/ExifVendor.h" #include "PhotoFastCapDateImprint.h" +#include "PhotoFast.h" +#include "sf_mcu.h" #include #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 @@ -44,7 +45,6 @@ #define PHOTOFAST_SLICE_ENC_DUMP(fmtstr, args...) #endif - typedef struct { 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 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_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in); 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) { HD_DIM dim = PhotoFast_SliceEncode_Get_Encode_Max_Size(); - UINT32 reserved_buffer_height = ((dim.h * 3) / 10); - UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt); + UINT32 reserved_buffer = 0; UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer; 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) { - 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->height = cap_size_h; info->slice_num = slice_num; @@ -163,18 +158,10 @@ INT32 PhotoFast_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoFast_SliceSize_Info *in slice_num = 1; } else{ - PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); UINT32 lines = (buf_size / cap_size_w); - 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); @@ -375,11 +362,17 @@ INT32 PhotoFast_SliceEncode_Open(const HD_PATH_ID vproc_path_id) case PHOTO_ENC_JPG_SCREENNAIL: { - 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); + UIMenuStoreInfo *puiPara = sf_ui_para_get(); - dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}; - bitrate = SCREENNAIL_TARGETBYTERATE * 8; + 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); + //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; } @@ -499,6 +492,26 @@ static INT32 PhotoFast_SliceEncode_Alloc_Buffer(PhotoFast_MEM_Info* info, char* 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) { HD_RESULT ret; @@ -557,7 +570,7 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice( UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0}; 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 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 */ @@ -620,34 +633,23 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice( return E_OK; } -#if 1//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) +#if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV +static INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame) { char fileName[128] = {0}; FST_FILE fp = NULL; UINT32 size; UINT32 va; - static UINT32 cnt = 0; - - 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); - } - + + size = VDO_YUV_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); if (va == 0) { DBG_ERR("hd_common_mem_mmap error!r\n"); 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); - }else{ - sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx_%02d.raw", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt, cnt); - cnt++; - } + + sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx.dat", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt); fp = FileSys_OpenFile(fileName, FST_CREATE_ALWAYS | FST_OPEN_WRITE); 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}; URECT dest_win = {0}; USIZE src_size = {0}, dest_size = {0}; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); src_size.w = video_frame_in->dim.w; src_size.h = video_frame_in->dim.h; - dest_size.w = CFG_SCREENNAIL_W; - dest_size.h = CFG_SCREENNAIL_H; + dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize); + 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); 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; } +#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( const HD_VIDEO_FRAME* video_frame_in, 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); - 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) { DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); 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) { DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); 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); 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); - ret = HD_ERR_SYS; + ret = HD_ERR_NOMEM; 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); - 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) { DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); 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) { DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); 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); 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); - ret = HD_ERR_SYS; + ret = HD_ERR_NOMEM; goto EXIT; } @@ -984,11 +1072,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void) UINT32 uiImageSize, ScreenNailSize; UINT32 BitStreamSize; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); ScreenNailSize = CFG_SCREENNAIL_SIZE; uiImageSize = UI_GetData(FL_PHOTO_SIZE); 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 { 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 ); - 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) { DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); 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) { DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); goto EXIT; @@ -1160,12 +1250,12 @@ static INT32 PhotoFast_SliceEncode_Encode_Primary( if(quality_old == 1){ 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; restart = TRUE; } - else if(quality_old > CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP){ - quality_new = 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_STEP; restart = TRUE; } 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_stamp_s, tick_stamp_e; // VOS_TICK tick_combine_s, tick_combine_e; - + UIMenuStoreInfo *puiPara = sf_ui_para_get(); 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 - PhotoFast_SliceEncode_Dump_Frame(video_frame, HD_VIDEO_PXLFMT_YUV420); + PhotoFast_SliceEncode_Dump_Frame(video_frame); #endif @@ -1311,7 +1401,15 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME 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(); +#endif + if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ goto EXIT; } @@ -1367,14 +1465,24 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME /******************************************************************* * Screennail & Thumbnail 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); if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ goto EXIT; } +#endif + #if PHOTOFAST_SLICE_ENC_DBG_SCREENNAIL_JPG /* 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; 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; while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1) @@ -1686,7 +1795,14 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data) 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 @@ -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); 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; } 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; } @@ -1734,14 +1860,23 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data) /******************************************************************* * Screennail & Thumbnail Encode ******************************************************************/ + UIMenuStoreInfo *puiPara = sf_ui_para_get(); /* 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_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL); + 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(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 */ 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 */ 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_size = dst_jpg_file.size; queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr; @@ -1836,7 +1972,14 @@ EXIT: 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; } @@ -1865,13 +2008,18 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) 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 ******************************************************************/ 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_FILENAMINGOK); PhotoFast_WriteFile( @@ -1884,17 +2032,27 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) extern CHAR* PhotoFast_GetLastWriteFilePath(void); char* file_path = PhotoFast_GetLastWriteFilePath(); char tmp[256] = {'\0'}; + char tmp2[64] = {'\0'}; 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 + 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); FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL); 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 */ @@ -1919,7 +2077,11 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) 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; } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h index e8e657b13..503dec50a 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h @@ -11,7 +11,13 @@ #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_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 { diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c index fbef49d8e..15a9d0768 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c @@ -52,6 +52,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = { [MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA 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_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30", }; diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h index 8b448db11..d292d23f3 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h @@ -5,7 +5,7 @@ // Photo #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_COLOR COLOR_EFFECT_STANDARD #define DEFAULT_SCENE SCENE_AUTO @@ -63,7 +63,7 @@ #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #else #if (MOVIE_AI_DEMO == DISABLE) - #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30 + #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30 #else #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #endif @@ -71,8 +71,8 @@ #endif -#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 -#define DEFAULT_MOVIE_SIZE_SINGLE 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_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE #define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h index 4c5eadd25..7475c1902 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h @@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR ImgSize;/* 24M/12M/8M/5M */ CHAR NightMode;/* Max.Range/Balanced/Min.Blur */ CHAR Multishot;/*1P/2P/3P/4P/5P*/ + CHAR MultiShotIntevel;/*0s/1s/2s*/ + CHAR SendMulti;/*OFF/ON*/ CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/ CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/ CHAR VideoLenth; @@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR TimeSend3Switch;/*OFF/ON*/ CHAR TimeSend4Switch;/*OFF/ON*/ CHAR SendType; + CHAR PicUpDailyReport; /////////////////////// #endif @@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo { CHAR SimIccid[21]; CHAR ServiceProvider[64]; UINT8 SimSignal; - UINT8 SimType; + UINT8 SimType; UINT8 FtpSwitch;/*FTP/OFF/FTPS*/ UINT8 FtpIp[40]; UINT8 FtpPort[5]; @@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo { UINT8 FtpsPort[5]; UINT8 FtpsUsr[40]; UINT8 FtpsPwd[20]; + + UINT8 WifiSwitch; + UINT8 WifiMode; + UINT8 WifiApPWD[16]; + UINT8 Zoom; //============Sifar==============///Payton } UIMenuStoreInfo; @@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE { MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA + MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_2048x2048P30_480x480P30, MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60 diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c index 57c00aa61..f3a3433e1 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c @@ -164,9 +164,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { {1, 3, 36, 8, -8, 0}, {1, 4, 30, 200 * 1024, 30, 26, 10, 40, 26, 10, 40, -40, 1, 8, 4}, #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, 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 }, @@ -194,9 +194,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { {1, 2, 36, 6, -6, 0}, {1, 4, 30, 100 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4}, #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, 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 }, @@ -218,9 +218,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { {1, 3, 36, 8, -8, 0}, {1, 4, 30, 84 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4}, #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, 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 }, @@ -254,9 +254,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { {1, 3, 36, 8, -8, 0}, {1, 4, 30, 80 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4}, #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, 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 }, @@ -498,6 +498,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = { {MOVIE_SIZE_1920x1080P60, 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_REC_TYPE_CLONE, diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c old mode 100755 new mode 100644 index 8879e445a..5e564cc1e --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c @@ -48,6 +48,18 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = { {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) { if (uiIndex < PHOTO_SIZE_ID_MAX) { @@ -72,6 +84,21 @@ UINT32 GetPhotoSizeRatio(UINT32 ubIndex) 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 **************************************************/ diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h index bafcd0908..04d0317d1 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h @@ -4,6 +4,9 @@ extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex); extern UINT32 GetPhotoSizeHeight(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 UINT32 Get_AFWindowIndexFromValue(UINT32 value); extern UINT32 Get_AFWindowValue(UINT32 uhIndex); diff --git a/rtos/code/driver/na51089/include/sf_mcu.h b/rtos/code/driver/na51089/include/sf_mcu.h index fa6dcdda3..62658598a 100755 --- a/rtos/code/driver/na51089/include/sf_mcu.h +++ b/rtos/code/driver/na51089/include/sf_mcu.h @@ -29,6 +29,7 @@ #define SF_I2C_NAME "sf_mcu" //#endif +#define SF_SD_THUMB_PATH "A:\\Thumb\\ThumbFileCfg" //#ifndef SF_I2C_ADDR #if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_) #define MCU_I2C_SLAVE_ADDR (0x20>>1) @@ -426,6 +427,57 @@ typedef struct sfCAMERA_CMD_S UINT8 GotoServerGetPara; } 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); void sf_i2c_remove_driver(UINT32 id); 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); 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 diff --git a/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c b/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c index 3d42c2fdc..211f767be 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c +++ b/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c @@ -18,33 +18,33 @@ * Description: creat **************************************************************************/ -#ifdef __KERNEL__ -#include -#include -//#include -//#include "kwrap/type.h" -//#include "kwrap/semaphore.h" -//#include "kwrap/flag.h" -#include -#else -//#include "kwrap/type.h" -//#include "kwrap/semaphore.h" -//#include "kwrap/flag.h" -#include -#endif - -#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 __DBGFLT__ "*" // *=All, [mark]=CustomClass -#include "kwrap/debug.h" -//#include -#include -#include -#include "comm/hwclock.h" -#include "comm/timer.h" -#include -#include -#include "UIInfo.h" +#ifdef __KERNEL__ +#include +#include +//#include +//#include "kwrap/type.h" +//#include "kwrap/semaphore.h" +//#include "kwrap/flag.h" +#include +#else +//#include "kwrap/type.h" +//#include "kwrap/semaphore.h" +//#include "kwrap/flag.h" +#include +#endif + +#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 __DBGFLT__ "*" // *=All, [mark]=CustomClass +#include "kwrap/debug.h" +//#include +#include +#include +#include "comm/hwclock.h" +#include "comm/timer.h" +#include +#include +#include "UIInfo.h" #include "GxUSB.h" #include "kwrap/task.h" #include @@ -143,7 +143,7 @@ unsigned char cmpValBuf[BUF_REG_SIZE] = {0}; static unsigned char sf_commu_mcu_exit = 1; static VK_TASK_HANDLE sfCommuMcuThread = 0; THREAD_RETTYPE sf_commu_mcu_task(void *arg); - + int gsfd = -1; 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; for(i = 0; i < num; i++) - { + { index++; sndBuf[index] = reg[i]; index++; @@ -330,9 +330,9 @@ int sf_get_mcu_reg_many(unsigned char reg[], unsigned int num) index++; sndBuf[index] = num; - - for(i = 0; i < num; i++) - { + + for(i = 0; i < num; i++) + { index++; 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]; for(i = 0; i < *num; i++) - { + { reg[i]= smap_buf.buf[j]; 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; //sf_com_message_send_to_app(&stMessageBuf); 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 { @@ -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_ENTRY(); + THREAD_ENTRY(); static unsigned char buffer[BUF_REG_SIZE] = {0}; int i = 0; int readLen = 0; @@ -832,7 +833,7 @@ THREAD_RETTYPE sf_commu_mcu_task(void *arg) } } } - THREAD_RETURN(0); + THREAD_RETURN(0); } diff --git a/rtos/code/driver/na51089/source/mcu/sf_mcu_dev.c b/rtos/code/driver/na51089/source/mcu/sf_mcu_dev.c index 6d630086e..40182291f 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_mcu_dev.c +++ b/rtos/code/driver/na51089/source/mcu/sf_mcu_dev.c @@ -41,6 +41,9 @@ #include "GxUSB.h" #include +#include "FileSysTsk.h" +#include +#include static UINT8 McuSubVersion = 0; static UINT16 McuVersion = 0; @@ -66,6 +69,8 @@ static UINT32 GPRS_ERRNO = 0; #endif +SF_SRCFILE_ATTR_S *pThumbFileCfg = NULL; + #if DIGITAL_PIR const UINT8 PirDigtSensRegValue[3] = { 7, 9, 16 }; /*digital Level PIR: 7/9/16 -> reg:9/7/5*/ #else /*analog PIR*/ @@ -2006,6 +2011,62 @@ void sf_set_module_sleep_flag(UINT8 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 int sf_mod_init(void) diff --git a/rtos/code/hdal/drivers/k_flow/output/libkflow_videoenc.a b/rtos/code/hdal/drivers/k_flow/output/libkflow_videoenc.a index a64ce0ced..eddd5b21c 100644 Binary files a/rtos/code/hdal/drivers/k_flow/output/libkflow_videoenc.a and b/rtos/code/hdal/drivers/k_flow/output/libkflow_videoenc.a differ diff --git a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi index 0741c4d08..a7e23d51f 100755 --- a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi +++ b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi @@ -7,7 +7,7 @@ version-info = [00 01 00 01]; ae_expect_lum { 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 { size = [50 01 00 00]; @@ -15,7 +15,7 @@ }; ae_over_exposure { 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 { size = [2c 00 00 00]; @@ -27,7 +27,7 @@ }; ae_meter_window { 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 { size = [82 00 00 00]; diff --git a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi index 8579f98a5..2774d6a71 100755 --- a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi +++ b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi @@ -11,7 +11,7 @@ }; iq_nr { size = [f4 12 00 00]; - data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 08 00 00 00 00 00 00 00 69 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 cd 05 00 00 92 09 00 00 e1 0d 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 0b 00 00 00 0c 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 0d 00 00 00 0c 00 00 00 64 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 10 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 19 00 00 00 1b 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 25 00 00 00 26 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 00 00 00 00 0a 00 00 00 0f 00 00 00 12 00 00 00 15 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2b 00 00 00 0c 00 00 00 0c 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 01 95 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 12 00 00 00 14 00 00 00 17 00 00 00 19 00 00 00 1b 00 00 00 1d 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 19 00 00 00 1d 00 00 00 21 00 00 00 24 00 00 00 27 00 00 00 29 00 00 00 2c 00 00 00 2e 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 3b 00 00 00 0e 00 00 00 10 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 08 00 00 00 0b 00 00 00 0d 00 00 00 10 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 18 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 1d 00 00 00 1e 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 11 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 0f 00 00 00 08 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 05 00 00 00 08 00 00 00 0a 00 00 00 0b 00 00 00 10 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0f 00 00 00 04 00 00 00 50 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 10 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 00 00 00 00 06 00 00 00 09 00 00 00 0b 00 00 00 0c 00 00 00 12 00 00 00 00 00 00 00 16 00 00 00 20 00 00 00 27 00 00 00 2d 00 00 00 32 00 00 00 37 00 00 00 3c 00 00 00 40 00 00 00 44 00 00 00 48 00 00 00 4b 00 00 00 4e 00 00 00 52 00 00 00 55 00 00 00 58 00 00 00 5b 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; + data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 cd 05 00 00 92 09 00 00 e1 0d 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 0b 00 00 00 0c 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 0d 00 00 00 0c 00 00 00 64 00 00 00 08 00 00 00 0c 00 00 00 08 00 00 00 0c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0c 00 00 00 06 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 01 95 00 00 00 00 00 00 00 00 00 20 00 00 00 56 05 00 00 ce 08 00 00 c4 0c 00 00 ff 0f 00 00 20 00 00 00 44 06 00 00 57 0a 00 00 fe 0e 00 00 ff 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 12 00 00 00 14 00 00 00 17 00 00 00 19 00 00 00 1b 00 00 00 1d 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 00 00 00 00 0f 00 00 00 15 00 00 00 1a 00 00 00 1e 00 00 00 21 00 00 00 25 00 00 00 28 00 00 00 2a 00 00 00 2d 00 00 00 30 00 00 00 32 00 00 00 34 00 00 00 36 00 00 00 38 00 00 00 3a 00 00 00 3c 00 00 00 0e 00 00 00 03 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 08 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 08 00 00 00 0b 00 00 00 0d 00 00 00 10 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 18 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 1d 00 00 00 1e 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 08 00 00 00 0a 00 00 00 0c 00 00 00 11 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0f 00 00 00 03 00 00 00 50 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 08 00 00 00 0c 00 00 00 0f 00 00 00 11 00 00 00 13 00 00 00 15 00 00 00 17 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 22 00 00 00 23 00 00 00 00 00 00 00 05 00 00 00 08 00 00 00 0a 00 00 00 0b 00 00 00 10 00 00 00 00 00 00 00 0a 00 00 00 0e 00 00 00 11 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1c 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 28 00 00 00 0f 00 00 00 01 00 00 00 50 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 10 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 09 00 00 00 0d 00 00 00 0f 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 18 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 00 00 00 00 06 00 00 00 09 00 00 00 0b 00 00 00 0c 00 00 00 12 00 00 00 00 00 00 00 16 00 00 00 20 00 00 00 27 00 00 00 2d 00 00 00 32 00 00 00 37 00 00 00 3c 00 00 00 40 00 00 00 44 00 00 00 48 00 00 00 4b 00 00 00 4e 00 00 00 52 00 00 00 55 00 00 00 58 00 00 00 5b 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; }; iq_cfa { size = [54 05 00 00]; @@ -23,23 +23,23 @@ }; iq_gamma { size = [94 0e 00 00]; - data = [00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1d 00 00 00 39 00 00 00 56 00 00 00 72 00 00 00 8e 00 00 00 aa 00 00 00 c4 00 00 00 dd 00 00 00 ee 00 00 00 ff 00 00 00 0f 01 00 00 20 01 00 00 2f 01 00 00 3e 01 00 00 4e 01 00 00 5e 01 00 00 6d 01 00 00 7d 01 00 00 8c 01 00 00 9c 01 00 00 ab 01 00 00 bb 01 00 00 cb 01 00 00 db 01 00 00 fa 01 00 00 19 02 00 00 38 02 00 00 58 02 00 00 77 02 00 00 96 02 00 00 b6 02 00 00 d5 02 00 00 f4 02 00 00 13 03 00 00 32 03 00 00 52 03 00 00 90 03 00 00 cf 03 00 00 0d 04 00 00 4b 04 00 00 c8 04 00 00 45 05 00 00 c2 05 00 00 3f 06 00 00 bc 06 00 00 38 07 00 00 b5 07 00 00 32 08 00 00 af 08 00 00 2c 09 00 00 a9 09 00 00 25 0a 00 00 a2 0a 00 00 1f 0b 00 00 9c 0b 00 00 19 0c 00 00 96 0c 00 00 12 0d 00 00 8f 0d 00 00 0c 0e 00 00 89 0e 00 00 06 0f 00 00 83 0f 00 00 ff 0f 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 19 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 32 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 4b 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 64 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 00 00 00 00 25 00 00 00 49 00 00 00 6b 00 00 00 8b 00 00 00 a9 00 00 00 c6 00 00 00 e1 00 00 00 f1 00 00 00 01 01 00 00 11 01 00 00 21 01 00 00 30 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 68 01 00 00 75 01 00 00 82 01 00 00 8f 01 00 00 9b 01 00 00 a6 01 00 00 b1 01 00 00 bc 01 00 00 c7 01 00 00 d1 01 00 00 db 01 00 00 e4 01 00 00 ed 01 00 00 f6 01 00 00 fe 01 00 00 06 02 00 00 0d 02 00 00 14 02 00 00 1b 02 00 00 22 02 00 00 29 02 00 00 30 02 00 00 36 02 00 00 3d 02 00 00 44 02 00 00 4b 02 00 00 52 02 00 00 59 02 00 00 5f 02 00 00 66 02 00 00 6d 02 00 00 73 02 00 00 7a 02 00 00 80 02 00 00 87 02 00 00 8d 02 00 00 93 02 00 00 9a 02 00 00 a0 02 00 00 a6 02 00 00 ac 02 00 00 b3 02 00 00 b9 02 00 00 bf 02 00 00 c5 02 00 00 cb 02 00 00 d1 02 00 00 d7 02 00 00 dd 02 00 00 e3 02 00 00 e8 02 00 00 ee 02 00 00 f4 02 00 00 fa 02 00 00 ff 02 00 00 04 03 00 00 09 03 00 00 0e 03 00 00 13 03 00 00 18 03 00 00 1d 03 00 00 21 03 00 00 26 03 00 00 2b 03 00 00 30 03 00 00 35 03 00 00 3a 03 00 00 3e 03 00 00 43 03 00 00 48 03 00 00 4d 03 00 00 51 03 00 00 56 03 00 00 5b 03 00 00 5f 03 00 00 64 03 00 00 68 03 00 00 6d 03 00 00 72 03 00 00 76 03 00 00 7b 03 00 00 7f 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 91 03 00 00 95 03 00 00 99 03 00 00 9e 03 00 00 a2 03 00 00 a6 03 00 00 ab 03 00 00 af 03 00 00 b3 03 00 00 b7 03 00 00 bb 03 00 00 bf 03 00 00 c4 03 00 00 c8 03 00 00 cc 03 00 00 d0 03 00 00 d4 03 00 00 d8 03 00 00 dc 03 00 00 e0 03 00 00 e4 03 00 00 e8 03 00 00 eb 03 00 00 ef 03 00 00 f3 03 00 00 f7 03 00 00 fb 03 00 00 ff 03 00 00 07 00 00 00 00 00 00 00 23 00 00 00 44 00 00 00 61 00 00 00 7d 00 00 00 98 00 00 00 b1 00 00 00 c4 00 00 00 d7 00 00 00 e9 00 00 00 fb 00 00 00 0c 01 00 00 1d 01 00 00 2c 01 00 00 3b 01 00 00 49 01 00 00 57 01 00 00 64 01 00 00 72 01 00 00 7f 01 00 00 8c 01 00 00 98 01 00 00 a5 01 00 00 b1 01 00 00 bd 01 00 00 c9 01 00 00 d5 01 00 00 e0 01 00 00 eb 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 16 02 00 00 20 02 00 00 2a 02 00 00 34 02 00 00 3e 02 00 00 48 02 00 00 51 02 00 00 5a 02 00 00 63 02 00 00 6c 02 00 00 75 02 00 00 7e 02 00 00 86 02 00 00 8e 02 00 00 96 02 00 00 9e 02 00 00 a6 02 00 00 ae 02 00 00 b5 02 00 00 bd 02 00 00 c4 02 00 00 cb 02 00 00 d2 02 00 00 d9 02 00 00 e0 02 00 00 e7 02 00 00 ed 02 00 00 f4 02 00 00 fa 02 00 00 00 03 00 00 06 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1d 03 00 00 23 03 00 00 28 03 00 00 2e 03 00 00 33 03 00 00 38 03 00 00 3d 03 00 00 42 03 00 00 47 03 00 00 4c 03 00 00 51 03 00 00 56 03 00 00 5a 03 00 00 5f 03 00 00 63 03 00 00 67 03 00 00 6c 03 00 00 70 03 00 00 74 03 00 00 78 03 00 00 7c 03 00 00 80 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 8f 03 00 00 93 03 00 00 97 03 00 00 9a 03 00 00 9e 03 00 00 a1 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 ce 03 00 00 d1 03 00 00 d3 03 00 00 d6 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e2 03 00 00 e4 03 00 00 e7 03 00 00 ea 03 00 00 ed 03 00 00 ef 03 00 00 f2 03 00 00 f5 03 00 00 f7 03 00 00 fa 03 00 00 fc 03 00 00 ff 03 00 00 05 00 00 00 00 00 00 00 2b 00 00 00 50 00 00 00 6a 00 00 00 86 00 00 00 a2 00 00 00 bd 00 00 00 d5 00 00 00 ec 00 00 00 00 01 00 00 11 01 00 00 21 01 00 00 2e 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 6a 01 00 00 78 01 00 00 86 01 00 00 93 01 00 00 a0 01 00 00 ad 01 00 00 ba 01 00 00 c6 01 00 00 d3 01 00 00 df 01 00 00 ea 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 17 02 00 00 22 02 00 00 2c 02 00 00 36 02 00 00 40 02 00 00 4a 02 00 00 54 02 00 00 5d 02 00 00 66 02 00 00 70 02 00 00 78 02 00 00 81 02 00 00 8a 02 00 00 92 02 00 00 9a 02 00 00 a2 02 00 00 aa 02 00 00 b2 02 00 00 ba 02 00 00 c1 02 00 00 c9 02 00 00 d0 02 00 00 d7 02 00 00 de 02 00 00 e5 02 00 00 eb 02 00 00 f2 02 00 00 f8 02 00 00 fe 02 00 00 04 03 00 00 0b 03 00 00 10 03 00 00 16 03 00 00 1c 03 00 00 22 03 00 00 27 03 00 00 2c 03 00 00 32 03 00 00 37 03 00 00 3c 03 00 00 41 03 00 00 46 03 00 00 4b 03 00 00 4f 03 00 00 54 03 00 00 59 03 00 00 5d 03 00 00 61 03 00 00 66 03 00 00 6a 03 00 00 6e 03 00 00 72 03 00 00 76 03 00 00 7a 03 00 00 7e 03 00 00 82 03 00 00 86 03 00 00 89 03 00 00 8d 03 00 00 91 03 00 00 94 03 00 00 98 03 00 00 9b 03 00 00 9e 03 00 00 a2 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 be 03 00 00 c1 03 00 00 c3 03 00 00 c6 03 00 00 c9 03 00 00 cc 03 00 00 cf 03 00 00 d1 03 00 00 d4 03 00 00 d7 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e1 03 00 00 e4 03 00 00 e6 03 00 00 e9 03 00 00 eb 03 00 00 ee 03 00 00 f0 03 00 00 f3 03 00 00 f5 03 00 00 f8 03 00 00 fa 03 00 00 fd 03 00 00 ff 03 00 00]; + data = [00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1d 00 00 00 39 00 00 00 56 00 00 00 72 00 00 00 8e 00 00 00 aa 00 00 00 c4 00 00 00 dd 00 00 00 ee 00 00 00 ff 00 00 00 0f 01 00 00 20 01 00 00 2f 01 00 00 3e 01 00 00 4e 01 00 00 5e 01 00 00 6d 01 00 00 7d 01 00 00 8c 01 00 00 9c 01 00 00 ab 01 00 00 bb 01 00 00 cb 01 00 00 db 01 00 00 fa 01 00 00 19 02 00 00 38 02 00 00 58 02 00 00 77 02 00 00 96 02 00 00 b6 02 00 00 d5 02 00 00 f4 02 00 00 13 03 00 00 32 03 00 00 52 03 00 00 90 03 00 00 cf 03 00 00 0d 04 00 00 4b 04 00 00 c8 04 00 00 45 05 00 00 c2 05 00 00 3f 06 00 00 bc 06 00 00 38 07 00 00 b5 07 00 00 32 08 00 00 af 08 00 00 2c 09 00 00 a9 09 00 00 25 0a 00 00 a2 0a 00 00 1f 0b 00 00 9c 0b 00 00 19 0c 00 00 96 0c 00 00 12 0d 00 00 8f 0d 00 00 0c 0e 00 00 89 0e 00 00 06 0f 00 00 83 0f 00 00 ff 0f 00 00 00 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 24 00 00 00 26 00 00 00 28 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 19 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 32 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 4b 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 64 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 90 00 00 00 a0 00 00 00 b0 00 00 00 c0 00 00 00 d0 00 00 00 e0 00 00 00 f0 00 00 00 00 01 00 00 10 01 00 00 20 01 00 00 30 01 00 00 40 01 00 00 50 01 00 00 60 01 00 00 70 01 00 00 80 01 00 00 a0 01 00 00 c0 01 00 00 e0 01 00 00 00 02 00 00 20 02 00 00 40 02 00 00 60 02 00 00 80 02 00 00 a0 02 00 00 c0 02 00 00 e0 02 00 00 00 03 00 00 40 03 00 00 80 03 00 00 c0 03 00 00 00 04 00 00 80 04 00 00 00 05 00 00 80 05 00 00 00 06 00 00 80 06 00 00 00 07 00 00 80 07 00 00 00 08 00 00 80 08 00 00 00 09 00 00 80 09 00 00 00 0a 00 00 80 0a 00 00 00 0b 00 00 80 0b 00 00 00 0c 00 00 80 0c 00 00 00 0d 00 00 80 0d 00 00 00 0e 00 00 80 0e 00 00 00 0f 00 00 80 0f 00 00 ff 0f 00 00 00 00 00 00 25 00 00 00 49 00 00 00 6b 00 00 00 8b 00 00 00 a9 00 00 00 c6 00 00 00 e1 00 00 00 f1 00 00 00 01 01 00 00 11 01 00 00 21 01 00 00 30 01 00 00 3e 01 00 00 4d 01 00 00 5b 01 00 00 68 01 00 00 75 01 00 00 82 01 00 00 8f 01 00 00 9b 01 00 00 a6 01 00 00 b1 01 00 00 bc 01 00 00 c7 01 00 00 d1 01 00 00 db 01 00 00 e4 01 00 00 ed 01 00 00 f6 01 00 00 fe 01 00 00 06 02 00 00 0d 02 00 00 14 02 00 00 1b 02 00 00 22 02 00 00 29 02 00 00 30 02 00 00 36 02 00 00 3d 02 00 00 44 02 00 00 4b 02 00 00 52 02 00 00 59 02 00 00 5f 02 00 00 66 02 00 00 6d 02 00 00 73 02 00 00 7a 02 00 00 80 02 00 00 87 02 00 00 8d 02 00 00 93 02 00 00 9a 02 00 00 a0 02 00 00 a6 02 00 00 ac 02 00 00 b3 02 00 00 b9 02 00 00 bf 02 00 00 c5 02 00 00 cb 02 00 00 d1 02 00 00 d7 02 00 00 dd 02 00 00 e3 02 00 00 e8 02 00 00 ee 02 00 00 f4 02 00 00 fa 02 00 00 ff 02 00 00 04 03 00 00 09 03 00 00 0e 03 00 00 13 03 00 00 18 03 00 00 1d 03 00 00 21 03 00 00 26 03 00 00 2b 03 00 00 30 03 00 00 35 03 00 00 3a 03 00 00 3e 03 00 00 43 03 00 00 48 03 00 00 4d 03 00 00 51 03 00 00 56 03 00 00 5b 03 00 00 5f 03 00 00 64 03 00 00 68 03 00 00 6d 03 00 00 72 03 00 00 76 03 00 00 7b 03 00 00 7f 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 91 03 00 00 95 03 00 00 99 03 00 00 9e 03 00 00 a2 03 00 00 a6 03 00 00 ab 03 00 00 af 03 00 00 b3 03 00 00 b7 03 00 00 bb 03 00 00 bf 03 00 00 c4 03 00 00 c8 03 00 00 cc 03 00 00 d0 03 00 00 d4 03 00 00 d8 03 00 00 dc 03 00 00 e0 03 00 00 e4 03 00 00 e8 03 00 00 eb 03 00 00 ef 03 00 00 f3 03 00 00 f7 03 00 00 fb 03 00 00 ff 03 00 00 07 00 00 00 00 00 00 00 23 00 00 00 44 00 00 00 61 00 00 00 7d 00 00 00 98 00 00 00 b1 00 00 00 c4 00 00 00 d7 00 00 00 e9 00 00 00 fb 00 00 00 0c 01 00 00 1d 01 00 00 2c 01 00 00 3b 01 00 00 49 01 00 00 57 01 00 00 64 01 00 00 72 01 00 00 7f 01 00 00 8c 01 00 00 98 01 00 00 a5 01 00 00 b1 01 00 00 bd 01 00 00 c9 01 00 00 d5 01 00 00 e0 01 00 00 eb 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 16 02 00 00 20 02 00 00 2a 02 00 00 34 02 00 00 3e 02 00 00 48 02 00 00 51 02 00 00 5a 02 00 00 63 02 00 00 6c 02 00 00 75 02 00 00 7e 02 00 00 86 02 00 00 8e 02 00 00 96 02 00 00 9e 02 00 00 a6 02 00 00 ae 02 00 00 b5 02 00 00 bd 02 00 00 c4 02 00 00 cb 02 00 00 d2 02 00 00 d9 02 00 00 e0 02 00 00 e7 02 00 00 ed 02 00 00 f4 02 00 00 fa 02 00 00 00 03 00 00 06 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1d 03 00 00 23 03 00 00 28 03 00 00 2e 03 00 00 33 03 00 00 38 03 00 00 3d 03 00 00 42 03 00 00 47 03 00 00 4c 03 00 00 51 03 00 00 56 03 00 00 5a 03 00 00 5f 03 00 00 63 03 00 00 67 03 00 00 6c 03 00 00 70 03 00 00 74 03 00 00 78 03 00 00 7c 03 00 00 80 03 00 00 84 03 00 00 88 03 00 00 8c 03 00 00 8f 03 00 00 93 03 00 00 97 03 00 00 9a 03 00 00 9e 03 00 00 a1 03 00 00 a5 03 00 00 a8 03 00 00 ab 03 00 00 af 03 00 00 b2 03 00 00 b5 03 00 00 b8 03 00 00 bb 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 ce 03 00 00 d1 03 00 00 d3 03 00 00 d6 03 00 00 d9 03 00 00 dc 03 00 00 df 03 00 00 e2 03 00 00 e4 03 00 00 e7 03 00 00 ea 03 00 00 ed 03 00 00 ef 03 00 00 f2 03 00 00 f5 03 00 00 f7 03 00 00 fa 03 00 00 fc 03 00 00 ff 03 00 00 05 00 00 00 00 00 00 00 0d 00 00 00 1f 00 00 00 33 00 00 00 4b 00 00 00 65 00 00 00 82 00 00 00 9c 00 00 00 b6 00 00 00 cd 00 00 00 e3 00 00 00 f7 00 00 00 0a 01 00 00 1c 01 00 00 2e 01 00 00 3e 01 00 00 4e 01 00 00 5d 01 00 00 6c 01 00 00 7a 01 00 00 88 01 00 00 95 01 00 00 a1 01 00 00 ad 01 00 00 b9 01 00 00 c6 01 00 00 d2 01 00 00 de 01 00 00 ea 01 00 00 f6 01 00 00 01 02 00 00 0c 02 00 00 17 02 00 00 22 02 00 00 2d 02 00 00 37 02 00 00 42 02 00 00 4c 02 00 00 56 02 00 00 5f 02 00 00 69 02 00 00 72 02 00 00 7b 02 00 00 84 02 00 00 8d 02 00 00 96 02 00 00 9e 02 00 00 a7 02 00 00 af 02 00 00 b7 02 00 00 bf 02 00 00 c7 02 00 00 ce 02 00 00 d5 02 00 00 dd 02 00 00 e4 02 00 00 eb 02 00 00 f2 02 00 00 f8 02 00 00 ff 02 00 00 05 03 00 00 0c 03 00 00 12 03 00 00 18 03 00 00 1e 03 00 00 24 03 00 00 2a 03 00 00 2f 03 00 00 35 03 00 00 3a 03 00 00 3f 03 00 00 44 03 00 00 4a 03 00 00 4e 03 00 00 53 03 00 00 58 03 00 00 5d 03 00 00 61 03 00 00 66 03 00 00 6a 03 00 00 6f 03 00 00 73 03 00 00 77 03 00 00 7b 03 00 00 7f 03 00 00 83 03 00 00 87 03 00 00 8b 03 00 00 8e 03 00 00 92 03 00 00 96 03 00 00 99 03 00 00 9d 03 00 00 a0 03 00 00 a3 03 00 00 a7 03 00 00 aa 03 00 00 ad 03 00 00 b0 03 00 00 b3 03 00 00 b6 03 00 00 ba 03 00 00 bc 03 00 00 bf 03 00 00 c2 03 00 00 c5 03 00 00 c8 03 00 00 cb 03 00 00 cd 03 00 00 d0 03 00 00 d3 03 00 00 d5 03 00 00 d8 03 00 00 db 03 00 00 dd 03 00 00 e0 03 00 00 e2 03 00 00 e5 03 00 00 e7 03 00 00 ea 03 00 00 ec 03 00 00 ef 03 00 00 f1 03 00 00 f3 03 00 00 f6 03 00 00 f8 03 00 00 fa 03 00 00 fd 03 00 00 ff 03 00 00]; }; iq_ccm { size = [40 02 00 00]; - data = [00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 19 00 00 47 01 a9 ff 10 00 a7 ff 9a 01 c0 ff 0b 00 82 ff 73 01 82 84 80 80 80 88 8d 84 80 7e 7e 80 80 80 80 80 80 80 80 80 80 80 80 84 00 00 ed ff ff ff f2 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 1d 00 00 00 2a 00 00 00 36 00 00 00 1a 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f5 ff ff ff d8 0e 00 00 38 01 be ff 09 00 8f ff 80 01 f1 ff 08 00 6b ff 8c 01 84 82 80 80 80 86 86 84 80 7e 80 80 80 80 80 80 80 80 80 80 80 80 80 86 00 00 eb ff ff ff f5 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 0e 00 00 00 13 00 00 00 1f 00 00 00 2c 00 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f3 ff ff ff a0 0b 00 00 38 01 cd ff fb ff 66 ff b0 01 eb ff 25 00 ca fe 11 02 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 19 00 00 63 01 a7 ff 0f 00 a7 ff 9a 01 c0 ff 0b 00 82 ff 73 01 82 88 91 88 8b 8b 88 86 84 7e 7e 80 80 80 80 80 80 80 80 80 80 80 80 84 00 00 fa ff ff ff fc ff ff ff 04 00 00 00 05 00 00 00 0f 00 00 00 18 00 00 00 24 00 00 00 31 00 00 00 3e 00 00 00 1d 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc ff ff ff d8 0e 00 00 4c 01 be ff 09 00 8f ff 80 01 f1 ff 08 00 6b ff 8c 01 82 82 8b 8b 88 88 88 86 84 7e 80 80 80 80 80 80 80 80 80 80 80 80 80 86 00 00 f3 ff ff ff fe ff ff ff 00 00 00 00 06 00 00 00 0c 00 00 00 15 00 00 00 1d 00 00 00 29 00 00 00 35 00 00 00 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 ff ff ff a0 0b 00 00 38 01 cd ff fb ff 66 ff b0 01 eb ff 25 00 ca fe 11 02 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]; }; iq_color { size = [ec 06 00 00]; - data = [00 00 00 00 80 80 40 10 00 00 00 00 00 00 00 00 00 00 00 00 00 14 0f 0a 05 00 00 00 00 00 00 00 00 00 05 0a 0f 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 9e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 00 00 00 80 00 00 00 8a 00 00 00 94 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 8d aa 58 33 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 7c ff b7 7e 4f 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 64 00 00 00 73 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 82 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 6e c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 46 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 78 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00]; + data = [00 00 00 00 80 80 40 10 00 00 00 00 00 00 00 00 00 00 00 00 00 14 0f 0a 05 00 00 00 00 00 00 00 00 00 05 0a 0f 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 a3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 00 00 00 80 00 00 00 8a 00 00 00 94 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 9e 00 00 00 94 aa 58 33 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 8a 00 00 00 7c ff b7 7e 4f 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 6e 40 20 10 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 64 00 00 00 73 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 82 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 8c 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 60 40 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 6e c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 c8 78 46 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 46 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 78 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 b4 6e 40 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 00 00 00 64 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00]; }; iq_contrast { size = [b0 00 00 00]; - data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 87 11 11 16 25 25 25 25 1b 11 87 14 14 19 23 30 30 2c 20 19 80 14 1e 2b 2d 32 32 2b 28 24 87 17 21 26 2d 2f 2f 2f 2f 25 97 04 05 12 1e 1e 1e 1e 1e 19 96 00 0a 19 1e 1e 1e 1e 14 0a 96 00 05 0a 14 14 14 14 0a 00 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 19 19 1e 23 23 23 23 23 19 87 19 19 1e 28 35 35 31 25 1e 88 2b 2f 35 37 3c 3c 35 32 2e 8d 15 1f 28 30 37 37 37 37 2d 97 0e 0f 1c 28 28 28 28 28 23 96 00 0a 19 1e 1e 1e 1e 14 0a 96 00 05 0a 14 14 14 14 0a 00 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; }; iq_edge { size = [e0 05 00 00]; - data = [01 00 00 00 00 00 00 00 80 00 00 00 31 00 00 00 21 49 6a 85 a9 d1 ef ff ff e0 c0 aa 9a 90 88 80 28 30 36 3a 40 48 4b 4b 4b 4b 46 46 46 46 46 46 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 08 00 00 00 28 00 00 00 f0 00 00 00 00 01 00 00 40 50 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 78 00 00 00 78 00 00 00 0a 00 00 00 08 00 00 00 04 00 00 00 02 00 00 00 48 00 00 00 60 00 00 00 6e 00 00 00 82 00 00 00 20 50 00 00 c8 00 00 00 b4 00 00 00 00 00 00 00 5f 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 54 00 00 00 6e 00 00 00 87 00 00 00 a0 00 00 00 14 60 00 00 b4 00 00 00 64 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 00 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 6e 00 00 00 34 50 00 00 af 00 00 00 46 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 01 00 00 00 46 00 00 00 5f 00 00 00 64 00 00 00 82 00 00 00 24 50 00 00 b0 00 00 00 50 00 00 00 00 00 00 00 79 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 78 00 00 00 78 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 a0 00 00 00 bc 00 00 00 d2 00 00 00 f0 00 00 00 12 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 69 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 78 00 00 00 78 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 0e 01 00 00 40 01 00 00 54 01 00 00 96 01 00 00 12 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 48 00 00 00 48 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 c4 00 00 00 7c 01 00 00 a4 01 00 00 c2 01 00 00 14 46 00 00 00 01 00 00 b4 00 00 00 1c 00 00 00 64 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 d2 00 00 00 fc 00 00 00 00 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 46 00 00 00 18 01 00 00 42 01 00 00 5e 01 00 00 14 80 00 00 80 00 00 00 b4 00 00 00 2a 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 0e 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 5a 00 00 00 5a 00 00 00 09 00 00 00 06 00 00 00 04 00 00 00 04 00 00 00 18 01 00 00 5e 01 00 00 7a 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 0f 00 00 00 80 00 00 00 01 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 01 00 00 00 03 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 18 01 00 00 5e 01 00 00 85 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 18 01 00 00 bc 01 00 00 53 02 00 00 5b 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 01 00 00 be 01 00 00 58 02 00 00 6c 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00]; + data = [01 00 00 00 00 00 00 00 80 00 00 00 31 00 00 00 21 49 6a 85 a9 d1 ef ff ff e0 c0 aa 9a 90 88 80 28 30 36 3a 40 48 4b 4b 4b 4b 46 46 46 46 46 46 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 08 00 00 00 28 00 00 00 f0 00 00 00 00 01 00 00 40 50 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 0a 00 00 00 08 00 00 00 04 00 00 00 02 00 00 00 48 00 00 00 70 00 00 00 7e 00 00 00 82 00 00 00 18 50 00 00 c8 00 00 00 b4 00 00 00 00 00 00 00 5f 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 78 00 00 00 78 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 54 00 00 00 7e 00 00 00 87 00 00 00 a0 00 00 00 14 50 00 00 b4 00 00 00 64 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 00 00 00 00 3c 00 00 00 62 00 00 00 70 00 00 00 7e 00 00 00 30 50 00 00 af 00 00 00 46 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 01 00 00 00 46 00 00 00 5f 00 00 00 64 00 00 00 82 00 00 00 30 50 00 00 b0 00 00 00 50 00 00 00 00 00 00 00 79 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 a0 00 00 00 8c 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 a0 00 00 00 bc 00 00 00 d2 00 00 00 f0 00 00 00 20 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 69 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 8c 00 00 00 8c 00 00 00 02 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 0e 01 00 00 40 01 00 00 54 01 00 00 96 01 00 00 12 48 00 00 00 01 00 00 b4 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 00 00 48 00 00 00 48 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 c4 00 00 00 7c 01 00 00 a4 01 00 00 c2 01 00 00 14 46 00 00 00 01 00 00 b4 00 00 00 1c 00 00 00 64 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 d2 00 00 00 fc 00 00 00 00 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 46 00 00 00 18 01 00 00 42 01 00 00 5e 01 00 00 14 80 00 00 80 00 00 00 b4 00 00 00 2a 00 00 00 80 00 00 00 00 00 00 00 02 00 00 00 0e 00 00 00 00 02 00 00 01 00 00 00 02 00 00 00 5a 00 00 00 5a 00 00 00 09 00 00 00 06 00 00 00 04 00 00 00 04 00 00 00 18 01 00 00 5e 01 00 00 7a 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 0f 00 00 00 80 00 00 00 01 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 01 00 00 00 03 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 18 01 00 00 5e 01 00 00 85 01 00 00 8f 01 00 00 20 50 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 0a 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 5a 00 00 00 5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 18 01 00 00 bc 01 00 00 53 02 00 00 5b 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 19 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 6e 00 00 00 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 01 00 00 be 01 00 00 58 02 00 00 6c 02 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00 60 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 88 00 00 00 a8 00 00 00 33 01 00 00 43 01 00 00 20 46 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 05 00 00 00]; }; iq_3dnr { size = [64 1f 00 00]; @@ -47,7 +47,7 @@ }; iq_wdr { size = [e4 02 00 00]; - data = [01 00 00 00 01 00 00 00 20 00 00 00 12 00 00 00 80 00 00 00 05 00 00 00 03 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 07 00 00 00 0f 00 00 00 17 00 00 00 1f 00 00 00 23 00 00 00 27 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 e6 0f 00 00 a6 0f 00 00 29 0f 00 00 cf 0e 00 00 64 0e 00 00 e8 0d 00 00 5e 0d 00 00 14 0d 00 00 c7 0c 00 00 78 0c 00 00 27 0c 00 00 d5 0b 00 00 81 0b 00 00 2e 0b 00 00 da 0a 00 00 86 0a 00 00 33 0a 00 00 e1 09 00 00 90 09 00 00 41 09 00 00 f3 08 00 00 a7 08 00 00 5e 08 00 00 16 08 00 00 d1 07 00 00 8e 07 00 00 4d 07 00 00 0f 07 00 00 d3 06 00 00 99 06 00 00 62 06 00 00 fb 05 00 00 9c 05 00 00 46 05 00 00 f8 04 00 00 b0 04 00 00 70 04 00 00 35 04 00 00 00 04 00 00 a4 03 00 00 57 03 00 00 e4 02 00 00 94 02 00 00 5b 02 00 00 31 02 00 00 12 02 00 00 fb 01 00 00 e9 01 00 00 dc 01 00 00 d1 01 00 00 c8 01 00 00 c1 01 00 00 bb 01 00 00 b7 01 00 00 b3 01 00 00 b0 01 00 00 ad 01 00 00 ab 01 00 00 a9 01 00 00 a7 01 00 00 a6 01 00 00 a4 01 00 00 a3 01 00 00 a2 01 00 00 40 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00]; + data = [01 00 00 00 01 00 00 00 20 00 00 00 12 00 00 00 80 00 00 00 05 00 00 00 03 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 07 00 00 00 0f 00 00 00 17 00 00 00 1f 00 00 00 23 00 00 00 27 00 00 00 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 2d 00 00 00 2e 00 00 00 2f 00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 3d 00 00 00 3e 00 00 00 3f 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 e6 0f 00 00 a6 0f 00 00 29 0f 00 00 cf 0e 00 00 64 0e 00 00 e8 0d 00 00 5e 0d 00 00 14 0d 00 00 c7 0c 00 00 78 0c 00 00 27 0c 00 00 d5 0b 00 00 81 0b 00 00 2e 0b 00 00 da 0a 00 00 86 0a 00 00 33 0a 00 00 e1 09 00 00 90 09 00 00 41 09 00 00 f3 08 00 00 a7 08 00 00 5e 08 00 00 16 08 00 00 d1 07 00 00 8e 07 00 00 4d 07 00 00 0f 07 00 00 d3 06 00 00 99 06 00 00 62 06 00 00 fb 05 00 00 9c 05 00 00 46 05 00 00 f8 04 00 00 b0 04 00 00 70 04 00 00 35 04 00 00 00 04 00 00 a4 03 00 00 57 03 00 00 e4 02 00 00 94 02 00 00 5b 02 00 00 31 02 00 00 12 02 00 00 fb 01 00 00 e9 01 00 00 dc 01 00 00 d1 01 00 00 c8 01 00 00 c1 01 00 00 bb 01 00 00 b7 01 00 00 b3 01 00 00 b0 01 00 00 ad 01 00 00 ab 01 00 00 a9 01 00 00 a7 01 00 00 a6 01 00 00 a4 01 00 00 a3 01 00 00 a2 01 00 00 14 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00 40 00 00 00 00 00 00 00 ff 00 00 00]; }; iq_shdr { size = [ec 01 00 00]; @@ -67,7 +67,7 @@ }; iq_post_sharpen { size = [4c 02 00 00]; - data = [01 00 00 00 00 00 00 00 19 32 32 32 30 2f 2c 27 26 25 24 23 23 23 23 23 23 23 02 af fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff c8 00 2c 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 2c 01 90 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 5e 01 c2 01 50 50 50 80 ff 00 40 80 80 00 48 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 37 01 f4 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 32 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 51 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 00 00]; + data = [00 00 00 00 00 00 00 00 19 32 32 32 30 2f 2c 27 26 25 24 23 23 23 23 23 23 23 02 af fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 96 00 fa 00 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff c8 00 2c 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 2c 01 90 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 5e 01 c2 01 50 50 50 80 ff 00 40 80 80 00 48 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 37 01 f4 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 00 40 80 80 00 5a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff b0 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 32 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff 51 00 5e 01 50 50 50 80 ff 0f 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 69 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 02 ff fa 00 5e 01 50 50 50 80 ff 00 40 80 80 00 00 00]; }; iq_ycurve { size = [08 02 00 00];