diff --git a/APP/Agent/agent_hyt.c b/APP/Agent/agent_hyt.c index 6e0db35..36e6b4a 100644 --- a/APP/Agent/agent_hyt.c +++ b/APP/Agent/agent_hyt.c @@ -123,9 +123,10 @@ void ptz_reply(char dev, unsigned char type) break; - case CMD_WRONG://指令错误 - ptz_send_data(dev, reply_wrong, sizeof(reply_wrong)); - + case CMD_WRONG://指令错误 + if (dev != PTZ_UART_485) { + ptz_send_data(dev, reply_wrong, sizeof(reply_wrong)); + } break; case CMD_FAIL://指令正确,但执行失败 @@ -2200,41 +2201,47 @@ static void ptz_uart_485_data_process_task() //判断有无数据 if(ptz_uart_dev_char_present(uart_485_handle) == 0) { - OSTimeDlyHMSM(0u, 0u, 0u, 1u);//等待一段时间 - uart_485_timer ++; - if(uart_485_timer > PTZ_UART_RECV_OVERTIME) - {//接收超时,说明一帧数据接收完成 - break; - } + OSTimeDlyHMSM(0u, 0u, 0u, 3u);//等待一段时间 + // uart_485_timer ++; + // if(uart_485_timer > PTZ_UART_RECV_OVERTIME) + // {//接收超时,说明一帧数据接收完成 + // break; + // } + if (ptz_uart_dev_char_present(uart_485_handle) == 0) { + // break; + goto error; + } } else {//读取一个字节数据 uart_485_buffer[uart_485_data_len] = ptz_uart_dev_in_char(uart_485_handle); uart_485_data_len++; uart_485_timer = 0; - if(uart_485_data_len % 100 == 0 && uart_485_data_len > 0) - { - OSTimeDlyHMSM(0u, 0u, 0u, 2u); - } - if(uart_485_data_len >= 7) - { - if(ptz_data_pack_pelco_d_check(pack_pelco_d) == 1) - {//成功读取一帧派尔高D协议或者自定义类似派尔高D协议,长度7字节 - break; + // if(uart_485_data_len % 100 == 0 && uart_485_data_len > 0) + // { + // OSTimeDlyHMSM(0u, 0u, 0u, 2u); + // } + if(uart_485_data_len >= 7) { + if(ptz_data_pack_pelco_d_check(pack_pelco_d) == 1) {//成功读取一帧派尔高D协议或者自定义类似派尔高D协议,长度7字节 + break; + } + else { + memcpy(uart_485_buffer, uart_485_buffer + 1, uart_485_data_len); + uart_485_data_len = uart_485_data_len - 1; + } } - } - if(uart_485_data_len >= (sizeof(PTZ_DATA_PACK_A) + sizeof(unsigned int))) - { - ptz_reply(uart_485_handle, CMD_WRONG); - if(ptz_data_pack_a_check(pack_a) == 1) - {//成功读取一帧自定义超长度协议 - break; - } - } - if(uart_485_data_len >= PTZ_UART_485_BUFF_SIZE) - { - break; - } + // if(uart_485_data_len >= (sizeof(PTZ_DATA_PACK_A) + sizeof(unsigned int))) + // { + // ptz_reply(uart_485_handle, CMD_WRONG); + // if(ptz_data_pack_a_check(pack_a) == 1) + // {//成功读取一帧自定义超长度协议 + // break; + // } + // } + // if(uart_485_data_len >= PTZ_UART_485_BUFF_SIZE) + // { + // break; + // } } } uart_485_timer = 0; @@ -2243,22 +2250,27 @@ static void ptz_uart_485_data_process_task() //处理串口数据 if(uart_485_state == PTZ_UART_HAND_STATE) { - if(uart_485_data_len > 7) - {//不定长数据处理,该数据每一帧都超过7个字节 - ptz_data_pack_a_process(PTZ_UART_485, (PTZ_DATA_PACK_A *)uart_485_buffer); -// ptz_reply(PTZ_UART_485, CMD_WRONG); - } - else - {//7个字节的派尔高D数据以及7个字节自定义类派尔高D数据处理 - ptz_data_pack_process(PTZ_UART_485, (PTZ_DATA_PACK *)uart_485_buffer); - } +// if(uart_485_data_len > 7) +// {//不定长数据处理,该数据每一帧都超过7个字节 +// ptz_data_pack_a_process(PTZ_UART_485, (PTZ_DATA_PACK_A *)uart_485_buffer); +// // ptz_reply(PTZ_UART_485, CMD_WRONG); +// } +// else +// {//7个字节的派尔高D数据以及7个字节自定义类派尔高D数据处理 +// ptz_data_pack_process(PTZ_UART_485, (PTZ_DATA_PACK *)uart_485_buffer); +// } + ptz_data_pack_process(PTZ_UART_485, (PTZ_DATA_PACK *)uart_485_buffer); memset(uart_485_buffer, 0, sizeof(uart_485_buffer)); uart_485_data_len = 0; uart_485_timer = 0; uart_485_state = PTZ_UART_FREE_STATE; } - OSTimeDlyHMSM(0u, 0u, 0u, 5u); +error: + // OSTimeDlyHMSM(0u, 0u, 0u, 2u); + if (ptz_uart_dev_char_present(uart_485_handle) == 0) { + OSTimeDlyHMSM(0u, 0u, 0u, 2u); + } } }