From 1c59b79b9f62fab8ee1b303eda506e3ed5eba26b Mon Sep 17 00:00:00 2001 From: tianjialong Date: Fri, 17 Mar 2023 18:58:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=BD=91=E7=BB=9C=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8C=87=E4=BB=A4=E7=8E=A9=E6=88=90=E5=B9=B6=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/LWIP.uvguix.29643 | 6 +++--- usersrc/protocol.h | 11 ++++++++-- usersrc/udpclient.c | 52 ++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/MDK-ARM/LWIP.uvguix.29643 b/MDK-ARM/LWIP.uvguix.29643 index 198fc24..202d179 100644 --- a/MDK-ARM/LWIP.uvguix.29643 +++ b/MDK-ARM/LWIP.uvguix.29643 @@ -3651,9 +3651,9 @@ ..\usersrc\udpclient.c - 72 - 53 - 57 + 0 + 400 + 423 1 0 diff --git a/usersrc/protocol.h b/usersrc/protocol.h index bd25002..f149e26 100644 --- a/usersrc/protocol.h +++ b/usersrc/protocol.h @@ -25,6 +25,13 @@ typedef enum PROTOCOL_STATUS_HARDWARE_ERROR = 0X02, } protocol_status_code_type; +typedef enum +{ + OPTION_IP = 0X01, /* ip */ + OPTION_GW = 0X02, /* 网关 */ + OPTION_NETMASK = 0X03, /* 子网掩码 */ +} network_configuration_option_type; + #pragma pack(push, 1) typedef struct @@ -164,8 +171,8 @@ typedef struct uint16_t cmd_id; /* 指令id */ uint32_t placeholder_1; /* 占位符1 */ uint32_t placeholder_2; /* 占位符2 */ - uint32_t encoder1; /* 编码器1的数据 */ - uint32_t encoder2; /* 编码器2的数据 */ + uint32_t encoder1; /* 编码器1的数据 */ + uint32_t encoder2; /* 编码器2的数据 */ uint8_t checksum; /* 校验和 */ } protocol_active_and_trigger_report_t; diff --git a/usersrc/udpclient.c b/usersrc/udpclient.c index 28e23bd..107a3b7 100644 --- a/usersrc/udpclient.c +++ b/usersrc/udpclient.c @@ -8,6 +8,7 @@ #include "def.h" #include "encoder.h" #include "zport.h" +#include "config.h" #define cmd_checksum(data) \ if (computesum8((char *)data, recv_datalen - 1) != data->checksum) \ @@ -188,6 +189,21 @@ static void udp_client_trigger_cmd_receipt(protocol_trigger_order_t *order, prot printf("send basic_response error\r\n"); } } + +/* 修改网络相关配置指令回执 */ +static void udp_client_modify_network_configurations_cmd_receipt(protocol_modify_network_configurations_order_t *order, protocol_status_code_type state_code) +{ + protocol_modify_network_configurations_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_modify_network_configurations_receipt_t) - 1); + if (sendto(sock_Client, &receipt, sizeof(protocol_modify_network_configurations_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) @@ -300,7 +316,7 @@ void udp_client_parse(int recv_datalen) 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; + 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: /* 清除编码器数据指令 */ @@ -383,9 +399,39 @@ void udp_client_parse(int recv_datalen) } break; case PROTOCOL_CMD_MODIFY_NETWORK_CONFIGURATIONS: /* 配置网络相关指令 */ + cmd_checksum(protocol_modify_network_configurations_cmd); + if (checksum_flag) + { + switch (protocol_modify_network_configurations_cmd->configuration_option) + { + case OPTION_IP: + config_get()->ip = protocol_modify_network_configurations_cmd->data; + break; + case OPTION_GW: + config_get()->gw = protocol_modify_network_configurations_cmd->data; + break; + case OPTION_NETMASK: + config_get()->netmask = protocol_modify_network_configurations_cmd->data; + break; + + default: + break; + } - break; - + if (config_flash_write() == 0) + { + udp_client_modify_network_configurations_cmd_receipt(protocol_modify_network_configurations_cmd, PROTOCOL_STATUS_SUCCESS); + } + else + { /* 存在修改了配置,但是写入到flash失败的问题,暂时不处理,处理的话就整一个temp,保存修改前的数据, + 然后写入失败,把temp的数据赋值给修改的字段,通过指令的option来确定修改了啥字段 */ + udp_client_modify_network_configurations_cmd_receipt(protocol_modify_network_configurations_cmd, PROTOCOL_STATUS_HARDWARE_ERROR); + } + } + else + { + udp_client_modify_network_configurations_cmd_receipt(protocol_modify_network_configurations_cmd, PROTOCOL_STATUS_PARAMETER_ERROR); + } default: break; }