MW22-02A/APP/Service/service_cmdpreprocess.c

165 lines
4.1 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#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"
/********<2A><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ijЩ<C4B3><D0A9><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>********/
PtzCmdBeforeData BeforeData[CMD_BEFORE_AMOUNT + 1];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
unsigned char cmd_before_count;
//<2F><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
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)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
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)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
return 1;
}
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
return 0;
}
char ptz_cmd_before_data_read()
{
memset(BeforeData, 0, sizeof(BeforeData));
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Flash_Read((unsigned char *)BeforeData, CMD_BEFORE_FLASH_ADD, sizeof(BeforeData));
//<2F>ж<EFBFBD><D0B6><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
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<>ر<EFBFBD>
g_ptz.cmd_before_handle_swtich = CMD_BEFORE_SAVE_OFF;
return 1;
break;
case CMD_BEFORE_SAVE_ON://1<><31><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
g_ptz.cmd_before_handle_swtich = CMD_BEFORE_SAVE_ON;
return 1;
break;
case CMD_BEFORE_SAVE_SAVE:///2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
if(g_ptz.cmd_before_handle_swtich == CMD_BEFORE_SAVE_ON)
{
for(i = 0; i < CMD_BEFORE_AMOUNT; i++)
{//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
BeforeData[i].crc = ptz_cmd_before_single_crc(BeforeData[i]);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
BeforeData[CMD_BEFORE_AMOUNT].crc = ptz_cmd_before_all_crc();
return ptz_cmd_before_data_save();
}
break;
case CMD_BEFORE_SAVE_ERASE://2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ָ<EFBFBD><D6B8>
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)
{//ָ<><D6B8><EFBFBD><EFBFBD>Ч
break;
}
if(BeforeData[i].crc != ptz_cmd_before_single_crc(BeforeData[i]))
{//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EBB2BB>ȷ
break;
}
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
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);
}
}
}