Browse Source

修改了主动上报,删除了之前老板的协议格式

new_pcb
tianjialong 2 years ago
parent
commit
de1d6c0675
  1. 22
      MDK-ARM/LWIP.uvguix.29643
  2. 8
      usersrc/encoder.c
  3. 47
      usersrc/protocol.h
  4. 167
      usersrc/udpclient.c
  5. 2
      usersrc/udpclient.h

22
MDK-ARM/LWIP.uvguix.29643
File diff suppressed because it is too large
View File

8
usersrc/encoder.c

@ -144,8 +144,8 @@ encoder_light_state_t encoder_get_state(encoder_usage_t encoder)
void encoder_all_encoder_clear_counter_and_structer_count(void)
{
udp_client_get_active_report_data_structer()->encoder_1_count = 0;
udp_client_get_active_report_data_structer()->encoder_2_count = 0;
udp_client_get_active_report_data_structer()->encoder1 = 0;
udp_client_get_active_report_data_structer()->encoder2 = 0;
encoder_all_clear_counter();
}
@ -155,11 +155,11 @@ void encoder_switch_encoder_clear_count_and_structer_count(encoder_usage_t encod
switch (encoder)
{
case CAMERA_ENCODER:
udp_client_get_active_report_data_structer()->encoder_1_count = 0;
udp_client_get_active_report_data_structer()->encoder1 = 0;
encoder_clear_counter(CAMERA_ENCODER);
break;
case DRIVEN_ENCODER_GEAR:
udp_client_get_active_report_data_structer()->encoder_2_count = 0;
udp_client_get_active_report_data_structer()->encoder2 = 0;
encoder_clear_counter(DRIVEN_ENCODER_GEAR);
break;

47
usersrc/protocol.h

@ -11,14 +11,6 @@
typedef enum
{
CMD_SET_AUTOMATIC_REPORTING_FREQUENCY = 0X01,
CMD_GET_ENCODER_DATA = 0X02,
CMD_SET_ACTIVE = 0X03,
CMD_CLEAR_ENCODER = 0X04,
} cmd_id_type;
typedef enum
{
PROTOCOL_CMD_CLEAR_ENCODER = 0X01,
PROTOCOL_CMD_READ_ENCODER = 0X02,
PROTOCOL_CMD_ACTIVE = 0X03,
@ -52,41 +44,6 @@ typedef struct
uint64_t fixed_bit_6; /* 固定位6:00 00 00 00 00 00 00 00 */
} adwin_config_protocol_t;
typedef struct
{
uint16_t index; /* */
uint16_t cmd_id; /* 指令id */
uint32_t time_stamp_s; /* 时间戳 */
uint32_t encoder_1_count; /* 编码器1计数 */
uint32_t encoder_2_count; /* 编码器2计数 */
uint8_t device_id; /* 设备ID号 */
uint8_t checksum; /* 校验和 */
} active_report_data_t;
typedef struct
{
uint16_t index; /* */
uint16_t cmd_id; /* 指令id */
uint16_t data; /* 数据 */
uint8_t checksum; /* 校验和 */
} basic_report_data_t;
typedef struct
{
uint16_t index; /* */
uint16_t cmd_id; /* 指令id */
uint8_t checksum; /* 校验和 */
} get_encoder_report_t;
typedef struct
{
uint16_t index; /* */
uint16_t cmd_id; /* 指令id */
uint32_t encoder1; /* 编码器1的数据 */
uint32_t encoder2; /* 编码器2的数据 */
uint8_t checksum; /* 校验和 */
} get_encoder_respont_t;
/***********************************************************************************************************************
* *******************************************************basic******************************************************* *
***********************************************************************************************************************/
@ -207,8 +164,8 @@ typedef struct
uint16_t cmd_id; /* 指令id */
uint32_t placeholder_1; /* 占位符1 */
uint32_t placeholder_2; /* 占位符2 */
int32_t encoder1; /* 编码器1的数据 */
int32_t encoder2; /* 编码器2的数据 */
uint32_t encoder1; /* 编码器1的数据 */
uint32_t encoder2; /* 编码器2的数据 */
uint8_t checksum; /* 校验和 */
} protocol_active_and_trigger_report_t;

167
usersrc/udpclient.c

@ -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;
}

2
usersrc/udpclient.h

@ -12,4 +12,4 @@ void udp_client_active(void);
void udp_client_genlock_and_esync_active(void);
bool *udp_client_genlock_and_esync_active_flag_ret(void);
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);
Loading…
Cancel
Save