Browse Source

清除编码器指令完成并测试通过

new_pcb
tianjialong 2 years ago
parent
commit
746f18fc31
  1. 25
      MDK-ARM/LWIP.uvguix.29643
  2. 27
      usersrc/protocol.h
  3. 161
      usersrc/udpclient.c

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

27
usersrc/protocol.h

@ -6,7 +6,8 @@
#define adwin_config_protocol_size sizeof(adwin_config_protocol_t)
#define active_report_data_size sizeof(active_report_data_t)
#define basic_report_data_size sizeof(basic_report_data_t)
#define protocol_basic_size sizeof(protocol_basic_t)
typedef enum
{
@ -21,10 +22,17 @@ typedef enum
PROTOCOL_CMD_CLEAR_ENCODER = 0X01,
PROTOCOL_CMD_READ_ENCODER = 0X02,
PROTOCOL_CMD_ACTIVE = 0X03,
PROTOCOL_CMD_TRIGGER_REPORT = 0X04,
PROTOCOL_CMD_TRIGGER = 0X04,
PROTOCOL_CMD_MODIFY_NETWORK_CONFIGURATIONS = 0X05,
} protocol_pc_and_control_cmd_id_type;
typedef enum
{
PROTOCOL_STATUS_SUCCESS = 0X00,
PROTOCOL_STATUS_PARAMETER_ERROR = 0X01,
PROTOCOL_STATUS_HARDWARE_ERROR = 0X02,
} protocol_status_code_type;
#pragma pack(push, 1)
typedef struct
@ -80,6 +88,17 @@ typedef struct
} get_encoder_respont_t;
/***********************************************************************************************************************
* *******************************************************basic******************************************************* *
***********************************************************************************************************************/
/* 为了拿指令id而出来的指令格式 */
typedef struct
{
uint16_t index; /* */
uint16_t cmd_id; /* 指令id */
uint8_t checksum; /* 校验和 */
} protocol_basic_t;
/***********************************************************************************************************************
* ************************************************************************************************* *
***********************************************************************************************************************/
typedef struct
@ -168,7 +187,7 @@ typedef struct
uint8_t configuration_option; /* 配置选项 */
uint32_t data; /* 数据 */
uint8_t checksum; /* 校验和 */
} protocol_network_config_order_t;
} protocol_modify_network_configurations_order_t;
typedef struct
{
@ -176,7 +195,7 @@ typedef struct
uint16_t cmd_id; /* 指令id */
uint16_t status_code; /* 状态码 */
uint8_t checksum; /* 校验和 */
} protocol_network_config_receipt_t;
} protocol_modify_network_configurations_receipt_t;
/***********************************************************************************************************************
* ********************************************************************************************* *

161
usersrc/udpclient.c

@ -13,7 +13,7 @@
if (computesum8((char *)data, recv_datalen - 1) != data->checksum) \
{ \
printf("checksum error\r\n"); \
return; \
checksum_flag = false; \
}
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_2 2
#define ORDER_RECEIPT_INTERCONVERSION 0X8000
static char s_sendBuf[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)
{
/* debug使用 */
@ -216,73 +235,113 @@ void udp_client_recv(void)
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;
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
{
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;
case CLEAR_ENCODER_2:
encoder_switch_encoder_clear_count_and_structer_count(DRIVEN_ENCODER_GEAR);
case PROTOCOL_CMD_READ_ENCODER: /* 读取编码器数据指令 */
break;
case PROTOCOL_CMD_ACTIVE: /* 配置主动上报指令 */
default:
printf("not find clear encoder cmd\r\n");
break;
}
case PROTOCOL_CMD_TRIGGER: /* 配置触发上报指令 */
udp_client_create_basic_response(rxcmd, recv_datalen);
break;
case PROTOCOL_CMD_MODIFY_NETWORK_CONFIGURATIONS: /* 配置网络相关指令 */
break;
@ -290,6 +349,10 @@ void udp_client_parse(int recv_datalen)
break;
}
}
else
{
/* error */
}
}
void udp_client_active(void)

Loading…
Cancel
Save