|
@ -13,7 +13,7 @@ |
|
|
if (computesum8((char *)data, recv_datalen - 1) != data->checksum) \ |
|
|
if (computesum8((char *)data, recv_datalen - 1) != data->checksum) \ |
|
|
{ \ |
|
|
{ \ |
|
|
printf("checksum error\r\n"); \ |
|
|
printf("checksum error\r\n"); \ |
|
|
return; \ |
|
|
|
|
|
|
|
|
checksum_flag = false; \ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static bool udp_client_active_flag; |
|
|
static bool udp_client_active_flag; |
|
@ -36,6 +36,8 @@ static bool genlock_and_esync_active_flag; |
|
|
#define CLEAR_ENCODER_1 1 |
|
|
#define CLEAR_ENCODER_1 1 |
|
|
#define CLEAR_ENCODER_2 2 |
|
|
#define CLEAR_ENCODER_2 2 |
|
|
|
|
|
|
|
|
|
|
|
#define ORDER_RECEIPT_INTERCONVERSION 0X8000 |
|
|
|
|
|
|
|
|
static char s_sendBuf[BUFFER_SIZE]; // 发送数据的缓冲区 |
|
|
static char s_sendBuf[BUFFER_SIZE]; // 发送数据的缓冲区 |
|
|
static char s_receBuf[BUFFER_SIZE]; // 接收数据的缓冲区 |
|
|
static char s_receBuf[BUFFER_SIZE]; // 接收数据的缓冲区 |
|
|
|
|
|
|
|
@ -121,6 +123,23 @@ static void udp_client_all_encoder_light_set(encoder_light_state_t state) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* ===================================================================== */ |
|
|
|
|
|
|
|
|
|
|
|
static void udp_client_clear_encoder_cmd_receipt(protocol_clear_encoder_order_t *order, protocol_status_code_type state_code) |
|
|
|
|
|
{ |
|
|
|
|
|
protocol_clear_encoder_receipt_t receipt; |
|
|
|
|
|
receipt.index = order->index; |
|
|
|
|
|
receipt.cmd_id = order->cmd_id + ORDER_RECEIPT_INTERCONVERSION; |
|
|
|
|
|
receipt.status_code = state_code; |
|
|
|
|
|
receipt.checksum = computesum8((char *)&receipt, sizeof(protocol_clear_encoder_receipt_t) - 1); |
|
|
|
|
|
if (sendto(sock_Client, &receipt, sizeof(protocol_clear_encoder_receipt_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
|
|
{ |
|
|
|
|
|
printf("send basic_response error\r\n"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* ===================================================================== */ |
|
|
|
|
|
|
|
|
void udp_client_recv_data_dump(int recv_datalen) |
|
|
void udp_client_recv_data_dump(int recv_datalen) |
|
|
{ |
|
|
{ |
|
|
/* debug使用 */ |
|
|
/* debug使用 */ |
|
@ -216,73 +235,113 @@ void udp_client_recv(void) |
|
|
|
|
|
|
|
|
void udp_client_parse(int recv_datalen) |
|
|
void udp_client_parse(int recv_datalen) |
|
|
{ |
|
|
{ |
|
|
|
|
|
bool checksum_flag = true; |
|
|
if (recv_datalen >= adwin_config_protocol_size) |
|
|
if (recv_datalen >= adwin_config_protocol_size) |
|
|
{ |
|
|
{ |
|
|
adwin_config_protocol_t *rxcmd = (adwin_config_protocol_t *)s_receBuf; |
|
|
adwin_config_protocol_t *rxcmd = (adwin_config_protocol_t *)s_receBuf; |
|
|
active_report_data_structer.time_stamp_s = rxcmd->time_stamp_s; |
|
|
active_report_data_structer.time_stamp_s = rxcmd->time_stamp_s; |
|
|
genlock_and_esync_active_flag = true; |
|
|
genlock_and_esync_active_flag = true; |
|
|
} |
|
|
} |
|
|
else if (recv_datalen <= basic_report_data_size) |
|
|
|
|
|
{ |
|
|
|
|
|
basic_report_data_t *rxcmd = (basic_report_data_t *)s_receBuf; |
|
|
|
|
|
get_encoder_report_t *get_encoder_cmd = (get_encoder_report_t *)s_receBuf; |
|
|
|
|
|
switch (rxcmd->cmd_id) |
|
|
|
|
|
{ |
|
|
|
|
|
case CMD_SET_AUTOMATIC_REPORTING_FREQUENCY: /* 设置自动上报频率 */ |
|
|
|
|
|
cmd_checksum(rxcmd); |
|
|
|
|
|
if (rxcmd->data >= 10) |
|
|
|
|
|
|
|
|
else if (recv_datalen >= protocol_basic_size) |
|
|
{ |
|
|
{ |
|
|
active_report_cycle = rxcmd->data; |
|
|
|
|
|
} |
|
|
|
|
|
udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
break; |
|
|
|
|
|
case CMD_GET_ENCODER_DATA: /* 获取编码器数据 */ |
|
|
|
|
|
cmd_checksum(get_encoder_cmd); |
|
|
|
|
|
udp_client_create_get_encoder_response(get_encoder_cmd, recv_datalen); |
|
|
|
|
|
|
|
|
// basic_report_data_t *rxcmd = (basic_report_data_t *)s_receBuf; |
|
|
|
|
|
// get_encoder_report_t *get_encoder_cmd = (get_encoder_report_t *)s_receBuf; |
|
|
|
|
|
// switch (rxcmd->cmd_id) |
|
|
|
|
|
// { |
|
|
|
|
|
// case CMD_SET_AUTOMATIC_REPORTING_FREQUENCY: /* 设置自动上报频率 */ |
|
|
|
|
|
// cmd_checksum(rxcmd); |
|
|
|
|
|
// if (rxcmd->data >= 10) |
|
|
|
|
|
// { |
|
|
|
|
|
// active_report_cycle = rxcmd->data; |
|
|
|
|
|
// } |
|
|
|
|
|
// udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
// break; |
|
|
|
|
|
// case CMD_GET_ENCODER_DATA: /* 获取编码器数据 */ |
|
|
|
|
|
// cmd_checksum(get_encoder_cmd); |
|
|
|
|
|
// udp_client_create_get_encoder_response(get_encoder_cmd, recv_datalen); |
|
|
|
|
|
|
|
|
if (!udp_client_active_flag) |
|
|
|
|
|
{ |
|
|
|
|
|
udp_client_all_encoder_light_set(STANDBY); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// if (!udp_client_active_flag) |
|
|
|
|
|
// { |
|
|
|
|
|
// udp_client_all_encoder_light_set(STANDBY); |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
case CMD_SET_ACTIVE: /* 设置主动上报 */ |
|
|
|
|
|
cmd_checksum(rxcmd); |
|
|
|
|
|
if ((rxcmd->data == AVTIVE_DISABLE) || (rxcmd->data == ACTIVE_ENABLE)) |
|
|
|
|
|
{ |
|
|
|
|
|
udp_client_active_flag = rxcmd->data; |
|
|
|
|
|
if (udp_client_active_flag) |
|
|
|
|
|
{ |
|
|
|
|
|
udp_client_all_encoder_light_set(WORKING); |
|
|
|
|
|
|
|
|
// break; |
|
|
|
|
|
// case CMD_SET_ACTIVE: /* 设置主动上报 */ |
|
|
|
|
|
// cmd_checksum(rxcmd); |
|
|
|
|
|
// if ((rxcmd->data == AVTIVE_DISABLE) || (rxcmd->data == ACTIVE_ENABLE)) |
|
|
|
|
|
// { |
|
|
|
|
|
// udp_client_active_flag = rxcmd->data; |
|
|
|
|
|
// if (udp_client_active_flag) |
|
|
|
|
|
// { |
|
|
|
|
|
// udp_client_all_encoder_light_set(WORKING); |
|
|
|
|
|
// } |
|
|
|
|
|
// else |
|
|
|
|
|
// { |
|
|
|
|
|
// udp_client_all_encoder_light_set(STANDBY); |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
// udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
// break; |
|
|
|
|
|
// case CMD_CLEAR_ENCODER: /* 清除编码器数据 */ |
|
|
|
|
|
// cmd_checksum(rxcmd); |
|
|
|
|
|
|
|
|
|
|
|
// switch (rxcmd->data) |
|
|
|
|
|
// { |
|
|
|
|
|
// case CLEAR_ENCODER_ALL: |
|
|
|
|
|
// encoder_all_encoder_clear_counter_and_structer_count(); |
|
|
|
|
|
// break; |
|
|
|
|
|
// case CLEAR_ENCODER_1: |
|
|
|
|
|
// encoder_switch_encoder_clear_count_and_structer_count(CAMERA_ENCODER); |
|
|
|
|
|
// break; |
|
|
|
|
|
// case CLEAR_ENCODER_2: |
|
|
|
|
|
// encoder_switch_encoder_clear_count_and_structer_count(DRIVEN_ENCODER_GEAR); |
|
|
|
|
|
// break; |
|
|
|
|
|
|
|
|
|
|
|
// default: |
|
|
|
|
|
// printf("not find clear encoder cmd\r\n"); |
|
|
|
|
|
// break; |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
// udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
|
|
|
|
|
|
// break; |
|
|
|
|
|
|
|
|
|
|
|
// default: |
|
|
|
|
|
// break; |
|
|
|
|
|
// } |
|
|
|
|
|
protocol_basic_t *protocol_basic_cmd = (protocol_basic_t *)s_receBuf; |
|
|
|
|
|
protocol_clear_encoder_order_t *protocol_clear_encoder_cmd = (protocol_clear_encoder_order_t *)s_receBuf; |
|
|
|
|
|
// protocol_read_encoder_order_t *protocol_read_encoder_cmd = (protocol_read_encoder_order_t *)s_receBuf; |
|
|
|
|
|
// protocol_active_order_t *protocol_active_cmd = (protocol_active_order_t *)s_receBuf; |
|
|
|
|
|
// protocol_trigger_order_t *protocol_trigger_cmd = (protocol_trigger_order_t *)s_receBuf; |
|
|
|
|
|
// protocol_modify_network_configurations_order_t *protocol_modify_network_configurations_cmd = (protocol_modify_network_configurations_order_t *)s_receBuf; |
|
|
|
|
|
switch (protocol_basic_cmd->cmd_id) |
|
|
|
|
|
{ |
|
|
|
|
|
case PROTOCOL_CMD_CLEAR_ENCODER: /* 清除编码器数据指令 */ |
|
|
|
|
|
cmd_checksum(protocol_clear_encoder_cmd); |
|
|
|
|
|
if (checksum_flag) |
|
|
|
|
|
{ |
|
|
|
|
|
/* 校验通过 */ |
|
|
|
|
|
encoder_all_encoder_clear_counter_and_structer_count(); |
|
|
|
|
|
udp_client_clear_encoder_cmd_receipt(protocol_clear_encoder_cmd, PROTOCOL_STATUS_SUCCESS); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
udp_client_all_encoder_light_set(STANDBY); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/* 校验未通过 */ |
|
|
|
|
|
udp_client_clear_encoder_cmd_receipt(protocol_clear_encoder_cmd, PROTOCOL_STATUS_PARAMETER_ERROR); |
|
|
} |
|
|
} |
|
|
udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
break; |
|
|
|
|
|
case CMD_CLEAR_ENCODER: /* 清除编码器数据 */ |
|
|
|
|
|
cmd_checksum(rxcmd); |
|
|
|
|
|
|
|
|
|
|
|
switch (rxcmd->data) |
|
|
|
|
|
{ |
|
|
|
|
|
case CLEAR_ENCODER_ALL: |
|
|
|
|
|
encoder_all_encoder_clear_counter_and_structer_count(); |
|
|
|
|
|
break; |
|
|
|
|
|
case CLEAR_ENCODER_1: |
|
|
|
|
|
encoder_switch_encoder_clear_count_and_structer_count(CAMERA_ENCODER); |
|
|
|
|
|
break; |
|
|
break; |
|
|
case CLEAR_ENCODER_2: |
|
|
|
|
|
encoder_switch_encoder_clear_count_and_structer_count(DRIVEN_ENCODER_GEAR); |
|
|
|
|
|
|
|
|
case PROTOCOL_CMD_READ_ENCODER: /* 读取编码器数据指令 */ |
|
|
|
|
|
|
|
|
break; |
|
|
break; |
|
|
|
|
|
case PROTOCOL_CMD_ACTIVE: /* 配置主动上报指令 */ |
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
printf("not find clear encoder cmd\r\n"); |
|
|
|
|
|
break; |
|
|
break; |
|
|
} |
|
|
|
|
|
|
|
|
case PROTOCOL_CMD_TRIGGER: /* 配置触发上报指令 */ |
|
|
|
|
|
|
|
|
udp_client_create_basic_response(rxcmd, recv_datalen); |
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
case PROTOCOL_CMD_MODIFY_NETWORK_CONFIGURATIONS: /* 配置网络相关指令 */ |
|
|
|
|
|
|
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
@ -290,6 +349,10 @@ void udp_client_parse(int recv_datalen) |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
/* error */ |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void udp_client_active(void) |
|
|
void udp_client_active(void) |
|
|