165 lines
4.1 KiB
C
165 lines
4.1 KiB
C
#include "bsp_os.h"
|
|
#include "ptz_header_file.h"
|
|
//#include "device_rotate.h"
|
|
#include "service_areascan.h"
|
|
#include "service_cmdpreprocess.h"
|
|
#include "enet_to_udp.h"
|
|
/********用于自动启动某些功能,进行指令预处理********/
|
|
PtzCmdBeforeData BeforeData[CMD_BEFORE_AMOUNT + 1];//数组最后一位用来存储所有数据的效验码
|
|
unsigned char cmd_before_count;
|
|
|
|
|
|
//计算每一条指令的CRC
|
|
unsigned int ptz_cmd_before_single_crc(PtzCmdBeforeData data)
|
|
{
|
|
int i = 0;
|
|
unsigned char *p;
|
|
unsigned int crc = 0;
|
|
p = (unsigned char *)&data;
|
|
for(i = 0; i < (sizeof(data)- sizeof(unsigned int)); i++)
|
|
{
|
|
crc = crc + *p;
|
|
p++;
|
|
}
|
|
return crc;
|
|
}
|
|
|
|
//计算所有指令的总效验
|
|
unsigned int ptz_cmd_before_all_crc()
|
|
{
|
|
int i = 0;
|
|
unsigned int crc = 0;
|
|
for(i = 0; i < CMD_BEFORE_AMOUNT; i++)
|
|
{
|
|
crc = crc + BeforeData[i].crc;
|
|
}
|
|
return crc;
|
|
}
|
|
|
|
|
|
char ptz_cmd_before_data_save()
|
|
{
|
|
char i;
|
|
PtzCmdBeforeData BeforeData_a[CMD_BEFORE_AMOUNT + 1];
|
|
|
|
for(i = 0; i < CMD_BEFORE_SAVE_FLASH_NUM; i++)
|
|
{
|
|
memset(BeforeData_a, 0, sizeof(BeforeData_a));
|
|
write_many_data(sizeof(BeforeData),(unsigned char *)BeforeData, CMD_BEFORE_FLASH_ADD);
|
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
Flash_Read((unsigned char *)BeforeData_a, CMD_BEFORE_FLASH_ADD, sizeof(BeforeData));
|
|
if(memcmp(BeforeData, BeforeData_a, sizeof(BeforeData)) == 0)//判断写入数据是否正确
|
|
{
|
|
return 1;
|
|
}
|
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
char ptz_cmd_before_data_erase()
|
|
{
|
|
char i;
|
|
PtzCmdBeforeData BeforeData_a[CMD_BEFORE_AMOUNT + 1];
|
|
|
|
memset(BeforeData, 0, sizeof(BeforeData));
|
|
for(i = 0; i < CMD_BEFORE_SAVE_FLASH_NUM; i++)
|
|
{
|
|
memset(BeforeData_a, 0, sizeof(BeforeData_a));
|
|
write_many_data(sizeof(BeforeData),(unsigned char *)BeforeData, CMD_BEFORE_FLASH_ADD);
|
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
Flash_Read((unsigned char *)BeforeData_a, CMD_BEFORE_FLASH_ADD, sizeof(BeforeData));
|
|
if(memcmp(BeforeData, BeforeData_a, sizeof(BeforeData)) == 0)//判断写入数据是否正确
|
|
{
|
|
return 1;
|
|
}
|
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
char ptz_cmd_before_data_read()
|
|
{
|
|
memset(BeforeData, 0, sizeof(BeforeData));
|
|
//读取数据
|
|
Flash_Read((unsigned char *)BeforeData, CMD_BEFORE_FLASH_ADD, sizeof(BeforeData));
|
|
//判断总效验码
|
|
if(BeforeData[CMD_BEFORE_AMOUNT].crc == ptz_cmd_before_all_crc())
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
char ptz_cmd_before_mode(char dev, PTZ_DATA_PACK *pack)
|
|
{
|
|
int i;
|
|
switch(pack->command[1])
|
|
{
|
|
case CMD_BEFORE_SAVE_OFF://0关闭
|
|
g_ptz.cmd_before_handle_swtich = CMD_BEFORE_SAVE_OFF;
|
|
return 1;
|
|
break;
|
|
|
|
case CMD_BEFORE_SAVE_ON://1进入指令保存操作状态
|
|
g_ptz.cmd_before_handle_swtich = CMD_BEFORE_SAVE_ON;
|
|
return 1;
|
|
break;
|
|
|
|
case CMD_BEFORE_SAVE_SAVE:///2保存所有指令
|
|
if(g_ptz.cmd_before_handle_swtich == CMD_BEFORE_SAVE_ON)
|
|
{
|
|
|
|
for(i = 0; i < CMD_BEFORE_AMOUNT; i++)
|
|
{//计算每个指令对应的效验码
|
|
BeforeData[i].crc = ptz_cmd_before_single_crc(BeforeData[i]);
|
|
}
|
|
//计算总效验码
|
|
BeforeData[CMD_BEFORE_AMOUNT].crc = ptz_cmd_before_all_crc();
|
|
return ptz_cmd_before_data_save();
|
|
}
|
|
break;
|
|
|
|
case CMD_BEFORE_SAVE_ERASE://2擦除所有保存指令
|
|
if(g_ptz.cmd_before_handle_swtich == CMD_BEFORE_SAVE_ON)
|
|
{
|
|
cmd_before_count = 0;
|
|
memset(BeforeData, 0, sizeof(BeforeData));
|
|
return ptz_cmd_before_data_erase();
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
void ptz_cmd_before_start()
|
|
{
|
|
int i;
|
|
if(ptz_cmd_before_data_read() == 1)
|
|
{
|
|
for(i = 0; i < CMD_BEFORE_AMOUNT; i++)
|
|
{
|
|
if(BeforeData[i].swtich != CMD_BEFORE_ON)
|
|
{//指令无效
|
|
break;
|
|
}
|
|
if(BeforeData[i].crc != ptz_cmd_before_single_crc(BeforeData[i]))
|
|
{//单个效验码不正确
|
|
break;
|
|
}
|
|
//处理指令
|
|
if(BeforeData[i].cmd_dev == PTZ_UDP)
|
|
{
|
|
memcpy(&ptz_from, &BeforeData[i].cmd_from, ptz_fromlen);
|
|
ptz_fromlen = BeforeData[i].cmd_fromlen;
|
|
}
|
|
ptz_data_pack_process(BeforeData[i].cmd_dev, (PTZ_DATA_PACK *)BeforeData[i].cmd_data);
|
|
cmd_before_count ++;
|
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|
}
|
|
}
|
|
}
|
|
|