fix bug: config_w5500_network
This commit is contained in:
parent
1061ce4dff
commit
ba6f59e315
|
@ -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);
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue