|
|
@ -26,7 +26,8 @@ static bool genlock_and_esync_active_flag; |
|
|
|
#define SOCKET_ERROR -1 |
|
|
|
#define BUFFER_SIZE 256 // 缓冲区大小 |
|
|
|
|
|
|
|
#define ACTIVE_ID 0XDD |
|
|
|
#define ACTIVE_CMD_ID 0XC003 |
|
|
|
#define TRIGGER_ID 0XC004 |
|
|
|
#define DEVICE_ID 0X01 |
|
|
|
|
|
|
|
#define AVTIVE_DISABLE 0 |
|
|
@ -48,83 +49,52 @@ static struct sockaddr_in addr_client; |
|
|
|
static struct sockaddr_in sock; |
|
|
|
socklen_t sock_len = sizeof(sock); |
|
|
|
|
|
|
|
static active_report_data_t active_report_data_structer; |
|
|
|
static protocol_active_and_trigger_report_t active_report_data_structer; |
|
|
|
static int active_report_cycle; |
|
|
|
|
|
|
|
static void active_report_data_structer_init(void) |
|
|
|
{ |
|
|
|
/* index在每次上报一次主动上报数据后+1,时间戳在获取ESync命令时更新,编码器数值在 active_report_data_structer_update中更新,校验和在上传数据前(udp_client_active_response)进行更新*/ |
|
|
|
active_report_data_structer.index = 0; /* */ |
|
|
|
active_report_data_structer.cmd_id = ACTIVE_ID; /* 指令id */ |
|
|
|
active_report_data_structer.time_stamp_s = 0; /* 时间戳 */ |
|
|
|
active_report_data_structer.encoder_1_count = 0; /* 编码器1计数 */ |
|
|
|
active_report_data_structer.encoder_2_count = 0; /* 编码器2计数 */ |
|
|
|
active_report_data_structer.device_id = DEVICE_ID; /* 设备ID号 */ |
|
|
|
} |
|
|
|
|
|
|
|
static void active_report_data_structer_update(void) |
|
|
|
static void udp_client_all_encoder_light_set(encoder_light_state_t state) |
|
|
|
{ |
|
|
|
/* 时间戳暂时先不管,后续完善 */ |
|
|
|
encoder_read_with_encoder(CAMERA_ENCODER, &active_report_data_structer.encoder_1_count); |
|
|
|
encoder_read_with_encoder(DRIVEN_ENCODER_GEAR, &active_report_data_structer.encoder_2_count); |
|
|
|
} |
|
|
|
|
|
|
|
static void get_encoder_response_encoder_update(get_encoder_respont_t *get_encoder_respont_structer) |
|
|
|
if (state == STANDBY) |
|
|
|
{ |
|
|
|
/* 时间戳暂时先不管,后续完善 */ |
|
|
|
active_report_data_structer_update(); |
|
|
|
get_encoder_respont_structer->encoder1 = active_report_data_structer.encoder_1_count; |
|
|
|
get_encoder_respont_structer->encoder2 = active_report_data_structer.encoder_2_count; |
|
|
|
encoder_set_state(CAMERA_ENCODER, STANDBY); |
|
|
|
encoder_set_state(DRIVEN_ENCODER_GEAR, STANDBY); |
|
|
|
} |
|
|
|
|
|
|
|
static void udp_client_create_basic_response(basic_report_data_t *rxcmd, int recv_datalen) |
|
|
|
{ |
|
|
|
/* 因为发送和接收是一致的,所以不需要二次校验,直接把接收的数据发送即可 */ |
|
|
|
if (sendto(sock_Client, rxcmd, sizeof(basic_report_data_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
else if (state == WORKING) |
|
|
|
{ |
|
|
|
printf("send basic_response error\r\n"); |
|
|
|
encoder_set_state(CAMERA_ENCODER, WORKING); |
|
|
|
encoder_set_state(DRIVEN_ENCODER_GEAR, WORKING); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void udp_client_create_get_encoder_response(get_encoder_report_t *get_encoder_cmd, int recv_datalen) |
|
|
|
{ |
|
|
|
get_encoder_respont_t get_encoder_respont_structer; |
|
|
|
|
|
|
|
get_encoder_respont_structer.index = get_encoder_cmd->index; |
|
|
|
get_encoder_respont_structer.cmd_id = get_encoder_cmd->cmd_id; |
|
|
|
get_encoder_response_encoder_update(&get_encoder_respont_structer); |
|
|
|
get_encoder_respont_structer.checksum = computesum8((char *)&get_encoder_respont_structer, sizeof(get_encoder_respont_t) - 1); |
|
|
|
|
|
|
|
if (sendto(sock_Client, &get_encoder_respont_structer, sizeof(get_encoder_respont_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
/* ===================================================================== */ |
|
|
|
static void active_report_data_structer_init(void) |
|
|
|
{ |
|
|
|
printf("send basic_response error\r\n"); |
|
|
|
} |
|
|
|
/* index在每次上报一次主动上报数据后+1,时间戳在获取ESync命令时更新,编码器数值在 active_report_data_structer_update中更新,校验和在上传数据前(udp_client_active_response)进行更新*/ |
|
|
|
active_report_data_structer.index = 0; /* */ |
|
|
|
active_report_data_structer.cmd_id = ACTIVE_CMD_ID; /* 指令id */ |
|
|
|
active_report_data_structer.placeholder_1 = 0; |
|
|
|
active_report_data_structer.placeholder_2 = 0; |
|
|
|
active_report_data_structer.encoder1 = 0; |
|
|
|
active_report_data_structer.encoder2 = 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void udp_client_active_response(void) |
|
|
|
{ |
|
|
|
active_report_data_structer.checksum = computesum8((char *)&active_report_data_structer, sizeof(active_report_data_t) - 1); |
|
|
|
if (sendto(sock_Client, &active_report_data_structer, sizeof(active_report_data_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
static void active_report_data_structer_update(void) |
|
|
|
{ |
|
|
|
printf("send basic_response error\r\n"); |
|
|
|
} |
|
|
|
/* 时间戳暂时先不管,后续完善 */ |
|
|
|
encoder_read_with_encoder(CAMERA_ENCODER, &active_report_data_structer.encoder1); |
|
|
|
encoder_read_with_encoder(DRIVEN_ENCODER_GEAR, &active_report_data_structer.placeholder_2); |
|
|
|
} |
|
|
|
|
|
|
|
static void udp_client_all_encoder_light_set(encoder_light_state_t state) |
|
|
|
{ |
|
|
|
if (state == STANDBY) |
|
|
|
/* 主动上报格式 */ |
|
|
|
static void udp_client_active_report(void) |
|
|
|
{ |
|
|
|
encoder_set_state(CAMERA_ENCODER, STANDBY); |
|
|
|
encoder_set_state(DRIVEN_ENCODER_GEAR, STANDBY); |
|
|
|
} |
|
|
|
else if (state == WORKING) |
|
|
|
active_report_data_structer.checksum = computesum8((char *)&active_report_data_structer, sizeof(protocol_active_and_trigger_report_t) - 1); |
|
|
|
if (sendto(sock_Client, &active_report_data_structer, sizeof(protocol_active_and_trigger_report_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
{ |
|
|
|
encoder_set_state(CAMERA_ENCODER, WORKING); |
|
|
|
encoder_set_state(DRIVEN_ENCODER_GEAR, WORKING); |
|
|
|
printf("send basic_response error\r\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* ===================================================================== */ |
|
|
|
/* 清除编码器数据指令回执 */ |
|
|
|
static void udp_client_clear_encoder_cmd_receipt(protocol_clear_encoder_order_t *order, protocol_status_code_type state_code) |
|
|
|
{ |
|
|
@ -146,8 +116,8 @@ static void udp_client_read_encoder_cmd_receipt(protocol_read_encoder_order_t *o |
|
|
|
receipt.index = order->index; |
|
|
|
receipt.cmd_id = order->cmd_id + ORDER_RECEIPT_INTERCONVERSION; |
|
|
|
active_report_data_structer_update(); |
|
|
|
receipt.encoder1 = active_report_data_structer.encoder_1_count; |
|
|
|
receipt.encoder2 = active_report_data_structer.encoder_2_count; |
|
|
|
receipt.encoder1 = active_report_data_structer.encoder1; |
|
|
|
receipt.encoder2 = active_report_data_structer.placeholder_2; |
|
|
|
receipt.checksum = computesum8((char *)&receipt, sizeof(protocol_read_encoder_receipt_t) - 1); |
|
|
|
if (sendto(sock_Client, &receipt, sizeof(protocol_read_encoder_receipt_t), 0, (struct sockaddr *)&addr_server, sizeof(struct sockaddr_in)) == SOCKET_ERROR) |
|
|
|
{ |
|
|
@ -270,77 +240,12 @@ void udp_client_parse(int recv_datalen) |
|
|
|
bool checksum_flag = true; |
|
|
|
if (recv_datalen >= adwin_config_protocol_size) |
|
|
|
{ |
|
|
|
adwin_config_protocol_t *rxcmd = (adwin_config_protocol_t *)s_receBuf; |
|
|
|
active_report_data_structer.time_stamp_s = rxcmd->time_stamp_s; |
|
|
|
// adwin_config_protocol_t *rxcmd = (adwin_config_protocol_t *)s_receBuf; |
|
|
|
// active_report_data_structer.time_stamp_s = rxcmd->time_stamp_s; |
|
|
|
genlock_and_esync_active_flag = true; |
|
|
|
} |
|
|
|
else if (recv_datalen >= protocol_basic_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) |
|
|
|
// { |
|
|
|
// 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); |
|
|
|
// } |
|
|
|
|
|
|
|
// 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; |
|
|
@ -437,7 +342,7 @@ void udp_client_active(void) |
|
|
|
{ |
|
|
|
lastprocess = HAL_GetTick(); |
|
|
|
active_report_data_structer_update(); |
|
|
|
udp_client_active_response(); |
|
|
|
udp_client_active_report(); |
|
|
|
active_report_data_structer.index += 1; |
|
|
|
} |
|
|
|
} |
|
|
@ -448,7 +353,7 @@ void udp_client_genlock_and_esync_active(void) |
|
|
|
if (genlock_and_esync_active_flag) |
|
|
|
{ |
|
|
|
active_report_data_structer_update(); |
|
|
|
udp_client_active_response(); |
|
|
|
udp_client_active_report(); |
|
|
|
|
|
|
|
if (!udp_client_active_flag) |
|
|
|
{ |
|
|
@ -456,7 +361,7 @@ void udp_client_genlock_and_esync_active(void) |
|
|
|
} |
|
|
|
|
|
|
|
active_report_data_structer.index += 1; |
|
|
|
active_report_data_structer.time_stamp_s = 0; |
|
|
|
// active_report_data_structer.time_stamp_s = 0; |
|
|
|
genlock_and_esync_active_flag = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -466,7 +371,7 @@ bool *udp_client_genlock_and_esync_active_flag_ret(void) |
|
|
|
return &genlock_and_esync_active_flag; |
|
|
|
} |
|
|
|
|
|
|
|
active_report_data_t *udp_client_get_active_report_data_structer(void) |
|
|
|
protocol_active_and_trigger_report_t *udp_client_get_active_report_data_structer(void) |
|
|
|
{ |
|
|
|
return &active_report_data_structer; |
|
|
|
} |