2542 lines
67 KiB
C
Executable File
2542 lines
67 KiB
C
Executable File
/*
|
|
* Battery s_stCharger driver for X-Powers AXP
|
|
*
|
|
* Copyright (C) 2013 X-Powers, Ltd.
|
|
* Zhang Donglu <zhangdonglu@x-powers.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
|
|
#include "kwrap/nvt_type.h"
|
|
#include <sf_mcu.h>
|
|
|
|
#include <sf_commu_mcu.h>
|
|
|
|
#define __MODULE__ sf_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 <kwrap/debug.h>
|
|
#include <kwrap/stdio.h>
|
|
#include <kwrap/util.h>
|
|
#include "comm/hwclock.h"
|
|
#include "comm/timer.h"
|
|
//#include <time.h>
|
|
#include <rtos_na51089/gpio.h>
|
|
#include <UIInfo.h>
|
|
#include "GxUSB.h"
|
|
|
|
#include <uart.h>
|
|
#include "FileSysTsk.h"
|
|
#include <stdlib.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <sf_i2c_driver.h>
|
|
#include "PrjCfg.h"
|
|
#include "sf_battery.h"
|
|
#include <IOCfg.h>
|
|
static UINT8 McuSubVersion = 0;
|
|
static UINT16 McuVersion = 0;
|
|
static UINT8 DailyReportStartMode = 0;
|
|
UINT16 IRSHTTER = 0;
|
|
static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP
|
|
static UINT8 POWEROFF = 0;
|
|
static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */
|
|
static UINT8 AeNightMode = 0; /* 0:day 1:night */
|
|
//#define printf(fmt, args...) printk(fmt , ## args)
|
|
static UINT32 simCardInsert=1;
|
|
static UINT8 gModuleSleep = 1;
|
|
static UINT32 SmsCheck = 0;
|
|
//static SF_CAMERA_CMD_S CameraCmd = {0};
|
|
static UINT8 McuProductInfo = 0;
|
|
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
|
static UINT8 drNoResetTimeSync = FALSE; //0:reset; 1:no reset;
|
|
|
|
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
static UINT8 isSignalReady = 0;
|
|
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*/
|
|
const UINT8 PirDigtSensLevel[3] = { 0, 1, 2 }; /*analog PIR: High/Middle/Low/OFF*/
|
|
#endif
|
|
const UINT8 digPirLevel[3] = {9, 7, 5};
|
|
const UINT8 digPirCount[3] = {1, 1, 0};
|
|
|
|
#if HUNTING_MCU_I2C == ENABLE
|
|
|
|
static SF_I2C sf_i2c = {
|
|
SF_I2C_ID_3, MCU_I2C_SLAVE_ADDR
|
|
};
|
|
|
|
static INT32 sf_i2c_write(UINT32 addr, UINT32 data)
|
|
{
|
|
struct i2c_msg msgs;
|
|
UINT8 buf[2];
|
|
INT32 ret;
|
|
|
|
buf[0] = addr & 0xFF;
|
|
buf[1] = data & 0xFF;
|
|
msgs.addr = sf_i2c.addr;
|
|
msgs.flags = 0;//w
|
|
msgs.len = 2;
|
|
msgs.buf = buf;
|
|
|
|
ret = sf_i2c_transfer(&msgs, 1);
|
|
return ret;
|
|
}
|
|
|
|
static INT32 sf_i2c_read(UINT32 addr, UINT8 *data)
|
|
{
|
|
struct i2c_msg msgs[2];
|
|
UINT8 buf[1], buf2[1];
|
|
INT32 ret;
|
|
|
|
buf[0] = addr & 0xFF;
|
|
msgs[0].addr = sf_i2c.addr;
|
|
msgs[0].flags = 0;//w
|
|
msgs[0].len = 1;
|
|
msgs[0].buf = buf;
|
|
|
|
buf2[0] = 0;
|
|
msgs[1].addr = sf_i2c.addr;
|
|
msgs[1].flags = 1;//r
|
|
msgs[1].len = 1;
|
|
msgs[1].buf = buf2;
|
|
|
|
ret = sf_i2c_transfer(msgs, 2);
|
|
if (ret == 0) { //OK
|
|
*data = buf2[0];
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|
|
UINT8 sf_mcu_read(UINT32 reg, UINT8 *data)
|
|
{
|
|
UINT8 data2 = 0;
|
|
|
|
sf_i2c_read(reg, data);
|
|
//vos_util_delay_us(30);
|
|
|
|
sf_i2c_read(reg, &data2);
|
|
printf("R_addr[%lu]=0x%02x\n", reg, data2);
|
|
|
|
if(*data != data2)
|
|
{
|
|
printf("%s:%d ERROR\n", __FUNCTION__, __LINE__);
|
|
printf("[ERROR]-[sf_i2c_read]reg:%lu,data:%d,data2:%d\n", reg, *data, data2);
|
|
vos_util_delay_us(300);
|
|
sf_i2c_read(reg, data);
|
|
printf("[ERROR]-[sf_i2c_read]reg:%lu,data3:%d,data2:%d\n", reg, *data, data2);
|
|
}
|
|
|
|
//vos_util_delay_us(200);
|
|
|
|
return 0;
|
|
}
|
|
|
|
UINT8 sf_mcu_write(UINT32 reg, UINT32 data)
|
|
{
|
|
UINT8 data2 = 0;
|
|
|
|
sf_i2c_write(reg, data);
|
|
//vos_util_delay_us(20);
|
|
|
|
sf_i2c_read(reg, &data2);
|
|
printf("W_addr[%lu]=0x%02x\n", reg, data2);
|
|
|
|
if(data != data2)
|
|
{
|
|
printf("%s:%d ERROR reg:%lu,data:%lu,data2:%d\n", __FUNCTION__, __LINE__, reg, data, data2);
|
|
vos_util_delay_us(300);
|
|
sf_i2c_write(reg, data);
|
|
}
|
|
|
|
//vos_util_delay_us(200);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int sf_init_mcu(void)
|
|
{
|
|
CHKPNT;
|
|
INT32 ret = 0;
|
|
ret = sf_i2c_init_driver(sf_i2c.id);
|
|
return ret;
|
|
}
|
|
|
|
UINT8 sf_mcu_write_multi(UINT8 reg[], UINT8 data[], UINT32 num)
|
|
{
|
|
UINT32 i;
|
|
|
|
for(i = 0; i < num; i++)
|
|
{
|
|
sf_mcu_write(reg[i], data[i]);
|
|
}
|
|
return SUCCESS;
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_power_on_para_get
|
|
Description: read MCU register data to update uipara and variable.
|
|
Input: attrId:which kind of para want to get
|
|
Output: N/A
|
|
Return: start mode
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_power_on_para_get(MCUParam_t attrId)
|
|
{
|
|
UINT8 dataTemp1 = 0, dataTemp2 = 0;
|
|
UINT8 startMode = 0;
|
|
UINT8 mcuVer = 0;
|
|
|
|
if(attrId != SF_MCU_POWERON)
|
|
{
|
|
sf_mcu_read(START_MODE, &dataTemp1);
|
|
startMode = dataTemp1 & 0x1F;
|
|
|
|
return startMode;
|
|
}
|
|
|
|
sf_mcu_read(MCU_SUB_VER, &McuSubVersion);
|
|
#if 0//defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
sf_mcu_read(MCU_VER, &mcuVer);
|
|
McuVersion = mcuVer;
|
|
#else
|
|
sf_mcu_read(MCU_VER_L, &mcuVer);
|
|
McuVersion = mcuVer;
|
|
sf_mcu_read(MCU_VER_H, &mcuVer);
|
|
McuVersion = (UINT16)mcuVer << 8 | McuVersion;
|
|
sf_mcu_read(MCU_PRODUCT_INFO, &McuProductInfo);
|
|
#endif
|
|
|
|
sf_mcu_read(START_MODE, &dataTemp1);
|
|
startMode = dataTemp1 & 0x1F;
|
|
DailyReportStartMode = (dataTemp1 & 0xc0) >> 6;
|
|
|
|
#if 0
|
|
sf_mcu_i2c_read(CAMERA_MODE, &CameraMode);
|
|
sf_mcu_i2c_read(IRLED_LUMINANCE, &IrLedPercent);
|
|
#endif
|
|
|
|
sf_mcu_read(LUMINANCE_L, &dataTemp1);
|
|
sf_mcu_read(LUMINANCE_H, &dataTemp2);
|
|
IRSHTTER = (dataTemp2 << 8) | dataTemp1;
|
|
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
if(startMode == PWR_ON_TIME_SYNC)
|
|
{
|
|
startMode = PWR_ON_DAILY_REPORT;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
if(startMode > PWR_ON_TIME_SEND) //if start mode err, USB IN default power on SETUP
|
|
{
|
|
startMode = PWR_ON_SETUP;
|
|
}
|
|
}
|
|
|
|
printf(" start mode = %d IRSHTTER = %d\n", startMode, IRSHTTER);
|
|
|
|
return startMode;
|
|
}
|
|
|
|
#else
|
|
|
|
UINT8 sf_mcu_read(UINT32 reg, UINT8 *data)
|
|
{
|
|
//UINT8 data2 = 0;
|
|
|
|
*data = sf_commu_get_mcu(reg);
|
|
//vos_util_delay_us(30);
|
|
|
|
//data2 = sf_commu_get_mcu(reg);
|
|
printf("R_addr[%lu]=0x%02x\n", reg, *data);
|
|
|
|
/*if(*data != data2)
|
|
{
|
|
printf("%s:%d ERROR\n", __FUNCTION__, __LINE__);
|
|
printf("[ERROR]-[sf_i2c_read]reg:%lu,data:%d,data2:%d\n", reg, *data, data2);
|
|
vos_util_delay_us(300);
|
|
*data = sf_commu_get_mcu(reg);
|
|
printf("[ERROR]-[sf_i2c_read]reg:%lu,data3:%d,data2:%d\n", reg, *data, data2);
|
|
}*/
|
|
|
|
//vos_util_delay_us(200);
|
|
|
|
return 0;
|
|
}
|
|
|
|
UINT8 sf_mcu_write(UINT32 reg, UINT32 data)
|
|
{
|
|
//UINT8 data2 = 0;
|
|
|
|
sf_commu_set_mcu(reg, data);
|
|
//vos_util_delay_us(20);
|
|
printf("W_addr[%lu]=0x%lu\n", reg, data);
|
|
|
|
/*data2 = sf_commu_get_mcu(reg);
|
|
printf("W_addr[%lu]=0x%02x\n", reg, data2);
|
|
|
|
if(data != data2)
|
|
{
|
|
printf("%s:%d ERROR reg:%lu,data:%lu,data2:%d\n", __FUNCTION__, __LINE__, reg, data, data2);
|
|
vos_util_delay_us(300);
|
|
sf_commu_set_mcu(reg, data);
|
|
}*/
|
|
|
|
//vos_util_delay_us(200);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int sf_init_mcu(void)
|
|
{
|
|
CHKPNT;
|
|
ER ret = 0;
|
|
UART_INIT_PARA UartParaBasic;
|
|
UartParaBasic.BaudRate = UART_BAUDRATE_115200;
|
|
UartParaBasic.BaudRate = 115200;
|
|
UartParaBasic.Length = UART_LEN_L8_S1;
|
|
UartParaBasic.Parity = UART_PARITY_NONE;
|
|
UartParaBasic.FlowCtrlMode = UART_FC_MODE_NONE;
|
|
UartParaBasic.DataTransMode = UART_DATA_TRANS_PIO;
|
|
//uart3_setConfig(UART_CONFIG_ID_RX_TRIGGER_LEVEL,0x0);
|
|
ret = uart3_open();
|
|
uart3_initHW(&UartParaBasic);
|
|
uart3_setConfig(UART_CONFIG_ID_RX_TRIGGER_LEVEL,0x0);
|
|
|
|
/*UART_DATA_PARA DataPara;
|
|
DataPara.Action = UART_ACT_GET;
|
|
DataPara.BufferInfo.uiSize = 64;
|
|
DataPara.BufferInfo.pBuffer = getbuffer;
|
|
ret = uart3_operateData(&DataPara);*/
|
|
|
|
return ret;
|
|
}
|
|
|
|
UINT8 sf_mcu_write_multi(UINT8 reg[], UINT8 data[], UINT32 num)
|
|
{
|
|
UINT32 i;
|
|
unsigned int pnum = num;
|
|
if(0 <= sf_commu_set_mcu_many(reg, data, &pnum))
|
|
{
|
|
for(i = 0; i < num; i++)
|
|
{
|
|
printf("W_addr[%d]=0x%02x\n", reg[i], data[i]);
|
|
}
|
|
return SUCCESS;
|
|
}
|
|
return FAIL;
|
|
}
|
|
|
|
UINT8 sf_mcu_read_multi(UINT8 reg[], UINT8 data[], UINT32 num)
|
|
{
|
|
UINT32 i;
|
|
unsigned int pnum = num;
|
|
if(0 <= sf_commu_get_mcu_many(reg, data, &pnum))
|
|
{
|
|
for(i = 0; i < num; i++)
|
|
{
|
|
printf("R_addr[%d]=0x%02x\n", reg[i], data[i]);
|
|
}
|
|
return SUCCESS;
|
|
}
|
|
return FAIL;
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_power_on_para_get
|
|
Description: read MCU register data to update uipara and variable.
|
|
Input: attrId:which kind of para want to get
|
|
Output: N/A
|
|
Return: start mode
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_power_on_para_get(MCUParam_t attrId)
|
|
{
|
|
UINT8 dataTemp1 = 0;//, dataTemp2 = 0
|
|
UINT8 startMode = 0;
|
|
//UINT8 mcuVer = 0;
|
|
UINT8 mcuReg[REG_SIZE] = { 0 };
|
|
UINT8 mcuData[REG_SIZE] = { 0 };
|
|
UINT8 i = 0;
|
|
|
|
if(attrId != SF_MCU_POWERON)
|
|
{
|
|
mcuReg[i++] = START_MODE;
|
|
sf_mcu_read_multi(mcuReg, mcuData, i);
|
|
i = 0;
|
|
dataTemp1 = mcuData[i++];
|
|
startMode = dataTemp1 & 0xF;
|
|
DailyReportStartMode = (dataTemp1 & 0xc0) >> 6;
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
/*if(startMode == PWR_ON_TIME_SYNC)
|
|
{
|
|
startMode = PWR_ON_DAILY_REPORT;
|
|
}
|
|
else */
|
|
#endif
|
|
{
|
|
if(startMode > PWR_ON_TIME_SEND) //if start mode err, USB IN default power on SETUP
|
|
{
|
|
startMode = PWR_ON_SETUP;
|
|
}
|
|
}
|
|
printf(" start mode = %d \n", startMode);
|
|
return startMode;
|
|
}
|
|
mcuReg[i++] = MCU_SUB_VER;
|
|
mcuReg[i++] = MCU_VER_L;
|
|
mcuReg[i++] = MCU_VER_H;
|
|
mcuReg[i++] = MCU_PRODUCT_INFO;
|
|
//mcuReg[i++] = START_MODE;
|
|
//mcuReg[i++] = LUMINANCE_L;
|
|
//mcuReg[i++] = LUMINANCE_H;
|
|
|
|
sf_mcu_read_multi(mcuReg, mcuData, i);
|
|
i = 0;
|
|
McuSubVersion = mcuData[i++];
|
|
|
|
McuVersion = mcuData[i++];
|
|
McuVersion = (UINT16)mcuData[i++] << 8 | McuVersion;
|
|
McuProductInfo = mcuData[i++];
|
|
//dataTemp1 = mcuData[i++];
|
|
//startMode = dataTemp1 & 0x1F;
|
|
//DailyReportStartMode = (dataTemp1 & 0xc0) >> 6;
|
|
//dataTemp1= mcuData[i++];
|
|
//dataTemp2 = mcuData[i++];
|
|
//IRSHTTER = (dataTemp2 << 8) | dataTemp1;
|
|
|
|
#if 0
|
|
sf_mcu_read(MCU_SUB_VER, &McuSubVersion);
|
|
#if 0//defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
sf_mcu_read(MCU_VER, &mcuVer);
|
|
McuVersion = mcuVer;
|
|
#else
|
|
sf_mcu_read(MCU_VER_L, &mcuVer);
|
|
McuVersion = mcuVer;
|
|
sf_mcu_read(MCU_VER_H, &mcuVer);
|
|
McuVersion = (UINT16)mcuVer << 8 | McuVersion;
|
|
sf_mcu_read(MCU_PRODUCT_INFO, &McuProductInfo);
|
|
#endif
|
|
|
|
sf_mcu_read(START_MODE, &dataTemp1);
|
|
startMode = dataTemp1 & 0x1F;
|
|
DailyReportStartMode = (dataTemp1 & 0xc0) >> 6;
|
|
|
|
#if 0
|
|
sf_mcu_i2c_read(CAMERA_MODE, &CameraMode);
|
|
sf_mcu_i2c_read(IRLED_LUMINANCE, &IrLedPercent);
|
|
#endif
|
|
|
|
sf_mcu_read(LUMINANCE_L, &dataTemp1);
|
|
sf_mcu_read(LUMINANCE_H, &dataTemp2);
|
|
IRSHTTER = (dataTemp2 << 8) | dataTemp1;
|
|
#endif
|
|
/*
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
if(startMode == PWR_ON_TIME_SYNC)
|
|
{
|
|
startMode = PWR_ON_DAILY_REPORT;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
if(startMode > PWR_ON_TIME_SEND) //if start mode err, USB IN default power on SETUP
|
|
{
|
|
startMode = PWR_ON_SETUP;
|
|
}
|
|
}
|
|
printf(" start mode = %d \n", startMode);
|
|
*/
|
|
//printf(" start mode = %d IRSHTTER = %d\n", startMode, IRSHTTER);
|
|
sf_get_mcu_rtc_set_sys();
|
|
|
|
return startMode;
|
|
}
|
|
|
|
|
|
/*************************************************
|
|
Function: sf_get_mcu_rtc_set_sys
|
|
Description: get mcu rtc,set to sys
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_get_mcu_rtc_set_sys(void)
|
|
{
|
|
UINT8 mcuReg[REG_SIZE] = { 0 };
|
|
UINT8 mcuData[REG_SIZE] = { 0 };
|
|
UINT8 i = 0;
|
|
UINT16 year;
|
|
UINT16 mon;
|
|
UINT16 day;
|
|
UINT16 hour;
|
|
UINT16 min;
|
|
UINT16 sec;
|
|
struct tm Curr_DateTime = {0};
|
|
|
|
mcuReg[i++] = SF_RTC_YEAR;
|
|
mcuReg[i++] = SF_RTC_MONTH;
|
|
mcuReg[i++] = SF_RTC_DAY;
|
|
mcuReg[i++] = SF_RTC_HOUR;
|
|
mcuReg[i++] = SF_RTC_MINUTE;
|
|
mcuReg[i++] = SF_RTC_SEC;
|
|
|
|
sf_mcu_read_multi(mcuReg, mcuData, i);
|
|
i = 0;
|
|
year = mcuData[i++] + 2000;
|
|
mon = mcuData[i++];
|
|
day = mcuData[i++];
|
|
hour = mcuData[i++];
|
|
min = mcuData[i++];
|
|
sec = mcuData[i++];
|
|
|
|
if(sec == 0)
|
|
{
|
|
i = 0;
|
|
mcuReg[i++] = SF_RTC_YEAR;
|
|
mcuReg[i++] = SF_RTC_MONTH;
|
|
mcuReg[i++] = SF_RTC_DAY;
|
|
mcuReg[i++] = SF_RTC_HOUR;
|
|
mcuReg[i++] = SF_RTC_MINUTE;
|
|
mcuReg[i++] = SF_RTC_SEC;
|
|
|
|
sf_mcu_read_multi(mcuReg, mcuData, i);
|
|
i = 0;
|
|
year = mcuData[i++] + 2000;
|
|
mon = mcuData[i++];
|
|
day = mcuData[i++];
|
|
hour = mcuData[i++];
|
|
min = mcuData[i++];
|
|
sec = mcuData[i++];
|
|
}
|
|
|
|
printf("%s:%d %d : %d : %d : %d : %d : %d\n", __FUNCTION__, __LINE__,year, mon,day,hour,min,sec);
|
|
|
|
if((year >= SF_DATE_TIME_YEAR_MIN) && (year <= SF_DATE_TIME_YEAR_MAX) && (mon <= 12) && (day <= 31) && (hour < 24) && (min < 60) && (sec < 60))
|
|
{
|
|
Curr_DateTime.tm_year = year;
|
|
Curr_DateTime.tm_mon = mon;
|
|
Curr_DateTime.tm_mday = day;
|
|
Curr_DateTime.tm_hour = hour;
|
|
Curr_DateTime.tm_min = min;
|
|
Curr_DateTime.tm_sec = sec;
|
|
|
|
hwclock_set_time(TIME_ID_CURRENT, *(struct tm*)&Curr_DateTime, 0);
|
|
return SUCCESS;
|
|
}
|
|
|
|
return FAIL;
|
|
}
|
|
|
|
#endif
|
|
|
|
int sf_off_mcu(void)
|
|
{
|
|
|
|
#if HUNTING_MCU_I2C != ENABLE
|
|
uart3_close();
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/*************************************************
|
|
Function: sf_get_daily_report_start_mode
|
|
Description: get dailyreport start mode
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: 0:ON mode 1:OFF mode
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_get_daily_report_start_mode(void)
|
|
{
|
|
return DailyReportStartMode;
|
|
}
|
|
|
|
|
|
UINT8 sf_mcu_wdg_set(UINT8 value)
|
|
{
|
|
UINT8 i = 0;
|
|
UINT8 mcuReg[2] = {0};
|
|
UINT8 mcuPara[2] = {0};
|
|
printf("%s:%d s\n",__FUNCTION__,__LINE__);
|
|
|
|
mcuReg[i] = WDT_TIME;
|
|
mcuPara[i++] = value;
|
|
|
|
mcuReg[i] = DSP_WRITE_FLG;
|
|
mcuPara[i++] = 1;
|
|
sf_mcu_write_multi(mcuReg, mcuPara, i);
|
|
printf("%s:%d e\n",__FUNCTION__,__LINE__);
|
|
|
|
return SUCCESS;
|
|
}
|
|
void sf_set_sim_insert(UINT32 sim)
|
|
{
|
|
simCardInsert = sim;
|
|
}
|
|
|
|
UINT32 sf_get_sim_insert(void)
|
|
{
|
|
return simCardInsert;
|
|
}
|
|
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
|
|
|
/*************************************************
|
|
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)
|
|
{
|
|
UINT8 str[10] = { 0 };
|
|
|
|
if(McuProductInfo == 1)
|
|
{
|
|
sprintf((char *)str, "SYAM");
|
|
}
|
|
else if(McuProductInfo == 2)
|
|
{
|
|
sprintf((char *)str, "SYM");
|
|
}
|
|
else
|
|
{
|
|
sprintf((char *)str, "SYPM");
|
|
}
|
|
|
|
sprintf((char *)mcuVer, "%s%d.%d.%d", str, (McuVersion >> 8) & 0xFF, McuVersion & 0xFF, McuSubVersion);
|
|
}
|
|
#endif
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_module_off
|
|
Description: power off module
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_module_off(void)
|
|
{
|
|
UINT8 i = 0;
|
|
UINT8 mcuReg[2] = { 0 };
|
|
UINT8 mcuPara[2] = { 0 };
|
|
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
mcuPara[i++] = 0x00;
|
|
|
|
mcuReg[i] = DSP_WRITE_FLG;
|
|
mcuPara[i++] = 1;
|
|
|
|
sf_mcu_write_multi(mcuReg, mcuPara, i);
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
UINT8 sf_convert_power_on_mode(void)
|
|
{
|
|
PowerOnMode &= 0x0f;
|
|
//printf("[%s:%d]PowerOnMode=0x%x\n",__FUNCTION__,__LINE__,PowerOnMode);
|
|
return PowerOnMode;
|
|
}
|
|
|
|
UINT8 sf_get_power_off_flag(void)
|
|
{
|
|
//printf("[%s:%d]POWEROFF=0x%x\n", __FUNCTION__, __LINE__, POWEROFF);
|
|
return POWEROFF;
|
|
}
|
|
void sf_set_power_off_flag(UINT8 flag)
|
|
{
|
|
POWEROFF = flag;
|
|
}
|
|
|
|
|
|
/*************************************************
|
|
Function: sf_get_power_on_mode
|
|
Description: get power start mode
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: 0:ON mode 1:OFF mode
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_get_power_on_mode(void)
|
|
{
|
|
static int ModeFlag = 1;
|
|
if(ModeFlag)
|
|
{
|
|
ModeFlag = 0;
|
|
if(gpio_getIntStatus(GPIO_INT_USBPLUGIN))
|
|
{
|
|
PowerOnMode = PWR_ON_USB;
|
|
}
|
|
else{
|
|
//PowerOnMode = sf_mcu_power_on_para_get(SF_MCU_POWERON);
|
|
PowerOnMode = sf_mcu_power_on_para_get(SF_MCU_STARTMODE);
|
|
//PowerOnMode &= 0x0f;
|
|
//sf_is_night_mode(1);
|
|
if(1 == PowerOnMode)
|
|
{
|
|
ConfigureModeFlag = 1;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
return PowerOnMode;
|
|
}
|
|
|
|
|
|
/*************************************************
|
|
Function: sf_is_night_mode
|
|
Description: whether or not night mode
|
|
Input: isRefresh: 1:refresh 0:unrefresh
|
|
Output: N/A
|
|
Return: TRUE:night mode; FALSE:day mode
|
|
Others: N/A
|
|
*************************************************/
|
|
BOOL sf_is_night_mode(BOOL isRefresh)
|
|
{
|
|
static BOOL nightMode = FALSE;
|
|
static BOOL nightModeFlag = FALSE;
|
|
|
|
if(sf_get_mode_flag()) //setup always use new status
|
|
{
|
|
return AeNightMode;
|
|
}
|
|
else if(isRefresh)
|
|
{
|
|
if((TRUE != nightModeFlag) && (0 == IRSHTTER))
|
|
{
|
|
sf_mcu_get_irshtter();
|
|
nightModeFlag = TRUE;
|
|
}
|
|
|
|
if(IRSHTTER < SF_MCU_NIGHT_MODE_LUMINANCE)
|
|
{
|
|
nightMode = TRUE;
|
|
}
|
|
else
|
|
{
|
|
nightMode = FALSE;
|
|
}
|
|
}
|
|
//printf("[%s:%d]nightMode=%d\n",__FUNCTION__,__LINE__,nightMode);
|
|
return nightMode;
|
|
}
|
|
|
|
UINT32 sf_get_send_pic_sieze(void)
|
|
{
|
|
UINT32 SendPicSize = 0;
|
|
if(sf_is_night_mode(0) != TRUE)
|
|
{
|
|
SendPicSize = 1;
|
|
}
|
|
return SendPicSize;
|
|
}
|
|
|
|
UINT32 sf_gpio_get_status(UINT32 ipin)
|
|
{
|
|
//printf("%s(%d) ipin:%d\n", __FUNCTION__, __LINE__,ipin);
|
|
gpio_direction_input(ipin);
|
|
return (UINT32) ((gpio_get_value(ipin) == 1) ? 1 : 0 );
|
|
}
|
|
UINT32 sf_in_update(void)
|
|
{
|
|
if(!sf_gpio_get_status(GPIO_KEY_TEST)){
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
/*************************************************
|
|
Function: sf_mcu_dataready_get
|
|
Description:
|
|
Input: attrId:which kind of para want to get
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
void sf_mcu_dataready_get(void)
|
|
{
|
|
#if 0
|
|
UINT8 startMode = 0;
|
|
|
|
startMode = sf_mcu_power_on_para_get(SF_MCU_STARTMODE);
|
|
printf("startMode=%d\n", startMode);
|
|
|
|
if(GxUSB_GetIsUSBPlug())//sf_gpio_get_status(GPIO_INT_USBPLUGIN))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(sf_get_mode_flag())
|
|
{
|
|
if(startMode == 0) //OFF
|
|
{
|
|
sf_set_power_off_flag(1);
|
|
gModuleSleep = 0;
|
|
//LCD_BACKLIGHT_OFF;
|
|
//profLogPrintf(0,"[sf_mcu_dataready_get],APP_POWER_OFF_NORMAL");
|
|
printf("[power off] %s(%d)\n", __FUNCTION__, __LINE__);
|
|
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); //shutdown start
|
|
}
|
|
else if(startMode == 1) //SETUP
|
|
{
|
|
/*exit pir mode*/
|
|
}
|
|
else if(startMode == 3) //ON
|
|
{
|
|
sf_set_auto_off_time(0);
|
|
sf_set_pir_statu_flag(1);
|
|
printf("%s:%d-------PIR Key Pressed.------\n", __FUNCTION__, __LINE__);
|
|
//Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); //shutdown start
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if((startMode == 0) || (startMode == 1)) //PIR MODE: ON->OFF/ ON->SETUP
|
|
{
|
|
gModuleSleep = 0; //power off 4G module
|
|
sf_set_power_off_flag(1);
|
|
printf("[power off] %s(%d)\n", __FUNCTION__, __LINE__);
|
|
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); //shutdown start
|
|
}
|
|
}
|
|
|
|
#endif
|
|
}
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_reg_set
|
|
Description: set data to MCU
|
|
Input: attrId:which kind of para want to get
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val)
|
|
{
|
|
UINT8 mcuReg[REG_SIZE] = { 0 };
|
|
UINT8 mcuData[REG_SIZE] = { 0 };
|
|
UINT8 i = 0;
|
|
//UINT8 j = 0;
|
|
UINT8 temp = 0;
|
|
UINT8 paraSyncFlag = 0;
|
|
UINT8 gpsAlwaysFlag = 0;
|
|
UINT8 PowerOnMode = 0;
|
|
UINT8 DailyHour = 0;
|
|
UINT8 DailyMin = 0;
|
|
printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION);
|
|
|
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
PowerOnMode = sf_get_power_on_mode();
|
|
|
|
gpsAlwaysFlag = gpsAlwaysFlag;
|
|
|
|
if(attrId > SF_MCU_PARAM_MAX)
|
|
{
|
|
printf("%s:%d attrId ERROR!\n", __FUNCTION__, __LINE__);
|
|
return FAIL;
|
|
}
|
|
|
|
printf("%s:%d attrId=%d val=%d\n", __FUNCTION__, __LINE__, attrId, val);
|
|
|
|
//4G
|
|
if((simCardInsert) && (1 == SysGetFlag(NeedTimeSyncStartUp)))
|
|
{
|
|
paraSyncFlag = 1;
|
|
}
|
|
|
|
if(attrId == SF_MCU_POWEROFF)
|
|
{
|
|
|
|
struct tm ctv = {0};
|
|
ctv = hwclock_get_time(TIME_ID_CURRENT);
|
|
/*if(ctv.tm_year < DEFAULT_YEAR) {
|
|
ctv.tm_year = DEFAULT_YEAR;
|
|
ctv.tm_mon = DEFAULT_MON;
|
|
ctv.tm_mday = DEFAULT_DAY;
|
|
ctv.tm_hour = DEFAULT_HOUR;
|
|
ctv.tm_min = DEFAULT_MIN;
|
|
ctv.tm_sec = DEFAULT_SEC;
|
|
hwclock_set_time(TIME_ID_CURRENT, ctv, 0);
|
|
}*/
|
|
mcuReg[i] = SF_RTC_YEAR;
|
|
mcuData[i++] = ctv.tm_year - 2000;
|
|
mcuReg[i] = SF_RTC_MONTH;
|
|
mcuData[i++] = ctv.tm_mon;
|
|
mcuReg[i] = SF_RTC_DAY;
|
|
mcuData[i++] = ctv.tm_mday;
|
|
mcuReg[i] = SF_RTC_HOUR;
|
|
mcuData[i++] = ctv.tm_hour;
|
|
mcuReg[i] = SF_RTC_MINUTE;
|
|
mcuData[i++] = ctv.tm_min;
|
|
mcuReg[i] = SF_RTC_SEC;
|
|
mcuData[i++] = ctv.tm_sec;
|
|
|
|
gpsAlwaysFlag = 0;
|
|
|
|
if(1 == SysGetFlag(PirSwitch))
|
|
{
|
|
temp = 0x01;
|
|
}
|
|
else
|
|
{
|
|
temp = 0x00;
|
|
}
|
|
|
|
if(1 == SysGetFlag(TimelapseSwitch))
|
|
{
|
|
temp |= 0x02;
|
|
}
|
|
|
|
if(1 == SysGetFlag(PirDelaySwitch))
|
|
{
|
|
temp |= 0x04;
|
|
}
|
|
|
|
printf("[%s:%d]paraSyncFlag=%d\n", __FUNCTION__, __LINE__, paraSyncFlag);
|
|
|
|
if(paraSyncFlag)
|
|
{
|
|
temp |= 0x08;
|
|
}
|
|
|
|
|
|
if(((simCardInsert) && (1 == SysGetFlag(GprsMode))) || (1 == SysGetFlag(DailyReportSwitch))) //dailyreport open
|
|
{
|
|
temp |= 0x10;
|
|
}
|
|
else
|
|
{
|
|
temp &= ~0x10;
|
|
}
|
|
|
|
mcuReg[i] = FUNCTION_SWTICH0;
|
|
mcuData[i++] = temp;
|
|
|
|
temp = 0;
|
|
|
|
if((1 == SysGetFlag(GpsSwitch)) && (sf_get_mode_flag() || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
printf("PirSensitivity:%lu\n", SysGetFlag(PirSensitivity));
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
temp = SysGetFlag(PirSensitivity);
|
|
printf("[%s:%d] GprsMode=%lu,gModuleSleep=%d,NetWorkNeedSearch=%lu\n", __FUNCTION__, __LINE__, SysGetFlag(GprsMode), gModuleSleep, SysGetFlag(NetWorkNeedSearch));
|
|
|
|
if(simCardInsert && (SysGetFlag(NetWorkNeedSearch)))
|
|
{
|
|
//4.0PCG, first to PIR mode, will power on in A,search net. so 4G mode should power down
|
|
//instant mode ,dp power on, 4G mode should power down
|
|
temp &= ~0x60; /*bit5&bit6=0,daily mode*/
|
|
}
|
|
else if(simCardInsert && (1 == SysGetFlag(GprsMode)) && gModuleSleep)
|
|
{
|
|
temp |= 0x40; /*bit6=1,instant mode*/
|
|
}
|
|
else if(simCardInsert && (0 == SysGetFlag(GprsMode)) && gModuleSleep)
|
|
{
|
|
temp |= 0x20; /*bit5=1,hybrid mode*/
|
|
}
|
|
|
|
printf("[%s:%d]drNoResetTimeSync=%d\n", __FUNCTION__, __LINE__, drNoResetTimeSync);
|
|
if((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_GPRS_INIT) || ((PowerOnMode == PWR_ON_DAILY_REPORT) && (drNoResetTimeSync != TRUE)))
|
|
{
|
|
temp |= 0x10; /*bit4 rest*/
|
|
}
|
|
|
|
if(SysGetFlag(GprsSwitch) && (simCardInsert))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
|
|
#if DIGITAL_PIR
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = (0 << 4)| (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0);
|
|
#endif
|
|
|
|
//DSP busy/idle
|
|
mcuReg[i] = DSP_BUSY_STATUS;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0;
|
|
|
|
temp = 0;
|
|
|
|
if(simCardInsert && (SysGetFlag(NetWorkNeedSearch))
|
|
&& ((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_DAILY_REPORT)))/* SET->ON, OFF->ON*/
|
|
{
|
|
temp = 1;
|
|
}
|
|
/*else if(simCardInsert && (TRUE == sf_get_net_reboot()))//reboot net
|
|
{
|
|
temp = 1;
|
|
}*/
|
|
else if(SmsCheck)
|
|
{
|
|
temp = 2;
|
|
}
|
|
|
|
mcuReg[i] = POWEROFF_TYPE;
|
|
mcuData[i++] = (0) << 7 | (val == APP_POWER_OFF_BATT_EMPTY) << 6 | (val == APP_POWER_OFF_APO) << 6 | temp;
|
|
|
|
//battery recovery
|
|
mcuReg[i] = VBAT_RECOVER_VAL;
|
|
|
|
if(SF_BATT_LI == SysGetFlag(BatteryType))
|
|
{
|
|
mcuData[i++] = SF_LI_BATT_RECOVERY;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = SF_OTHER_BATT_RECOVERY;
|
|
}
|
|
|
|
if(SysGetFlag(TimelapseSwitch))
|
|
{
|
|
mcuReg[i] = TIMELAPSE_HOUR;
|
|
mcuData[i++] = puiPara->TimelapseTime.Hour;
|
|
mcuReg[i] = TIMELAPSE_MINUTE;
|
|
mcuData[i++] = puiPara->TimelapseTime.Min;
|
|
mcuReg[i] = TIMELAPSE_SEC;
|
|
|
|
if((SysGetFlag(TimelapseSwitch)) && (puiPara->TimelapseTime.Hour == 0) && (puiPara->TimelapseTime.Min == 0) && (puiPara->TimelapseTime.Sec == 0))
|
|
{
|
|
mcuData[i++] = 5;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = puiPara->TimelapseTime.Sec;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = TIMELAPSE_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIMELAPSE_MINUTE;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIMELAPSE_SEC;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(SysGetFlag(PirDelaySwitch))
|
|
{
|
|
mcuReg[i] = PIR_DELAY_HOUR;
|
|
mcuData[i++] = puiPara->PirDelayTime.Hour;
|
|
mcuReg[i] = PIR_DELAY_MINUTE;
|
|
mcuData[i++] = puiPara->PirDelayTime.Min;
|
|
mcuReg[i] = PIR_DELAY_SEC;
|
|
mcuData[i++] = puiPara->PirDelayTime.Sec;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = PIR_DELAY_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = PIR_DELAY_MINUTE;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = PIR_DELAY_SEC;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(paraSyncFlag)
|
|
{
|
|
mcuReg[i] = TIME_SYNC_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIME_SYNC_MINUTE;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = TIME_SYNC_SEC;
|
|
mcuData[i++] = 30;
|
|
}
|
|
|
|
printf("end dailyHour:%d,dailyMin:%d\n", puiPara->DailyReportTime.Hour, puiPara->DailyReportTime.Min);
|
|
|
|
//set dr time.
|
|
sf_calculate_daily_report(&DailyHour, &DailyMin);
|
|
printf("end dailyHour:%d,dailyMin:%d\n",DailyHour,DailyMin);
|
|
//rtcTime
|
|
mcuReg[i] = DAILY_REPORT_HOUR;
|
|
if(SF_REMOTE_CONTROL_DEALY_24H == SysGetFlag(GprsMode))
|
|
{
|
|
if((ctv.tm_min + DailyMin) == 0)
|
|
{
|
|
if((ctv.tm_hour + DailyHour) == 0)
|
|
{
|
|
mcuData[i++] = (ctv.tm_hour + DailyHour + 24 - 1)%24;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (ctv.tm_hour + DailyHour - 1)%24;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (ctv.tm_hour + DailyHour)%24;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if((ctv.tm_min + DailyMin) >= 60)
|
|
{
|
|
mcuData[i++] = (ctv.tm_hour + DailyHour+1)%24;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (ctv.tm_hour + DailyHour)%24;
|
|
}
|
|
}
|
|
|
|
|
|
mcuReg[i] = DAILY_REPORT_MINUTE;
|
|
if(SF_REMOTE_CONTROL_DEALY_24H == SysGetFlag(GprsMode))
|
|
{
|
|
if((ctv.tm_min + DailyMin) == 0)
|
|
{
|
|
mcuData[i++] = (ctv.tm_min + DailyMin + 60 - 1)%60;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (ctv.tm_min + DailyMin - 1)%60;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (ctv.tm_min + DailyMin)%60;
|
|
}
|
|
|
|
|
|
|
|
if(SysGetFlag(WorkTime1Switch))
|
|
{
|
|
mcuReg[i] = WORKTIME1_SWITCH;
|
|
mcuData[i++] = 0xFF;
|
|
|
|
mcuReg[i] = WORKTIME1_START_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[0].StartTime.Hour;
|
|
mcuReg[i] = WORKTIME1_START_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[0].StartTime.Min;
|
|
|
|
mcuReg[i] = WORKTIME1_STOP_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[0].StopTime.Hour;
|
|
mcuReg[i] = WORKTIME1_STOP_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[0].StopTime.Min;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = WORKTIME1_SWITCH;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME1_START_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME1_START_MINUTE;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME1_STOP_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME1_STOP_MINUTE;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(SysGetFlag(WorkTime2Switch))
|
|
{
|
|
mcuReg[i] = WORKTIME2_SWITCH;
|
|
mcuData[i++] = 0xFF;
|
|
|
|
mcuReg[i] = WORKTIME2_START_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[1].StartTime.Hour;
|
|
mcuReg[i] = WORKTIME2_START_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[1].StartTime.Min;
|
|
|
|
mcuReg[i] = WORKTIME2_STOP_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[1].StopTime.Hour;
|
|
mcuReg[i] = WORKTIME2_STOP_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[1].StopTime.Min;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = WORKTIME2_SWITCH;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME2_START_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME2_START_MINUTE;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME2_STOP_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME2_STOP_MINUTE;
|
|
mcuData[i++] = 0;
|
|
}
|
|
}
|
|
else if(attrId == SF_MCU_CTRL_MODULE_PIR)
|
|
{
|
|
if((SysGetFlag(GpsSwitch))&& (ConfigureModeFlag || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
|
|
temp = SysGetFlag(PirSensitivity); //sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity);
|
|
|
|
if(SF_REMOTE_CONTROL_REAL_TIME == SysGetFlag(GprsMode)) //hybrid mode 4G module keep sleep
|
|
{
|
|
temp |= 0x40;
|
|
}
|
|
|
|
if((SysGetFlag(GprsSwitch)) && (val == 1))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
printf("[%s:%d] temp:0x%02x GprsSwitch:%lu simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, SysGetFlag(GprsSwitch), simCardInsert);
|
|
|
|
if(ConfigureModeFlag)
|
|
{
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = digPirLevel[SysGetFlag(PirSensitivity)];//PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = (/*SysGetFlag(DigitPirWindowTime)*/0 << 4) | (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0);
|
|
}
|
|
}
|
|
else if(attrId == SF_MCU_PARA)
|
|
{
|
|
if((SysGetFlag(GpsSwitch)) && (ConfigureModeFlag || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
|
|
temp = SysGetFlag(PirSensitivity); //sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity);
|
|
|
|
if((SF_REMOTE_CONTROL_REAL_TIME == SysGetFlag(GprsMode)) && (gModuleSleep == 1)) //hybrid mode 4G module keep sleep
|
|
{
|
|
temp |= 0x40;
|
|
}
|
|
|
|
if((SysGetFlag(GprsSwitch)) && (simCardInsert))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
|
|
printf("[%s:%d] temp:0x%02x GprsSwitch:%lu simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, SysGetFlag(GprsSwitch), simCardInsert);
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = digPirLevel[SysGetFlag(PirSensitivity)];//PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = (0 << 4) | (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0);
|
|
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0;
|
|
}
|
|
else if(attrId == SF_MCU_RESET_MODULE)
|
|
{
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0 | 0x10;
|
|
}
|
|
else if(attrId == SF_MCU_SOFT_UPDATE)
|
|
{
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
|
|
if(val == 1)
|
|
{
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0 | 0x08;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0;
|
|
}
|
|
}
|
|
else if(attrId == SF_MCU_POWER_RESTART)
|
|
{
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0 | 0x20;
|
|
}
|
|
else if(attrId == SF_MCU_PIR_RESTART)
|
|
{
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = SysGetFlag(CamArmDiable) << 6 | sf_is_usb_flag() << 2 | sf_is_card_full() << 1 | sf_in_card_exist() << 0 | 0x80;
|
|
}
|
|
mcuReg[i] = DSP_WRITE_FLG; //MCU set end
|
|
mcuData[i++] = 1;
|
|
printf("[%s:%d] mcuData[%d]0x%02x\n", __FUNCTION__, __LINE__, (i - 1), mcuData[(i - 1)]);
|
|
#if 0
|
|
|
|
if((attrId == SF_MCU_POWEROFF) /*&& puiPara->DebugSwitch && IS_CARD_EXIST*/)
|
|
{
|
|
for(j = 0; j < i; j++)
|
|
{
|
|
printf("W_addr[%2d]=0x%02x\n", mcuReg[j], mcuData[j]);
|
|
}
|
|
|
|
//sf_debug_save_log();
|
|
}
|
|
#endif
|
|
sf_mcu_write_multi(mcuReg, mcuData, i);
|
|
return SUCCESS;
|
|
}
|
|
//#if 1
|
|
|
|
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_analog_pir_sen_convert
|
|
Description: Analog PIR Sensitivity Convert
|
|
Input: digPir sensitivity
|
|
Output: N/A
|
|
Return: Analog PIR Sensitivity
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_analog_pir_sen_convert(UINT8 pirs)
|
|
{
|
|
UINT8 pirlevel = 0;
|
|
|
|
if(pirs > 6)
|
|
pirlevel = 0;
|
|
else if(pirs > 3)
|
|
pirlevel = 1;
|
|
else
|
|
pirlevel = 2;
|
|
|
|
return pirlevel;
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_power_on_para_get
|
|
Description: set data to MCU
|
|
Input: attrId:which kind of para want to get
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val)
|
|
{
|
|
unsigned char mcuReg[REG_SIZE] = {0};
|
|
unsigned char mcuData[REG_SIZE] = {0};
|
|
//unsigned char regsize =0;
|
|
unsigned char i = 0;
|
|
unsigned char temp = 0;
|
|
//unsigned char dailyReportFlag = 1;
|
|
unsigned char paraSyncFlag = 0;
|
|
unsigned char gpsAlwaysFlag = 0;
|
|
//unsigned char DigPirPulseCount = 0;
|
|
//unsigned char DigPirWindowTime = 0;
|
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
//SF_PARA_TIME_S date = { 0 };
|
|
UINT8 PowerOnMode = 0;
|
|
signed int isUsb = 0;
|
|
signed int isCard = 0;
|
|
signed int isCardFull = 0;
|
|
|
|
if(attrId != SF_MCU_CTRL_MODULE_PIR)//AND LDS SECTION_01 loading order.
|
|
{
|
|
isUsb = sf_is_usb_flag();
|
|
isCard = sf_in_card_exist();
|
|
isCardFull = sf_is_card_full();
|
|
PowerOnMode = sf_get_power_on_mode();
|
|
if(APP_POWER_OFF_BATT_EMPTY == sf_get_power_off_flag())
|
|
{
|
|
val = APP_POWER_OFF_BATT_EMPTY;
|
|
}
|
|
}
|
|
|
|
sf_set_sim_insert(1);//Remove hardware detection SIM card
|
|
printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION);
|
|
printf("%s:%d DailyReportSwitch=%d %02d:%02d\n",__FUNCTION__,__LINE__, puiPara->DailyReportSwitch, puiPara->DailyReportTime2.Hour, puiPara->DailyReportTime2.Min);
|
|
printf("%s:%d isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %ld start mode = %d\n",__FUNCTION__,__LINE__, isUsb, isCard, isCardFull, val, simCardInsert, PowerOnMode);
|
|
|
|
if (attrId > SF_MCU_PARAM_MAX)
|
|
{
|
|
printf("attrId ERROR!\n");
|
|
return -1;
|
|
}
|
|
|
|
|
|
if(attrId == SF_MCU_POWEROFF)
|
|
{
|
|
if(0 == IRSHTTER)
|
|
sf_mcu_get_irshtter();
|
|
//printf("SynMcuSet = %x\n", statisPara->SynMcuSet);
|
|
printf("NeedTimeSyncStartUp = %d\n", puiPara->NeedTimeSyncStartUp);
|
|
if(puiPara->NeedTimeSyncStartUp == 1)
|
|
{
|
|
paraSyncFlag = 1;
|
|
}
|
|
#if 0
|
|
struct tm ctv = {0};
|
|
ctv = hwclock_get_time(TIME_ID_CURRENT);
|
|
printf("%s:%d %d : %d : %d : %d : %d : %d\n", __FUNCTION__, __LINE__,ctv.tm_year, ctv.tm_mon,ctv.tm_mday,ctv.tm_hour,ctv.tm_min,ctv.tm_sec);
|
|
|
|
mcuReg[i] = SF_RTC_YEAR;
|
|
mcuData[i++] = ctv.tm_year - 2000;
|
|
mcuReg[i] = SF_RTC_MONTH;
|
|
mcuData[i++] = ctv.tm_mon;
|
|
mcuReg[i] = SF_RTC_DAY;
|
|
mcuData[i++] = ctv.tm_mday;
|
|
mcuReg[i] = SF_RTC_HOUR;
|
|
mcuData[i++] = ctv.tm_hour;
|
|
mcuReg[i] = SF_RTC_MINUTE;
|
|
mcuData[i++] = ctv.tm_min;
|
|
mcuReg[i] = SF_RTC_SEC;
|
|
mcuData[i++] = ctv.tm_sec;
|
|
#endif
|
|
|
|
if((puiPara->GpsSwitch == 1) && (puiPara->GpsNumber))
|
|
{
|
|
gpsAlwaysFlag=1;
|
|
}
|
|
else
|
|
{
|
|
gpsAlwaysFlag=0;
|
|
}
|
|
|
|
if(puiPara->PirSensitivity)
|
|
temp = 0x01;
|
|
else
|
|
temp = 0x00;
|
|
|
|
if(1 == puiPara->TimelapseSwitch)
|
|
{
|
|
temp |= 0x02;
|
|
}
|
|
|
|
if(1 == puiPara->PirDelaySwitch)
|
|
{
|
|
temp |= 0x04;
|
|
}
|
|
|
|
|
|
printf("[%s:%d]paraSyncFlag=%d\n", __FUNCTION__, __LINE__, paraSyncFlag);
|
|
|
|
if(paraSyncFlag)
|
|
{
|
|
temp |= 0x08;
|
|
}
|
|
|
|
|
|
//if(puiPara->dailyReport)
|
|
if(/*(puiPara->GpsSwitch) && */(1 == paraSyncFlag))
|
|
{
|
|
temp &= ~0x10;
|
|
}
|
|
else if(simCardInsert) //dailyreport alway open
|
|
{
|
|
temp |= 0x10;
|
|
}
|
|
|
|
|
|
if(puiPara->TimeSend1Switch == 1)
|
|
temp |= 0x20;
|
|
|
|
if(puiPara->TimeSend2Switch == 1)
|
|
temp |= 0x40;
|
|
|
|
if(gpsAlwaysFlag && simCardInsert)
|
|
temp |= 0x80;
|
|
|
|
temp |= 0x10;
|
|
|
|
mcuReg[i] = FUNCTION_SWTICH0;
|
|
mcuData[i++] = temp;
|
|
|
|
temp = 0;
|
|
|
|
if(puiPara->TimelapseSwitch)
|
|
{
|
|
mcuReg[i] = TIMELAPSE_HOUR;
|
|
mcuData[i++] = puiPara->TimelapseTime.Hour;
|
|
mcuReg[i] = TIMELAPSE_MINUTE;
|
|
mcuData[i++] = puiPara->TimelapseTime.Min;
|
|
mcuReg[i] = TIMELAPSE_SEC;
|
|
|
|
if((puiPara->TimelapseSwitch) && (puiPara->TimelapseTime.Hour == 0) && (puiPara->TimelapseTime.Min == 0) && (puiPara->TimelapseTime.Sec == 0))
|
|
mcuData[i++] = 5;
|
|
else
|
|
mcuData[i++] = puiPara->TimelapseTime.Sec;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = TIMELAPSE_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIMELAPSE_MINUTE;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIMELAPSE_SEC;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(puiPara->PirDelaySwitch)
|
|
{
|
|
mcuReg[i] = PIR_DELAY_HOUR;
|
|
mcuData[i++] = puiPara->PirDelayTime.Hour;
|
|
mcuReg[i] = PIR_DELAY_MINUTE;
|
|
mcuData[i++] = puiPara->PirDelayTime.Min;
|
|
mcuReg[i] = PIR_DELAY_SEC;
|
|
mcuData[i++] = puiPara->PirDelayTime.Sec;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = PIR_DELAY_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = PIR_DELAY_MINUTE;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = PIR_DELAY_SEC;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(paraSyncFlag)
|
|
{
|
|
mcuReg[i] = TIME_SYNC_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = TIME_SYNC_MINUTE;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = TIME_SYNC_SEC;
|
|
mcuData[i++] = 30;
|
|
}
|
|
|
|
if(puiPara->DailyReportSwitch)
|
|
{
|
|
mcuReg[i] = DAILY_REPORT_HOUR;
|
|
mcuData[i++] = puiPara->DailyReportTime2.Hour;
|
|
mcuReg[i] = DAILY_REPORT_MINUTE;
|
|
mcuData[i++] = puiPara->DailyReportTime2.Min;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = DAILY_REPORT_HOUR;
|
|
mcuData[i++] =0;
|
|
mcuReg[i] = DAILY_REPORT_MINUTE;
|
|
mcuData[i++] =0;
|
|
}
|
|
mcuReg[i] = DAILY_SEND1_HOUR;
|
|
mcuData[i++] = puiPara->TimeSend1.Hour;
|
|
mcuReg[i] = DAILY_SEND1_MINUTE;
|
|
mcuData[i++] = puiPara->TimeSend1.Min;
|
|
|
|
mcuReg[i] = DAILY_SEND2_HOUR;
|
|
mcuData[i++] = puiPara->TimeSend2.Hour;
|
|
mcuReg[i] = DAILY_SEND2_MINUTE;
|
|
mcuData[i++] = puiPara->TimeSend2.Min;
|
|
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
temp = sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity);
|
|
//hybrid mode 4G module keep sleep
|
|
if(((puiPara->NetWorkNeedSearch) != 3) && simCardInsert && gModuleSleep)
|
|
{
|
|
//bit 5-bit 6, daily mode 0, hybrid mode 1, instant mode 2
|
|
if(((puiPara->GprsMode) == 1) || (paraSyncFlag))
|
|
{
|
|
temp |= 0x40;
|
|
}
|
|
else
|
|
{
|
|
if (((puiPara->GprsMode) == 2) && isSignalReady && (GPRS_ERRNO == 0))
|
|
temp |= 0x20;
|
|
|
|
//sf_pdp_flg_set(0);
|
|
}
|
|
}
|
|
if((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_GPRS_INIT) || ((PowerOnMode == PWR_ON_DAILY_REPORT) /*&& (drNoResetTimeSync != SF_TRUE)*/))
|
|
{
|
|
temp |= 0x10; /*bit4 rest*/
|
|
}
|
|
|
|
if(((puiPara->GprsSwitch) && (simCardInsert) && ((puiPara->SendType) == 0)) || (paraSyncFlag))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
else
|
|
{
|
|
//sf_pdp_flg_set(0);
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt);
|
|
//mcuData[i++] = (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0);
|
|
|
|
//DSP busy/idle
|
|
mcuReg[i] = DSP_BUSY_STATUS;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0;
|
|
|
|
mcuReg[i] = POWEROFF_TYPE;
|
|
temp = 0;
|
|
|
|
if(simCardInsert && (puiPara->NetWorkNeedSearch)
|
|
&& ((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_DAILY_REPORT)))/* SET->ON, OFF->ON*/
|
|
temp = 1;
|
|
else if(SmsCheck)
|
|
temp = 2;
|
|
|
|
//if (!(sf_get_pir_statu_flag() || (PowerOnMode == PWR_ON_AUTO)))
|
|
temp |= (val == APP_POWER_OFF_BATT_EMPTY) << 6;
|
|
|
|
mcuData[i++] = (val==APP_POWER_OFF_APO)<<7 | temp;
|
|
|
|
//battery recovery
|
|
mcuReg[i] = VBAT_RECOVER_VAL;
|
|
mcuData[i++] = SF_BATT_RECOVERY;
|
|
|
|
if(puiPara->WorkTime1Switch)
|
|
{
|
|
mcuReg[i] = WORKTIME1_SWITCH;
|
|
mcuData[i++] = 0xFF;
|
|
|
|
mcuReg[i] = WORKTIME1_START_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[0].StartTime.Hour;
|
|
mcuReg[i] = WORKTIME1_START_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[0].StartTime.Min;
|
|
|
|
mcuReg[i] = WORKTIME1_STOP_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[0].StopTime.Hour;
|
|
mcuReg[i] = WORKTIME1_STOP_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[0].StopTime.Min;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = WORKTIME1_SWITCH;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME1_START_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME1_START_MINUTE;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME1_STOP_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME1_STOP_MINUTE;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(puiPara->WorkTime2Switch)
|
|
{
|
|
mcuReg[i] = WORKTIME2_SWITCH;
|
|
mcuData[i++] = 0xFF;
|
|
|
|
mcuReg[i] = WORKTIME2_START_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[1].StartTime.Hour;
|
|
mcuReg[i] = WORKTIME2_START_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[1].StartTime.Min;
|
|
|
|
mcuReg[i] = WORKTIME2_STOP_HOUR;
|
|
mcuData[i++] = puiPara->WorkTime[1].StopTime.Hour;
|
|
mcuReg[i] = WORKTIME2_STOP_MINUTE;
|
|
mcuData[i++] = puiPara->WorkTime[1].StopTime.Min;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = WORKTIME2_SWITCH;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME2_START_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME2_START_MINUTE;
|
|
mcuData[i++] = 0;
|
|
|
|
mcuReg[i] = WORKTIME2_STOP_HOUR;
|
|
mcuData[i++] = 0;
|
|
mcuReg[i] = WORKTIME2_STOP_MINUTE;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
if(((puiPara->GpsSwitch) || (puiPara->FristSendDailyAndGps)) && (((sf_get_mode_flag())) || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
|
|
temp = 0;
|
|
|
|
if((puiPara->TimeSend3Switch) == 1)
|
|
temp |= 0x01;
|
|
|
|
if((puiPara->TimeSend4Switch) == 1)
|
|
temp |= 0x02;
|
|
|
|
mcuReg[i] = FUNCTION_SWTICH1;
|
|
mcuData[i++] = temp;
|
|
|
|
mcuReg[i] = DAILY_SEND3_HOUR;
|
|
mcuData[i++] = puiPara->TimeSend3.Hour;
|
|
mcuReg[i] = DAILY_SEND3_MINUTE;
|
|
mcuData[i++] = puiPara->TimeSend3.Min;
|
|
|
|
mcuReg[i] = DAILY_SEND4_HOUR;
|
|
mcuData[i++] = puiPara->TimeSend4.Hour;
|
|
mcuReg[i] = DAILY_SEND4_MINUTE;
|
|
mcuData[i++] = puiPara->TimeSend4.Min;
|
|
}else if(attrId == SF_MCU_CTRL_MODULE_PIR){
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
|
|
temp = (puiPara->PirSensitivity);//sf_mcu_analog_pir_sen_convert(SysGetFlag(DigPirSensitivity));
|
|
|
|
if(puiPara->GprsMode)//hybrid mode 4G module keep sleep
|
|
{
|
|
temp |= 0x40;
|
|
}
|
|
|
|
if((puiPara->GprsSwitch) && (val == 1))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
else
|
|
{
|
|
//sf_pdp_flg_set(0);
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
|
|
if(ConfigureModeFlag)
|
|
{
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt);
|
|
}
|
|
|
|
if(((puiPara->GpsSwitch) || (puiPara->FristSendDailyAndGps)) && (ConfigureModeFlag || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
}else if(attrId == SF_MCU_PARA){
|
|
mcuReg[i] = ANALOG_PIR_SENSITIVITY;
|
|
|
|
temp = (puiPara->PirSensitivity);//sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity);
|
|
|
|
if((puiPara->GprsMode) && (gModuleSleep == 1))//hybrid mode 4G module keep sleep
|
|
{
|
|
temp |= 0x40;
|
|
}
|
|
|
|
if((puiPara->GprsSwitch) && (simCardInsert))
|
|
{
|
|
temp |= 0x80;
|
|
}
|
|
else
|
|
{
|
|
//sf_pdp_flg_set(0);
|
|
}
|
|
|
|
mcuData[i++] = temp;
|
|
|
|
printf("[%s:%d] temp:0x%02x GprsSwitch:%d simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, puiPara->GprsSwitch, simCardInsert);
|
|
mcuReg[i] = DIGITAL_PIR_SENSITIVITY;
|
|
mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)];
|
|
mcuReg[i] = DIGITAL_PIR_CFG;
|
|
mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt);
|
|
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0;
|
|
|
|
if(((puiPara->GpsSwitch) || (puiPara->FristSendDailyAndGps)) && (ConfigureModeFlag || paraSyncFlag))
|
|
{
|
|
mcuReg[i] = GPS_POWER_TIMER_CLEAR;
|
|
mcuData[i++] = 1;
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 1;
|
|
}
|
|
else
|
|
{
|
|
mcuReg[i] = GPS_POWER_CTRL;
|
|
mcuData[i++] = 0;
|
|
}
|
|
}else if(attrId == SF_MCU_RESET_MODULE){
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x10;
|
|
//sf_pdp_flg_set(0);
|
|
}else if(attrId == SF_MCU_SOFT_UPDATE){
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
|
|
if(val == 1)
|
|
{
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x08;
|
|
}
|
|
else
|
|
{
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0;
|
|
}
|
|
}else if(attrId == SF_MCU_POWER_RESTART){
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x20;
|
|
}else if(attrId == SF_MCU_PIR_RESTART){
|
|
mcuReg[i] = SF_SYS_STATUS;
|
|
mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x80;
|
|
}
|
|
|
|
mcuReg[i] = DSP_WRITE_FLG; //MCU set end
|
|
mcuData[i++] = 1;
|
|
//printf("[%s:%d] mcuData[%d]0x%02x\n", __FUNCTION__, __LINE__, (i - 1), mcuData[(i - 1)]);
|
|
#if 0
|
|
|
|
if((attrId == SF_MCU_POWEROFF) && puiPara->DebugMode && IS_CARD_EXIST)
|
|
{
|
|
for(j = 0; j < i; j++)
|
|
{
|
|
printf("W_addr[%2d]=0x%02x\n",mcuReg[j],mcuData[j]);
|
|
}
|
|
|
|
sf_debug_save_log();
|
|
}
|
|
#endif
|
|
sf_mcu_write_multi(mcuReg, mcuData, i);
|
|
return SUCCESS;
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
BOOL sf_get_mode_flag(void)
|
|
{
|
|
//printf("[%s:%d] ConfigureModeFlag:%d\n",__FUNCTION__,__LINE__,ConfigureModeFlag);
|
|
return ConfigureModeFlag;
|
|
}
|
|
|
|
BOOL sf_is_usb_flag(void)
|
|
{
|
|
return gpio_getIntStatus(GPIO_INT_USBPLUGIN);
|
|
}
|
|
|
|
#if 0
|
|
void sf_cmd_camera_restart(UINT8 cameraRestart)
|
|
{
|
|
CameraCmd.cameraRestart = cameraRestart;
|
|
printf("[%s:%d] e cameraRestart:%d\n",__FUNCTION__,__LINE__,CameraCmd.cameraRestart);
|
|
}
|
|
|
|
UINT8 sf_get_camera_restart(void)
|
|
{
|
|
printf("[%s:%d] s cameraRestart:%d\n",__FUNCTION__,__LINE__,CameraCmd.cameraRestart);
|
|
return CameraCmd.cameraRestart;
|
|
}
|
|
|
|
void sf_calculate_daily_report(UINT8*dailyHour, UINT8*dailyMin)
|
|
{
|
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
UINT16 daily_sum_min = 0;
|
|
UINT16 timelapse_sum_min = 0;
|
|
struct tm mcuTime = {0};
|
|
//Daily report is always ON
|
|
if(puiPara->ReDailyReport)
|
|
{
|
|
mcuTime = hwclock_get_time(TIME_ID_CURRENT);
|
|
if(puiPara->DailyReportTime2.Hour >= mcuTime.tm_hour)
|
|
{
|
|
|
|
daily_sum_min = (puiPara->DailyReportTime2.Hour * 60 + puiPara->DailyReportTime2.Min) - (mcuTime.tm_hour * 60 + mcuTime.tm_min);
|
|
*dailyHour = daily_sum_min / 60;
|
|
*dailyMin = daily_sum_min % 60;
|
|
}
|
|
else
|
|
{
|
|
daily_sum_min = (puiPara->DailyReportTime2.Hour * 60 + puiPara->DailyReportTime2.Min + (24*60)) - (mcuTime.tm_hour * 60 + mcuTime.tm_min);
|
|
*dailyHour = daily_sum_min / 60;
|
|
*dailyMin = daily_sum_min % 60;
|
|
}
|
|
printf("mcuTime.hour:%d,mcuTime.min:%d\n",mcuTime.tm_hour,mcuTime.tm_min);
|
|
printf("ReDailyHour:%d,ReDailyMinute:%d\n",puiPara->DailyReportTime2.Hour,puiPara->DailyReportTime2.Min);
|
|
printf("daily_sum_min:%d\n",daily_sum_min);
|
|
|
|
|
|
}
|
|
else if(puiPara->GprsMode == SF_REMOTE_CONTROL_REAL_TIME)
|
|
{
|
|
|
|
if((!sf_get_mode_flag()) && (sf_get_camera_restart() == 1))
|
|
{
|
|
// PIR mode,if remote control is setted real time,need reboot to connect ACM,use DailyReport.
|
|
*dailyHour = 0;
|
|
*dailyMin = 1;
|
|
}
|
|
else
|
|
{
|
|
// if remote control set real time,check the socket every two hour ,to keep alive
|
|
*dailyHour = 2;
|
|
*dailyMin = 0;
|
|
}
|
|
|
|
}
|
|
else if(puiPara->GpsAntiTheftSwitch == 1)
|
|
{
|
|
if((!sf_get_mode_flag()) && (sf_get_camera_restart() == 1))
|
|
{
|
|
// PIR mode,if gpsTheftPrevention ON, have not update gps in 24H,need to reseach gps then update to acm,use DailyReport.
|
|
*dailyHour = 0;
|
|
*dailyMin = 1;
|
|
}
|
|
else
|
|
{
|
|
*dailyHour = puiPara->DailyReportTime.Hour;
|
|
*dailyMin = puiPara->DailyReportTime.Min;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
*dailyHour = puiPara->DailyReportTime.Hour;
|
|
*dailyMin = puiPara->DailyReportTime.Min;
|
|
}
|
|
|
|
printf("%s:%d dailyHour:%d,dailyMin:%d\n", __FUNCTION__, __LINE__,*dailyHour,*dailyMin);
|
|
printf("%s:%d TimerHstartT:%d,TimerMstartT:%d,TimerSstartT:%d\n", __FUNCTION__, __LINE__,puiPara->TimelapseTime.Hour,puiPara->TimelapseTime.Min,puiPara->TimelapseTime.Sec);
|
|
//need check dailyReport & timelapse ?
|
|
if((sf_convert_power_on_mode() == PWR_ON_TIMELAPSE)/* || (sf_get_timelapse_change())*/ || (sf_get_mode_flag()))
|
|
{
|
|
//dailyHour = dailyHour + 60;
|
|
daily_sum_min = (*dailyHour) * 60 + (*dailyMin);// + 60 + dailyMin
|
|
|
|
if(puiPara->TimelapseTime.Sec)
|
|
{
|
|
timelapse_sum_min = (puiPara->TimelapseTime.Hour) * 60 + puiPara->TimelapseTime.Min + 1;
|
|
}
|
|
else
|
|
{
|
|
timelapse_sum_min = (puiPara->TimelapseTime.Hour) * 60 + puiPara->TimelapseTime.Min;
|
|
}
|
|
|
|
if(timelapse_sum_min >= daily_sum_min)
|
|
{
|
|
if((timelapse_sum_min - daily_sum_min) <= 5)
|
|
{
|
|
if((puiPara->ReDailyReport == 1) && (timelapse_sum_min < 5))
|
|
{
|
|
puiPara->ReDailyReport = 2;
|
|
puiPara->DailyReportTime2.Hour = 0;
|
|
puiPara->DailyReportTime2.Min = 0;
|
|
}
|
|
else
|
|
{
|
|
*dailyMin = *dailyMin + 5;
|
|
}
|
|
}
|
|
|
|
}
|
|
// only timelapse < dailyReport+5,daily report = daily report + 5
|
|
|
|
}
|
|
|
|
printf("%s:%d Calculated:dailyHour:%d,dailyMin:%d\n", __FUNCTION__, __LINE__,*dailyHour,*dailyMin);
|
|
|
|
}
|
|
#endif
|
|
|
|
int sf_while_flag(void)
|
|
{
|
|
if((!sf_is_usb_flag()) && (POWEROFF != 1))
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_mcu_get_irshtter
|
|
Description: get IRSHTTER.
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: IRSHTTER
|
|
Others: N/A
|
|
*************************************************/
|
|
UINT16 sf_mcu_get_irshtter(void)
|
|
{
|
|
//static BOOL isRefresh = 1;
|
|
UINT8 dataTemp1 = 0, dataTemp2 = 0;
|
|
|
|
UINT8 mcuReg[REG_SIZE] = { 0 };
|
|
UINT8 mcuData[REG_SIZE] = { 0 };
|
|
UINT8 i = 0;
|
|
if(gpio_getIntStatus(GPIO_INT_USBPLUGIN))
|
|
{
|
|
return IRSHTTER;
|
|
}
|
|
//if(isRefresh){
|
|
//isRefresh = 0;
|
|
mcuReg[i++] = LUMINANCE_L;
|
|
mcuReg[i++] = LUMINANCE_H;
|
|
sf_mcu_read_multi(mcuReg, mcuData, i);
|
|
i = 0;
|
|
|
|
dataTemp1= mcuData[i++];
|
|
dataTemp2 = mcuData[i++];
|
|
|
|
IRSHTTER = (dataTemp2 << 8) | dataTemp1;
|
|
//}
|
|
|
|
|
|
printf("%s:%d IRSHTTER = %d\n", __FUNCTION__, __LINE__, IRSHTTER);
|
|
|
|
return IRSHTTER;
|
|
}
|
|
|
|
|
|
UINT32 sf_set_pir_sensitivity(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_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 SF_IS_RELEASE == ENABLE
|
|
if(puiPara->PirSensitivity)
|
|
{
|
|
puiPara->TimelapseSwitch = SF_OFF;
|
|
puiPara->TimelapseTime.Hour = 0;
|
|
puiPara->TimelapseTime.Min = 0;
|
|
puiPara->TimelapseTime.Sec = 0;
|
|
//Save_MenuInfo();
|
|
}
|
|
//#endif
|
|
return SUCCESS;
|
|
}
|
|
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));
|
|
if (pThumbFileCfg == NULL) {
|
|
printf("%s:%d pThumbFileCfg malloc err\n", __FUNCTION__, __LINE__);
|
|
return;
|
|
}
|
|
memset(pThumbFileCfg, 0, sizeof(SF_SRCFILE_ATTR_S));
|
|
printf("%s:%d pThumbFileCfg malloc\n", __FUNCTION__, __LINE__);
|
|
}
|
|
|
|
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
|
|
{
|
|
pThumbFileCfg->filecnt = 0;
|
|
|
|
}
|
|
snprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfilePath, sizeof(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfilePath), "%s", filepath);
|
|
//sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfilePath, "%s", filepath);
|
|
snprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, sizeof(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName), "%s", fileName);
|
|
//sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
|
|
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
|
|
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__);
|
|
|
|
|
|
#if 0
|
|
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);
|
|
|
|
int fd = open(tmp, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
|
|
if (fd == -1)
|
|
{
|
|
printf("%s:%d err\n", __FUNCTION__, __LINE__);
|
|
// 处理文件打开失败的错误
|
|
return ;
|
|
}
|
|
|
|
lseek(fd, 0, SEEK_SET);
|
|
UINT32 size = sizeof(SF_SRCFILE_ATTR_S);
|
|
write(fd, pThumbFileCfg, size);
|
|
close(fd);
|
|
|
|
//FileSys_WriteFile(fp, (UINT8*)pThumbFileCfg, &size, 0, NULL);
|
|
//FileSys_CloseFile(fp);
|
|
free(pThumbFileCfg);
|
|
#endif
|
|
UINT8 fileIndex = 0;
|
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
|
|
if (pThumbFileCfg != NULL) {
|
|
|
|
char sendListName[64] = {0};
|
|
FST_FILE fs = 0;
|
|
//char buff[SF_SEND_LIST_ITEM_LENGTH+1] = {0};
|
|
//int fd = 0;
|
|
static int flag = 0;
|
|
//struct stat st;
|
|
#if SF_IQ_TEST != ENABLE
|
|
INT32 uiStatus = 0;
|
|
UINT8 ucAttrib = 0;
|
|
uiStatus = FileSys_GetAttrib(PHOTO_THUMB_PATH, &ucAttrib);
|
|
if (uiStatus == FST_STA_OK) {
|
|
if(!(ucAttrib&FST_ATTRIB_HIDDEN)){
|
|
FileSys_SetAttrib(PHOTO_THUMB_PATH, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
//printf("Add %s to send.List\n", sendfname);
|
|
if(0 == puiPara->SendType){
|
|
snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_AUTO);
|
|
if((access(sendListName, F_OK) == 0) && (0 == flag))
|
|
{
|
|
if (FileSys_DeleteFile(sendListName) != FST_STA_OK) {
|
|
DBG_IND("Ignore deleting file.\r\n");
|
|
}
|
|
}
|
|
flag = 1;
|
|
|
|
}else {
|
|
snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_LIST);
|
|
}
|
|
|
|
/*if(access(sendListName, F_OK) == 0)
|
|
{
|
|
printf("sendListName:%s\n",sendListName);
|
|
fd = open(sendListName, O_APPEND | O_WRONLY);
|
|
}
|
|
else {
|
|
fd = open(sendListName, O_APPEND | O_WRONLY | O_CREAT);
|
|
}*/
|
|
fs = FileSys_OpenFile(sendListName, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
|
if(/*fd*/fs)
|
|
{
|
|
for(fileIndex = 0; fileIndex < pThumbFileCfg->filecnt; fileIndex++)
|
|
{
|
|
if((0 == fileIndex) || ((1 == puiPara->SendMulti))){
|
|
sf_add_file_name_to_send_list(pThumbFileCfg->stfileattr[fileIndex].thumbfileName, fs);
|
|
printf("%s:%d thumbfileSize:%ld thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,pThumbFileCfg->stfileattr[fileIndex].thumbfileSize,pThumbFileCfg->stfileattr[fileIndex].thumbfileName,pThumbFileCfg->stfileattr[fileIndex].thumbfilePath);
|
|
}
|
|
}
|
|
FileSys_CloseFile(fs);
|
|
//close(fd);
|
|
}
|
|
|
|
#if SF_BATTERY_TEST == ENABLE
|
|
fs = 0;
|
|
fileIndex = 0;
|
|
char str1[6] = { 0 };
|
|
char str2[6] = { 0 };
|
|
printf("fileName:%s\n",SF_BATTERY_TEST_FILE);
|
|
fs = FileSys_OpenFile(SF_BATTERY_TEST_FILE, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
|
if(fs)
|
|
{
|
|
for(fileIndex = 0; fileIndex < pThumbFileCfg->filecnt; fileIndex++)
|
|
{
|
|
if((0 == fileIndex) || ((1 == puiPara->SendMulti))){
|
|
memset(str1,'\0', sizeof(str1));
|
|
memset(str2,'\0', sizeof(str2));
|
|
memcpy(str1, pThumbFileCfg->stfileattr[fileIndex].thumbfileName + 4, 4);
|
|
snprintf((char *)str2, sizeof(str2), "%s", str1);
|
|
printf("%s:%d thumbfileName:%s str2:%s\n", __FUNCTION__, __LINE__, pThumbFileCfg->stfileattr[fileIndex].thumbfileName, str2);
|
|
sf_BatteryInfoSave(str2,fs);
|
|
}
|
|
}
|
|
FileSys_CloseFile(fs);
|
|
//close(fd);
|
|
}
|
|
#endif
|
|
#if SF_HW_TEST == ENABLE
|
|
fs = 0;
|
|
fileIndex = 0;
|
|
char str3[6] = { 0 };
|
|
char str4[6] = { 0 };
|
|
|
|
printf("fileName:%s\n",SF_HW_TEST_FILE);
|
|
fs = FileSys_OpenFile(SF_HW_TEST_FILE, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
|
if(fs)
|
|
{
|
|
for(fileIndex = 0; fileIndex < pThumbFileCfg->filecnt; fileIndex++)
|
|
{
|
|
if((0 == fileIndex) || ((1 == puiPara->SendMulti))){
|
|
memset(str3,'\0', sizeof(str3));
|
|
memset(str4,'\0', sizeof(str4));
|
|
memcpy(str3, pThumbFileCfg->stfileattr[fileIndex].thumbfileName + 4, 4);
|
|
snprintf((char *)str4, sizeof(str4), "%s", str3);
|
|
printf("%s:%d thumbfileName:%s str2:%s\n", __FUNCTION__, __LINE__, pThumbFileCfg->stfileattr[fileIndex].thumbfileName, str4);
|
|
sf_hw_info_save(str4,fs);
|
|
}
|
|
}
|
|
FileSys_CloseFile(fs);
|
|
//close(fd);
|
|
}
|
|
#endif
|
|
//printf("%s:%d e Size:%ld\n", __FUNCTION__, __LINE__,pThumbFileCfg->stfileattr[fileIndex].thumbfileSize);
|
|
free(pThumbFileCfg);
|
|
}
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_add_file_name_to_send_list
|
|
Description: add file name to send list
|
|
Input: sendfname
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
void sf_add_file_name_to_send_list(char *sendfname, FST_FILE fd)
|
|
{
|
|
//char sendListName[64] = {0};
|
|
char buff[SF_SEND_LIST_ITEM_LENGTH+1] = {0};
|
|
//struct stat st;
|
|
UINT32 size = 0;
|
|
INT32 ret_fs = 0;
|
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
|
|
|
if (sendfname == NULL) {
|
|
printf("%s:%d sendfname err\n", __FUNCTION__, __LINE__);
|
|
return;
|
|
}
|
|
|
|
if(strlen(sendfname) != SF_SEND_LIST_ITEM_LENGTH-3) //3 ->CamMode \r\n
|
|
{
|
|
printf("%s:%d AddFileNameToSenddist fail: send file name format error\n", __FUNCTION__, __LINE__);
|
|
return;
|
|
}
|
|
|
|
if(fd)
|
|
{
|
|
//fstat(fd, &st);
|
|
//lseek(fd, 0, SEEK_END);
|
|
ret_fs = FileSys_SeekFile((FST_FILE)fd, 0, FST_SEEK_END);
|
|
if (ret_fs != FST_STA_OK) {
|
|
printf("%s:%d seek file failed\r\n", __FUNCTION__, __LINE__);
|
|
}
|
|
|
|
snprintf(buff, sizeof(buff), "%d%s\r\n", puiPara->CamMode, sendfname);
|
|
size = SF_SEND_LIST_ITEM_LENGTH;
|
|
ret_fs = FileSys_WriteFile((FST_FILE)fd, (UINT8*)buff, &size, 0, NULL);
|
|
if (ret_fs != FST_STA_OK) {
|
|
printf("%s:%d FileSys_WriteFile failed\r\n", __FUNCTION__, __LINE__);
|
|
}
|
|
|
|
//write(fd, buff, SF_SEND_LIST_ITEM_LENGTH);
|
|
|
|
//printf("Add Success st_size:%ld\n", st.st_size);
|
|
}
|
|
}
|
|
|
|
/*************************************************
|
|
Function: sf_para_print
|
|
Description: printf para
|
|
Input: N/A
|
|
Output: N/A
|
|
Return: N/A
|
|
Others: N/A
|
|
*************************************************/
|
|
void sf_para_print(void)
|
|
{
|
|
struct tm ctv = {0};
|
|
UINT8 PowerOnMode = 0;
|
|
signed int isUsb = 0;
|
|
signed int isCard = 0;
|
|
signed int isCardFull = 0;
|
|
isUsb = sf_is_usb_flag();
|
|
isCard = sf_in_card_exist();
|
|
isCardFull = sf_is_card_full();
|
|
PowerOnMode = sf_get_power_on_mode();
|
|
ctv = hwclock_get_time(TIME_ID_CURRENT);
|
|
printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION);
|
|
printf("%s:%d tm: %d : %d : %d : %d : %d : %d\n", __FUNCTION__, __LINE__,ctv.tm_year, ctv.tm_mon,ctv.tm_mday,ctv.tm_hour,ctv.tm_min,ctv.tm_sec);
|
|
printf("%s:%d isUsb = %d isCard = %d isCardFull = %d simCardInsert = %ld start mode = %d IRSHTTER = %d\n",__FUNCTION__,__LINE__, isUsb, isCard, isCardFull, simCardInsert, PowerOnMode, IRSHTTER);
|
|
sf_battery_print();
|
|
}
|
|
|
|
static char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
|
|
int sf_base64_decode(const char * base64, char * bindata)
|
|
{
|
|
int i, j;
|
|
unsigned char k;
|
|
unsigned char temp[4];
|
|
for (i = 0, j = 0; base64[i] != '\0'; i += 4)
|
|
{
|
|
memset(temp, 0xFF, sizeof(temp));
|
|
for (k = 0; k < 64; k++)
|
|
{
|
|
if (base64char[k] == base64[i])
|
|
temp[0] = k;
|
|
}
|
|
for (k = 0; k < 64; k++)
|
|
{
|
|
if (base64char[k] == base64[i + 1])
|
|
temp[1] = k;
|
|
}
|
|
for (k = 0; k < 64; k++)
|
|
{
|
|
if (base64char[k] == base64[i + 2])
|
|
temp[2] = k;
|
|
}
|
|
for (k = 0; k < 64; k++)
|
|
{
|
|
if (base64char[k] == base64[i + 3])
|
|
temp[3] = k;
|
|
}
|
|
|
|
bindata[j++] = ((unsigned char)(((unsigned char)(temp[0] << 2)) & 0xFC)) |
|
|
((unsigned char)((unsigned char)(temp[1] >> 4) & 0x03));
|
|
if (base64[i + 2] == '=')
|
|
break;
|
|
|
|
bindata[j++] = ((unsigned char)(((unsigned char)(temp[1] << 4)) & 0xF0)) |
|
|
((unsigned char)((unsigned char)(temp[2] >> 2) & 0x0F));
|
|
if (base64[i + 3] == '=')
|
|
break;
|
|
|
|
bindata[j++] = ((unsigned char)(((unsigned char)(temp[2] << 6)) & 0xF0)) |
|
|
((unsigned char)(temp[3] & 0x3F));
|
|
}
|
|
return j;
|
|
}
|
|
#if SF_HW_TEST == ENABLE
|
|
UINT32 testadj = 0;
|
|
UINT32 testiso = 0;
|
|
UINT32 testexp = 0;
|
|
UINT32 testlv = 0;
|
|
|
|
void sf_set_iso_exp_lv(UINT32 adj, UINT32 iso, UINT32 exp, UINT32 lv)
|
|
{
|
|
testadj = adj;
|
|
testiso = iso;
|
|
testexp = exp;
|
|
testlv = lv;
|
|
}
|
|
void sf_hw_info_save(char *name,FST_FILE fd)
|
|
{
|
|
char *tmpBuf = NULL;
|
|
//UINT32 LibatAdc = 0;
|
|
//UINT32 batAdc = 0;
|
|
|
|
//char fileName[64] = {0};
|
|
//FST_FILE fd = 0;
|
|
//struct stat st;
|
|
UINT32 size = 0;
|
|
INT32 ret_fs = 0;
|
|
|
|
struct tm drRtcTime;
|
|
|
|
UIMenuStoreInfo *pPara = sf_ui_para_get();
|
|
char datestr[30] = { 0 };
|
|
|
|
|
|
tmpBuf = malloc(100);
|
|
|
|
if (tmpBuf == NULL) {
|
|
printf("%s:%d tmpBuf malloc err\n", __FUNCTION__, __LINE__);
|
|
return;
|
|
}
|
|
|
|
drRtcTime = hwclock_get_time(TIME_ID_CURRENT);
|
|
|
|
if(pPara->DateStyle == SF_DATE_TIME_YYMMDD)
|
|
{
|
|
sprintf(datestr, "%d/%02d/%02d/%02d :%02d:%02d", drRtcTime.tm_year, drRtcTime.tm_mon, drRtcTime.tm_mday, drRtcTime.tm_hour, drRtcTime.tm_min, drRtcTime.tm_sec);
|
|
}
|
|
else if (pPara->DateStyle == SF_DATE_TIME_MMDDYY)
|
|
{
|
|
sprintf(datestr, "%02d/%02d/%d %02d:%02d:%02d", drRtcTime.tm_mon, drRtcTime.tm_mday, drRtcTime.tm_year, drRtcTime.tm_hour, drRtcTime.tm_min, drRtcTime.tm_sec);
|
|
}
|
|
else
|
|
{
|
|
sprintf(datestr, "%02d/%02d/%d %02d:%02d:%02d", drRtcTime.tm_mday, drRtcTime.tm_mon, drRtcTime.tm_year,drRtcTime.tm_hour, drRtcTime.tm_min, drRtcTime.tm_sec);
|
|
}
|
|
//printf("[%s:%d]customStr:%s\n", __FUNCTION__, __LINE__, datestr);
|
|
|
|
|
|
//snprintf(fileName, sizeof(fileName), "%s", SF_HW_TEST_FILE);
|
|
|
|
/*if(access(SF_HW_TEST_FILE, F_OK) == 0)
|
|
{
|
|
printf("fileName:%s\n",SF_HW_TEST_FILE);
|
|
fd = open(SF_HW_TEST_FILE, O_APPEND | O_WRONLY);
|
|
}
|
|
else {
|
|
fd = open(SF_HW_TEST_FILE, O_APPEND | O_WRONLY | O_CREAT);
|
|
}*/
|
|
//printf("fileName:%s\n",SF_HW_TEST_FILE);
|
|
//fd = FileSys_OpenFile(SF_HW_TEST_FILE, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
|
|
|
|
|
sprintf(tmpBuf, "%s %s IRSHTTER=%d TemperAdc=%lu ae_adj=%lu iso=%lu exp=%lu lv=%lu\r\n", datestr, name, IRSHTTER, sf_get_temper_adc(), testadj, testiso, testexp, testlv);
|
|
printf("%s\r", tmpBuf);
|
|
|
|
if(fd)
|
|
{
|
|
//fstat(fd, &st);
|
|
/*lseek(fd, 0, SEEK_END);
|
|
write(fd, tmpBuf, strlen(tmpBuf));
|
|
close(fd);*/
|
|
//printf("Add Success st_size:%ld\n", st.st_size);
|
|
ret_fs = FileSys_SeekFile(fd, 0, FST_SEEK_END);
|
|
if (ret_fs != FST_STA_OK) {
|
|
printf("%s:%d seek file failed\r\n", __FUNCTION__, __LINE__);
|
|
}
|
|
size = strlen(tmpBuf);
|
|
ret_fs = FileSys_WriteFile(fd, (UINT8*)tmpBuf, &size, 0, NULL);
|
|
if (ret_fs != FST_STA_OK) {
|
|
printf("%s:%d FileSys_WriteFile failed\r\n", __FUNCTION__, __LINE__);
|
|
}
|
|
//FileSys_CloseFile(fd);
|
|
}
|
|
free(tmpBuf);
|
|
}
|
|
|
|
#endif
|
|
|
|
#if defined __FREERTOS
|
|
|
|
int sf_mod_init(void)
|
|
{
|
|
int rt = 0;
|
|
static int InitFlag = 1;
|
|
|
|
if(InitFlag)
|
|
{
|
|
InitFlag = 0;
|
|
|
|
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
|
|
rt = sf_init_mcu();
|
|
|
|
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
|
|
#if HUNTING_MCU_I2C == ENABLE
|
|
rt = sf_init_mcu();
|
|
#else
|
|
rt = sf_commu_mcu_task_start();
|
|
#endif
|
|
#endif
|
|
}
|
|
return rt;
|
|
}
|
|
|
|
void sf_mod_exit(void)
|
|
{
|
|
sf_off_mcu();
|
|
#if HUNTING_MCU_I2C == ENABLE
|
|
sf_i2c_remove_driver(sf_i2c.id);
|
|
#endif
|
|
}
|
|
|
|
#elif defined __KERNEL__
|
|
static int __init sf_init(void)
|
|
{
|
|
int rt;
|
|
|
|
rt = sf_init_mcu();
|
|
|
|
return rt;
|
|
}
|
|
|
|
static void __exit sf_exit(void)
|
|
{
|
|
sf_i2c_remove_driver(sf_i2c.id);
|
|
}
|
|
|
|
module_init(sf_init);
|
|
module_exit(sf_exit);
|
|
|
|
MODULE_DESCRIPTION("SIFAR MCU");
|
|
MODULE_AUTHOR("SiFar.");
|
|
MODULE_LICENSE("GPL");
|
|
#endif
|
|
|