forked from xuos/xiuos
				
			Fit w5500 to lwip, fix some unintialized params and printf warning.
This commit is contained in:
		
							parent
							
								
									8b32c2f4ed
								
							
						
					
					
						commit
						31b939fbb8
					
				|  | @ -324,7 +324,7 @@ void TestSocket(int argc, char* argv[]) | |||
|             return; | ||||
|         } else { | ||||
|             memset(iperf_param.host, 0, sizeof(iperf_param.host)); | ||||
|             strncpy(iperf_param.host, ip_ptr, strlen(ip_ptr)); | ||||
|             strncpy(iperf_param.host, ip_ptr, sizeof(iperf_param.host)); | ||||
|         } | ||||
|         iperf_mode->mode = IPERF_MODE_CLIENT; | ||||
|     } | ||||
|  |  | |||
|  | @ -206,7 +206,7 @@ static int PrivLcdIoctl(int fd, int cmd, void *args) | |||
| 
 | ||||
| int PrivIoctl(int fd, int cmd, void *args) | ||||
| { | ||||
|     int ret; | ||||
|     int ret = -ERROR; | ||||
|     struct PrivIoctlCfg *ioctl_cfg = (struct PrivIoctlCfg *)args; | ||||
|     switch (ioctl_cfg->ioctl_driver_type) | ||||
|     { | ||||
|  |  | |||
|  | @ -66,7 +66,7 @@ int timer_create(clockid_t clockid, struct sigevent * evp, timer_t * timerid) | |||
|     } | ||||
| 
 | ||||
|     memset(timer_name, 0, sizeof(timer_name)); | ||||
|     snprintf(timer_name, sizeof(timer_name), "timer_%d", clockid); | ||||
|     snprintf(timer_name, sizeof(timer_name), "timer_%ld", clockid); | ||||
| 
 | ||||
|     sem_init(&timer_sem, 0, 0); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| export CFLAGS := -mcmodel=medany -march=rv64imafdc -mabi=lp64d -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -O0 -ggdb -fgnu89-inline -Werror | ||||
| export CFLAGS := -mcmodel=medany -march=rv64imafdc -mabi=lp64d -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -O1 -fgnu89-inline -Wformat -Wuninitialized | ||||
| # export CFLAGS := -mcmodel=medany -march=rv64imafdc -mabi=lp64d -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -O0 -ggdb -fgnu89-inline -Werror -Wformat -Wuninitialized
 | ||||
| export AFLAGS := -c -mcmodel=medany -march=rv64imafdc -mabi=lp64d -x assembler-with-cpp -ggdb | ||||
| export LFLAGS := -mcmodel=medany -march=rv64imafdc -mabi=lp64d -nostartfiles -Wl,--gc-sections,-Map=XiZi-edu-riscv64.map,-cref,-u,_start -T $(BSP_ROOT)/link.lds | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,11 +25,12 @@ | |||
| #ifndef _BSP_ATOMIC_H | ||||
| #define _BSP_ATOMIC_H | ||||
| 
 | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #define SPINLOCK_INIT \ | ||||
|     {                 \ | ||||
|         0             \ | ||||
|  | @ -63,7 +64,7 @@ extern "C" { | |||
| 
 | ||||
| typedef struct _spinlock | ||||
| { | ||||
|     int lock; | ||||
|     int32_t lock; | ||||
| } spinlock_t; | ||||
| 
 | ||||
| typedef struct _semaphore | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| # SRC_FILES := socket.c connect_w5500.c w5500.c wizchip_conf.c spi_interface.c wiz_ping.c connect_w5500_test.c wiz_iperf.c
 | ||||
| SRC_FILES := socket.c connect_w5500.c w5500.c wizchip_conf.c spi_interface.c  connect_w5500_test.c w5x00_lwip.c | ||||
| SRC_FILES := socket.c connect_w5500.c w5500.c wizchip_conf.c spi_interface.c wiz_ping.c connect_w5500_test.c w5x00_lwip.c wiz_iperf.c | ||||
| 
 | ||||
| include $(KERNEL_ROOT)/compiler.mk | ||||
|  | @ -5,8 +5,8 @@ | |||
| #include <dev_pin.h> | ||||
| #include <drv_io_config.h> | ||||
| #include <fpioa.h> | ||||
| #include <string.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <xs_base.h> | ||||
| 
 | ||||
| #include "gpio_common.h" | ||||
|  | @ -16,6 +16,8 @@ | |||
| 
 | ||||
| #include "connect_ethernet.h" | ||||
| 
 | ||||
| #include <sys.h> | ||||
| 
 | ||||
| #define SPI_LORA_FREQUENCY 10000000 | ||||
| 
 | ||||
| // spi operations
 | ||||
|  | @ -25,12 +27,14 @@ extern void spi_select_cs(void); | |||
| extern void spi_deselete_cs(void); | ||||
| 
 | ||||
| // global configurations for w5500 tcp connection
 | ||||
| uint32_t get_gbuf_size() { | ||||
| uint32_t get_gbuf_size() | ||||
| { | ||||
|     static const uint32_t g_wiznet_buf_size = 2048; | ||||
|     return g_wiznet_buf_size; | ||||
| } | ||||
| 
 | ||||
| wiz_NetInfo *get_gnetinfo() { | ||||
| wiz_NetInfo* get_gnetinfo() | ||||
| { | ||||
|     static wiz_NetInfo g_wiz_netinfo = { .mac = { 0x00, 0x08, 0xdc, 0x11, 0x11, 0x11 }, | ||||
|         .ip = { 192, 168, 130, 77 }, | ||||
|         .sn = { 255, 255, 254, 0 }, | ||||
|  | @ -40,7 +44,8 @@ wiz_NetInfo *get_gnetinfo() { | |||
|     return &g_wiz_netinfo; | ||||
| } | ||||
| 
 | ||||
| int network_init() { | ||||
| int network_init() | ||||
| { | ||||
|     wiz_NetInfo check_wiz_netinfo; | ||||
|     check_wiz_netinfo.dhcp = NETINFO_STATIC; | ||||
|     ctlnetwork(CN_SET_NETINFO, (void*)get_gnetinfo()); | ||||
|  | @ -79,12 +84,12 @@ int network_init() { | |||
| 
 | ||||
| /****************** spi init ******************/ | ||||
| static struct Bus* w5500_spi_bus; | ||||
| int w5500_spi_init() { | ||||
| int w5500_spi_init() | ||||
| { | ||||
|     x_err_t ret = EOK; | ||||
| 
 | ||||
|     w5500_spi_bus = BusFind(SPI_BUS_NAME_1); | ||||
|   w5500_spi_bus->owner_haldev = | ||||
|       BusFindDevice(w5500_spi_bus, SPI_1_DEVICE_NAME_0); | ||||
|     w5500_spi_bus->owner_haldev = BusFindDevice(w5500_spi_bus, SPI_1_DEVICE_NAME_0); | ||||
|     w5500_spi_bus->owner_driver = BusFindDriver(w5500_spi_bus, SPI_1_DRV_NAME); | ||||
| 
 | ||||
|     w5500_spi_bus->match(w5500_spi_bus->owner_driver, | ||||
|  | @ -116,13 +121,16 @@ int w5500_spi_init() { | |||
|     return EOK; | ||||
| } | ||||
| 
 | ||||
| void spi_write_byte(uint8_t tx_data) { | ||||
| void spi_write_byte(uint8_t tx_data) | ||||
| { | ||||
|     struct BusBlockWriteParam write_param; | ||||
|   write_param.buffer = &tx_data; | ||||
|     uint8_t data = tx_data; | ||||
|     write_param.buffer = &data; | ||||
|     write_param.size = 1; | ||||
|     BusDevWriteData(w5500_spi_bus->owner_haldev, &write_param); | ||||
| } | ||||
| uint8_t spi_read_byte(void) { | ||||
| uint8_t spi_read_byte(void) | ||||
| { | ||||
|     uint8_t result = 0; | ||||
|     struct BusBlockReadParam read_param; | ||||
|     read_param.buffer = &result; | ||||
|  | @ -130,13 +138,15 @@ uint8_t spi_read_byte(void) { | |||
|     BusDevReadData(w5500_spi_bus->owner_haldev, &read_param); | ||||
|     return result; | ||||
| } | ||||
| void spi_write_burst(uint8_t *tx_buf, uint16_t len) { | ||||
| void spi_write_burst(uint8_t* tx_buf, uint16_t len) | ||||
| { | ||||
|     struct BusBlockWriteParam write_param; | ||||
|     write_param.buffer = tx_buf; | ||||
|     write_param.size = len; | ||||
|     BusDevWriteData(w5500_spi_bus->owner_haldev, &write_param); | ||||
| } | ||||
| void spi_read_burst(uint8_t *rx_buf, uint16_t len) { | ||||
| void spi_read_burst(uint8_t* rx_buf, uint16_t len) | ||||
| { | ||||
|     struct BusBlockReadParam read_param; | ||||
|     read_param.buffer = rx_buf; | ||||
|     read_param.size = len; | ||||
|  | @ -145,7 +155,8 @@ void spi_read_burst(uint8_t *rx_buf, uint16_t len) { | |||
| 
 | ||||
| /****************** chip init ******************/ | ||||
| 
 | ||||
| void wiz_reset() { | ||||
| void wiz_reset() | ||||
| { | ||||
|     gpiohs_set_drive_mode(WIZ_RST_PIN, GPIO_DM_OUTPUT); | ||||
|     gpiohs_set_pin(WIZ_RST_PIN, GPIO_PV_LOW); | ||||
|     MdelayKTask(20); | ||||
|  | @ -154,10 +165,10 @@ void wiz_reset() { | |||
|     MdelayKTask(20); | ||||
| } | ||||
| 
 | ||||
| void wiz_spi_handler_reg() { | ||||
| void wiz_spi_handler_reg() | ||||
| { | ||||
|     // spi ops registration
 | ||||
| #if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_) || \ | ||||
|     (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_) | ||||
| #if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_) || (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_) | ||||
|     /* register SPI device CS select callback function */ | ||||
|     gpiohs_set_drive_mode(SPI1_CS0_PIN, GPIO_DM_OUTPUT); | ||||
|     reg_wizchip_cs_cbfunc(spi_select_cs, spi_deselete_cs); | ||||
|  | @ -174,7 +185,8 @@ void wiz_spi_handler_reg() { | |||
|     reg_wizchip_spiburst_cbfunc(spi_read_burst, spi_write_burst); | ||||
| } | ||||
| 
 | ||||
| int wiz_chip_cfg_init() { | ||||
| int wiz_chip_cfg_init() | ||||
| { | ||||
|     uint8_t mem_size[2][8] = { { 2, 2, 2, 2, 2, 2, 2, 2 }, { 2, 2, 2, 2, 2, 2, 2, 2 } }; | ||||
| 
 | ||||
|     /* reset WIZnet chip internal PHY, configures PHY mode. */ | ||||
|  | @ -192,11 +204,64 @@ int wiz_chip_cfg_init() { | |||
| } | ||||
| 
 | ||||
| /****************** interrupt handle ******************/ | ||||
| void wiz_irq_handler() {} | ||||
| #ifdef BSP_USING_LWIP | ||||
| #include <sys.h> | ||||
| static inline void spi_if_clr(void) | ||||
| { | ||||
|     setSn_IR(0, 0x1F); | ||||
|     setSIR(0); | ||||
| } | ||||
| 
 | ||||
| int wiz_interrupt_init() { | ||||
| void wiz_irq_handler() | ||||
| { | ||||
|     static x_base eth_irq_lock; | ||||
|     eth_irq_lock = DISABLE_INTERRUPT(); | ||||
| 
 | ||||
|     if (*get_eth_recv_sem() > 0) { | ||||
|         sys_sem_signal(get_eth_recv_sem()); | ||||
|     } | ||||
| 
 | ||||
|     ENABLE_INTERRUPT(eth_irq_lock); | ||||
| } | ||||
| #else | ||||
| void wiz_irq_handler() | ||||
| { | ||||
|     static x_base eth_irq_lock; | ||||
|     eth_irq_lock = DISABLE_INTERRUPT(); | ||||
| 
 | ||||
|     printf("="); | ||||
|     uint8_t ir = getIR(); | ||||
|     setSIR(0x00); | ||||
|     setIR(0x00); | ||||
| 
 | ||||
|     ENABLE_INTERRUPT(eth_irq_lock); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| void wizchip_interrupt_init(uint8_t socket, void (*callback)(void*)) | ||||
| { | ||||
|     int ret_val; | ||||
| 
 | ||||
|     uint8_t reg_val1; | ||||
|     reg_val1 = (SIK_CONNECTED | SIK_DISCONNECTED | SIK_RECEIVED | SIK_TIMEOUT); // except SendOK
 | ||||
|     ret_val = wiz_ctlsocket(socket, CS_SET_INTMASK, (void*)®_val1); | ||||
| 
 | ||||
| #if (_WIZCHIP_ == W5100S) | ||||
|     reg_val = (1 << socket); | ||||
| #elif (_WIZCHIP_ == W5500) | ||||
|     uint16_t reg_val2 = ((1 << socket) << 8); | ||||
| #endif | ||||
|     ret_val = ctlwizchip(CW_SET_INTRMASK, (void*)®_val2); | ||||
| 
 | ||||
|     (void)ret_val; | ||||
| } | ||||
| 
 | ||||
| int wiz_interrupt_init() | ||||
| { | ||||
|     int32_t ret = -ERROR; | ||||
| 
 | ||||
|     wizchip_interrupt_init(0, wiz_irq_handler); | ||||
| 
 | ||||
|     struct Bus* pin_bus = PinBusInitGet(); | ||||
| 
 | ||||
|     struct PinParam pin_param; | ||||
|  | @ -243,11 +308,10 @@ int wiz_interrupt_init() { | |||
|     } | ||||
| 
 | ||||
|     return EOK; | ||||
| 
 | ||||
|   return EOK; | ||||
| } | ||||
| 
 | ||||
| int HwWiznetInit(void) { | ||||
| int HwWiznetInit(void) | ||||
| { | ||||
|     wiz_reset(); | ||||
| 
 | ||||
|     if (EOK != w5500_spi_init()) { | ||||
|  | @ -264,19 +328,23 @@ int HwWiznetInit(void) { | |||
|     setSHAR(wiz_mac); | ||||
|     ctlwizchip(CW_RESET_PHY, 0); | ||||
| 
 | ||||
|   setSn_MR(0, Sn_MR_MFEN | Sn_MR_MACRAW | Sn_MR_MIP6B | Sn_MR_MMB); | ||||
|   // setSn_RXBUF_SIZE(0, 16);
 | ||||
|   // setSn_TXBUF_SIZE(0, 16);
 | ||||
|     wiz_interrupt_init(0, wiz_irq_handler); | ||||
| 
 | ||||
|     setSn_RXBUF_SIZE(0, 16); | ||||
|     setSn_TXBUF_SIZE(0, 16); | ||||
| #define SOCK_ANY_PORT_NUM 0xC000 | ||||
|   wiz_socket(0, Sn_MR_MACRAW, SOCK_ANY_PORT_NUM, 0x00); | ||||
|   // setSn_CR(0, Sn_CR_OPEN);
 | ||||
|   // setSn_CR(0, Sn_CR_CONNECT);
 | ||||
|     setSn_MR(0, Sn_MR_MFEN | Sn_MR_MACRAW | Sn_MR_MIP6B | Sn_MR_MMB); | ||||
|     wiz_socket(0, Sn_MR_MACRAW, SOCK_ANY_PORT_NUM, SOCK_IO_NONBLOCK); | ||||
| 
 | ||||
|     uint8_t sock_iomode = SOCK_IO_NONBLOCK; | ||||
|     wiz_ctlsocket(0, CS_SET_IOMODE, &sock_iomode); | ||||
| 
 | ||||
|     uint8_t sock_sr = 0; | ||||
|     while (1) { | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] sock_sr: %x, MACRAW: %x\n", __func__, sock_sr = getSn_SR(0), SOCK_MACRAW)); | ||||
|         sock_sr = getSn_SR(0); | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] sock_sr: %x, MACRAW: %x\n", __func__, sock_sr, SOCK_MACRAW)); | ||||
|         if (sock_sr == SOCK_MACRAW) { | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("Socket 0 MACRAW mdoe established\r\n")); | ||||
|             SYS_KDEBUG_LOG(WIZNET_DEBUG, ("Socket 0 MACRAW mode established\r\n")); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -96,25 +96,30 @@ uint8_t sock_remained_byte[_WIZCHIP_SOCK_NUM_] = { | |||
| 
 | ||||
| #define CHECK_SOCKNUM()              \ | ||||
|     do {                             \ | ||||
|     if (sn > _WIZCHIP_SOCK_NUM_) return SOCKERR_SOCKNUM; \ | ||||
|         if (sn > _WIZCHIP_SOCK_NUM_) \ | ||||
|             return SOCKERR_SOCKNUM;  \ | ||||
|     } while (0); | ||||
| 
 | ||||
| #define CHECK_SOCKMODE(mode)               \ | ||||
|     do {                                   \ | ||||
|     if ((getSn_MR(sn) & 0x0F) != mode) return SOCKERR_SOCKMODE; \ | ||||
|         if ((getSn_MR(sn) & 0x0F) != mode) \ | ||||
|             return SOCKERR_SOCKMODE;       \ | ||||
|     } while (0); | ||||
| 
 | ||||
| #define CHECK_SOCKINIT()                 \ | ||||
|     do {                                 \ | ||||
|     if ((getSn_SR(sn) != SOCK_INIT)) return SOCKERR_SOCKINIT; \ | ||||
|         if ((getSn_SR(sn) != SOCK_INIT)) \ | ||||
|             return SOCKERR_SOCKINIT;     \ | ||||
|     } while (0); | ||||
| 
 | ||||
| #define CHECK_SOCKDATA()            \ | ||||
|     do {                            \ | ||||
|     if (len == 0) return SOCKERR_DATALEN; \ | ||||
|         if (len == 0)               \ | ||||
|             return SOCKERR_DATALEN; \ | ||||
|     } while (0); | ||||
| 
 | ||||
| int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | ||||
| int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
|     switch (protocol) { | ||||
|     case Sn_MR_TCP: { | ||||
|  | @ -125,7 +130,8 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | |||
|     */ | ||||
|         uint32_t taddr; | ||||
|         getSIPR((uint8_t*)&taddr); | ||||
|       if (taddr == 0) return SOCKERR_SOCKINIT; | ||||
|         if (taddr == 0) | ||||
|             return SOCKERR_SOCKINIT; | ||||
|         break; | ||||
|     } | ||||
|     case Sn_MR_UDP: | ||||
|  | @ -141,9 +147,11 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | |||
|     } | ||||
|     // M20150601 : For SF_TCP_ALIGN & W5300
 | ||||
|     // if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG;
 | ||||
|   if ((flag & 0x04) != 0) return SOCKERR_SOCKFLAG; | ||||
|     if ((flag & 0x04) != 0) | ||||
|         return SOCKERR_SOCKFLAG; | ||||
| #if _WIZCHIP_ == 5200 | ||||
|   if (flag & 0x10) return SOCKERR_SOCKFLAG; | ||||
|     if (flag & 0x10) | ||||
|         return SOCKERR_SOCKFLAG; | ||||
| #endif | ||||
| 
 | ||||
|     if (flag != 0) { | ||||
|  | @ -161,11 +169,13 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | |||
|             break; | ||||
|         case Sn_MR_UDP: | ||||
|             if (flag & SF_IGMP_VER2) { | ||||
|           if ((flag & SF_MULTI_ENABLE) == 0) return SOCKERR_SOCKFLAG; | ||||
|                 if ((flag & SF_MULTI_ENABLE) == 0) | ||||
|                     return SOCKERR_SOCKFLAG; | ||||
|             } | ||||
| #if _WIZCHIP_ == 5500 | ||||
|             if (flag & SF_UNI_BLOCK) { | ||||
|           if ((flag & SF_MULTI_ENABLE) == 0) return SOCKERR_SOCKFLAG; | ||||
|                 if ((flag & SF_MULTI_ENABLE) == 0) | ||||
|                     return SOCKERR_SOCKFLAG; | ||||
|             } | ||||
| #endif | ||||
|             break; | ||||
|  | @ -176,14 +186,14 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | |||
|     wiz_sock_close(sn); | ||||
| // M20150601
 | ||||
| #if _WIZCHIP_ == 5300 | ||||
|   setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | | ||||
|                    (((uint16_t)(flag & 0x02)) << 7)); | ||||
|     setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | (((uint16_t)(flag & 0x02)) << 7)); | ||||
| #else | ||||
|     setSn_MR(sn, (protocol | (flag & 0xF0))); | ||||
| #endif | ||||
|     if (!port) { | ||||
|         port = sock_any_port++; | ||||
|     if (sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; | ||||
|         if (sock_any_port == 0xFFF0) | ||||
|             sock_any_port = SOCK_ANY_PORT_NUM; | ||||
|     } | ||||
|     setSn_PORT(sn, port); | ||||
|     setSn_CR(sn, Sn_CR_OPEN); | ||||
|  | @ -204,15 +214,15 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) { | |||
|     return (int8_t)sn; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_sock_close(uint8_t sn) { | ||||
| int8_t wiz_sock_close(uint8_t sn) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
| // A20160426 : Applied the erratum 1 of W5300
 | ||||
| #if (_WIZCHIP_ == 5300) | ||||
|     // M20160503 : Wrong socket parameter. s -> sn
 | ||||
|     // if( ((getSn_MR(s)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(s) !=
 | ||||
|     // getSn_TxMAX(s)) )
 | ||||
|   if (((getSn_MR(sn) & 0x0F) == Sn_MR_TCP) && | ||||
|       (getSn_TX_FSR(sn) != getSn_TxMAX(sn))) { | ||||
|     if (((getSn_MR(sn) & 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(sn) != getSn_TxMAX(sn))) { | ||||
|         uint8_t destip[4] = { 0, 0, 0, 1 }; | ||||
|         // TODO
 | ||||
|         // You can wait for completing to sending data;
 | ||||
|  | @ -255,7 +265,8 @@ int8_t wiz_sock_close(uint8_t sn) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_sock_listen(uint8_t sn) { | ||||
| int8_t wiz_sock_listen(uint8_t sn) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
|     CHECK_SOCKMODE(Sn_MR_TCP); | ||||
|     CHECK_SOCKINIT(); | ||||
|  | @ -269,7 +280,8 @@ int8_t wiz_sock_listen(uint8_t sn) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_sock_connect(uint8_t sn, uint8_t *addr, uint16_t port) { | ||||
| int8_t wiz_sock_connect(uint8_t sn, uint8_t* addr, uint16_t port) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
|     CHECK_SOCKMODE(Sn_MR_TCP); | ||||
|     CHECK_SOCKINIT(); | ||||
|  | @ -282,17 +294,20 @@ int8_t wiz_sock_connect(uint8_t sn, uint8_t *addr, uint16_t port) { | |||
|         taddr = (taddr << 8) + ((uint32_t)addr[1] & 0x000000FF); | ||||
|         taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF); | ||||
|         taddr = (taddr << 8) + ((uint32_t)addr[3] & 0x000000FF); | ||||
|     if (taddr == 0xFFFFFFFF || taddr == 0) return SOCKERR_IPINVALID; | ||||
|         if (taddr == 0xFFFFFFFF || taddr == 0) | ||||
|             return SOCKERR_IPINVALID; | ||||
|     } | ||||
|     //
 | ||||
| 
 | ||||
|   if (port == 0) return SOCKERR_PORTZERO; | ||||
|     if (port == 0) | ||||
|         return SOCKERR_PORTZERO; | ||||
|     setSn_DIPR(sn, addr); | ||||
|     setSn_DPORT(sn, port); | ||||
|     setSn_CR(sn, Sn_CR_CONNECT); | ||||
|     while (getSn_CR(sn)) | ||||
|         ; | ||||
|   if (sock_io_mode & (1 << sn)) return SOCK_BUSY; | ||||
|     if (sock_io_mode & (1 << sn)) | ||||
|         return SOCK_BUSY; | ||||
|     while (getSn_SR(sn) != SOCK_ESTABLISHED) { | ||||
|         if (getSn_IR(sn) & Sn_IR_TIMEOUT) { | ||||
|             setSn_IR(sn, Sn_IR_TIMEOUT); | ||||
|  | @ -307,7 +322,8 @@ int8_t wiz_sock_connect(uint8_t sn, uint8_t *addr, uint16_t port) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_sock_disconnect(uint8_t sn) { | ||||
| int8_t wiz_sock_disconnect(uint8_t sn) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
|     CHECK_SOCKMODE(Sn_MR_TCP); | ||||
|     setSn_CR(sn, Sn_CR_DISCON); | ||||
|  | @ -315,7 +331,8 @@ int8_t wiz_sock_disconnect(uint8_t sn) { | |||
|     while (getSn_CR(sn)) | ||||
|         ; | ||||
|     sock_is_sending &= ~(1 << sn); | ||||
|   if (sock_io_mode & (1 << sn)) return SOCK_BUSY; | ||||
|     if (sock_io_mode & (1 << sn)) | ||||
|         return SOCK_BUSY; | ||||
|     while (getSn_SR(sn) != SOCK_CLOSED) { | ||||
|         if (getSn_IR(sn) & Sn_IR_TIMEOUT) { | ||||
|             wiz_sock_close(sn); | ||||
|  | @ -325,7 +342,8 @@ int8_t wiz_sock_disconnect(uint8_t sn) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int32_t wiz_sock_send(uint8_t sn, uint8_t *buf, uint16_t len) { | ||||
| int32_t wiz_sock_send(uint8_t sn, uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     uint8_t tmp = 0; | ||||
|     uint16_t freesize = 0; | ||||
| 
 | ||||
|  | @ -357,7 +375,9 @@ int32_t wiz_sock_send(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|             return SOCK_BUSY; | ||||
|     } | ||||
|     freesize = getSn_TxMAX(sn); | ||||
|   if (len > freesize) len = freesize;  // check size not to exceed MAX size.
 | ||||
|     if (len > freesize) | ||||
|         len = freesize; // check size not to exceed MAX size.
 | ||||
| 
 | ||||
|     while (1) { | ||||
|         freesize = getSn_TX_FSR(sn); | ||||
|         tmp = getSn_SR(sn); | ||||
|  | @ -365,8 +385,10 @@ int32_t wiz_sock_send(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|             wiz_sock_close(sn); | ||||
|             return SOCKERR_SOCKSTATUS; | ||||
|         } | ||||
|     if ((sock_io_mode & (1 << sn)) && (len > freesize)) return SOCK_BUSY; | ||||
|     if (len <= freesize) break; | ||||
|         if ((sock_io_mode & (1 << sn)) && (len > freesize)) | ||||
|             return SOCK_BUSY; | ||||
|         if (len <= freesize) | ||||
|             break; | ||||
|     } | ||||
|     wiz_send_data(sn, buf, len); | ||||
| #if _WIZCHIP_ == 5200 | ||||
|  | @ -387,7 +409,8 @@ int32_t wiz_sock_send(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|     return (int32_t)len; | ||||
| } | ||||
| 
 | ||||
| int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | ||||
| int32_t wiz_sock_recv(uint8_t sn, uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     uint8_t tmp = 0; | ||||
|     uint16_t recvsize = 0; | ||||
| // A20150601 : For integarating with W5300
 | ||||
|  | @ -401,7 +424,8 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|     CHECK_SOCKDATA(); | ||||
| 
 | ||||
|     recvsize = getSn_RxMAX(sn); | ||||
|   if (recvsize < len) len = recvsize; | ||||
|     if (recvsize < len) | ||||
|         len = recvsize; | ||||
| 
 | ||||
| // A20150601 : For Integrating with W5300
 | ||||
| #if _WIZCHIP_ == 5300 | ||||
|  | @ -425,8 +449,10 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|                     return SOCKERR_SOCKSTATUS; | ||||
|                 } | ||||
|             } | ||||
|       if ((sock_io_mode & (1 << sn)) && (recvsize == 0)) return SOCK_BUSY; | ||||
|       if (recvsize != 0) break; | ||||
|             if ((sock_io_mode & (1 << sn)) && (recvsize == 0)) | ||||
|                 return SOCK_BUSY; | ||||
|             if (recvsize != 0) | ||||
|                 break; | ||||
|         }; | ||||
| #if _WIZCHIP_ == 5300 | ||||
|     } | ||||
|  | @ -446,7 +472,8 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|         } | ||||
|         sock_remained_size[sn] = recvsize; | ||||
|     } | ||||
|   if (len > sock_remained_size[sn]) len = sock_remained_size[sn]; | ||||
|     if (len > sock_remained_size[sn]) | ||||
|         len = sock_remained_size[sn]; | ||||
|     recvsize = len; | ||||
|     if (sock_pack_info[sn] & PACK_FIFOBYTE) { | ||||
|         *buf = sock_remained_byte[sn]; | ||||
|  | @ -464,13 +491,16 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|     sock_remained_size[sn] -= recvsize; | ||||
|     if (sock_remained_size[sn] != 0) { | ||||
|         sock_pack_info[sn] |= PACK_REMAINED; | ||||
|     if (recvsize & 0x1) sock_pack_info[sn] |= PACK_FIFOBYTE; | ||||
|         if (recvsize & 0x1) | ||||
|             sock_pack_info[sn] |= PACK_FIFOBYTE; | ||||
|     } else | ||||
|         sock_pack_info[sn] = PACK_COMPLETED; | ||||
|   if (getSn_MR(sn) & Sn_MR_ALIGN) sock_remained_size[sn] = 0; | ||||
|     if (getSn_MR(sn) & Sn_MR_ALIGN) | ||||
|         sock_remained_size[sn] = 0; | ||||
|         // len = recvsize;
 | ||||
| #else | ||||
|   if (recvsize < len) len = recvsize; | ||||
|     if (recvsize < len) | ||||
|         len = recvsize; | ||||
|     wiz_recv_data(sn, buf, len); | ||||
|     setSn_CR(sn, Sn_CR_RECV); | ||||
|     while (getSn_CR(sn)) | ||||
|  | @ -482,8 +512,11 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) { | |||
|     return (int32_t)len; | ||||
| } | ||||
| 
 | ||||
| #include <xizi.h> | ||||
| #include <xs_kdbg.h> | ||||
| int32_t wiz_sock_sendto(uint8_t sn, uint8_t* buf, uint16_t len, uint8_t* addr, | ||||
|                         uint16_t port) { | ||||
|     uint16_t port) | ||||
| { | ||||
|     uint8_t tmp = 0; | ||||
|     uint16_t freesize = 0; | ||||
|     uint32_t taddr; | ||||
|  | @ -527,12 +560,16 @@ int32_t wiz_sock_sendto(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
|     setSn_DIPR(sn, addr); | ||||
|     setSn_DPORT(sn, port); | ||||
|     freesize = getSn_TxMAX(sn); | ||||
|   if (len > freesize) len = freesize;  // check size not to exceed MAX size.
 | ||||
|     if (len > freesize) | ||||
|         len = freesize; // check size not to exceed MAX size.
 | ||||
|     while (1) { | ||||
|         freesize = getSn_TX_FSR(sn); | ||||
|     if (getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; | ||||
|     if ((sock_io_mode & (1 << sn)) && (len > freesize)) return SOCK_BUSY; | ||||
|     if (len <= freesize) break; | ||||
|         if (getSn_SR(sn) == SOCK_CLOSED) | ||||
|             return SOCKERR_SOCKCLOSED; | ||||
|         if ((sock_io_mode & (1 << sn)) && (len > freesize)) | ||||
|             return SOCK_BUSY; | ||||
|         if (len <= freesize) | ||||
|             break; | ||||
|     }; | ||||
|     wiz_send_data(sn, buf, len); | ||||
| 
 | ||||
|  | @ -556,6 +593,7 @@ int32_t wiz_sock_sendto(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
|         ; | ||||
|     while (1) { | ||||
|         tmp = getSn_IR(sn); | ||||
|         // SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] %d, tmp: %x\n", __func__, __LINE__, tmp));
 | ||||
|         if (tmp & Sn_IR_SENDOK) { | ||||
|             setSn_IR(sn, Sn_IR_SENDOK); | ||||
|             break; | ||||
|  | @ -568,14 +606,16 @@ int32_t wiz_sock_sendto(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
| // len = (uint16_t)SOCKERR_TIMEOUT;
 | ||||
| // break;
 | ||||
| #if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
 | ||||
|       if (taddr) setSUBR((uint8_t *)&taddr); | ||||
|             if (taddr) | ||||
|                 setSUBR((uint8_t*)&taddr); | ||||
| #endif | ||||
|             return SOCKERR_TIMEOUT; | ||||
|         } | ||||
|         ////////////
 | ||||
|     } | ||||
| #if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
 | ||||
|   if (taddr) setSUBR((uint8_t *)&taddr); | ||||
|     if (taddr) | ||||
|         setSUBR((uint8_t*)&taddr); | ||||
| #endif | ||||
|     // M20150409 : Explicit Type Casting
 | ||||
|     // return len;
 | ||||
|  | @ -583,7 +623,8 @@ int32_t wiz_sock_sendto(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
| } | ||||
| 
 | ||||
| int32_t wiz_sock_recvfrom(uint8_t sn, uint8_t* buf, uint16_t len, uint8_t* addr, | ||||
|                           uint16_t *port) { | ||||
|     uint16_t* port) | ||||
| { | ||||
| // M20150601 : For W5300
 | ||||
| #if _WIZCHIP_ == 5300 | ||||
|     uint16_t mr; | ||||
|  | @ -618,9 +659,12 @@ int32_t wiz_sock_recvfrom(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
|     if (sock_remained_size[sn] == 0) { | ||||
|         while (1) { | ||||
|             pack_len = getSn_RX_RSR(sn); | ||||
|       if (getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; | ||||
|       if ((sock_io_mode & (1 << sn)) && (pack_len == 0)) return SOCK_BUSY; | ||||
|       if (pack_len != 0) break; | ||||
|             if (getSn_SR(sn) == SOCK_CLOSED) | ||||
|                 return SOCKERR_SOCKCLOSED; | ||||
|             if ((sock_io_mode & (1 << sn)) && (pack_len == 0)) | ||||
|                 return SOCK_BUSY; | ||||
|             if (pack_len != 0) | ||||
|                 break; | ||||
|         }; | ||||
|     } | ||||
|     // D20150601 : Move it to bottom
 | ||||
|  | @ -747,7 +791,8 @@ int32_t wiz_sock_recvfrom(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
|     if (sock_remained_size[sn] != 0) { | ||||
|         sock_pack_info[sn] |= PACK_REMAINED; | ||||
| #if _WIZCHIP_ == 5300 | ||||
|     if (pack_len & 0x01) sock_pack_info[sn] |= PACK_FIFOBYTE; | ||||
|         if (pack_len & 0x01) | ||||
|             sock_pack_info[sn] |= PACK_FIFOBYTE; | ||||
| #endif | ||||
|     } else | ||||
|         sock_pack_info[sn] = PACK_COMPLETED; | ||||
|  | @ -760,7 +805,8 @@ int32_t wiz_sock_recvfrom(uint8_t sn, uint8_t *buf, uint16_t len, uint8_t *addr, | |||
|     return (int32_t)pack_len; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) { | ||||
| int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg) | ||||
| { | ||||
|     uint8_t tmp = 0; | ||||
|     CHECK_SOCKNUM(); | ||||
|     switch (cstype) { | ||||
|  | @ -786,7 +832,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) { | |||
|         *((uint16_t*)arg) = getSn_RxMAX(sn); | ||||
|         break; | ||||
|     case CS_CLR_INTERRUPT: | ||||
|       if ((*(uint8_t *)arg) > SIK_ALL) return SOCKERR_ARG; | ||||
|         if ((*(uint8_t*)arg) > SIK_ALL) | ||||
|             return SOCKERR_ARG; | ||||
|         setSn_IR(sn, *(uint8_t*)arg); | ||||
|         break; | ||||
|     case CS_GET_INTERRUPT: | ||||
|  | @ -794,7 +841,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) { | |||
|         break; | ||||
| #if _WIZCHIP_ != 5100 | ||||
|     case CS_SET_INTMASK: | ||||
|       if ((*(uint8_t *)arg) > SIK_ALL) return SOCKERR_ARG; | ||||
|         if ((*(uint8_t*)arg) > SIK_ALL) | ||||
|             return SOCKERR_ARG; | ||||
|         setSn_IMR(sn, *(uint8_t*)arg); | ||||
|         break; | ||||
|     case CS_GET_INTMASK: | ||||
|  | @ -807,7 +855,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void *arg) { | ||||
| int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void* arg) | ||||
| { | ||||
|     // M20131220 : Remove warning
 | ||||
|     // uint8_t tmp;
 | ||||
|     CHECK_SOCKNUM(); | ||||
|  | @ -831,7 +880,8 @@ int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void *arg) { | |||
|     case SO_KEEPALIVESEND: | ||||
|         CHECK_SOCKMODE(Sn_MR_TCP); | ||||
| #if _WIZCHIP_ > 5200 | ||||
|       if (getSn_KPALVTR(sn) != 0) return SOCKERR_SOCKOPT; | ||||
|         if (getSn_KPALVTR(sn) != 0) | ||||
|             return SOCKERR_SOCKOPT; | ||||
| #endif | ||||
|         setSn_CR(sn, Sn_CR_SEND_KEEP); | ||||
|         while (getSn_CR(sn) != 0) { | ||||
|  | @ -856,7 +906,8 @@ int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void *arg) { | |||
|     return SOCK_OK; | ||||
| } | ||||
| 
 | ||||
| int8_t wiz_getsockopt(uint8_t sn, sockopt_type sotype, void *arg) { | ||||
| int8_t wiz_getsockopt(uint8_t sn, sockopt_type sotype, void* arg) | ||||
| { | ||||
|     CHECK_SOCKNUM(); | ||||
|     switch (sotype) { | ||||
|     case SO_FLAG: | ||||
|  | @ -901,7 +952,8 @@ int8_t wiz_getsockopt(uint8_t sn, sockopt_type sotype, void *arg) { | |||
|     case SO_PACKINFO: | ||||
|         // CHECK_SOCKMODE(Sn_MR_TCP);
 | ||||
| #if _WIZCHIP_ != 5300 | ||||
|       if ((getSn_MR(sn) == Sn_MR_TCP)) return SOCKERR_SOCKMODE; | ||||
|         if ((getSn_MR(sn) == Sn_MR_TCP)) | ||||
|             return SOCKERR_SOCKMODE; | ||||
| #endif | ||||
|         *(uint8_t*)arg = sock_pack_info[sn]; | ||||
|         break; | ||||
|  |  | |||
|  | @ -65,8 +65,9 @@ | |||
| #if (_WIZCHIP_ == 5500) | ||||
| ////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| uint8_t WIZCHIP_READ(uint32_t AddrSel) { | ||||
|   uint8_t ret; | ||||
| uint8_t WIZCHIP_READ(uint32_t AddrSel) | ||||
| { | ||||
|     uint8_t ret = 0; | ||||
|     uint8_t spi_data[3]; | ||||
| 
 | ||||
|     WIZCHIP_CRITICAL_ENTER(); | ||||
|  | @ -74,8 +75,7 @@ uint8_t WIZCHIP_READ(uint32_t AddrSel) { | |||
| 
 | ||||
|     AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); | ||||
| 
 | ||||
|   if (!WIZCHIP.IF.SPI._read_burst || | ||||
|       !WIZCHIP.IF.SPI._write_burst) // byte operation
 | ||||
|     if (!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
 | ||||
|     { | ||||
|         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); | ||||
|         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); | ||||
|  | @ -94,7 +94,8 @@ uint8_t WIZCHIP_READ(uint32_t AddrSel) { | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb) { | ||||
| void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb) | ||||
| { | ||||
|     uint8_t spi_data[4]; | ||||
| 
 | ||||
|     WIZCHIP_CRITICAL_ENTER(); | ||||
|  | @ -123,7 +124,8 @@ void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb) { | |||
|     WIZCHIP_CRITICAL_EXIT(); | ||||
| } | ||||
| 
 | ||||
| void WIZCHIP_READ_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) { | ||||
| void WIZCHIP_READ_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) | ||||
| { | ||||
|     uint8_t spi_data[3]; | ||||
|     uint16_t i; | ||||
| 
 | ||||
|  | @ -132,8 +134,7 @@ void WIZCHIP_READ_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) { | |||
| 
 | ||||
|     AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); | ||||
| 
 | ||||
|   if (!WIZCHIP.IF.SPI._read_burst || | ||||
|       !WIZCHIP.IF.SPI._write_burst) // byte operation
 | ||||
|     if (!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
 | ||||
|     { | ||||
|         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); | ||||
|         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); | ||||
|  | @ -153,7 +154,8 @@ void WIZCHIP_READ_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) { | |||
|     WIZCHIP_CRITICAL_EXIT(); | ||||
| } | ||||
| 
 | ||||
| void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) { | ||||
| void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) | ||||
| { | ||||
|     uint8_t spi_data[3]; | ||||
|     uint16_t i; | ||||
| 
 | ||||
|  | @ -182,7 +184,8 @@ void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) { | |||
|     WIZCHIP_CRITICAL_EXIT(); | ||||
| } | ||||
| 
 | ||||
| uint16_t getSn_TX_FSR(uint8_t sn) { | ||||
| uint16_t getSn_TX_FSR(uint8_t sn) | ||||
| { | ||||
|     uint16_t val = 0, val1 = 0; | ||||
| 
 | ||||
|     do { | ||||
|  | @ -196,7 +199,8 @@ uint16_t getSn_TX_FSR(uint8_t sn) { | |||
|     return val; | ||||
| } | ||||
| 
 | ||||
| uint16_t getSn_RX_RSR(uint8_t sn) { | ||||
| uint16_t getSn_RX_RSR(uint8_t sn) | ||||
| { | ||||
|     uint16_t val = 0, val1 = 0; | ||||
| 
 | ||||
|     do { | ||||
|  | @ -210,7 +214,8 @@ uint16_t getSn_RX_RSR(uint8_t sn) { | |||
|     return val; | ||||
| } | ||||
| 
 | ||||
| void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) { | ||||
| void wiz_send_data(uint8_t sn, uint8_t* wizdata, uint16_t len) | ||||
| { | ||||
|     uint16_t ptr = 0; | ||||
|     uint32_t addrsel = 0; | ||||
| 
 | ||||
|  | @ -227,7 +232,8 @@ void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) { | |||
|     setSn_TX_WR(sn, ptr); | ||||
| } | ||||
| 
 | ||||
| void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) { | ||||
| void wiz_recv_data(uint8_t sn, uint8_t* wizdata, uint16_t len) | ||||
| { | ||||
|     uint16_t ptr = 0; | ||||
|     uint32_t addrsel = 0; | ||||
| 
 | ||||
|  | @ -244,7 +250,8 @@ void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) { | |||
|     setSn_RX_RD(sn, ptr); | ||||
| } | ||||
| 
 | ||||
| void wiz_recv_ignore(uint8_t sn, uint16_t len) { | ||||
| void wiz_recv_ignore(uint8_t sn, uint16_t len) | ||||
| { | ||||
|     uint16_t ptr = 0; | ||||
| 
 | ||||
|     ptr = getSn_RX_RD(sn); | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| #include "socket.h" | ||||
| 
 | ||||
| #include "netif/etharp.h" | ||||
| #include <sys.h> | ||||
| 
 | ||||
| #include <xs_kdbg.h> | ||||
| 
 | ||||
|  | @ -33,9 +34,10 @@ | |||
|  */ | ||||
| uint8_t wiz_mac[6] = { 0x00, 0x08, 0xDC, 0x12, 0x34, 0x56 }; | ||||
| 
 | ||||
| static uint8_t tx_frame[1542]; | ||||
| static const uint32_t ethernet_polynomial_le = 0xedb88320U; | ||||
| 
 | ||||
| static sys_mutex_t wiz_trans_mtx; | ||||
| 
 | ||||
| /**
 | ||||
|  * ---------------------------------------------------------------------------------------------------- | ||||
|  * Functions | ||||
|  | @ -51,164 +53,74 @@ void Time_Update_LwIP(void) | |||
|     // no need to do
 | ||||
| } | ||||
| 
 | ||||
| int32_t send_lwip(uint8_t sn, uint8_t* buf, uint16_t len) | ||||
| static inline void spi_if_clr(void) | ||||
| { | ||||
|     uint8_t tmp = 0; | ||||
|     uint16_t freesize = 0; | ||||
|     setSn_IR(0, 0x1F); | ||||
|     setSIR(0); | ||||
| } | ||||
| 
 | ||||
|     tmp = getSn_SR(sn); | ||||
| // macraw func
 | ||||
| uint16_t macraw_send(const uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     uint8_t sock_num = 0; | ||||
|     uint16_t ret = 0; | ||||
| 
 | ||||
|     // freesize = getSn_TxMAX(sn);
 | ||||
|     // freesize = getSn_TXBUF_SIZE(sn);
 | ||||
|     freesize = getSn_TX_FSR(sn); | ||||
|     if (len > getSn_TxMAX(sock_num)) { | ||||
|         ret = getSn_TxMAX(sock_num); | ||||
|     } else { | ||||
|         ret = len; | ||||
|     } | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] sending len: %d, free size: %d\n", __func__, len, freesize)); | ||||
|     if (len > freesize) | ||||
|         len = freesize; // check size not to exceed MAX size.
 | ||||
|     wiz_send_data(sock_num, (uint8_t*)buf, len); | ||||
| 
 | ||||
|     wiz_send_data(sn, buf, len); | ||||
|     setSn_CR(sn, Sn_CR_SEND); | ||||
|     while (getSn_CR(sn)) | ||||
|     WIZCHIP_WRITE(Sn_CR(sock_num), Sn_CR_SEND); | ||||
|     while (WIZCHIP_READ(Sn_CR(sock_num))) { | ||||
|     } | ||||
|     while (WIZCHIP_READ(Sn_IR(sock_num)) & Sn_IR_SENDOK != Sn_IR_SENDOK) { | ||||
|     } | ||||
|     WIZCHIP_WRITE(Sn_IR(sock_num), Sn_IR_SENDOK); | ||||
| 
 | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| uint16_t macraw_recv(uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     uint8_t sock_num = 0; | ||||
| 
 | ||||
|     uint16_t lowlevel_len = getSn_RX_RSR(sock_num); | ||||
|     if (lowlevel_len <= 0 || len <= 0) { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     uint16_t data_len = 0; | ||||
|     uint8_t macraw_head[2]; | ||||
| 
 | ||||
|     uint16_t ptr = getSn_RX_RD(sock_num); | ||||
|     uint32_t addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sock_num) << 3); | ||||
| 
 | ||||
|     WIZCHIP_READ_BUF(addrsel, macraw_head, 2); | ||||
|     ptr += 2; | ||||
| 
 | ||||
|     data_len = (macraw_head[0] << 8) + macraw_head[1] - 2; | ||||
|     if (data_len > 1514) { | ||||
|         KPrintf("[%s:%d] Info: data recved oversize: %d\n", __func__, __LINE__, data_len); | ||||
|         wiz_recv_ignore(sock_num, data_len); | ||||
|         // wiz_sock_close(sock_num);
 | ||||
|         // wiz_socket(sock_num, Sn_MR_MACRAW, 0xC000, 0);
 | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sock_num) << 3); | ||||
|     WIZCHIP_READ_BUF(addrsel, buf, data_len); | ||||
|     ptr += data_len; | ||||
| 
 | ||||
|     setSn_RX_RD(sock_num, ptr); | ||||
|     WIZCHIP_WRITE(Sn_CR(sock_num), Sn_CR_RECV); | ||||
|     while (WIZCHIP_READ(Sn_CR(sock_num))) | ||||
|         ; | ||||
| 
 | ||||
|     while (1) { | ||||
|         uint8_t IRtemp = getSn_IR(sn); | ||||
|         if (IRtemp & Sn_IR_SENDOK) { | ||||
|             setSn_IR(sn, Sn_IR_SENDOK); | ||||
|             // printf("Packet sent ok\n");
 | ||||
|             break; | ||||
|         } else if (IRtemp & Sn_IR_TIMEOUT) { | ||||
|             setSn_IR(sn, Sn_IR_TIMEOUT); | ||||
|             // printf("Socket is closed\n");
 | ||||
|             //  There was a timeout
 | ||||
|             return -1; | ||||
|     return data_len; | ||||
| } | ||||
|     } | ||||
| 
 | ||||
|     return (int32_t)len; | ||||
| } | ||||
| 
 | ||||
| int32_t recv_lwip(uint8_t sn, uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     uint8_t head[2]; | ||||
|     uint16_t pack_len = 0; | ||||
| 
 | ||||
|     pack_len = getSn_RX_RSR(sn); | ||||
| 
 | ||||
|     if (pack_len > 0) { | ||||
|         wiz_recv_data(sn, head, 2); | ||||
|         setSn_CR(sn, Sn_CR_RECV); | ||||
| 
 | ||||
|         // byte size of data packet (2byte)
 | ||||
|         pack_len = head[0]; | ||||
|         pack_len = (pack_len << 8) + head[1]; | ||||
|         pack_len -= 2; | ||||
| 
 | ||||
|         if (pack_len > len) { | ||||
|             // Packet is bigger than buffer - drop the packet
 | ||||
|             // wiz_recv_ignore(sn, pack_len);
 | ||||
|             // setSn_CR(sn, Sn_CR_RECV);
 | ||||
|             // return 0;
 | ||||
|             pack_len = len; | ||||
|         } | ||||
| 
 | ||||
|         wiz_recv_data(sn, buf, pack_len); // data copy
 | ||||
|         setSn_CR(sn, Sn_CR_RECV); | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] recved len: %d, len: %d\n", __func__, pack_len, len)); | ||||
|     } | ||||
| 
 | ||||
|     return (int32_t)pack_len; | ||||
| } | ||||
| 
 | ||||
| err_t netif_output(struct netif* netif, struct pbuf* p) | ||||
| { | ||||
|     uint32_t send_len = 0; | ||||
|     uint32_t tot_len = 0; | ||||
| 
 | ||||
|     memset(tx_frame, 0x00, sizeof(tx_frame)); | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] pbuf len: %d, totlen: %d\n", __func__, p->len, p->tot_len)); | ||||
|     for (struct pbuf* q = p; q != NULL; q = q->next) { | ||||
|         memcpy(tx_frame + tot_len, q->payload, q->len); | ||||
| 
 | ||||
|         tot_len += q->len; | ||||
| 
 | ||||
|         if (q->len == q->tot_len) { | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (tot_len < 60) { | ||||
|         // pad
 | ||||
|         tot_len = 60; | ||||
|     } | ||||
| 
 | ||||
|     uint32_t crc = ethernet_frame_crc(tx_frame, tot_len); | ||||
| 
 | ||||
|     send_len = send_lwip(0, tx_frame, tot_len); | ||||
| 
 | ||||
|     return ERR_OK; | ||||
| } | ||||
| 
 | ||||
| static uint16_t wiz_sendFrame(uint8_t* buf, uint16_t len) | ||||
| { | ||||
|     // Wait for space in the transmit buffer
 | ||||
|     // while (1) {
 | ||||
|     //     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] looping for freesize, sock state: %x\n", __func__, getSn_SR(0)));
 | ||||
|     //     uint16_t freesize = getSn_TX_FSR(0);
 | ||||
| 
 | ||||
|     //     if (len <= freesize) {
 | ||||
|     //         break;
 | ||||
|     //     }
 | ||||
|     // };
 | ||||
| 
 | ||||
|     wiz_send_data(0, buf, len); | ||||
|     setSn_CR(0, Sn_CR_SEND); | ||||
| 
 | ||||
|     while (1) { | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] looping for sendok\n", __func__)); | ||||
|         uint8_t tmp = getSn_IR(0); | ||||
|         if (tmp & Sn_IR_SENDOK) { | ||||
|             setSn_IR(0, Sn_IR_SENDOK); | ||||
|             // Packet sent ok
 | ||||
|             break; | ||||
|         } else if (tmp & Sn_IR_TIMEOUT) { | ||||
|             setSn_IR(0, Sn_IR_TIMEOUT); | ||||
|             // There was a timeout
 | ||||
|             return -1; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return len; | ||||
| } | ||||
| 
 | ||||
| // void ethernetif_input(void* netif_arg)
 | ||||
| // {
 | ||||
| //     struct netif* netif = (struct netif*)netif_arg;
 | ||||
| //     struct pbuf* p;
 | ||||
| //     uint16_t pack_len = 0;
 | ||||
| //     uint8_t* pack = malloc(ETHERNET_MTU);
 | ||||
| //     while (1) {
 | ||||
| //         wiz_getsockopt(SOCKET_MACRAW, SO_RECVBUF, &pack_len);
 | ||||
| //         if (pack_len > 0) {
 | ||||
| //             pack_len = recv_lwip(SOCKET_MACRAW, (uint8_t*)pack, pack_len);
 | ||||
| //             if (pack_len) {
 | ||||
| //                 p = pbuf_alloc(PBUF_RAW, pack_len, PBUF_POOL);
 | ||||
| //                 pbuf_take(p, pack, pack_len);
 | ||||
| //                 free(pack);
 | ||||
| //                 pack = malloc(ETHERNET_MTU);
 | ||||
| //             } else {
 | ||||
| //                 printf(" No packet received\n");
 | ||||
| //             }
 | ||||
| //             if (pack_len && p != NULL) {
 | ||||
| //                 LINK_STATS_INC(link.recv);
 | ||||
| //                 if (netif->input(p, netif) != ERR_OK) {
 | ||||
| //                     pbuf_free(p);
 | ||||
| //                 }
 | ||||
| //             }
 | ||||
| //         }
 | ||||
| //     }
 | ||||
| // }
 | ||||
| 
 | ||||
| void netif_link_callback(struct netif* netif) | ||||
| { | ||||
|  | @ -220,123 +132,105 @@ void netif_status_callback(struct netif* netif) | |||
|     printf("netif status changed %s\n", ip4addr_ntoa(netif_ip4_addr(netif))); | ||||
| } | ||||
| 
 | ||||
| static void wiz_transmit_pbuf(struct pbuf* p) | ||||
| static int32_t wiz_transmit_pbuf(struct pbuf* p) | ||||
| { | ||||
|     static uint8_t addr[4] = { 0xFF, 0xFF, 0xFF, 0xFF }; | ||||
|     int32_t send_ret = 0; | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("+++++++")); | ||||
|     uint16_t freeSize = getSn_TX_FSR(0); | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] max tx len: %d, current tx len: %d\n", __func__, getSn_TxMAX(0), freeSize)); | ||||
|     uint16_t length = p->tot_len; | ||||
| 
 | ||||
|     if (freeSize < length) { | ||||
|         /* TODO: Handle insufficent space in buffer */ | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] max tx len: %d, current tx len: %d\n", __func__, getSn_TxMAX(0), freeSize)); | ||||
|         setSn_CR(0, Sn_CR_SEND); | ||||
|         return; | ||||
|     } | ||||
|     while (1) { | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] pbuf len: %d, totlen: %d\n", __func__, p->len, p->tot_len)); | ||||
|         // wiz_send_data(0, p->payload, p->len);
 | ||||
|         wiz_sendFrame((uint8_t*)p->payload, p->len); | ||||
|         if (p->len == p->tot_len) | ||||
|         spi_if_clr(); | ||||
|         if ((send_ret = wiz_sock_sendto(0, (uint8_t*)p->payload, p->len, addr, 0)) <= 0) { | ||||
|             SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] data send failed: %d, sock: %x\n", __func__, send_ret, getSn_SR(0))); | ||||
|             return -ERROR; | ||||
|         } | ||||
|         if (p->len == p->tot_len) { | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         p = p->next; | ||||
|     } | ||||
|     setSn_CR(0, Sn_CR_SEND); | ||||
| 
 | ||||
|     return EOK; | ||||
| } | ||||
| 
 | ||||
| static int wiz_read_receive_pbuf(struct pbuf** buf) | ||||
| static struct pbuf* wiz_read_receive_pbuf(struct pbuf* buf) | ||||
| { | ||||
|     //  uint8_t header[6];
 | ||||
|     uint16_t length; | ||||
|     //  uint16_t readlen;
 | ||||
|     uint16_t framelen; | ||||
|     //  struct pbuf * p;
 | ||||
| #define RX_FRAME_SIZE 1542 | ||||
|     static uint8_t rx_frame[RX_FRAME_SIZE]; | ||||
|     static uint8_t addr[4] = { 0xFF, 0xFF, 0xFF, 0xFF }; | ||||
|     uint16_t port = 0; | ||||
| 
 | ||||
|     if (*buf != NULL) | ||||
|         return 1; | ||||
| 
 | ||||
|     // uint16_t rxRd = getSn_RX_RD(0);
 | ||||
| 
 | ||||
|     length = getSn_RX_RSR(0); | ||||
|     if (length < 4) { | ||||
|         /* This could be indicative of a crashed (brown-outed?) controller */ | ||||
|         goto end; | ||||
|     uint16_t lowlevel_len = getSn_RX_RSR(0); | ||||
|     if (lowlevel_len <= 0) { | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     wiz_recv_data(0, (uint8_t*)&framelen, 2); | ||||
|     setSn_CR(0, Sn_CR_RECV); | ||||
|     //__bswap16(framelen); //!< didn't work for me
 | ||||
|     framelen = (framelen << 8) | (framelen >> 8); | ||||
| 
 | ||||
|     /* workaround for https://savannah.nongnu.org/bugs/index.php?50040 */ | ||||
|     if (framelen > 32000) { | ||||
|         wiz_recv_ignore(0, framelen); | ||||
|         setSn_CR(0, Sn_CR_RECV); | ||||
|         goto end; | ||||
|     int32_t data_len = wiz_sock_recvfrom(0, rx_frame, RX_FRAME_SIZE, addr, &port); | ||||
|     if (data_len > 0 && data_len <= RX_FRAME_SIZE) { | ||||
|         buf = pbuf_alloc(PBUF_RAW, data_len, PBUF_POOL); | ||||
|         memcpy(buf->payload, rx_frame, data_len); | ||||
|     } else { | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     framelen -= 2; | ||||
| 
 | ||||
|     *buf = pbuf_alloc(PBUF_RAW, (framelen), PBUF_RAM); | ||||
| 
 | ||||
|     if (*buf == NULL) { | ||||
|         goto end; | ||||
|     } | ||||
| 
 | ||||
|     wiz_recv_data(0, (*buf)->payload, framelen); | ||||
|     setSn_CR(0, Sn_CR_RECV); | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] recved data: framelen: %d\n", __func__, framelen)); | ||||
| 
 | ||||
| end: | ||||
|     return (*buf == NULL) ? 2 : 0; | ||||
| } | ||||
| 
 | ||||
| void spi_if_clr(void) | ||||
| { | ||||
|     setSn_IR(0, 0x1F); | ||||
|     setSIR(0); | ||||
|     return buf; | ||||
| } | ||||
| 
 | ||||
| void ethernetif_input(void* netif_arg) | ||||
| { | ||||
|     struct netif* netif = (struct netif*)netif_arg; | ||||
|     struct pbuf* p = NULL; | ||||
|     uint8_t res = 0; | ||||
|     uint16_t epktcnt; | ||||
|     for (;;) { | ||||
|         sys_arch_sem_wait(get_eth_recv_sem(), WAITING_FOREVER); | ||||
|         while (1) { | ||||
|             sys_mutex_lock(&wiz_trans_mtx); | ||||
| 
 | ||||
|             spi_if_clr(); | ||||
|             p = NULL; | ||||
|         res = wiz_read_receive_pbuf(&p); | ||||
|             p = wiz_read_receive_pbuf(p); | ||||
| 
 | ||||
|             sys_mutex_unlock(&wiz_trans_mtx); | ||||
| 
 | ||||
|             if (p != NULL) { | ||||
|             LWIP_DEBUGF(NETIF_DEBUG, ("incoming: %d packages, first read into %x\n", epktcnt, (uintptr_t)(p))); | ||||
|                 // SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s:%d] Info Recved package with size %d\n", __func__, __LINE__, p->len));
 | ||||
|                 if (ERR_OK != netif->input(p, netif)) { | ||||
|                     pbuf_free(p); | ||||
|                 p = NULL; | ||||
|             } else { | ||||
|                 p = NULL; | ||||
|                 } | ||||
|                 p = NULL; | ||||
|             } else { | ||||
|             // LWIP_DEBUGF(NETIF_DEBUG, ("didn't receive.\n"));
 | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static err_t spi_if_linkoutput(struct netif* netif, struct pbuf* p) | ||||
| { | ||||
|     while (!(getSn_SR(0) & SOCK_MACRAW)) | ||||
|         ; /* TODO: Implement wait timeout */ | ||||
|     sys_mutex_lock(&wiz_trans_mtx); | ||||
| 
 | ||||
|     if (!(getSn_SR(0) & SOCK_MACRAW)) { | ||||
|         SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s:%d] err socket state %d\n", __func__, __LINE__, p->len)); | ||||
|         wiz_sock_close(0); | ||||
|         setSn_MR(0, Sn_MR_MFEN | Sn_MR_MACRAW | Sn_MR_MIP6B | Sn_MR_MMB); | ||||
|         wiz_socket(0, Sn_MR_MACRAW, 0, SOCK_IO_NONBLOCK); | ||||
|     } | ||||
| 
 | ||||
|     int32_t ret = wiz_transmit_pbuf(p); | ||||
| 
 | ||||
|     sys_mutex_unlock(&wiz_trans_mtx); | ||||
| 
 | ||||
|     if (ret != EOK) { | ||||
|         return ERR_USE; | ||||
|     } | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] data output, len: %d\n", __func__, p->tot_len)); | ||||
|     wiz_transmit_pbuf(p); | ||||
|     LWIP_DEBUGF(NETIF_DEBUG, ("sent %d bytes.\n", p->tot_len)); | ||||
|     /* TODO: Set up result value */ | ||||
|     return ERR_OK; | ||||
| } | ||||
| 
 | ||||
| err_t netif_initialize(struct netif* netif) | ||||
| { | ||||
|     sys_mutex_new(&wiz_trans_mtx); | ||||
| 
 | ||||
|     netif->linkoutput = spi_if_linkoutput; | ||||
|     // netif->linkoutput = netif_output;
 | ||||
|     netif->output = etharp_output; | ||||
|  | @ -349,22 +243,3 @@ err_t netif_initialize(struct netif* netif) | |||
|     netif->name[1] = '0'; | ||||
|     return ERR_OK; | ||||
| } | ||||
| 
 | ||||
| static uint32_t ethernet_frame_crc(const uint8_t* data, int length) | ||||
| { | ||||
|     uint32_t crc = 0xffffffff; /* Initial value. */ | ||||
| 
 | ||||
|     while (--length >= 0) { | ||||
|         uint8_t current_octet = *data++; | ||||
| 
 | ||||
|         for (int bit = 8; --bit >= 0; current_octet >>= 1) { | ||||
|             if ((crc ^ current_octet) & 1) { | ||||
|                 crc >>= 1; | ||||
|                 crc ^= ethernet_polynomial_le; | ||||
|             } else | ||||
|                 crc >>= 1; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return ~crc; | ||||
| } | ||||
|  |  | |||
|  | @ -37,7 +37,8 @@ uint8_t ping_socket = 0; | |||
| 
 | ||||
| #define bswap_16(A) ((((uint16)(A) & 0xff00) >> 8) | (((uint16)(A) & 0x00ff) << 8)) | ||||
| 
 | ||||
| uint16_t htons(uint16_t n) { | ||||
| uint16_t htons(uint16_t n) | ||||
| { | ||||
|     union { | ||||
|         int i; | ||||
|         char c; | ||||
|  | @ -45,7 +46,8 @@ uint16_t htons(uint16_t n) { | |||
|     return u.c ? bswap_16(n) : n; | ||||
| } | ||||
| 
 | ||||
| uint16_t checksum(uint8_t *src, uint32_t len) { | ||||
| uint16_t checksum(uint8_t* src, uint32_t len) | ||||
| { | ||||
|     uint16_t sum, tsum, i, j; | ||||
|     uint32_t lsum; | ||||
| 
 | ||||
|  | @ -76,13 +78,14 @@ uint16_t checksum(uint8_t *src, uint32_t len) { | |||
|  *@param		pCount- ping的次数 | ||||
|  *@return	ping成功次数 | ||||
|  */ | ||||
| uint8_t ping_count(uint8_t sn, uint16_t pCount, uint8_t *addr) { | ||||
| uint8_t ping_count(uint8_t sn, uint16_t pCount, uint8_t* addr) | ||||
| { | ||||
|     uint16_t rlen, cnt, i; | ||||
| 
 | ||||
|     ping_reply_received = 0; | ||||
|     ping_req = 0; | ||||
|     ping_rep = 0; | ||||
|   KPrintf("Ping:%d.%d.%d.%d\r\n", (addr[0]), (addr[1]), (addr[2]), (addr[3])); | ||||
|     KPrintf("Ping:%d.%d.%d.%d, socket state: %x\r\n", (addr[0]), (addr[1]), (addr[2]), (addr[3]), getSn_SR(sn)); | ||||
| 
 | ||||
|     for (i = 0; i < pCount + 1; i++) /*循环ping pCount次*/ | ||||
|     { | ||||
|  | @ -93,8 +96,7 @@ uint8_t ping_count(uint8_t sn, uint16_t pCount, uint8_t *addr) { | |||
|             wiz_sock_close(sn); | ||||
|             /* Create Socket */ | ||||
|             IINCHIP_WRITE(Sn_PROTO(sn), IPPROTO_ICMP); /*设置ICMP 协议*/ | ||||
|         if (wiz_socket(sn, Sn_MR_IPRAW, PING_BIND_PORT, 0) != | ||||
|             0) /*判断ip raw模式socket是否开启*/ | ||||
|             if (wiz_socket(sn, Sn_MR_IPRAW, PING_BIND_PORT, 0) != 0) /*判断ip raw模式socket是否开启*/ | ||||
|             { | ||||
|             } | ||||
|             /* Check socket register */ | ||||
|  | @ -142,26 +144,25 @@ uint8_t ping_count(uint8_t sn, uint16_t pCount, uint8_t *addr) { | |||
|  *@param		addr-  P地址 | ||||
|  *@return	无 | ||||
|  */ | ||||
| uint8_t ping_request(uint8_t sn, uint8_t *addr) { | ||||
| uint8_t ping_request(uint8_t sn, uint8_t* addr) | ||||
| { | ||||
|     uint8_t* buffer; | ||||
| 
 | ||||
|     uint16_t i, temp_len = 0; | ||||
|     ping_reply_received = 0; /*ping 回复初始化标志位*/ | ||||
|     PingRequest.Type = PING_REQUEST; /*Ping-Request*/ | ||||
|     PingRequest.Code = CODE_ZERO; /*总是 '0'*/ | ||||
|     PingRequest.ID = htons(ping_RandomID++); /*设置ping响应ID为随机的整型变量*/ | ||||
|   PingRequest.SeqNum = | ||||
|       htons(ping_RandomSeqNum++); /*设置ping响应的序列号为随机整形变量*/ | ||||
|     PingRequest.SeqNum = htons(ping_RandomSeqNum++); /*设置ping响应的序列号为随机整形变量*/ | ||||
|     for (i = 0; i < PING_BUF_LEN; i++) { | ||||
|         PingRequest.Data[i] = (i) % 8; /*ping相应的数在'0'~'8‘*/ | ||||
|     } | ||||
|     PingRequest.CheckSum = 0; | ||||
|     /* 计算响应次数*/ | ||||
|   PingRequest.CheckSum = | ||||
|       htons(checksum((uint8_t *)&PingRequest, sizeof(PingRequest))); | ||||
|     PingRequest.CheckSum = htons(checksum((uint8_t*)&PingRequest, sizeof(PingRequest))); | ||||
| 
 | ||||
|     /*发送ping响应到目的方 */ | ||||
|   if (wiz_sock_sendto(sn, (uint8_t *)&PingRequest, sizeof(PingRequest), addr, | ||||
|                       PING_BIND_PORT) == 0) { | ||||
|     if (wiz_sock_sendto(sn, (uint8_t*)&PingRequest, sizeof(PingRequest), addr, PING_BIND_PORT) == 0) { | ||||
|         KPrintf("Fail to send ping-reply packet\r\n"); | ||||
|     } else { | ||||
|         KPrintf("ping send\n"); | ||||
|  | @ -175,7 +176,8 @@ uint8_t ping_request(uint8_t sn, uint8_t *addr) { | |||
|  *@param		addr- Ping地址 | ||||
|  *@return	无 | ||||
|  */ | ||||
| uint8_t ping_reply(uint8_t sn, uint8_t *addr, uint16_t rlen) { | ||||
| uint8_t ping_reply(uint8_t sn, uint8_t* addr, uint16_t rlen) | ||||
| { | ||||
|     uint16_t tmp_checksum; | ||||
|     uint16_t len; | ||||
|     uint16_t i; | ||||
|  | @ -233,7 +235,8 @@ uint8_t ping_reply(uint8_t sn, uint8_t *addr, uint16_t rlen) { | |||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| void wiz_ping_test(int argc, char *argv[]) { | ||||
| void wiz_ping_test(int argc, char* argv[]) | ||||
| { | ||||
|     uint32_t tmp_ip[4]; | ||||
|     uint8_t target_ip[4]; | ||||
|     uint16_t pCount = 5; // 默认ping 5次
 | ||||
|  | @ -253,4 +256,4 @@ void wiz_ping_test(int argc, char *argv[]) { | |||
|     } | ||||
| } | ||||
| SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), | ||||
|                  ping, wiz_ping_test, ping to given addr); | ||||
|     wiz_ping, wiz_ping_test, ping to given addr); | ||||
|  | @ -202,7 +202,7 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDataStan | |||
|             spi_instance[device_master_id]->ssienr = 0x00; | ||||
| 
 | ||||
|     transfer_done: | ||||
|             if (tx_buff) { | ||||
|         if (tx_buff != NULL) { | ||||
|             x_free(tx_buff); | ||||
|         } | ||||
|         } | ||||
|  |  | |||
|  | @ -231,9 +231,9 @@ int MountFilesystem(const char *bus_name, | |||
|         enum FilesystemType fs_type, const char *path) | ||||
| { | ||||
|     struct MountPoint *mp = NULL, *itr; | ||||
|     struct Bus *bus; | ||||
|     struct Bus* bus = NULL; | ||||
|     HardwareDevType dev; | ||||
|     DriverType drv; | ||||
|     DriverType drv = NULL; | ||||
|     struct SysDoubleLinklistNode *node; | ||||
|     int ret = -EINVAL; | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ extern "C" { | |||
| #define FILESYS_DEBUG 0 | ||||
| #define NETDEV_DEBUG 0 | ||||
| #define WEBNET_DEBUG 0 | ||||
| #define WIZNET_DEBUG 1 | ||||
| #define WIZNET_DEBUG 0 | ||||
| 
 | ||||
| #define SYS_KDEBUG_LOG(section, information) \ | ||||
|     do {                                     \ | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ static x_err_t _MsgQueueSend(struct MsgQueue* mq, | |||
|     NULL_PARAM_CHECK(mq); | ||||
|     NULL_PARAM_CHECK(buffer); | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(MSGQUEUE_DEBUG, ("[%s] mq_num_msgs: %d, block size: %d, needed size: %d\n", __func__, mq->num_msgs, mq->each_len, size)); | ||||
|     SYS_KDEBUG_LOG(MSGQUEUE_DEBUG, ("[%s] mq_num_msgs: %d, block size: %d, needed size: %lu\n", __func__, mq->num_msgs, mq->each_len, size)); | ||||
| 
 | ||||
|     if (size > mq->each_len) | ||||
|         return -ERROR; | ||||
|  |  | |||
|  | @ -175,9 +175,9 @@ SWITCH: | |||
|     HOOK(hook.assign.hook_Assign,(runningtask, new_task)); | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(KDBG_SCHED, | ||||
|             ("[%d]switch to priority#%d " | ||||
|                 "task:%.*s(sp:0x%08x), " | ||||
|                 "from task:%.*s(sp: 0x%08x)\n", | ||||
|         ("[%d]switch to priority#%ld " | ||||
|          "task:%.*s(sp:0x%8p), " | ||||
|          "from task:%.*s(sp: 0x%8p)\n", | ||||
|             isrManager.done->getCounter(), highest_prio, | ||||
|             NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point, | ||||
|             NAME_NUM_MAX, runningtask->task_base_info.name, runningtask->stack_point)); | ||||
|  | @ -442,9 +442,9 @@ x_err_t YieldOsAssign(void) | |||
|     HOOK(hook.assign.hook_Assign,(runningtask, new_task)); | ||||
| 
 | ||||
|     SYS_KDEBUG_LOG(KDBG_SCHED, | ||||
|             ("[%d]switch to priority#%d " | ||||
|                 "task:%.*s(sp:0x%08x), " | ||||
|                 "from task:%.*s(sp: 0x%08x)\n", | ||||
|         ("[%d]switch to priority#%ld " | ||||
|          "task:%.*s(sp:0x%8p), " | ||||
|          "from task:%.*s(sp: 0x%8p)\n", | ||||
|             isrManager.done->getCounter(), highest_prio, | ||||
|             NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point, | ||||
|             NAME_NUM_MAX, runningtask->task_base_info.name, runningtask->stack_point)); | ||||
|  |  | |||
|  | @ -37,9 +37,13 @@ | |||
| #define LWIP_DEBUG 1 | ||||
| // #define LWIP_SOCKET_DEBUG
 | ||||
| // #define LWIP_TCPIP_DEBUG
 | ||||
| // #define LWIP_MEMP_DEBUG
 | ||||
| // #define LWIP_PBUF_DEBUG
 | ||||
| // #define LWIP_TCP_INPUT_DEBUG
 | ||||
| // #define LWIP_TCP_OUTPUT_DEBUG
 | ||||
| // #define LWIP_NETIF_DEBUG
 | ||||
| // #define LWIP_ETHARP_DEBUG
 | ||||
| // #define LWIP_API_MSG_DEBUG
 | ||||
| #endif | ||||
| 
 | ||||
| #ifdef LWIP_DEBUG | ||||
|  | @ -213,7 +217,6 @@ | |||
| 
 | ||||
| #endif /* LWIP_DEBUG */ | ||||
| 
 | ||||
| 
 | ||||
| #define LWIP_TIMEVAL_PRIVATE 0 | ||||
| #define LWIP_NO_UNISTD_H 0 | ||||
| #define LWIP_NO_STDDEF_H 0 | ||||
|  | @ -256,7 +259,11 @@ | |||
| 
 | ||||
| /* MEM_SIZE: the size of the heap memory. If the application will send
 | ||||
| a lot of data that needs to be copied, this should be set high. */ | ||||
| #ifndef RISCV_LWIP | ||||
| #define MEM_SIZE (64 * 1024) | ||||
| #else | ||||
| #define MEM_SIZE (32 * 1024) | ||||
| #endif | ||||
| 
 | ||||
| /* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
 | ||||
|    sends a lot of data out of ROM (or other static memory), this | ||||
|  | @ -314,7 +321,6 @@ a lot of data that needs to be copied, this should be set high. */ | |||
| #define TCP_WND 8192 | ||||
| // #define TCP_WND                 (12 * TCP_MSS)
 | ||||
| 
 | ||||
| 
 | ||||
| /* Maximum number of retransmissions of data segments. */ | ||||
| #define TCP_MAXRTX 12 | ||||
| 
 | ||||
|  | @ -377,19 +383,16 @@ a lot of data that needs to be copied, this should be set high. */ | |||
| /* ---------- ICMP options ---------- */ | ||||
| #define LWIP_ICMP 1 | ||||
| 
 | ||||
| 
 | ||||
| /* ---------- DHCP options ---------- */ | ||||
| /* Define LWIP_DHCP to 1 if you want DHCP configuration of
 | ||||
|    interfaces. DHCP is not implemented in lwIP 0.5.1, however, so | ||||
|    turning this on does currently not work. */ | ||||
| #define LWIP_DHCP 1 | ||||
| 
 | ||||
| 
 | ||||
| /* ---------- UDP options ---------- */ | ||||
| #define LWIP_UDP 1 | ||||
| #define UDP_TTL 255 | ||||
| 
 | ||||
| 
 | ||||
| /* ---------- Statistics options ---------- */ | ||||
| #define LWIP_PROVIDE_ERRNO 1 | ||||
| 
 | ||||
|  | @ -409,7 +412,7 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
|  - To use this feature let the following define uncommented. | ||||
|  - To disable it and process by CPU comment the  the checksum. | ||||
| */ | ||||
| #define CHECKSUM_BY_HARDWARE | ||||
| // #define CHECKSUM_BY_HARDWARE
 | ||||
| 
 | ||||
| #ifdef CHECKSUM_BY_HARDWARE | ||||
| /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/ | ||||
|  | @ -443,7 +446,6 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
| #define CHECKSUM_GEN_ICMP 1 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|    ---------------------------------------------- | ||||
|    ---------- Sequential layer options ---------- | ||||
|  | @ -452,11 +454,11 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
| /**
 | ||||
|  * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) | ||||
|  */ | ||||
| #ifndef RISCV_LWIP | ||||
| // #ifndef RISCV_LWIP
 | ||||
| // #define LWIP_NETCONN 1
 | ||||
| // #else
 | ||||
| #define LWIP_NETCONN 1 | ||||
| #else | ||||
| #define LWIP_NETCONN 0 | ||||
| #endif | ||||
| // #endif
 | ||||
| 
 | ||||
| /*
 | ||||
|    ------------------------------------ | ||||
|  | @ -528,11 +530,9 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
| #define LWIP_AUTOIP 0 | ||||
| #define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP && LWIP_AUTOIP) | ||||
| 
 | ||||
| 
 | ||||
| #define LWIP_UDPLITE 0 | ||||
| #define UDP_TTL 255 | ||||
| 
 | ||||
| 
 | ||||
| /* ---------- Statistics options ---------- */ | ||||
| #define LWIP_STATS 1 | ||||
| #define LWIP_STATS_DISPLAY 1 | ||||
|  | @ -546,13 +546,13 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
| #define DEFAULT_RAW_RECVMBOX_SIZE 8 | ||||
| #define DEFAULT_UDP_RECVMBOX_SIZE 8 | ||||
| #define DEFAULT_TCP_RECVMBOX_SIZE 8 | ||||
| #define DEFAULT_ACCEPTMBOX_SIZE         10 | ||||
| #define DEFAULT_ACCEPTMBOX_SIZE 12 | ||||
| 
 | ||||
| #define DEFAULT_THREAD_PRIO 20 | ||||
| #define DEFAULT_THREAD_STACKSIZE 2048 | ||||
| 
 | ||||
| #define TCPIP_THREAD_NAME "tcp" | ||||
| #define TCPIP_THREAD_STACKSIZE          2048 | ||||
| #define TCPIP_THREAD_STACKSIZE 4096 | ||||
| #define TCPIP_MBOX_SIZE 16 | ||||
| #define TCPIP_THREAD_PRIO 30 | ||||
| 
 | ||||
|  | @ -573,7 +573,6 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums | |||
| typedef unsigned int nfds_t; | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #define MEMP_LIB_MALLOC 1 | ||||
| #define MEMP_MEM_MALLOC 1 | ||||
| 
 | ||||
|  | @ -584,4 +583,3 @@ typedef unsigned int nfds_t; | |||
| #endif /* __LWIPOPTS_H__ */ | ||||
| 
 | ||||
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ | ||||
| 
 | ||||
|  |  | |||
|  | @ -387,7 +387,7 @@ void lwip_config_tcp(uint8_t enet_port, char* ip, char* mask, char* gw) | |||
| #endif | ||||
|     } | ||||
| 
 | ||||
|     netif_set_default(&gnetif); | ||||
|     // netif_set_default(&gnetif);
 | ||||
|     netif_set_up(&gnetif); | ||||
| 
 | ||||
|     lw_print("\r\n************************************************\r\n"); | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c lwip_udp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c http_test.c | ||||
| # SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c lwip_udp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c
 | ||||
| # SRC_FILES := ping.c lwip_ping_demo.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c http_test.c
 | ||||
| SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c lwip_udp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c | ||||
| 
 | ||||
| include $(KERNEL_ROOT)/compiler.mk | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ void httpc_app_recv_end(void *arg, httpc_result_t httpc_result, u32_t rx_content | |||
|     httpc_state_t **req = (httpc_state_t**)arg; | ||||
| 
 | ||||
|     LWIP_DEBUGF(LWIP_DEBUG, ("[HTTPC] Transfer finished. rx_content_len is %lu\r\n", rx_content_len)); | ||||
|     printf("[HTTPC] Transfer finished. rx_content_len is %lu\r\n", rx_content_len); | ||||
|     printf("[HTTPC] Transfer finished. rx_content_len is %u\r\n", rx_content_len); | ||||
|     *req = NULL; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -266,6 +266,8 @@ void iperf_server_worker(void* arg) { | |||
|     struct sock_conn_cb *sccb = (struct sock_conn_cb *)arg; | ||||
|     x_ticks_t tick1, tick2; | ||||
| 
 | ||||
|     int cur_tid = GetKTaskDescriptor()->id.id; | ||||
| 
 | ||||
|     uint8_t *recv_data = (uint8_t *)malloc(IPERF_BUFSZ); | ||||
|     if(recv_data == NULL) { | ||||
|         KPrintf("[%s] No Memory.\n", __func__); | ||||
|  | @ -282,8 +284,6 @@ void iperf_server_worker(void* arg) { | |||
|                 (void *) &flag,  /* the cast is historical cruft */ | ||||
|                 sizeof(int));    /* length of option value */ | ||||
| 
 | ||||
|     int cur_tid = GetKTaskDescriptor()->id.id; | ||||
| 
 | ||||
|     tick1 = CurrentTicksGain(); | ||||
|     while (param.mode != IPERF_MODE_STOP) { | ||||
|         bytes_received = recv(sccb->connected, recv_data, IPERF_BUFSZ, 0); | ||||
|  | @ -393,7 +393,7 @@ __exit: | |||
| 
 | ||||
| void iperf_server(void *thread_param) | ||||
| { | ||||
|     uint8_t *recv_data; | ||||
|     uint8_t* recv_data = NULL; | ||||
|     socklen_t sin_size; | ||||
|     x_ticks_t tick1, tick2; | ||||
|     int sock = -1, connected, bytes_received; | ||||
|  |  | |||
|  | @ -41,10 +41,10 @@ void LwipSetIPTest(int argc, char* argv[]) | |||
| { | ||||
|     if (argc >= 4) { | ||||
|         printf("lw: [%s] ip %s mask %s gw %s netport %s\n", __func__, argv[1], argv[2], argv[3], argv[4]); | ||||
|         sscanf(argv[1], "%d.%d.%d.%d", &lwip_ipaddr[0], &lwip_ipaddr[1], &lwip_ipaddr[2], &lwip_ipaddr[3]); | ||||
|         sscanf(argv[2], "%d.%d.%d.%d", &lwip_netmask[0], &lwip_netmask[1], &lwip_netmask[2], &lwip_netmask[3]); | ||||
|         sscanf(argv[3], "%d.%d.%d.%d", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]); | ||||
|         sscanf(argv[4], "%d", &enet_id); | ||||
|         sscanf(argv[1], "%hhd.%hhd.%hhd.%hhd", &lwip_ipaddr[0], &lwip_ipaddr[1], &lwip_ipaddr[2], &lwip_ipaddr[3]); | ||||
|         sscanf(argv[2], "%hhd.%hhd.%hhd.%hhd", &lwip_netmask[0], &lwip_netmask[1], &lwip_netmask[2], &lwip_netmask[3]); | ||||
|         sscanf(argv[3], "%hhd.%hhd.%hhd.%hhd", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]); | ||||
|         sscanf(argv[4], "%hhd", &enet_id); | ||||
| 
 | ||||
|         if (0 == enet_id) { | ||||
|             printf("save eth0 info\n"); | ||||
|  | @ -59,7 +59,7 @@ void LwipSetIPTest(int argc, char* argv[]) | |||
|         } | ||||
|     } else if (argc == 2) { | ||||
|         printf("lw: [%s] set eth0 ipaddr %s \n", __func__, argv[1]); | ||||
|         sscanf(argv[1], "%d.%d.%d.%d", &lwip_ipaddr[0], &lwip_ipaddr[1], &lwip_ipaddr[2], &lwip_ipaddr[3]); | ||||
|         sscanf(argv[1], "%hhd.%hhd.%hhd.%hhd", &lwip_ipaddr[0], &lwip_ipaddr[1], &lwip_ipaddr[2], &lwip_ipaddr[3]); | ||||
|         memcpy(lwip_eth0_ipaddr, lwip_ipaddr, strlen(lwip_ipaddr)); | ||||
|     } | ||||
|     // sys_thread_new("SET ip address", LwipSetIPTask, &enet_id, LWIP_TASK_STACK_SIZE, LWIP_DEMO_TASK_PRIO);
 | ||||
|  |  | |||
|  | @ -144,13 +144,13 @@ void LwipDHCPTest(void) | |||
|         /* Print DHCP progress */ | ||||
|         if(LwipPrintDHCP(&gnetif)) | ||||
|         { | ||||
|             sscanf(ipaddr_ntoa(&gnetif.ip_addr), "%d.%d.%d.%d", &lwip_ipaddr[0], &lwip_ipaddr[1], | ||||
|             sscanf(ipaddr_ntoa(&gnetif.ip_addr), "%hhd.%hhd.%hhd.%hhd", &lwip_ipaddr[0], &lwip_ipaddr[1], | ||||
|                 &lwip_ipaddr[2], &lwip_ipaddr[3]); | ||||
| 
 | ||||
|             sscanf(ipaddr_ntoa(&gnetif.netmask), "%d.%d.%d.%d", &lwip_netmask[0], &lwip_netmask[1], | ||||
|             sscanf(ipaddr_ntoa(&gnetif.netmask), "%hhd.%hhd.%hhd.%hhd", &lwip_netmask[0], &lwip_netmask[1], | ||||
|                 &lwip_netmask[2], &lwip_netmask[3]); | ||||
| 
 | ||||
|             sscanf(ipaddr_ntoa(&gnetif.gw), "%d.%d.%d.%d", &lwip_gwaddr[0], &lwip_gwaddr[1], | ||||
|             sscanf(ipaddr_ntoa(&gnetif.gw), "%hhd.%hhd.%hhd.%hhd", &lwip_gwaddr[0], &lwip_gwaddr[1], | ||||
|                 &lwip_gwaddr[2], &lwip_gwaddr[3]); | ||||
| 
 | ||||
|             break; | ||||
|  |  | |||
|  | @ -47,8 +47,7 @@ void LwipPingTest(int argc, char *argv[]) | |||
|         printf("lw: [%s] ping %s\n", __func__, argv[1]); | ||||
|         if(isdigit(argv[1][0])) | ||||
|         { | ||||
|             if(sscanf(argv[1], "%d.%d.%d.%d", &arg_ip[0], &arg_ip[1], &arg_ip[2], &arg_ip[3]) == EOF) | ||||
|             { | ||||
|             if (sscanf(argv[1], "%hhd.%hhd.%hhd.%hhd", &arg_ip[0], &arg_ip[1], &arg_ip[2], &arg_ip[3]) == EOF) { | ||||
|                 lw_notice("input wrong ip\n"); | ||||
|                 return; | ||||
|             } | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| #include "tcpecho_raw.h" | ||||
| char tcp_demo_msg[LWIP_TEST_MSG_SIZE] = { 0 }; | ||||
| char tcp_server_ip[] = {192, 168, 130, 2}; | ||||
| u16_t tcp_server_port = 80; | ||||
| u32_t tcp_server_port = 80; | ||||
| int tcp_send_num = 0; | ||||
| int tcp_send_task_on = 0; | ||||
| uint32 tcp_interval = 50; | ||||
|  | @ -101,14 +101,13 @@ void LwipTcpSendTest(int argc, char *argv[]) | |||
|     strcat(tcp_demo_msg, "\r\n"); | ||||
| 
 | ||||
|     if(argc >= 3) { | ||||
|         if(sscanf(argv[2], "%d.%d.%d.%d:%d", &tcp_server_ip[0], &tcp_server_ip[1], &tcp_server_ip[2], &tcp_server_ip[3], &tcp_server_port) == EOK) | ||||
|         { | ||||
|             sscanf(argv[2], "%d.%d.%d.%d", &tcp_server_ip[0], &tcp_server_ip[1], &tcp_server_ip[2], &tcp_server_ip[3]); | ||||
|         if (sscanf(argv[2], "%hhd.%hhd.%hhd.%hhd:%d", &tcp_server_ip[0], &tcp_server_ip[1], &tcp_server_ip[2], &tcp_server_ip[3], &tcp_server_port) == EOK) { | ||||
|             sscanf(argv[2], "%hhd.%hhd.%hhd.%hhd", &tcp_server_ip[0], &tcp_server_ip[1], &tcp_server_ip[2], &tcp_server_ip[3]); | ||||
|         } | ||||
|         sscanf(argv[3], "%d", &tcp_send_num); | ||||
|         sscanf(argv[4], "%d", &tcp_interval); | ||||
|     } | ||||
|     KPrintf("connect ipaddr %d.%d.%d.%d:%d send msg %d times\n", tcp_server_ip[0], tcp_server_ip[1], tcp_server_ip[2], tcp_server_ip[3], tcp_server_port, tcp_send_num); | ||||
|     KPrintf("connect ipaddr %hhd.%hhd.%hhd.%hhd:%hhd send msg %d times\n", tcp_server_ip[0], tcp_server_ip[1], tcp_server_ip[2], tcp_server_ip[3], tcp_server_port, tcp_send_num); | ||||
|     lwip_config_tcp(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr); | ||||
| 
 | ||||
|     memcpy(param.ip, tcp_server_ip, 4); | ||||
|  | @ -128,7 +127,7 @@ void LwipTcpRecvTest(void) | |||
| 
 | ||||
|     lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr); | ||||
| 
 | ||||
|     uint8_t *recv_data; | ||||
|     uint8_t* recv_data = NULL; | ||||
|     socklen_t sin_size; | ||||
|     int sock = -1, connected, bytes_received, i; | ||||
|     struct sockaddr_in server_addr, client_addr; | ||||
|  |  | |||
|  | @ -165,12 +165,12 @@ static int LwipUdpSend(int argc, char* argv[]) | |||
|     } | ||||
| 
 | ||||
|     // translate string to array
 | ||||
|     sscanf(ip_ptr, "%d.%d.%d.%d", &get_udp_test_info()->ip[0], &get_udp_test_info()->ip[1], &get_udp_test_info()->ip[2], &get_udp_test_info()->ip[3]); | ||||
|     sscanf(ip_ptr, "%hhd.%hhd.%hhd.%hhd", &get_udp_test_info()->ip[0], &get_udp_test_info()->ip[1], &get_udp_test_info()->ip[2], &get_udp_test_info()->ip[3]); | ||||
|     int msg_len = strlen(msg_ptr); | ||||
|     strncpy(udp_demo_buffer, msg_ptr, msg_len < UDP_BUFFER_SIZE ? msg_len : UDP_BUFFER_SIZE); | ||||
| 
 | ||||
|     /* start task */ | ||||
|     KPrintf("[%s] gw %d.%d.%d.%d:%d send time %d udp_interval %d\n", __func__, | ||||
|     KPrintf("[%s] gw %hhd.%hhd.%hhd.%hhd:%d send time %d udp_interval %d\n", __func__, | ||||
|         get_udp_test_info()->ip[0], get_udp_test_info()->ip[1], get_udp_test_info()->ip[2], get_udp_test_info()->ip[3], | ||||
|         get_udp_test_info()->port, | ||||
|         get_udp_test_info()->num, | ||||
|  | @ -191,7 +191,7 @@ void LwipUdpRecvTest(void) | |||
|     //init lwip and net dirver
 | ||||
|     lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr); | ||||
| 
 | ||||
|     uint8_t *recv_data; | ||||
|     uint8_t* recv_data = NULL; | ||||
|     socklen_t sin_size; | ||||
|     int sock = -1, connected, bytes_received, i; | ||||
|     struct sockaddr_in server_addr, client_addr; | ||||
|  |  | |||
|  | @ -119,7 +119,7 @@ tcpecho_raw_ack_size(struct tcp_pcb *tpcb, int ack_len) | |||
| 
 | ||||
|     // ack message
 | ||||
|     ack_buf = pbuf_alloc(PBUF_TRANSPORT, TCP_ACK_MSG_SIZE, PBUF_RAM); | ||||
|     snprintf(ack_buf->payload, TCP_ACK_MSG_SIZE, "%d\n\0", ack_len); | ||||
|     snprintf(ack_buf->payload, TCP_ACK_MSG_SIZE, "%d\n", ack_len); | ||||
|     ack_buf->len = strlen(ack_buf->payload); | ||||
|     ack_buf->tot_len = strlen(ack_buf->payload); | ||||
|     ack_buf->next = NULL; | ||||
|  |  | |||
|  | @ -116,7 +116,7 @@ static int CopyRecursive(const char *from, const char *to, char *buf, | |||
| 
 | ||||
|     DIR *dirp; | ||||
|     struct dirent *dirent; | ||||
|     char *sub_from, *sub_to; | ||||
|     char *sub_from = NULL, *sub_to = NULL; | ||||
| 
 | ||||
|     ret = mkdir(to, 0777); | ||||
|     if (ret < 0) { | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ static void PrintOctal(char *str, int len, uint64_t value) | |||
|     char *cp; | ||||
|     int written_len; | ||||
| 
 | ||||
|     written_len = sprintf(buf, "%0*llo", len, value); | ||||
|     written_len = sprintf(buf, "%0*lo", len, value); | ||||
|     cp = buf + written_len - len; | ||||
| 
 | ||||
|     if (*cp == '0') | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue