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

622 lines
20 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#include "service_presetbitscan.h"
#include "bsp_os.h"
#include "ptz_header_file.h"
static BSP_OS_SEM ptz_preset_bit_crc_mutex;
PresetBitScan g_preset_bit_scan;
/////<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB>Ӧ<EFBFBD><D3A6>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
///<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB>Ӧ<EFBFBD><D3A6>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
unsigned int ptz_preset_bit_crc(PresetBit bit)
{
BSP_OS_SemWait(&ptz_preset_bit_crc_mutex, 0u);
float crc1 = 0;
unsigned int crc = 0;
crc1 = bit.hori_angle;
crc1 = crc1 + bit.vert_angle;
crc1 = crc1 + bit.hori_scan_speed;
crc1 = crc1 + bit.vert_scan_speed;
crc1 = crc1 + bit.zoom_v;
crc1 = crc1 + bit.focus_v;
crc1 = crc1 + bit.step_stop_time;
crc1 = crc1 + bit.enable;
BSP_OS_SemPost(&ptz_preset_bit_crc_mutex);
crc = (unsigned int)crc1;
return crc;
}
///<2F><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
char ptz_preset_bit_save(PresetBit bit, unsigned int num)
{
unsigned int write_add;
write_add = PRESET_BIT_FIRST_FLASH_ADD + sizeof(PresetBit) * num;
w25q128_random_write(write_add, PRESET_BIT_CACHE_FLASH_ADD, (char *)&bit, sizeof(PresetBit));
return 1;
}
PresetBit ptz_preset_bit_read(unsigned int num)
{
unsigned int read_add;
PresetBit bit;
char flag = 0;
read_add = PRESET_BIT_FIRST_FLASH_ADD + sizeof(PresetBit) * num;
Flash_Read((unsigned char *)&bit,read_add,sizeof(PresetBit));
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
if(isnan(bit.hori_angle) == 1)
{
bit.hori_angle = 0;
flag = 1;
}
if(isnan(bit.vert_angle) == 1)
{
bit.vert_angle = 0;
flag = 1;
}
if(isnan(bit.hori_scan_speed) == 1)
{
bit.hori_scan_speed = 0;
flag = 1;
}
if(isnan(bit.vert_scan_speed) == 1)
{
bit.vert_scan_speed = 0;
flag = 1;
}
if(isnan(bit.step_stop_time) == 1)
{
bit.step_stop_time = 0;
flag = 1;
}
if(isnan(bit.enable) == 1)
{
bit.enable = 0;
flag = 1;
}
if(isnan(bit.crc) == 1)
{
bit.crc = 0;
flag = 1;
}
if(flag == 1)
{
bit.crc = ptz_preset_bit_crc(bit);
}
return bit;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ
void ptz_preset_bit_all_erase()
{
Flash_Erase_Block(w25q128_add_to_block_sector(PRESET_BIT_FIRST_FLASH_ADD).block);
Flash_Erase_Block(w25q128_add_to_block_sector(PRESET_BIT_FIRST_FLASH_ADD).block + 1);
}
//<2F><>̨Ԥ<CCA8><D4A4>λɨ<CEBB><C9A8>
static void ptz_preset_bit_scan_task()
{
static short int scan_order;//ɨ<><C9A8>˳<EFBFBD><CBB3>
static unsigned short int stop_time;
unsigned int i = 0;
unsigned int j = 0;
static PresetBit bit;
while(1)
{
switch(g_preset_bit_scan.state)
{
case PRESET_BIT_SCAN_CLOSE_B://ɨ<><C9A8><EFBFBD>ر<EFBFBD>
g_preset_bit_scan.state_a = 0;
break;
case PRESET_BIT_SCAN_START://ɨ<><C9A8><EFBFBD>򿪣<EFBFBD><F2BFAAA3>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
if(g_preset_bit_scan.start_num <= g_preset_bit_scan.end_num)
{
scan_order = 1;//<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
}
else
{
scan_order = -1;//<2F>ɴ<EFBFBD><C9B4><EFBFBD>Сɨ<D0A1><C9A8>
}
//<2F>ж<EFBFBD><D0B6><EFBFBD>ʼԤ<CABC><D4A4>λ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ֮<CEBB><D6AE><EFBFBD>ж<EFBFBD><D0B6>ٿ<EFBFBD><D9BF>õ<EFBFBD>Ԥ<EFBFBD><D4A4>λ
j = 0;
i = 0;
if(scan_order == -1)
{
for(i = g_preset_bit_scan.end_num; i <= g_preset_bit_scan.start_num; i++)
{
//<2F><>FLASH<53><48>ȡԤ<C8A1><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
bit = ptz_preset_bit_read(i);
if(bit.enable == PRESET_BIT_ENABLE && bit.crc == ptz_preset_bit_crc(bit))
{
j ++;//<2F>ж<EFBFBD><D0B6>ж<EFBFBD><D0B6>ٿ<EFBFBD><D9BF><EFBFBD>Ԥ<EFBFBD><D4A4>λ
}
}
}
if(scan_order == 1)
{
for(i = g_preset_bit_scan.start_num; i <= g_preset_bit_scan.end_num; i++)
{
//<2F><>FLASH<53><48>ȡԤ<C8A1><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
bit = ptz_preset_bit_read(i);
if(bit.enable == PRESET_BIT_ENABLE && bit.crc == ptz_preset_bit_crc(bit))
{
j ++;//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>п<EFBFBD><D0BF>õ<EFBFBD>Ԥ<EFBFBD><D4A4>λ
}
}
}
if(j == 0)//û<>п<EFBFBD><D0BF><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ֱ<EFBFBD>ӹر<D3B9>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8>
{
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
}
else//<2F>п<EFBFBD><D0BF><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.start_num;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 1;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
break;
case PRESET_BIT_SCAN_START + 1://ת<><D7AA>ָ<EFBFBD><D6B8>Ԥ<EFBFBD><D4A4>λ
//<2F><>FLASH<53><48>ȡԤ<C8A1><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
bit = ptz_preset_bit_read(g_preset_bit_scan.actual_num);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7>
g_preset_bit_scan.hori_speed =bit.hori_scan_speed;
if(g_preset_bit_scan.hori_speed < PTZ_HORI_MIN_SPEED)
{
g_preset_bit_scan.hori_speed = PTZ_HORI_MIN_SPEED;
}
if(g_preset_bit_scan.hori_speed > PTZ_HORI_MAX_SPEED)
{
g_preset_bit_scan.hori_speed = PTZ_HORI_MAX_SPEED;
}
g_preset_bit_scan.vert_speed = bit.vert_scan_speed;
if(g_preset_bit_scan.vert_speed < PTZ_VERT_MIN_SPEED)
{
g_preset_bit_scan.vert_speed = PTZ_VERT_MIN_SPEED;
}
if(g_preset_bit_scan.vert_speed > PTZ_VERT_MAX_SPEED)
{
g_preset_bit_scan.vert_speed = PTZ_VERT_MAX_SPEED;
}
//<2F><>ȡֹͣʱ<D6B9><CAB1>
g_preset_bit_scan.stop_time = bit.step_stop_time;
//<2F>ж<EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Լ<EFBFBD><D4BC>ж<EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч,<2C><>Ч
if((bit.crc == ptz_preset_bit_crc(bit)) && (bit.enable == PRESET_BIT_ENABLE))
{//<2F><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ
g_ptz.vert_angle_control = bit.vert_angle;
g_ptz.vert_speed_control = g_preset_bit_scan.vert_speed;
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
g_ptz.hori_angle_control = bit.hori_angle;
g_ptz.hori_speed_control = g_preset_bit_scan.hori_speed;
ptz_hori_rotate_plan(PTZ_HORI_MIN_DISTANCE);
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_MIN_DISTANCE;
g_ptz.hori_arrive_flag = 1;
g_ptz.vert_arrive_flag = 1;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 2;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
else
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.actual_num + scan_order;
if(scan_order == 1)
{
if(g_preset_bit_scan.actual_num > g_preset_bit_scan.end_num)
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.start_num;
}
}
else //order == -1
{
if(g_preset_bit_scan.actual_num < g_preset_bit_scan.end_num)
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.start_num;
}
}
}
break;
case PRESET_BIT_SCAN_START + 2://<2F>ж<EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD>Ƿ񵽴<C7B7>
if(g_ptz.hori_arrive_flag == 0 &&
g_ptz.vert_arrive_flag == 0)
{
ptz_preset_bit_scan_location_return_return();//<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ԥ<EFBFBD><D4A4>λ
stop_time = 0;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 3;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
break;
case PRESET_BIT_SCAN_START + 3://<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʼֹͣ<CDA3><D6B9>ʱ
for(stop_time = 0; stop_time < g_preset_bit_scan.stop_time; stop_time ++)
{
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_START + 3)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ʵʱ<CAB5><CAB1>ӦԤ<D3A6><D4A4>λֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>رյ<D8B1>ָ<EFBFBD><D6B8>
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
}
else
{
stop_time = 0;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
break;
}
}
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_START + 3)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ʵʱ<CAB5><CAB1>ӦԤ<D3A6><D4A4>λֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>رյ<D8B1>ָ<EFBFBD><D6B8>
stop_time = 0;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 4;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
break;
case PRESET_BIT_SCAN_START + 4://ʱ<><EFBFBD>׼<EFA3AC><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԥ<EFBFBD><D4A4>λ
g_preset_bit_scan.actual_num = g_preset_bit_scan.actual_num + scan_order;
if(scan_order ==1)
{
if(g_preset_bit_scan.actual_num > g_preset_bit_scan.end_num)
{
ptz_preset_bit_scan_end_return_return();//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
if(g_preset_bit_scan.mode == 1)
{
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
break;
}
else
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.start_num;
}
}
}
else //order == -1
{
if(g_preset_bit_scan.actual_num < g_preset_bit_scan.end_num)
{
ptz_preset_bit_scan_end_return_return();//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
if(g_preset_bit_scan.mode == 1)
{
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
break;
}
else
{
g_preset_bit_scan.actual_num = g_preset_bit_scan.start_num;
}
}
}
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 1;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
break;
case PRESET_BIT_SCAN_PAUSE_A://<2F><>ͣɨ<CDA3><C9A8>
if(g_preset_bit_scan.last_state > 0
&& g_preset_bit_scan.last_state <= PRESET_BIT_SCAN_START + 4)
{
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_BRAKE;
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_BRAKE;
g_preset_bit_scan.save_state = g_preset_bit_scan.state_a;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_PAUSE_B;
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
if(g_preset_bit_scan.last_state == 0)
{
g_preset_bit_scan.state = 0;
}
break;
case PRESET_BIT_SCAN_PAUSE_B://ɨ<><C9A8><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
break;
case PRESET_BIT_SCAN_RECOVERY://ɨ<><C9A8><EFBFBD>ָ<EFBFBD>
if(g_preset_bit_scan.state_a == PRESET_BIT_SCAN_PAUSE_A ||
g_preset_bit_scan.state_a == PRESET_BIT_SCAN_PAUSE_B)
{
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
if(g_preset_bit_scan.save_state == PRESET_BIT_SCAN_START)
{
g_preset_bit_scan.state = PRESET_BIT_SCAN_START;
}
else
{
g_preset_bit_scan.state = PRESET_BIT_SCAN_START + 1;
}
g_preset_bit_scan.state_a = g_preset_bit_scan.state;
}
break;
case PRESET_BIT_SCAN_CLOSE_A://ɨ<><C9A8><EFBFBD>ر<EFBFBD>
if(g_preset_bit_scan.last_state != 0)
{
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_DEC_BRAKE_A;
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_DEC_BRAKE_A;
g_preset_bit_scan.last_state = g_preset_bit_scan.state;
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_B;
}
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, 20u);
}
}
//<2F><>̨Ԥ<CCA8><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static OS_STK task_preset_bit_scan_stk[TASK_PRESET_BIT_SCAN_STK_SIZE];
static void creat_task_preset_bit_scan(void)
{
CPU_INT08U task_err;
CPU_INT08U name_err;
task_err = OSTaskCreateExt((void (*)(void *)) ptz_preset_bit_scan_task,
(void *) 0,
(OS_STK *)&task_preset_bit_scan_stk[TASK_PRESET_BIT_SCAN_STK_SIZE - 1],
(INT8U ) TASK_PRESET_BIT_SCAN_PRIO,
(INT16U ) TASK_PRESET_BIT_SCAN_PRIO,
(OS_STK *)&task_preset_bit_scan_stk[0],
(INT32U ) TASK_PRESET_BIT_SCAN_STK_SIZE,
(void *) 0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
#if (OS_TASK_NAME_EN > 0)
OSTaskNameSet(TASK_PRESET_BIT_SCAN_PRIO, "ptz_preset_bit_scan_task", &name_err);
#endif
}
/******************************************************************************/
void init_preset_bit_scan_module(void)
{
creat_task_preset_bit_scan();
}
//Ԥ<><D4A4>λɨ<CEBB><C9A8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ش<EFBFBD>
void ptz_preset_bit_scan_end_return_return()
{
unsigned char preset_bit[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
preset_bit[1] = g_ptz.address;
preset_bit[2] = 0x9f;
preset_bit[3] = PRESET_BIT_SCAN_END_RETURN_DATA;//<2F><>ʾ<EFBFBD>ش<EFBFBD>,һ<><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
preset_bit[4] = g_preset_bit_scan.start_num;//Ԥ<><D4A4>λ<EFBFBD><CEBB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
preset_bit[5] = g_preset_bit_scan.end_num;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
preset_bit[6] = MotorCalPelcoDSUM(preset_bit,sizeof(preset_bit));
if(g_ptz.preset_bit_return.preset_bit_scan_end_udp_switch == PRESET_BIT_RETURN_ON)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_udp_data_aim(preset_bit, sizeof(preset_bit),
(struct sockaddr*)&g_ptz.preset_bit_return.preset_bit_scan_end_from, g_ptz.preset_bit_return.preset_bit_scan_end_fromlen);
}
if(g_ptz.preset_bit_return.preset_bit_scan_end_uart_422_switch == PRESET_BIT_RETURN_ON)
{
ptz_send_data(PTZ_UART_422, preset_bit, sizeof(preset_bit));
}
if(g_ptz.preset_bit_return.preset_bit_scan_end_uart_485_switch == PRESET_BIT_RETURN_ON)
{
ptz_send_data(PTZ_UART_485, preset_bit, sizeof(preset_bit));
}
}
void ptz_preset_bit_scan_location_return_return()
{
unsigned char preset_bit[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
preset_bit[1] = g_ptz.address;
preset_bit[2] = 0x9f;
preset_bit[3] = PRESET_BIT_SCAN_LOCATION_RETURN_DATA;//<2F><>ʾ<EFBFBD>ش<EFBFBD>,һ<><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
preset_bit[4] = g_preset_bit_scan.actual_num;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
preset_bit[5] = 0;
preset_bit[6] = MotorCalPelcoDSUM(preset_bit,sizeof(preset_bit));
if(g_ptz.preset_bit_return.preset_bit_scan_location_udp_switch == PRESET_BIT_RETURN_ON)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_udp_data_aim(preset_bit, sizeof(preset_bit),
(struct sockaddr*)&g_ptz.preset_bit_return.preset_bit_scan_location_from, g_ptz.preset_bit_return.preset_bit_scan_location_fromlen);
}
if(g_ptz.preset_bit_return.preset_bit_scan_location_uart_422_switch == PRESET_BIT_RETURN_ON)
{
ptz_send_data(PTZ_UART_422, preset_bit, sizeof(preset_bit));
}
if(g_ptz.preset_bit_return.preset_bit_scan_location_uart_485_switch == PRESET_BIT_RETURN_ON)
{
ptz_send_data(PTZ_UART_485, preset_bit, sizeof(preset_bit));
}
}
void ptz_preset_bit_location_return_save( unsigned int num, char dev)
{
if(g_ptz.preset_bit_return.preset_bit_location_udp_switch == PRESET_BIT_RETURN_ON ||
g_ptz.preset_bit_return.preset_bit_location_uart_422_switch == PRESET_BIT_RETURN_ON||
g_ptz.preset_bit_return.preset_bit_location_uart_485_switch == PRESET_BIT_RETURN_ON)
{
//<2F><>ֹ<EFBFBD>Ƕȶ<C7B6>λ<EFBFBD>ش<EFBFBD><D8B4><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ش<EFBFBD><D8B4><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB>λ<EFBFBD>ش<EFBFBD>ֻ<EFBFBD>ܻش<DCBB>һ<EFBFBD><D2BB>
g_ptz.location_return.hori_cmd = 0;
g_ptz.location_return.vert_cmd = 0;
g_ptz.preset_bit_return.preset_bit_location_cmd = 1;
//<2F><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
g_ptz.preset_bit_return.preset_bit_location_num = num;
switch(dev)
{
case PTZ_UDP:
g_ptz.preset_bit_return.preset_bit_location_cmd_source = PRESET_BIT_LOCATION_UDP_CMD_ON;
break;
case PTZ_UART_422:
g_ptz.preset_bit_return.preset_bit_location_cmd_source = PRESET_BIT_LOCATION_UART_422_CMD_ON;
break;
case PTZ_UART_485:
g_ptz.preset_bit_return.preset_bit_location_cmd_source = PRESET_BIT_LOCATION_UART_485_CMD_ON;
break;
}
}
}
void ptz_preset_bit_location_return_return()
{
unsigned char preset_bit[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
if(g_ptz.preset_bit_return.preset_bit_location_cmd < 1)
{
return;
}
else
{
g_ptz.preset_bit_return.preset_bit_location_cmd ++;
}
preset_bit[1] = g_ptz.address;
preset_bit[2] = 0x9f;
preset_bit[3] = PRESET_BIT_LOCATION_RETURN_DATA;//<2F><>ʾ<EFBFBD>ش<EFBFBD>,һ<><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
preset_bit[4] = g_ptz.preset_bit_return.preset_bit_location_num;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
preset_bit[5] = 0;
preset_bit[6] = MotorCalPelcoDSUM(preset_bit,sizeof(preset_bit));
if(g_ptz.preset_bit_return.preset_bit_location_cmd == 3)
{
if(g_ptz.preset_bit_return.preset_bit_location_udp_switch == PRESET_BIT_RETURN_ON &&
g_ptz.preset_bit_return.preset_bit_location_cmd_source == PRESET_BIT_LOCATION_UDP_CMD_ON)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_udp_data_aim(preset_bit, sizeof(preset_bit),
(struct sockaddr*)&g_ptz.preset_bit_return.preset_bit_location_from, g_ptz.preset_bit_return.preset_bit_location_fromlen);
}
if(g_ptz.preset_bit_return.preset_bit_location_uart_422_switch == PRESET_BIT_RETURN_ON &&
g_ptz.preset_bit_return.preset_bit_location_cmd_source == PRESET_BIT_LOCATION_UART_422_CMD_ON)
{
ptz_send_data(PTZ_UART_422, preset_bit, sizeof(preset_bit));
}
if(g_ptz.preset_bit_return.preset_bit_location_uart_485_switch == PRESET_BIT_RETURN_ON &&
g_ptz.preset_bit_return.preset_bit_location_cmd_source == PRESET_BIT_LOCATION_UART_485_CMD_ON)
{
ptz_send_data(PTZ_UART_485, preset_bit, sizeof(preset_bit));
}
g_ptz.preset_bit_return.preset_bit_location_cmd = 0;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨Ԥ<CCA8><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void presetbit_data_return(char dev, unsigned char ScanNum)
{
unsigned char presetbit[7];
unsigned short int data;
PresetBit preset_bit;
//<2F><>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
preset_bit = ptz_preset_bit_read(ScanNum);
//Ԥ<><D4A4>λˮƽ<CBAE>Ƕ<EFBFBD>
data = (unsigned short int)(preset_bit.hori_angle * 100 + 0.5);
memset(presetbit,0,sizeof(presetbit));
presetbit[0] = 0xff;
presetbit[1] = g_ptz.address;
presetbit[2] = PRESET_BIT_HORI_ANGLE;//0xe4
presetbit[3] = ScanNum;
presetbit[4] = (unsigned char)(data >> 8);
presetbit[5] = (unsigned char)(data & 0x00ff);
presetbit[6] = MotorCalPelcoDSUM(presetbit,sizeof(presetbit));
ptz_send_data(dev, presetbit, sizeof(presetbit));
//Ԥ<><D4A4>λ<EFBFBD><CEBB>ֱ<EFBFBD>Ƕ<EFBFBD>
data = (unsigned short int)(preset_bit.vert_angle * 100 + 0.5);
memset(presetbit,0,sizeof(presetbit));
presetbit[0] = 0xff;
presetbit[1] = g_ptz.address;
presetbit[2] = PRESET_BIT_VERT_ANGLE;//0xa1
presetbit[3] = ScanNum;
presetbit[4] = (unsigned char)(data >> 8);
presetbit[5] = (unsigned char)(data & 0x00ff);
presetbit[6] = MotorCalPelcoDSUM(presetbit,sizeof(presetbit));
ptz_send_data(dev, presetbit, sizeof(presetbit));
//Ԥ<><D4A4>λֹͣʱ<D6B9><CAB1>
data = (unsigned short int)(preset_bit.step_stop_time);
memset(presetbit,0,sizeof(presetbit));
presetbit[0] = 0xff;
presetbit[1] = g_ptz.address;
presetbit[2] = PRESET_BIT_STOPTIME;//0xa2
presetbit[3] = ScanNum;
presetbit[4] = (unsigned char)(data >> 8);
presetbit[5] = (unsigned char)(data & 0x00ff);
presetbit[6] = MotorCalPelcoDSUM(presetbit,sizeof(presetbit));
ptz_send_data(dev, presetbit, sizeof(presetbit));
//Ԥ<><D4A4>λˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ֱ<EFBFBD>ٶ<EFBFBD>
memset(presetbit,0,sizeof(presetbit));
presetbit[0] = 0xff;
presetbit[1] = g_ptz.address;
presetbit[2] = PRESET_BIT_SPEED;//0xa3
presetbit[3] = ScanNum;
presetbit[4] = (unsigned char)(preset_bit.hori_scan_speed * 10);
presetbit[5] = (unsigned char)(preset_bit.vert_scan_speed * 10);
presetbit[6] = MotorCalPelcoDSUM(presetbit,sizeof(presetbit));
ptz_send_data(dev, presetbit, sizeof(presetbit));
//Ԥ<><D4A4>λʹ<CEBB><CAB9>״̬
memset(presetbit,0,sizeof(presetbit));
presetbit[0] = 0xff;
presetbit[1] = g_ptz.address;
presetbit[2] = PRESET_BIT_ENABLE;//0xa4
presetbit[3] = ScanNum;
presetbit[4] = preset_bit.enable;//ʹ<><CAB9>״̬
presetbit[6] = MotorCalPelcoDSUM(presetbit,sizeof(presetbit));
ptz_send_data(dev, presetbit, sizeof(presetbit));
}