Merge branch 'prepare_for_master' of https://git.trustie.net/xuos/xiuos into xidatong-arm32

This commit is contained in:
wgzAIIT 2023-09-11 10:05:37 +08:00
commit 652e5789a7
35 changed files with 2279 additions and 1725 deletions

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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);

View File

@ -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
@ -19,7 +20,7 @@ export CXXFLAGS := -mcmodel=medany -march=rv64imafdc -mabi=lp64d -fno-common -ff
export CROSS_COMPILE ?=/opt/gnu-mcu-eclipse/riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-
export DEFINES := -DHAVE_CCONFIG_H -DHAVE_SIGINFO
export DEFINES := -DHAVE_CCONFIG_H -DHAVE_SIGINFO -DRISCV_LWIP
export ARCH = risc-v
export MCU = k210

View File

@ -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

View File

@ -2,6 +2,7 @@
config BSP_USING_W5500
bool "Using w5500"
select BSP_USING_LWIP
default y
config BSP_WIZ_RST_PIN
@ -15,3 +16,8 @@ config BSP_WIZ_INT_PIN
config BSP_WIZ_USE_IPERF
bool "Using iperf"
default y
menuconfig BSP_USING_LWIP
bool "Using LwIP device"
default n
select RESOURCES_LWIP

View File

@ -1,3 +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 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 wiz_ping.c connect_w5500_test.c w5x00_lwip.c wiz_iperf.c
include $(KERNEL_ROOT)/compiler.mk

View File

@ -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"
@ -14,6 +14,10 @@
#include "socket.h"
#include "w5500.h"
#include "connect_ethernet.h"
#include <sys.h>
#define SPI_LORA_FREQUENCY 10000000
// spi operations
@ -23,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 },
@ -38,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());
@ -77,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,
@ -114,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;
@ -128,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;
@ -143,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);
@ -152,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);
@ -172,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. */
@ -190,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*)&reg_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*)&reg_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;
@ -241,11 +308,10 @@ int wiz_interrupt_init() {
}
return EOK;
return EOK;
}
int HwWiznetInit(void) {
int HwWiznetInit(void)
{
wiz_reset();
if (EOK != w5500_spi_init()) {
@ -258,6 +324,31 @@ int HwWiznetInit(void) {
return ERROR;
}
extern uint8_t wiz_mac[6];
setSHAR(wiz_mac);
ctlwizchip(CW_RESET_PHY, 0);
wiz_interrupt_init(0, wiz_irq_handler);
setSn_RXBUF_SIZE(0, 16);
setSn_TXBUF_SIZE(0, 16);
#define SOCK_ANY_PORT_NUM 0xC000
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) {
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 mode established\r\n"));
break;
}
}
network_init();
return EOK;

View File

@ -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;

View File

@ -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);

View File

@ -0,0 +1,248 @@
/**
* Copyright (c) 2022 WIZnet Co.,Ltd
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* ----------------------------------------------------------------------------------------------------
* Includes
* ----------------------------------------------------------------------------------------------------
*/
#include <stdio.h>
#include "connect_ethernet.h"
#include "socket.h"
#include "netif/etharp.h"
#include <sys.h>
#include <xs_kdbg.h>
#include <xizi.h>
/**
* ----------------------------------------------------------------------------------------------------
* Macros
* ----------------------------------------------------------------------------------------------------
*/
/**
* ----------------------------------------------------------------------------------------------------
* Variables
* ----------------------------------------------------------------------------------------------------
*/
uint8_t wiz_mac[6] = { 0x00, 0x08, 0xDC, 0x12, 0x34, 0x56 };
static const uint32_t ethernet_polynomial_le = 0xedb88320U;
static sys_mutex_t wiz_trans_mtx;
/**
* ----------------------------------------------------------------------------------------------------
* Functions
* ----------------------------------------------------------------------------------------------------
*/
void* ethernetif_config_enet_set(uint8_t enet_port)
{
return NONE;
}
void Time_Update_LwIP(void)
{
// no need to do
}
static inline void spi_if_clr(void)
{
setSn_IR(0, 0x1F);
setSIR(0);
}
// macraw func
uint16_t macraw_send(const uint8_t* buf, uint16_t len)
{
uint8_t sock_num = 0;
uint16_t ret = 0;
if (len > getSn_TxMAX(sock_num)) {
ret = getSn_TxMAX(sock_num);
} else {
ret = len;
}
wiz_send_data(sock_num, (uint8_t*)buf, len);
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)))
;
return data_len;
}
void netif_link_callback(struct netif* netif)
{
printf("netif link status changed %s\n", netif_is_link_up(netif) ? "up" : "down");
}
void netif_status_callback(struct netif* netif)
{
printf("netif status changed %s\n", ip4addr_ntoa(netif_ip4_addr(netif)));
}
static int32_t wiz_transmit_pbuf(struct pbuf* p)
{
static uint8_t addr[4] = { 0xFF, 0xFF, 0xFF, 0xFF };
int32_t send_ret = 0;
while (1) {
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;
}
return EOK;
}
static struct pbuf* wiz_read_receive_pbuf(struct pbuf* buf)
{
#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;
uint16_t lowlevel_len = getSn_RX_RSR(0);
if (lowlevel_len <= 0) {
return NULL;
}
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);
if (buf == NULL) {
return NULL;
}
memcpy(buf->payload, rx_frame, data_len);
} else {
return NULL;
}
return buf;
}
void ethernetif_input(void* netif_arg)
{
struct netif* netif = (struct netif*)netif_arg;
struct pbuf* p = NULL;
for (;;) {
sys_arch_sem_wait(get_eth_recv_sem(), WAITING_FOREVER);
while (1) {
sys_mutex_lock(&wiz_trans_mtx);
spi_if_clr();
p = NULL;
p = wiz_read_receive_pbuf(p);
sys_mutex_unlock(&wiz_trans_mtx);
if (p != NULL) {
// 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 {
break;
}
}
}
}
static err_t spi_if_linkoutput(struct netif* netif, struct pbuf* p)
{
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;
}
/* 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;
netif->mtu = ETHERNET_MTU;
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;
SMEMCPY(netif->hwaddr, wiz_mac, sizeof(netif->hwaddr));
netif->hwaddr_len = sizeof(netif->hwaddr);
netif->name[0] = 'e';
netif->name[1] = '0';
return ERR_OK;
}

View File

@ -304,7 +304,7 @@ __exit:
if (recv_data) free(recv_data);
}
void iperf_usage(void)
static void iperf_usage(void)
{
KPrintf("Usage: iperf [-s|-c host] [options] [multi-threaded]\n");
KPrintf(" iperf [-h|--stop]\n");
@ -326,7 +326,7 @@ void iperf_usage(void)
return;
}
int iperf(int argc, char **argv)
int wiz_iperf(int argc, char** argv)
{
int mode = 0; /* server mode */
char *host = NULL;
@ -460,6 +460,6 @@ __usage:
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
iperf, iperf,
wiz_iperf, wiz_iperf,
iperf throughput test);
#endif

View File

@ -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);

View File

@ -0,0 +1,118 @@
/**
* Copyright (c) 2022 WIZnet Co.,Ltd
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _W5x00_LWIP_H_
#define _W5x00_LWIP_H_
/**
* ----------------------------------------------------------------------------------------------------
* Includes
* ----------------------------------------------------------------------------------------------------
*/
#include "lwip/netif.h"
/**
* ----------------------------------------------------------------------------------------------------
* Macros
* ----------------------------------------------------------------------------------------------------
*/
/* LWIP */
#define ETHERNET_MTU 1500
#define SOCKET_MACRAW 0
/**
* ----------------------------------------------------------------------------------------------------
* Variables
* ----------------------------------------------------------------------------------------------------
*/
/**
* ----------------------------------------------------------------------------------------------------
* Functions
* ----------------------------------------------------------------------------------------------------
*/
/*! \brief send an ethernet packet
* \ingroup w5x00_lwip
*
* It is used to send outgoing data to the socket.
*
* \param sn socket number
* \param buf a pointer to the data to send
* \param len the length of data in packet
* \return he sent data size
*/
int32_t send_lwip(uint8_t sn, uint8_t* buf, uint16_t len);
/*! \brief read an ethernet packet
* \ingroup w5x00_lwip
*
* It is used to read incoming data from the socket.
*
* \param sn socket number
* \param buf a pointer buffer to read incoming data
* \param len the length of the data in the packet
* \return the real received data size
*/
int32_t recv_lwip(uint8_t sn, uint8_t* buf, uint16_t len);
/*! \brief callback function
* \ingroup w5x00_lwip
*
* This function is called by ethernet_output() when it wants
* to send a packet on the interface. This function outputs
* the pbuf as-is on the link medium.
*
* \param netif a pre-allocated netif structure
* \param p main packet buffer struct
* \return ERR_OK if data was sent.
*/
err_t netif_output(struct netif* netif, struct pbuf* p);
/*! \brief callback function
* \ingroup w5x00_lwip
*
* Callback function for link.
*
* \param netif a pre-allocated netif structure
*/
void netif_link_callback(struct netif* netif);
/*! \brief callback function
* \ingroup w5x00_lwip
*
* Callback function for status.
*
* \param netif a pre-allocated netif structure
*/
void netif_status_callback(struct netif* netif);
/*! \brief callback function
* \ingroup w5x00_lwip
*
* Callback function that initializes the interface.
*
* \param netif a pre-allocated netif structure
* \return ERR_OK if Network interface initialized
*/
err_t netif_initialize(struct netif* netif);
/*! \brief ethernet frame cyclic redundancy check
* \ingroup w5x00_lwip
*
* Perform cyclic redundancy check on ethernet frame
*
* \param data a pointer to the ethernet frame
* \param length the total length of ethernet frame
* \return an ethernet frame cyclic redundancy check result value
*/
static uint32_t ethernet_frame_crc(const uint8_t* data, int length);
void ethernetif_input(void* netif_arg);
void* ethernetif_config_enet_set(uint8_t enet_port);
void Time_Update_LwIP(void);
#define NETIF_ENET0_INIT_FUNC netif_initialize
#endif /* _W5x00_LWIP_H_ */

View File

@ -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);
}
}

View File

@ -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;

View File

@ -46,6 +46,7 @@ extern "C" {
#define FILESYS_DEBUG 0
#define NETDEV_DEBUG 0
#define WEBNET_DEBUG 0
#define WIZNET_DEBUG 0
#define SYS_KDEBUG_LOG(section, information) \
do { \

View File

@ -61,6 +61,9 @@ enum SmallSizeAllocSize {
#define SMALL_SIZE_32B(ITEMSIZE) ((ITEMSIZE + SIZEOF_DYNAMICALLOCNODE_MEM) * SMALL_NUMBER_32B) /* Calculate the total size for SIZEOF_32B blocks*/
#define SMALL_SIZE_64B(ITEMSIZE) ((ITEMSIZE + SIZEOF_DYNAMICALLOCNODE_MEM) * SMALL_NUMBER_64B) /* Calculate the total size for SIZEOF_64B blocks*/
#define FREE_LIST_LOCK() DISABLE_INTERRUPT()
#define FREE_LIST_UNLOCK(lock) ENABLE_INTERRUPT(lock)
/**
* The structure describes an allocated memory block from dynamic buddy memory.
*/
@ -632,7 +635,7 @@ void *x_malloc(x_size_t size)
register x_base lock = 0;
/* hold lock before allocation */
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
/* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE);
@ -641,7 +644,7 @@ void *x_malloc(x_size_t size)
#ifdef MEM_EXTERN_SRAM
/* parameter detection */
if (size == 0) {
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
return NONE;
}
if ((size > ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start - ByteManager.dynamic_buddy_manager.active_memory)) {
@ -652,7 +655,7 @@ void *x_malloc(x_size_t size)
#else
/* parameter detection */
if ((size == 0) || (size > ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start - ByteManager.dynamic_buddy_manager.active_memory)) {
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
return NONE;
}
#endif
@ -682,7 +685,6 @@ try_extmem:
CHECK(ExtByteManager[i].dynamic_buddy_manager.done->JudgeLegal(&ExtByteManager[i].dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM));
break;
}
}
}
}
@ -690,7 +692,7 @@ try_extmem:
}
/* release lock */
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
return ret;
}
@ -789,10 +791,10 @@ void x_free(void *pointer)
}
/* hold lock before release */
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
if (!ByteManager.dynamic_buddy_manager.done->JudgeLegal(&ByteManager.dynamic_buddy_manager, pointer)) {
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
SYS_ERR("[%s] Freeing a unallocated address.\n", __func__);
return;
}
@ -823,7 +825,7 @@ void x_free(void *pointer)
}
/* release the lock */
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
}
#ifdef MEM_EXTERN_SRAM
@ -868,7 +870,6 @@ void ExtSramInitBoardMemory(void *start_phy_address, void *end_phy_address, uint
ExtByteManager[extsram_idx].dynamic_buddy_manager.done = &DynamicDone;
ExtByteManager[extsram_idx].done = &NodeDone;
/* dynamic buddy memory initialization */
ExtByteManager[extsram_idx].dynamic_buddy_manager.done->init(&ExtByteManager[extsram_idx].dynamic_buddy_manager, ExtByteManager[extsram_idx].dynamic_buddy_manager.dynamic_buddy_start, ExtByteManager[extsram_idx].dynamic_buddy_manager.dynamic_buddy_end - ExtByteManager[extsram_idx].dynamic_buddy_manager.dynamic_buddy_start);
}
@ -916,7 +917,6 @@ void InitBoardMemory(void *start_phy_address, void *end_phy_address)
ByteManager.static_manager[MM_SEGMENT_64B].done = &StaticDone;
ByteManager.done = &NodeDone;
/* dynamic buddy memory initialization */
ByteManager.dynamic_buddy_manager.done->init(&ByteManager.dynamic_buddy_manager, ByteManager.dynamic_buddy_manager.dynamic_buddy_start, ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start);
@ -941,14 +941,13 @@ void *x_umalloc(x_size_t size)
void* ret = NONE;
register x_base lock = 0;
#ifdef MEM_EXTERN_SRAM
/* parameter detection */
if (size == 0) {
return NONE;
}
if ((size > ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start - ByteManager.dynamic_buddy_manager.active_memory)) {
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
/* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE);
goto try_extmem;
@ -961,14 +960,13 @@ void *x_umalloc(x_size_t size)
#endif
/* hold lock before allocation */
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
/* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE);
ret = UserByteManager.dynamic_buddy_manager.done->malloc(&UserByteManager.dynamic_buddy_manager, size, DYNAMIC_BLOCK_NO_EXTMEM_MASK);
if (ret != NONE)
CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM));
#ifdef MEM_EXTERN_SRAM
try_extmem:
if (NONE == ret) {
@ -984,7 +982,7 @@ try_extmem:
}
#endif
/* release lock */
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
return ret;
}
@ -1083,7 +1081,7 @@ void x_ufree(void *pointer)
CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, pointer));
/* hold lock before release */
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
node = PTR2ALLOCNODE((char*)pointer - SIZEOF_DYNAMICALLOCNODE_MEM);
CHECK(UserByteManager.done->JudgeAllocated(node));
@ -1102,7 +1100,7 @@ void x_ufree(void *pointer)
UserByteManager.dynamic_buddy_manager.done->release(&UserByteManager, pointer);
#endif
/* release the lock */
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
}
/**
@ -1213,7 +1211,7 @@ void ShowBuddy(void)
int lock = 0;
struct DynamicFreeNode *debug = NONE;
lock = CriticalAreaLock();
lock = FREE_LIST_LOCK();
KPrintf("\n\033[41;1mlist memory information\033[0m\n", __func__);
for(int level = 0; level < MEM_LINKNRS; level++) {
KPrintf("%s level [%d],memory size[2^%d] \n",__func__, level,level +6);
@ -1258,7 +1256,7 @@ void ShowBuddy(void)
}
#endif
CriticalAreaUnLock(lock);
FREE_LIST_UNLOCK(lock);
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),
ShowBuddy,ShowBuddy,list memory usage information);

View File

@ -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;

View File

@ -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));

View File

@ -112,6 +112,21 @@ KERNELPATHS += \
-I$(BSP_ROOT)/third_party_driver/drivers \
-I$(BSP_ROOT)/third_party_driver/lcd \
-I$(KERNEL_ROOT)/include #
ifeq ($(CONFIG_RESOURCES_LWIP),y)
KERNELPATHS += \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/compat \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/lwip \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/netif \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/lwip/apps \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/lwip/priv \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/include/lwip/prot \
-I$(KERNEL_ROOT)/resources/ethernet/LwIP/arch
KERNELPATHS += -I$(KERNEL_ROOT)/resources/include/netdev
endif
endif
ifeq ($(BSP_ROOT),$(KERNEL_ROOT)/board/kd233)

View File

@ -35,6 +35,15 @@
/* ---------- Debug options ---------- */
#ifndef LWIP_DEBUG
#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
@ -208,7 +217,6 @@
#endif /* LWIP_DEBUG */
#define LWIP_TIMEVAL_PRIVATE 0
#define LWIP_NO_UNISTD_H 0
#define LWIP_NO_STDDEF_H 0
@ -219,6 +227,7 @@
#define LWIP_SOCKET_SELECT 1
#define LWIP_SOCKET_POLL 1
#define LWIP_DHCP_DOES_ACD_CHECK 0
/**
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
* critical regions during buffer allocation, deallocation and memory
@ -242,11 +251,19 @@
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
byte alignment -> define MEM_ALIGNMENT to 2. */
#ifndef RISCV_LWIP
#define MEM_ALIGNMENT 4
#else
#define MEM_ALIGNMENT 8
#endif
/* 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
@ -287,7 +304,7 @@ a lot of data that needs to be copied, this should be set high. */
/* Controls if TCP should queue segments that arrive out of
order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ 1
#define TCP_QUEUE_OOSEQ 0
/* TCP Maximum segment size. */
#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
@ -304,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
@ -367,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
@ -399,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.*/
@ -433,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 ----------
@ -442,7 +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
// #define LWIP_NETCONN 1
// #else
#define LWIP_NETCONN 1
// #endif
/*
------------------------------------
@ -514,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
@ -532,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
@ -559,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
@ -570,4 +583,3 @@ typedef unsigned int nfds_t;
#endif /* __LWIPOPTS_H__ */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -338,11 +338,11 @@ void lwip_config_input(struct netif* net)
th_id = sys_thread_new("eth_input", ethernetif_input, net, LWIP_TASK_STACK_SIZE, 30);
if (th_id >= 0) {
lw_print("%s %d successfully!\n", __func__, th_id);
} else {
lw_print("%s failed!\n", __func__);
}
// if (th_id >= 0) {
// lw_print("%s %d successfully!\n", __func__, th_id);
// } else {
// lw_print("%s failed!\n", __func__);
// }
}
void lwip_config_tcp(uint8_t enet_port, char* ip, char* mask, char* gw)
@ -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");

View File

@ -200,7 +200,9 @@ typedef uintptr_t mem_ptr_t;
#include <unistd.h>
#endif
#else /* SSIZE_MAX */
#ifndef RISCV_LWIP
typedef int ssize_t;
#endif
#define SSIZE_MAX INT_MAX
#endif /* SSIZE_MAX */

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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_tcp(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;

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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')