From ba6f59e315ba0205c6f45988fbe8066e98eba3ac Mon Sep 17 00:00:00 2001 From: TXuian <1163589503@qq.com> Date: Fri, 25 Nov 2022 16:34:10 +0800 Subject: [PATCH] fix bug: config_w5500_network --- .../ethernet/connect_w5500.c | 56 ++++++++++++------- .../third_party_driver/spi/connect_spi.c | 11 ---- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/ethernet/connect_w5500.c b/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/ethernet/connect_w5500.c index 22803ee9e..ef7f1e26d 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/ethernet/connect_w5500.c +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/ethernet/connect_w5500.c @@ -473,33 +473,49 @@ void ifconfig() { SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), ifconfig, ifconfig, printf w5500 configurations); -void char_arr_assign(uint8_t **dst, uint32_t *src, uint32_t len) { - for (int i = 0; i < len; ++i) { +void char_arr_assign(uint8_t *dst[4], uint32_t src[4]) { + for (int i = 0; i < 4; ++i) { (*dst)[i] = (uint8_t)(src[i]); } } -void config_w5500_network(char *mac, char *ip, char *sn, char *gw, char *dns) { +void config_w5500_network(int argc, char *argv[]) { + if (argc < 2) { + KPrintf("[W5500] Network config require params."); + return; + } + wiz_NetInfo wiz_netinfo; - uint32_t tmp_arr[4]; - // config netinfo - sscanf(mac, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], - &tmp_arr[3]); - char_arr_assign((uint8_t **)&wiz_netinfo.mac, tmp_arr, 4); - sscanf(ip, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[3]); - char_arr_assign((uint8_t **)&wiz_netinfo.ip, tmp_arr, 4); - sscanf(sn, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[3]); - char_arr_assign((uint8_t **)&wiz_netinfo.sn, tmp_arr, 4); - sscanf(gw, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[3]); - char_arr_assign((uint8_t **)&wiz_netinfo.gw, tmp_arr, 4); - sscanf(dns, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], - &tmp_arr[3]); - char_arr_assign((uint8_t **)&wiz_netinfo.dns, tmp_arr, 4); - // set new netinfo + memcpy(&wiz_netinfo, &g_wiz_netinfo, sizeof(wiz_NetInfo)); + + int cur_arg_idx = 1; + + while (argv[cur_arg_idx] != NULL) { + if (argv[cur_arg_idx + 1] == NULL) { + KPrintf("[W5500] Network config %s requires value.", argv[cur_arg_idx]); + return; + } + uint32_t tmp_arr[4]; + sscanf(argv[cur_arg_idx + 1], "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], + &tmp_arr[2], &tmp_arr[3]); + if (argv[cur_arg_idx] == "ip") { + for (int i = 0; i < 4; ++i) { + wiz_netinfo.ip[i] = (uint8_t)(tmp_arr[i]); + } + } else if (argv[cur_arg_idx] == "sn") { + for (int i = 0; i < 4; ++i) { + wiz_netinfo.sn[i] = (uint8_t)(tmp_arr[i]); + } + } else if (argv[cur_arg_idx] == "gw") { + for (int i = 0; i < 4; ++i) { + wiz_netinfo.gw[i] = (uint8_t)(tmp_arr[i]); + } + } + } + ctlnetwork(CN_SET_NETINFO, (void *)&wiz_netinfo); ifconfig(); } -SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC) | - SHELL_CMD_PARAM_NUM(5), +SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), config_w5500_network, config_w5500_network, set w5500 configurations); \ No newline at end of file diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/spi/connect_spi.c b/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/spi/connect_spi.c index 4191b4e6b..67d5ef7bc 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/spi/connect_spi.c +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-riscv64/third_party_driver/spi/connect_spi.c @@ -151,7 +151,6 @@ static uint32 SpiDrvConfigure(void *drv, static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDataStandard *spi_datacfg) { - DEBUG_PRINT SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data); uint8 device_id = dev_param->spi_slave_param->spi_slave_id; @@ -166,12 +165,10 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, __spi_set_tmod(device_master_id, SPI_TMOD_TRANS_RECV); if (spi_datacfg->spi_chip_select) { - DEBUG_PRINT gpiohs_set_pin(cs_gpio_pin, GPIO_PV_LOW); } if (spi_datacfg->length) { - DEBUG_PRINT spi_instance[device_master_id]->dmacr = 0x3; spi_instance[device_master_id]->ssienr = 0x01; @@ -221,20 +218,17 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, } if (spi_datacfg->spi_cs_release) { - DEBUG_PRINT gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH); } spi_datacfg = spi_datacfg->next; } - DEBUG_PRINT return EOK; } static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiDataStandard *spi_datacfg) { - DEBUG_PRINT SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data); uint32 spi_read_length = 0; @@ -243,7 +237,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, uint8 device_master_id = dev_param->spi_dma_param->spi_master_id; uint8 cs_gpio_pin = dev_param->spi_slave_param->spi_cs_gpio_pin; - DEBUG_PRINT while (NONE != spi_datacfg) { uint32_t *rx_buff = NONE; int i; @@ -252,7 +245,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, __spi_set_tmod(device_master_id, SPI_TMOD_TRANS_RECV); if (spi_datacfg->spi_chip_select) { - DEBUG_PRINT gpiohs_set_pin(cs_gpio_pin, GPIO_PV_LOW); } @@ -296,7 +288,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, spi_instance[device_master_id]->ser = 0x00; spi_instance[device_master_id]->ssienr = 0x00; - DEBUG_PRINT if (spi_datacfg->rx_buff) { for (i = 0; i < spi_datacfg->length; i++) { ((uint8_t *)spi_datacfg->rx_buff)[i] = (uint8_t)rx_buff[i]; @@ -310,7 +301,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, } if (spi_datacfg->spi_cs_release) { - DEBUG_PRINT gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH); } @@ -318,7 +308,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, spi_datacfg = spi_datacfg->next; } - DEBUG_PRINT return spi_read_length; }