622 lines
20 KiB
C
622 lines
20 KiB
C
|
#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));
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|