1417 lines
47 KiB
C
1417 lines
47 KiB
C
|
#include "bsp_os.h"
|
|||
|
#include "ptz_header_file.h"
|
|||
|
#include "enet_to_udp.h"
|
|||
|
#include "service_areascan.h"
|
|||
|
|
|||
|
static BSP_OS_SEM ptz_area_crc_mutex;
|
|||
|
|
|||
|
PtzArea g_area[AREA_AMOUNT];
|
|||
|
AreaScan g_area_scan;
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
void ptz_send_area_data(char dev, unsigned short int ScanNum)
|
|||
|
{
|
|||
|
unsigned char AreaData[7];
|
|||
|
unsigned short int data;
|
|||
|
|
|||
|
//ˮƽ<CBAE>߽<EFBFBD>A
|
|||
|
data = (unsigned short int)(g_area[ScanNum].hori_start_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_HA;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
ptz_send_data(dev, AreaData, sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//ˮƽ<CBAE>߽<EFBFBD>B
|
|||
|
data = (unsigned short int)(g_area[ScanNum].hori_end_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_HB;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] =MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//<2F><>ֱ<EFBFBD>߽<EFBFBD>A
|
|||
|
data = (unsigned short int)(g_area[ScanNum].vert_start_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_VA;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//<2F><>ֱ<EFBFBD>߽<EFBFBD>B
|
|||
|
data = (unsigned short int)(g_area[ScanNum].vert_end_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_VB;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
data = (unsigned short int)(g_area[ScanNum].hori_step_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_INT_H;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
data = (unsigned short int)(g_area[ScanNum].vert_step_angle * 100);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_INT_V;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//ת<><D7AA><EFBFBD>ٶ<EFBFBD>
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_SPEED;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(g_area[ScanNum].hori_scan_speed * 10);
|
|||
|
AreaData[5] = (unsigned char)(g_area[ScanNum].vert_scan_speed * 10);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//ɨ<><C9A8>ֹͣʱ<D6B9><CAB1>
|
|||
|
data = (unsigned short int)(g_area[ScanNum].step_stop_time);
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_STOP_TIME;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = (unsigned char)(data >> 8);
|
|||
|
AreaData[5] = (unsigned char)(data & 0x00ff);
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData,sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD>跽ʽ
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_WAY;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = g_area[ScanNum].scan_mode;
|
|||
|
AreaData[5] = 0;
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData, sizeof(AreaData));
|
|||
|
|
|||
|
|
|||
|
//<2F><>̨ɨ<CCA8><C9A8>ʹ<EFBFBD><CAB9>
|
|||
|
memset(AreaData,0,sizeof(AreaData));
|
|||
|
AreaData[0] = 0xff;
|
|||
|
AreaData[1] = g_ptz.address;
|
|||
|
AreaData[2] = SCAN_ENABLE;
|
|||
|
AreaData[3] = ScanNum;
|
|||
|
AreaData[4] = g_area[ScanNum].enable;
|
|||
|
AreaData[5] = 0;
|
|||
|
AreaData[6] = MotorCalPelcoDSUM(AreaData,sizeof(AreaData));
|
|||
|
ptz_send_data(dev,AreaData, sizeof(AreaData));
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
char ptz_area_auto_enable(PtzArea area)
|
|||
|
{
|
|||
|
if(area.hsa == 1 &&
|
|||
|
area.hea == 1 &&
|
|||
|
area.vsa == 1 &&
|
|||
|
area.vea == 1 &&
|
|||
|
area.h_step == 1 &&
|
|||
|
area.v_step == 1)
|
|||
|
{
|
|||
|
return 1;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF> <20><>Ӧ<EFBFBD><D3A6>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
unsigned int ptz_area_crc(PtzArea area)
|
|||
|
{
|
|||
|
BSP_OS_SemWait(&ptz_area_crc_mutex, 0u);
|
|||
|
float crc1 = 0;
|
|||
|
unsigned int crc = 0;
|
|||
|
|
|||
|
crc1 = crc1 + area.hori_start_angle;//ˮƽ<CBAE><C6BD>ʼ<EFBFBD>߽<EFBFBD>
|
|||
|
crc1 = crc1 + area.hsa;//ˮƽ<CBAE>߽<EFBFBD>A<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.hori_end_angle;//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>
|
|||
|
crc1 = crc1 + area.hea;//ˮƽ<CBAE>߽<EFBFBD>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.vert_start_angle;//<2F><>ֱ<EFBFBD><D6B1>ʼ<EFBFBD>߽<EFBFBD>
|
|||
|
crc1 = crc1 + area.vsa;//<2F><>ֱ<EFBFBD>߽<EFBFBD>A<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.vert_end_angle;//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>
|
|||
|
crc1 = crc1 + area.vea;//<2F><>ֱ<EFBFBD>߽<EFBFBD>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.hori_step_angle;//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
crc1 = crc1 + area.h_step;//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.vert_step_angle;//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
crc1 = crc1 + area.v_step;//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31><EFBFBD>á<EFBFBD>0δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
crc1 = crc1 + area.hori_scan_speed;//ˮƽת<C6BD><D7AA><EFBFBD>ٶ<EFBFBD>
|
|||
|
crc1 = crc1 + area.vert_scan_speed;//<2F><>ֱת<D6B1><D7AA><EFBFBD>ٶ<EFBFBD>
|
|||
|
crc1 = crc1 + area.step_stop_time;//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ÿ<EFBFBD><C3BF>λ<EFBFBD>õ<EFBFBD>ֹͣʱ<D6B9>䣬<EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms<6D><73><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>ֹͣʱ<D6B9><CAB1>
|
|||
|
crc1 = crc1 + area.scan_mode;//0Ĭ<30><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>裬1<E8A3AC><31><EFBFBD><EFBFBD>ɨ<EFBFBD>裬2<E8A3AC><32><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
crc1 = crc1 + area.enable;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч
|
|||
|
|
|||
|
BSP_OS_SemPost(&ptz_area_crc_mutex);
|
|||
|
crc = (unsigned int)crc1;
|
|||
|
return crc;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
char ptz_area_save()
|
|||
|
{
|
|||
|
char i,j;
|
|||
|
static PtzArea area[AREA_AMOUNT];
|
|||
|
|
|||
|
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>
|
|||
|
for(i = 0; i < AREA_SAVE_FLASH_NUM; i++)
|
|||
|
{
|
|||
|
memset(area, 0, sizeof(area));
|
|||
|
write_many_data(sizeof(g_area),(unsigned char *)g_area,AREA_FLASH_ADD);
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|||
|
Flash_Read((unsigned char *)area,AREA_FLASH_ADD,sizeof(g_area));
|
|||
|
if(memcmp(g_area, area, sizeof(g_area)) == 0)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|||
|
}
|
|||
|
//д<>뱸<EFBFBD>ݴ洢<DDB4><E6B4A2>
|
|||
|
for(j = 0; j < AREA_SAVE_FLASH_NUM; j++)
|
|||
|
{
|
|||
|
memset(area, 0, sizeof(area));
|
|||
|
write_many_data(sizeof(g_area),(unsigned char *)g_area,AREA_BACKUP_FLASH_ADD);
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|||
|
Flash_Read((unsigned char *)area,AREA_BACKUP_FLASH_ADD,sizeof(g_area));
|
|||
|
if(memcmp(g_area, area, sizeof(g_area)) == 0)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
|
|||
|
}
|
|||
|
if(i < AREA_SAVE_FLASH_NUM || j < AREA_SAVE_FLASH_NUM)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
|||
|
{
|
|||
|
//д<><D0B4><EFBFBD>ɹ<EFBFBD>
|
|||
|
return 1;
|
|||
|
}
|
|||
|
//д<><D0B4>ʧ<EFBFBD><CAA7>
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ**<2A>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
char ptz_area_read()
|
|||
|
{
|
|||
|
unsigned int i = 0;
|
|||
|
char flag = 0;
|
|||
|
Flash_Read((unsigned char *)g_area,AREA_FLASH_ADD,sizeof(g_area));
|
|||
|
for(i = 0; i < AREA_AMOUNT; i++)//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if(isnan(g_area[i].hori_start_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].hori_start_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].hsa) == 1)
|
|||
|
{
|
|||
|
g_area[i].hsa = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].hori_end_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].hori_end_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].hea) == 1)
|
|||
|
{
|
|||
|
g_area[i].hea = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vert_start_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].vert_start_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vsa) == 1)
|
|||
|
{
|
|||
|
g_area[i].vsa = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vert_end_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].vert_end_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vea) == 1)
|
|||
|
{
|
|||
|
g_area[i].vea = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].hori_step_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].hori_step_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].h_step) == 1)
|
|||
|
{
|
|||
|
g_area[i].h_step = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vert_step_angle) == 1)
|
|||
|
{
|
|||
|
g_area[i].vert_step_angle = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].v_step) == 1)
|
|||
|
{
|
|||
|
g_area[i].v_step = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].hori_scan_speed) == 1)
|
|||
|
{
|
|||
|
g_area[i].hori_scan_speed = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].vert_scan_speed) == 1)
|
|||
|
{
|
|||
|
g_area[i].vert_scan_speed = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].step_stop_time) == 1)
|
|||
|
{
|
|||
|
g_area[i].step_stop_time = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].scan_mode) == 1)
|
|||
|
{
|
|||
|
g_area[i].scan_mode = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].enable) == 1)
|
|||
|
{
|
|||
|
g_area[i].enable = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
if(isnan(g_area[i].crc) == 1)
|
|||
|
{
|
|||
|
g_area[i].crc = 0;
|
|||
|
flag = 1;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
if(flag == 1)
|
|||
|
{
|
|||
|
flag = 0;
|
|||
|
g_area[i].crc = ptz_area_crc(g_area[i]);//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
if(i % 10 == 0)
|
|||
|
{
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
|||
|
}
|
|||
|
}
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
static char ptz_area_data_check(PtzArea area)
|
|||
|
{
|
|||
|
if(area.crc != ptz_area_crc(area))
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if(area.enable != AREA_ENABLE)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if(area.hori_start_angle > g_ptz.hori_angleP.angle_allow_max)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if(area.hori_start_angle < g_ptz.hori_angleP.angle_allow_min)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if(area.vert_end_angle > g_ptz.vert_angleP.angle_allow_max)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if(area.vert_end_angle < g_ptz.vert_angleP.angle_allow_min)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static void ptz_area_scan_task()
|
|||
|
{
|
|||
|
short int i;
|
|||
|
float tem;
|
|||
|
while(1)
|
|||
|
{
|
|||
|
switch(g_area_scan.state)
|
|||
|
{
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
case AREA_SCAN_START://<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
if(g_area_scan.start_num >= AREA_AMOUNT)
|
|||
|
{
|
|||
|
g_area_scan.start_num = AREA_AMOUNT - 1;
|
|||
|
}
|
|||
|
if(g_area_scan.end_num >= AREA_AMOUNT)
|
|||
|
{
|
|||
|
g_area_scan.end_num = AREA_AMOUNT - 1;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>軹<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>裬ȷ<E8A3AC><C8B7>ɨ<EFBFBD><C9A8>˳<EFBFBD><CBB3>
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_MUL_SCAN)
|
|||
|
{
|
|||
|
if(g_area_scan.start_num <= g_area_scan.end_num)
|
|||
|
{
|
|||
|
g_area_scan.order = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.order = -1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><C9B4><EFBFBD>Сɨ<D0A1><C9A8>
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><DAA3>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
g_area_scan.allow_scan_area_num = 0;
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_MUL_SCAN)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{
|
|||
|
if(g_area_scan.start_num <= g_area_scan.end_num)
|
|||
|
{
|
|||
|
for(i = g_area_scan.start_num; i <= g_area_scan.end_num; i++)
|
|||
|
{
|
|||
|
if(ptz_area_data_check(g_area[i]) == 1)
|
|||
|
{
|
|||
|
g_area_scan.allow_scan_area_num ++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for(i = g_area_scan.start_num; i >= g_area_scan.end_num; i--)
|
|||
|
{
|
|||
|
if(ptz_area_data_check(g_area[i]) == 1)
|
|||
|
{
|
|||
|
g_area_scan.allow_scan_area_num ++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{
|
|||
|
if(ptz_area_data_check(g_area[g_area_scan.start_num]) == 1)
|
|||
|
{
|
|||
|
g_area_scan.allow_scan_area_num ++;
|
|||
|
}
|
|||
|
}
|
|||
|
if(g_area_scan.allow_scan_area_num > 0)
|
|||
|
{//<2F>п<EFBFBD><D0BF><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.actual_num = g_area_scan.start_num;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
g_area_scan.start_flag = 1;
|
|||
|
}
|
|||
|
else//û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>裬<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CLOSE_A;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_START + 1:
|
|||
|
if(g_area_scan.start_flag == 0)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_MUL_SCAN)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{//ֱ<>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.actual_num = g_area_scan.actual_num + g_area_scan.order;
|
|||
|
if(g_area_scan.order == 1)
|
|||
|
{
|
|||
|
if(g_area_scan.actual_num > g_area_scan.end_num)
|
|||
|
{
|
|||
|
g_area_scan.actual_num = g_area_scan.start_num;
|
|||
|
}
|
|||
|
}
|
|||
|
else //order == -1
|
|||
|
{
|
|||
|
if(g_area_scan.actual_num < g_area_scan.end_num)
|
|||
|
{
|
|||
|
g_area_scan.actual_num = g_area_scan.start_num;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
g_area_scan.start_flag = 0;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ٶ<EFBFBD><D9B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>
|
|||
|
//<2F><>ȡת<C8A1><D7AA>
|
|||
|
g_area_scan.hori_speed = g_area[g_area_scan.actual_num].hori_scan_speed;
|
|||
|
if(g_area_scan.hori_speed < PTZ_HORI_MIN_SPEED)
|
|||
|
{
|
|||
|
g_area_scan.hori_speed = PTZ_HORI_MIN_SPEED;
|
|||
|
}
|
|||
|
if(g_area_scan.hori_speed > PTZ_HORI_MAX_SPEED)
|
|||
|
{
|
|||
|
g_area_scan.hori_speed = PTZ_HORI_MAX_SPEED;
|
|||
|
}
|
|||
|
|
|||
|
g_area_scan.vert_speed = g_area[g_area_scan.actual_num].vert_scan_speed;
|
|||
|
if(g_area_scan.vert_speed < PTZ_VERT_MIN_SPEED)
|
|||
|
{
|
|||
|
g_area_scan.vert_speed = PTZ_VERT_MIN_SPEED;
|
|||
|
}
|
|||
|
if(g_area_scan.vert_speed > PTZ_VERT_MAX_SPEED)
|
|||
|
{
|
|||
|
g_area_scan.vert_speed = PTZ_VERT_MAX_SPEED;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ȡת<C8A1><D7AA><EFBFBD>߽<EFBFBD>
|
|||
|
g_area_scan.hori_start_angle = g_area[g_area_scan.actual_num].hori_start_angle;
|
|||
|
g_area_scan.hori_end_angle = g_area[g_area_scan.actual_num].hori_end_angle;
|
|||
|
g_area_scan.vert_start_angle = g_area[g_area_scan.actual_num].vert_start_angle;
|
|||
|
g_area_scan.vert_end_angle = g_area[g_area_scan.actual_num].vert_end_angle;
|
|||
|
|
|||
|
//<2F><>ȡɨ<C8A1><C9A8>ģʽ<C4A3><CABD><EFBFBD>ж<EFBFBD><D0B6>ǵ<EFBFBD><C7B5><EFBFBD>ɨ<EFBFBD>軹<EFBFBD><E8BBB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
g_area_scan.scan_mode = g_area[g_area_scan.actual_num].scan_mode;
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
g_area_scan.step_stop_time = g_area[g_area_scan.actual_num].step_stop_time;
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_area_scan.hori_step_angle = g_area[g_area_scan.actual_num].hori_step_angle;
|
|||
|
if(g_area_scan.hori_step_angle < 0)
|
|||
|
{//<2F><>ֹˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>ԶΪ<D4B6><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.hori_step_angle = g_area_scan.hori_step_angle * -1;
|
|||
|
}
|
|||
|
|
|||
|
g_area_scan.vert_step_angle = g_area[g_area_scan.actual_num].vert_step_angle;
|
|||
|
if(g_area_scan.vert_start_angle >= g_area_scan.vert_end_angle)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD>ɨ<EFBFBD>赥<EFBFBD><E8B5A5><EFBFBD>Ƕ<EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
|
|||
|
if(g_area_scan.vert_step_angle > 0)
|
|||
|
{
|
|||
|
g_area_scan.vert_step_angle = g_area_scan.vert_step_angle * -1;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>赥<EFBFBD><E8B5A5><EFBFBD>Ƕ<EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
|
|||
|
if(g_area_scan.vert_step_angle < 0)
|
|||
|
{
|
|||
|
g_area_scan.vert_step_angle = g_area_scan.vert_step_angle * -1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽһ<C6BD><D2BB><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ʹ<EFBFBD>ֱ<EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>
|
|||
|
if(g_area_scan.hori_step_angle != 0)
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ˮƽһ<C6BD><D2BB><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE>߽<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ܽǶ<DCBD>
|
|||
|
if(g_area_scan.hori_start_angle < g_area_scan.hori_end_angle)
|
|||
|
{
|
|||
|
tem = fabs(g_area_scan.hori_end_angle - g_area_scan.hori_start_angle);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tem = fabs(g_area_scan.hori_end_angle - 0) + fabs(360.0 - g_area_scan.hori_start_angle);
|
|||
|
}
|
|||
|
g_area_scan.hori_step_num_b = tem / g_area_scan.hori_step_angle;
|
|||
|
g_area_scan.hori_step_num_a = (unsigned int)(g_area_scan.hori_step_num_b + 0.5);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.hori_step_num_a = 0;
|
|||
|
}
|
|||
|
|
|||
|
if(g_area_scan.vert_step_angle != 0)
|
|||
|
{//<2F><><EFBFBD>㴹ֱ<E3B4B9>ܲ<EFBFBD><DCB2><EFBFBD>
|
|||
|
tem = fabs(g_area_scan.vert_end_angle - g_area_scan.vert_start_angle);
|
|||
|
g_area_scan.vert_step_num_b = tem / fabs(g_area_scan.vert_step_angle);
|
|||
|
g_area_scan.vert_step_num_a = (unsigned int)(g_area_scan.vert_step_num_b + 0.5);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.vert_step_num_a = 0;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
g_area_scan.hori_step_count = 0;
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
if(ptz_area_data_check(g_area[g_area_scan.actual_num]) == 1)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ɨ<EFBFBD>衣
|
|||
|
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 2;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_MUL_SCAN)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.state = AREA_SCAN_START + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
{//ֱ<>ӹر<D3B9>ɨ<EFBFBD><C9A8>
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CLOSE_A;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_START + 2://ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
|||
|
g_area_scan.hori_target_angle = g_area[g_area_scan.actual_num].hori_start_angle;
|
|||
|
g_area_scan.vert_target_angle = g_area[g_area_scan.actual_num].vert_start_angle;
|
|||
|
|
|||
|
g_area_scan.hori_step_count = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
g_area_scan.step_stop_time_count = 0;
|
|||
|
g_area_scan.vert_scan_dir = 1;
|
|||
|
g_area_scan.hori_scan_dir = 1;
|
|||
|
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.hori_angle_control = g_area_scan.hori_target_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_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;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_ptz.vert_arrive_flag = 1;
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_START + 3://<2F>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B5BDB4><EFBFBD>ʼλ<CABC><CEBB>
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{//<2F>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
|||
|
//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ģʽ<C4A3><CABD><EFBFBD>ж<EFBFBD><D0B6>ǵ<EFBFBD><C7B5><EFBFBD>ɨ<EFBFBD>軹<EFBFBD><E8BBB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
if(g_area_scan.scan_mode == AREA_SCAN_MODE_STEP)
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
|
|||
|
if(fabs(g_area_scan.hori_start_angle - g_area_scan.hori_end_angle) == 360.0)
|
|||
|
{//360<36><30>ȫ<EFBFBD><C8AB>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
case AREA_SCAN_STEP://<2F><><EFBFBD><EFBFBD>ֹͣʱ<D6B9><CAB1><EFBFBD><EFBFBD>ʱ
|
|||
|
//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD>赽λ<E8B5BD>ش<EFBFBD>
|
|||
|
ptz_area_step_scan_location_return_return(PTZ_HORI);
|
|||
|
ptz_area_step_scan_location_return_return(PTZ_VERT);
|
|||
|
for(g_area_scan.step_stop_time_count = 0; g_area_scan.step_stop_time_count < g_area_scan.step_stop_time; g_area_scan.step_stop_time_count ++)
|
|||
|
{
|
|||
|
if(g_area_scan.state == AREA_SCAN_STEP)
|
|||
|
{//<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><C9A8>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>رյ<D8B1>ָ<EFBFBD><D6B8>
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.step_stop_time_count = 0;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if(g_area_scan.state == AREA_SCAN_STEP)
|
|||
|
{//<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>
|
|||
|
//ֹͣʱ<D6B9>䵽<EFBFBD><E4B5BD>
|
|||
|
g_area_scan.step_stop_time_count = 0;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_STEP + 1://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<CBAE>ǶȽǶ<C8BD>
|
|||
|
g_area_scan.hori_step_count = g_area_scan.hori_step_count + 1;
|
|||
|
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.hori_step_count > g_area_scan.hori_step_num_a)
|
|||
|
{//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.hori_step_count = 0;
|
|||
|
g_area_scan.hori_scan_dir = g_area_scan.hori_scan_dir * -1;
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP + 5;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
if(g_area_scan.hori_scan_dir == 1)
|
|||
|
{
|
|||
|
if(g_area_scan.hori_step_count == g_area_scan.hori_step_num_a)
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_end_angle;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle =
|
|||
|
g_area_scan.hori_start_angle + g_area_scan.hori_step_angle * g_area_scan.hori_step_count;
|
|||
|
if(g_area_scan.hori_target_angle > 360.0)
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_target_angle - 360.0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(g_area_scan.hori_step_count == g_area_scan.hori_step_num_a)
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_start_angle;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle =
|
|||
|
g_area_scan.hori_end_angle - g_area_scan.hori_step_angle * g_area_scan.hori_step_count;
|
|||
|
if(g_area_scan.hori_target_angle < 0)
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_target_angle + 360.0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
g_ptz.hori_angle_control = g_area_scan.hori_target_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_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;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP + 2;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_STEP + 2://<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
/***<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ʱ<EFBFBD><CAB1><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ģ<DEB8>ʹ<EFBFBD><CAB9>̨ת<CCA8><D7AA><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>Զֻ<D4B6><D6BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ת<EFBFBD><D7AA>***/
|
|||
|
case AREA_SCAN_STEP + 5://<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ˮƽ<CBAE><C6BD>ת<EFBFBD><D7AA>
|
|||
|
g_area_scan.vert_step_count = g_area_scan.vert_step_count + 1;
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.vert_step_count > g_area_scan.vert_step_num_a)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_SIN_SCAN)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>裬<EFBFBD><E8A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.hori_step_count = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
//ת<><D7AA><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʼλ
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_start_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP + 6;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}else{
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_area_scan.vert_target_angle =
|
|||
|
g_area_scan.vert_start_angle + g_area_scan.vert_step_angle * g_area_scan.vert_step_count;
|
|||
|
if(g_area_scan.vert_step_count == g_area_scan.vert_step_num_a)
|
|||
|
{
|
|||
|
g_area_scan.vert_target_angle = g_area_scan.vert_end_angle;
|
|||
|
}
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP + 6;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_STEP + 6://<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_STEP;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
case AREA_SCAN_CONT://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽλ<C6BD>ã<EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>ʼ<EFBFBD>߽<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>
|
|||
|
//<2F><><EFBFBD>ߴ<EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>ʼλ<CABC><CEBB>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
if(g_area_scan.hori_scan_dir == 1)
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_end_angle;
|
|||
|
|
|||
|
g_ptz.hori_angle_control = g_area_scan.hori_target_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_scan.hori_speed;
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_RIGHT_ANGLE);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_RIGHT_ANGLE;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_area_scan.hori_target_angle = g_area_scan.hori_start_angle;
|
|||
|
|
|||
|
g_ptz.hori_angle_control = g_area_scan.hori_target_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_scan.hori_speed;
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_LEFT_ANGLE);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_LEFT_ANGLE;
|
|||
|
}
|
|||
|
|
|||
|
g_area_scan.hori_scan_dir = g_area_scan.hori_scan_dir * -1;
|
|||
|
|
|||
|
g_ptz.hori_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT + 2;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT + 2://<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ˮƽ<CBAE>߽<EFBFBD>
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
/***<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ʱ<EFBFBD><CAB1><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ģ<DEB8>ʹ<EFBFBD><CAB9>̨ת<CCA8><D7AA><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>Զֻ<D4B6><D6BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ת<EFBFBD><D7AA>***/
|
|||
|
case AREA_SCAN_CONT + 3://<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ת<EFBFBD><D7AA>
|
|||
|
g_area_scan.vert_step_count = g_area_scan.vert_step_count + 1;
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.vert_step_count > g_area_scan.vert_step_num_a)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_SIN_SCAN)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>裬<EFBFBD><E8A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
//ת<><D7AA><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʼλ
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_start_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT + 4;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}else{
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_area_scan.vert_target_angle =
|
|||
|
g_area_scan.vert_start_angle + g_area_scan.vert_step_angle * g_area_scan.vert_step_count;
|
|||
|
if(g_area_scan.vert_step_count == g_area_scan.vert_step_num_a)
|
|||
|
{
|
|||
|
g_area_scan.vert_target_angle = g_area_scan.vert_end_angle;
|
|||
|
}
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT + 4;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT + 4://<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///360<36><30>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
case AREA_SCAN_CONT_360://360<36><30>ȫ<EFBFBD><C8AB>ɨ<EFBFBD><C9A8><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_ptz.hori_speed_control = g_area_scan.hori_speed;
|
|||
|
//<2F>ж<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.hori_start_angle <= g_area_scan.hori_end_angle)
|
|||
|
{//<2F><>תɨ<D7AA><C9A8>
|
|||
|
g_area_scan.hori_scan_dir_360 = PTZ_HORI_DIR_RIGHT;
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><>תɨ<D7AA><C9A8>
|
|||
|
g_area_scan.hori_scan_dir_360 = PTZ_HORI_DIR_LEFT;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽת<C6BD><D7AA>
|
|||
|
if(g_area_scan.hori_scan_dir_360 == PTZ_HORI_DIR_RIGHT)
|
|||
|
{
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_RIGHT_KEEP);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_RIGHT_KEEP;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_LEFT_KEEP);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_LEFT_KEEP;
|
|||
|
}
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT_360 + 1://<2F>ж<EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼλ<CABC>úͽ<C3BA><CDBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_area_scan.hori_start_angle_360 = g_ptz.hori_angle_actual;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
if(g_area_scan.hori_scan_dir_360 == PTZ_HORI_DIR_RIGHT)
|
|||
|
{
|
|||
|
g_area_scan.hori_end_angle_360 = g_area_scan.hori_start_angle_360 + AREA_SCAN_END_ANGLE_INC_360;
|
|||
|
if(g_area_scan.hori_end_angle_360 >= 360.0)
|
|||
|
{
|
|||
|
g_area_scan.hori_end_angle_360 = g_area_scan.hori_end_angle_360 - 360.0;
|
|||
|
}
|
|||
|
}
|
|||
|
else//g_area_scan.hori_scan_dir_360 = PTZ_HORI_DIR_LEFT
|
|||
|
{
|
|||
|
g_area_scan.hori_end_angle_360 = g_area_scan.hori_start_angle_360 - AREA_SCAN_END_ANGLE_INC_360;
|
|||
|
if(g_area_scan.hori_end_angle_360 < 0)
|
|||
|
{
|
|||
|
g_area_scan.hori_end_angle_360 = g_area_scan.hori_end_angle_360 + 360.0;
|
|||
|
}
|
|||
|
}
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 2;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT_360 + 2://<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
if(g_area_scan.hori_scan_dir_360 == PTZ_HORI_DIR_RIGHT)
|
|||
|
{
|
|||
|
if(g_area_scan.hori_start_angle_360 <= g_ptz.hori_angle_actual)
|
|||
|
{
|
|||
|
if(fabs(g_ptz.hori_angle_actual - g_area_scan.hori_start_angle_360) >= 180.0 &&
|
|||
|
fabs(360.0 - g_ptz.hori_angle_actual + g_area_scan.hori_start_angle_360) > 50.0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(fabs(360.0 - g_area_scan.hori_start_angle_360 + g_ptz.hori_angle_actual) >= 180.0 &&
|
|||
|
fabs(g_area_scan.hori_start_angle_360 - g_ptz.hori_angle_actual) >= 50.0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(g_area_scan.hori_start_angle_360 >= g_ptz.hori_angle_actual)
|
|||
|
{
|
|||
|
if(fabs(g_area_scan.hori_start_angle_360 - g_ptz.hori_angle_actual) >= 180.0 &&
|
|||
|
fabs(360.0 - g_area_scan.hori_start_angle_360 + g_ptz.hori_angle_actual) >= 50.0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(fabs(360.0 - g_ptz.hori_angle_actual + g_area_scan.hori_start_angle_360) >= 180.0 &&
|
|||
|
fabs(g_ptz.hori_angle_actual - g_area_scan.hori_start_angle_360) >= 50.0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 3;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT_360 + 3://<2F>ж<EFBFBD>һ<EFBFBD><D2BB>ʣ<EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB>ʣ<EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>λ<EFBFBD><CEBB>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.hori_near_angle_360 =
|
|||
|
fabs(g_ptz.hori_angle_actual - g_area_scan.hori_start_angle_360);
|
|||
|
if(g_area_scan.hori_near_angle_360 > 360.0 / 2.0)
|
|||
|
{
|
|||
|
g_area_scan.hori_near_angle_360 = 360.0 - g_area_scan.hori_near_angle_360;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|||
|
g_area_scan.hori_far_angle_360 =
|
|||
|
fabs(g_ptz.hori_angle_actual - g_area_scan.hori_start_angle_360);
|
|||
|
if(g_area_scan.hori_far_angle_360 > 360.0 / 2.0)
|
|||
|
{
|
|||
|
g_area_scan.hori_far_angle_360 = 360.0 - g_area_scan.hori_far_angle_360;
|
|||
|
}
|
|||
|
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB>ɨ<EFBFBD><C9A8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.hori_far_angle_360 + g_area_scan.hori_near_angle_360 <=
|
|||
|
AREA_SCAN_END_ANGLE_INC_360)
|
|||
|
{//һ<><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.hori_far_angle_360 = 0;
|
|||
|
g_area_scan.hori_near_angle_360 = 0;
|
|||
|
g_area_scan.hori_end_angle_360 = 0;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 4;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT_360 + 4://<2F>滮ת<E6BBAE><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>
|
|||
|
g_area_scan.vert_step_count = g_area_scan.vert_step_count + 1;
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(g_area_scan.vert_step_count > g_area_scan.vert_step_num_a)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
g_area_scan.vert_step_count = 0;
|
|||
|
|
|||
|
if(g_area_scan.sin_mul_mode == AREA_MUL_SCAN)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_START + 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>g_area_scan.sin_mul_mode == AREA_SIN_SCAN
|
|||
|
//<2F><>ֱ<EFBFBD>ӻص<D3BB><D8B5><EFBFBD>ֱ<EFBFBD><D6B1>ʼ<EFBFBD>㣬ˮƽת<C6BD><D7AA>״̬<D7B4><CCAC><EFBFBD>ı<EFBFBD>
|
|||
|
ptz_area_scan_end_return_return();//֪ͨ<CDA8><D6AA><EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_area_scan.vert_target_angle = g_area_scan.vert_start_angle;
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 5;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_area_scan.vert_target_angle =
|
|||
|
g_area_scan.vert_start_angle + g_area_scan.vert_step_angle * g_area_scan.vert_step_count;
|
|||
|
if(g_area_scan.vert_step_count == g_area_scan.vert_step_num_a)
|
|||
|
{
|
|||
|
g_area_scan.vert_target_angle = g_area_scan.vert_end_angle;
|
|||
|
}
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.vert_arrive_flag = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 5;//<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CONT_360 + 5://<2F>ж<EFBFBD><D0B6>Ƿ<C7B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֱλ<D6B1><CEBB>
|
|||
|
if(g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CONT_360 + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//<2F><>ͣɨ<CDA3><C9A8>
|
|||
|
case AREA_SCAN_PAUSE_A://<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
|
|||
|
//<2F><><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
|
|||
|
g_area_scan.pause_state = g_area_scan.state_a;
|
|||
|
g_area_scan.pause_hori_angle = g_ptz.hori_angle_actual;
|
|||
|
g_area_scan.pause_vert_angle = g_ptz.vert_angle_actual;
|
|||
|
g_area_scan.pause_hori_arrive_flag = g_ptz.hori_arrive_flag;
|
|||
|
g_area_scan.pause_vert_arrive_flag = g_ptz.vert_arrive_flag;
|
|||
|
g_area_scan.pause_hori_start_stop = g_ptz.hori_start_stop_set;
|
|||
|
g_area_scan.pause_vert_start_stop = g_ptz.vert_start_stop_set;
|
|||
|
g_area_scan.pause_hori_direction = g_ptz.hori_direction_set;
|
|||
|
g_area_scan.pause_vert_direction = g_ptz.vert_direction_set;
|
|||
|
//ֹͣ<CDA3><D6B9>̨ת<CCA8><D7AA>
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_DEC_BRAKE_A;
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_DEC_BRAKE_A;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_PAUSE_B;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_PAUSE_B://<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F>ָ<EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
case AREA_SCAN_RECOVERY://<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ<EFBFBD>ָ<EFBFBD>
|
|||
|
//<2F><><EFBFBD>ȹ滮ת<E6BBAE><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
g_ptz.vert_angle_control = g_area_scan.pause_vert_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
|
|||
|
g_ptz.hori_angle_control = g_area_scan.pause_hori_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_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;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨<EFBFBD>Ƿ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƕ<EFBFBD>
|
|||
|
g_ptz.vert_arrive_flag = 1;
|
|||
|
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_RECOVERY + 1;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_RECOVERY + 1://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣʱ<CDA3><CAB1>λ<EFBFBD><CEBB>
|
|||
|
//<2F>ָ<EFBFBD><D6B8><EFBFBD>̨ɨ<CCA8><C9A8><EFBFBD><EFBFBD>ͣǰ<CDA3><C7B0>״̬//g_area_scan.vert_target_angle
|
|||
|
if(g_ptz.hori_arrive_flag == 0 && g_ptz.vert_arrive_flag == 0)
|
|||
|
{
|
|||
|
if(g_area_scan.pause_hori_arrive_flag == 1)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>ת<EFBFBD><D7AA>
|
|||
|
g_ptz.hori_angle_control = g_area_scan.hori_target_angle;
|
|||
|
g_ptz.hori_speed_control = g_area_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;
|
|||
|
}
|
|||
|
else
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>ת<EFBFBD><D7AA>
|
|||
|
if(g_area_scan.pause_hori_start_stop == PTZ_HORI_START)
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>״̬,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>360<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
if(g_area_scan.pause_hori_direction == PTZ_HORI_DIR_RIGHT)
|
|||
|
{
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_RIGHT_KEEP);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_RIGHT_KEEP;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ptz_hori_rotate_plan(PTZ_HORI_LEFT_KEEP);
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_LEFT_KEEP;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(g_area_scan.pause_vert_arrive_flag == 1)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>ת<EFBFBD><D7AA>
|
|||
|
g_ptz.vert_angle_control = g_area_scan.vert_target_angle;
|
|||
|
g_ptz.vert_speed_control = g_area_scan.vert_speed;
|
|||
|
ptz_vert_rotate_plan(PTZ_VERT_ANGLE);
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_ANGLE;
|
|||
|
g_ptz.vert_arrive_flag = 1;
|
|||
|
}
|
|||
|
//<2F>ָ<EFBFBD>֮ǰɨ<C7B0><C9A8>״̬
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = g_area_scan.pause_state;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F>ر<EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
case AREA_SCAN_CLOSE_A: //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
|||
|
memset(&g_area_scan, 0, sizeof(g_area_scan));
|
|||
|
g_ptz.vert_rotate_monitor_switch = PTZ_VERT_DEC_BRAKE_A;
|
|||
|
g_ptz.hori_rotate_monitor_switch = PTZ_HORI_DEC_BRAKE_A;
|
|||
|
g_area_scan.last_state = g_area_scan.state;
|
|||
|
g_area_scan.state = AREA_SCAN_CLOSE_B;
|
|||
|
g_area_scan.state_a = g_area_scan.state;
|
|||
|
break;
|
|||
|
|
|||
|
case AREA_SCAN_CLOSE_B://<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
|
|||
|
void ptz_area_scan_end_return_save(char dev)
|
|||
|
{
|
|||
|
if(dev == PTZ_UDP)
|
|||
|
{
|
|||
|
g_ptz.area_scan_return.area_scan_end_fromlen = ptz_fromlen;
|
|||
|
memcpy(&g_ptz.area_scan_return.area_scan_end_from, &ptz_from, ptz_fromlen);
|
|||
|
}
|
|||
|
}
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
|
|||
|
void ptz_area_scan_end_return_return()
|
|||
|
{
|
|||
|
unsigned char area[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
|
|||
|
area[1] = g_ptz.address;
|
|||
|
area[2] = 0xc4;
|
|||
|
area[3] = AREA_SCAN_END_RETURN_DATA;//<2F><>ʾ<EFBFBD>ش<EFBFBD>
|
|||
|
area[4] = g_area_scan.actual_num;//<2F><>ǰɨ<C7B0><C9A8><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
area[6] = MotorCalPelcoDSUM(area,sizeof(area));
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_scan_end_udp_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
send_udp_data_aim(area, sizeof(area),
|
|||
|
(struct sockaddr*)&g_ptz.area_scan_return.area_scan_end_from, g_ptz.area_scan_return.area_scan_end_fromlen);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_scan_end_uart_422_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
ptz_send_data(PTZ_UART_422, area, sizeof(area));
|
|||
|
}
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_scan_end_uart_485_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
ptz_send_data(PTZ_UART_485, area, sizeof(area));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD>赽λ<E8B5BD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
|
|||
|
void ptz_area_step_scan_location_return_save(char dev)
|
|||
|
{
|
|||
|
if(dev == PTZ_UDP)
|
|||
|
{
|
|||
|
g_ptz.area_scan_return.area_step_scan_location_fromlen = ptz_fromlen;
|
|||
|
memcpy(&g_ptz.area_scan_return.area_step_scan_location_from, &ptz_from, ptz_fromlen);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD>赽λ<E8B5BD>ش<EFBFBD>
|
|||
|
void ptz_area_step_scan_location_return_return(char angle_choice)
|
|||
|
{
|
|||
|
unsigned short int uint16_angle = 0;
|
|||
|
unsigned char area[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
|
|||
|
|
|||
|
area[1] = g_ptz.address;
|
|||
|
area[2] = 0xc4;
|
|||
|
if(angle_choice == PTZ_HORI)
|
|||
|
{
|
|||
|
uint16_angle = (unsigned short int)(g_area_scan.hori_target_angle * 100 + 0.5);
|
|||
|
area[3] = AREA_STEP_SCAN_LOCATION_RETURN_HORI;//<2F><>ʾ<EFBFBD>ش<EFBFBD>
|
|||
|
area[4] = (u_int16_t)(uint16_angle >> 8);
|
|||
|
area[5] = (u_int16_t)(uint16_angle & 0x00ff);
|
|||
|
area[6] = MotorCalPelcoDSUM(area,sizeof(area));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
uint16_angle = (unsigned short int)(g_area_scan.vert_target_angle * 100 + 0.5);
|
|||
|
area[3] = AREA_STEP_SCAN_LOCATION_RETURN_VERT;//<2F><>ʾ<EFBFBD>ش<EFBFBD>
|
|||
|
area[4] = (u_int16_t)(uint16_angle >> 8);
|
|||
|
area[5] = (u_int16_t)(uint16_angle & 0x00ff);
|
|||
|
area[6] = MotorCalPelcoDSUM(area,sizeof(area));
|
|||
|
}
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_step_scan_location_udp_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
send_udp_data_aim(area, sizeof(area),
|
|||
|
(struct sockaddr*)&g_ptz.area_scan_return.area_step_scan_location_from, g_ptz.area_scan_return.area_step_scan_location_fromlen);
|
|||
|
}
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_step_scan_location_uart_422_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
ptz_send_data(PTZ_UART_422, area, sizeof(area));
|
|||
|
}
|
|||
|
|
|||
|
if(g_ptz.area_scan_return.area_step_scan_location_uart_485_switch == AREA_SCAN_RETURN_ON)
|
|||
|
{
|
|||
|
ptz_send_data(PTZ_UART_485, area, sizeof(area));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static OS_STK task_area_scan_stk[TASK_AREA_SCAN_STK_SIZE];
|
|||
|
static void creat_task_area_scan(void)
|
|||
|
{
|
|||
|
CPU_INT08U task_err;
|
|||
|
CPU_INT08U name_err;
|
|||
|
|
|||
|
task_err = OSTaskCreateExt((void (*)(void *)) ptz_area_scan_task,
|
|||
|
(void *) 0,
|
|||
|
(OS_STK *)&task_area_scan_stk[TASK_AREA_SCAN_STK_SIZE - 1],
|
|||
|
(INT8U ) TASK_AREA_SCAN_PRIO,
|
|||
|
(INT16U ) TASK_AREA_SCAN_PRIO,
|
|||
|
(OS_STK *)&task_area_scan_stk[0],
|
|||
|
(INT32U ) TASK_AREA_SCAN_STK_SIZE,
|
|||
|
(void *) 0,
|
|||
|
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
|
|||
|
#if (OS_TASK_NAME_EN > 0)
|
|||
|
OSTaskNameSet(TASK_AREA_SCAN_PRIO, "ptz_area_scan_task", &name_err);
|
|||
|
#endif
|
|||
|
if ((task_err == OS_ERR_NONE) && (name_err == OS_ERR_NONE)) {
|
|||
|
pdebug(DEBUG_LEVEL_INFO,"create ptz_area_scan_task success...\n\r");
|
|||
|
} else {
|
|||
|
pdebug(DEBUG_LEVEL_FATAL,"create ptz_area_scan_task failed...\n\r");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void init_area_scan_module()
|
|||
|
{
|
|||
|
ptz_area_read();
|
|||
|
creat_task_area_scan();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|