fix bug: config_w5500_network

This commit is contained in:
TXuian 2022-11-25 16:34:10 +08:00
parent 1061ce4dff
commit ba6f59e315
2 changed files with 36 additions and 31 deletions

View File

@ -473,33 +473,49 @@ void ifconfig() {
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
ifconfig, ifconfig, printf w5500 configurations); ifconfig, ifconfig, printf w5500 configurations);
void char_arr_assign(uint8_t **dst, uint32_t *src, uint32_t len) { void char_arr_assign(uint8_t *dst[4], uint32_t src[4]) {
for (int i = 0; i < len; ++i) { for (int i = 0; i < 4; ++i) {
(*dst)[i] = (uint8_t)(src[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; wiz_NetInfo wiz_netinfo;
uint32_t tmp_arr[4]; memcpy(&wiz_netinfo, &g_wiz_netinfo, sizeof(wiz_NetInfo));
// config netinfo
sscanf(mac, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], int cur_arg_idx = 1;
&tmp_arr[3]);
char_arr_assign((uint8_t **)&wiz_netinfo.mac, tmp_arr, 4); while (argv[cur_arg_idx] != NULL) {
sscanf(ip, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[3]); if (argv[cur_arg_idx + 1] == NULL) {
char_arr_assign((uint8_t **)&wiz_netinfo.ip, tmp_arr, 4); KPrintf("[W5500] Network config %s requires value.", argv[cur_arg_idx]);
sscanf(sn, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[3]); return;
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]); uint32_t tmp_arr[4];
char_arr_assign((uint8_t **)&wiz_netinfo.gw, tmp_arr, 4); sscanf(argv[cur_arg_idx + 1], "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1],
sscanf(dns, "%d.%d.%d.%d", &tmp_arr[0], &tmp_arr[1], &tmp_arr[2], &tmp_arr[2], &tmp_arr[3]);
&tmp_arr[3]); if (argv[cur_arg_idx] == "ip") {
char_arr_assign((uint8_t **)&wiz_netinfo.dns, tmp_arr, 4); for (int i = 0; i < 4; ++i) {
// set new netinfo 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); ctlnetwork(CN_SET_NETINFO, (void *)&wiz_netinfo);
ifconfig(); ifconfig();
} }
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC) | SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
SHELL_CMD_PARAM_NUM(5),
config_w5500_network, config_w5500_network, config_w5500_network, config_w5500_network,
set w5500 configurations); set w5500 configurations);

View File

@ -151,7 +151,6 @@ static uint32 SpiDrvConfigure(void *drv,
static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev,
struct SpiDataStandard *spi_datacfg) { struct SpiDataStandard *spi_datacfg) {
DEBUG_PRINT
SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data); SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data);
uint8 device_id = dev_param->spi_slave_param->spi_slave_id; 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); __spi_set_tmod(device_master_id, SPI_TMOD_TRANS_RECV);
if (spi_datacfg->spi_chip_select) { if (spi_datacfg->spi_chip_select) {
DEBUG_PRINT
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_LOW); gpiohs_set_pin(cs_gpio_pin, GPIO_PV_LOW);
} }
if (spi_datacfg->length) { if (spi_datacfg->length) {
DEBUG_PRINT
spi_instance[device_master_id]->dmacr = 0x3; spi_instance[device_master_id]->dmacr = 0x3;
spi_instance[device_master_id]->ssienr = 0x01; spi_instance[device_master_id]->ssienr = 0x01;
@ -221,20 +218,17 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev,
} }
if (spi_datacfg->spi_cs_release) { if (spi_datacfg->spi_cs_release) {
DEBUG_PRINT
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH); gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH);
} }
spi_datacfg = spi_datacfg->next; spi_datacfg = spi_datacfg->next;
} }
DEBUG_PRINT
return EOK; return EOK;
} }
static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev,
struct SpiDataStandard *spi_datacfg) { struct SpiDataStandard *spi_datacfg) {
DEBUG_PRINT
SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data); SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data);
uint32 spi_read_length = 0; 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 device_master_id = dev_param->spi_dma_param->spi_master_id;
uint8 cs_gpio_pin = dev_param->spi_slave_param->spi_cs_gpio_pin; uint8 cs_gpio_pin = dev_param->spi_slave_param->spi_cs_gpio_pin;
DEBUG_PRINT
while (NONE != spi_datacfg) { while (NONE != spi_datacfg) {
uint32_t *rx_buff = NONE; uint32_t *rx_buff = NONE;
int i; int i;
@ -252,7 +245,6 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev,
__spi_set_tmod(device_master_id, SPI_TMOD_TRANS_RECV); __spi_set_tmod(device_master_id, SPI_TMOD_TRANS_RECV);
if (spi_datacfg->spi_chip_select) { if (spi_datacfg->spi_chip_select) {
DEBUG_PRINT
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_LOW); 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]->ser = 0x00;
spi_instance[device_master_id]->ssienr = 0x00; spi_instance[device_master_id]->ssienr = 0x00;
DEBUG_PRINT
if (spi_datacfg->rx_buff) { if (spi_datacfg->rx_buff) {
for (i = 0; i < spi_datacfg->length; i++) { for (i = 0; i < spi_datacfg->length; i++) {
((uint8_t *)spi_datacfg->rx_buff)[i] = (uint8_t)rx_buff[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) { if (spi_datacfg->spi_cs_release) {
DEBUG_PRINT
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH); 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; spi_datacfg = spi_datacfg->next;
} }
DEBUG_PRINT
return spi_read_length; return spi_read_length;
} }