Merge branch 'prepare_for_master' of https://git.trustie.net/xuos/xiuos into jerryscript

This commit is contained in:
wgzAIIT 2023-09-11 10:12:03 +08:00
commit e8061577da
37 changed files with 2282 additions and 1728 deletions

View File

@ -324,7 +324,7 @@ void TestSocket(int argc, char* argv[])
return; return;
} else { } else {
memset(iperf_param.host, 0, sizeof(iperf_param.host)); 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; 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 PrivIoctl(int fd, int cmd, void *args)
{ {
int ret; int ret = -ERROR;
struct PrivIoctlCfg *ioctl_cfg = (struct PrivIoctlCfg *)args; struct PrivIoctlCfg *ioctl_cfg = (struct PrivIoctlCfg *)args;
switch (ioctl_cfg->ioctl_driver_type) 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)); 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); sem_init(&timer_sem, 0, 0);

View File

@ -10,7 +10,7 @@ menu "lib using MQTT"
menu "MQTT connection parameter configuration." menu "MQTT connection parameter configuration."
config PLATFORM_PRODUCTKEY config PLATFORM_PRODUCTKEY
string "Product Key, used to identify a product." string "Product Key, used to identify a product."
default "iywhcgnuezz" default "iv74vebCdJC"
config CLIENT_DEVICENAME config CLIENT_DEVICENAME
string "Device name, used to identify a client device." string "Device name, used to identify a client device."
@ -18,7 +18,7 @@ menu "lib using MQTT"
config CLIENT_DEVICESECRET config CLIENT_DEVICESECRET
string "Device secret, used for device authentication and data encryption." string "Device secret, used for device authentication and data encryption."
default "c9a4ce03e9382065fc089e9ff54b771d" default "d2e613c4f714b6b0774bd7b68eeceae3"
config PLATFORM_SERVERIP config PLATFORM_SERVERIP
string "mqtt platform server ip." string "mqtt platform server ip."

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 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 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 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 ARCH = risc-v
export MCU = k210 export MCU = k210

View File

@ -25,11 +25,12 @@
#ifndef _BSP_ATOMIC_H #ifndef _BSP_ATOMIC_H
#define _BSP_ATOMIC_H #define _BSP_ATOMIC_H
#include <stdint.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#define SPINLOCK_INIT \ #define SPINLOCK_INIT \
{ \ { \
0 \ 0 \
@ -63,7 +64,7 @@ extern "C" {
typedef struct _spinlock typedef struct _spinlock
{ {
int lock; int32_t lock;
} spinlock_t; } spinlock_t;
typedef struct _semaphore typedef struct _semaphore

View File

@ -2,6 +2,7 @@
config BSP_USING_W5500 config BSP_USING_W5500
bool "Using w5500" bool "Using w5500"
select BSP_USING_LWIP
default y default y
config BSP_WIZ_RST_PIN config BSP_WIZ_RST_PIN
@ -15,3 +16,8 @@ config BSP_WIZ_INT_PIN
config BSP_WIZ_USE_IPERF config BSP_WIZ_USE_IPERF
bool "Using iperf" bool "Using iperf"
default y 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 include $(KERNEL_ROOT)/compiler.mk

View File

@ -5,8 +5,8 @@
#include <dev_pin.h> #include <dev_pin.h>
#include <drv_io_config.h> #include <drv_io_config.h>
#include <fpioa.h> #include <fpioa.h>
#include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <xs_base.h> #include <xs_base.h>
#include "gpio_common.h" #include "gpio_common.h"
@ -14,6 +14,10 @@
#include "socket.h" #include "socket.h"
#include "w5500.h" #include "w5500.h"
#include "connect_ethernet.h"
#include <sys.h>
#define SPI_LORA_FREQUENCY 10000000 #define SPI_LORA_FREQUENCY 10000000
// spi operations // spi operations
@ -23,12 +27,14 @@ extern void spi_select_cs(void);
extern void spi_deselete_cs(void); extern void spi_deselete_cs(void);
// global configurations for w5500 tcp connection // 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; static const uint32_t g_wiznet_buf_size = 2048;
return g_wiznet_buf_size; 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 }, static wiz_NetInfo g_wiz_netinfo = { .mac = { 0x00, 0x08, 0xdc, 0x11, 0x11, 0x11 },
.ip = { 192, 168, 130, 77 }, .ip = { 192, 168, 130, 77 },
.sn = { 255, 255, 254, 0 }, .sn = { 255, 255, 254, 0 },
@ -38,7 +44,8 @@ wiz_NetInfo *get_gnetinfo() {
return &g_wiz_netinfo; return &g_wiz_netinfo;
} }
int network_init() { int network_init()
{
wiz_NetInfo check_wiz_netinfo; wiz_NetInfo check_wiz_netinfo;
check_wiz_netinfo.dhcp = NETINFO_STATIC; check_wiz_netinfo.dhcp = NETINFO_STATIC;
ctlnetwork(CN_SET_NETINFO, (void*)get_gnetinfo()); ctlnetwork(CN_SET_NETINFO, (void*)get_gnetinfo());
@ -77,12 +84,12 @@ int network_init() {
/****************** spi init ******************/ /****************** spi init ******************/
static struct Bus* w5500_spi_bus; static struct Bus* w5500_spi_bus;
int w5500_spi_init() { int w5500_spi_init()
{
x_err_t ret = EOK; x_err_t ret = EOK;
w5500_spi_bus = BusFind(SPI_BUS_NAME_1); w5500_spi_bus = BusFind(SPI_BUS_NAME_1);
w5500_spi_bus->owner_haldev = w5500_spi_bus->owner_haldev = BusFindDevice(w5500_spi_bus, SPI_1_DEVICE_NAME_0);
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->owner_driver = BusFindDriver(w5500_spi_bus, SPI_1_DRV_NAME);
w5500_spi_bus->match(w5500_spi_bus->owner_driver, w5500_spi_bus->match(w5500_spi_bus->owner_driver,
@ -114,13 +121,16 @@ int w5500_spi_init() {
return EOK; return EOK;
} }
void spi_write_byte(uint8_t tx_data) { void spi_write_byte(uint8_t tx_data)
{
struct BusBlockWriteParam write_param; struct BusBlockWriteParam write_param;
write_param.buffer = &tx_data; uint8_t data = tx_data;
write_param.buffer = &data;
write_param.size = 1; write_param.size = 1;
BusDevWriteData(w5500_spi_bus->owner_haldev, &write_param); BusDevWriteData(w5500_spi_bus->owner_haldev, &write_param);
} }
uint8_t spi_read_byte(void) { uint8_t spi_read_byte(void)
{
uint8_t result = 0; uint8_t result = 0;
struct BusBlockReadParam read_param; struct BusBlockReadParam read_param;
read_param.buffer = &result; read_param.buffer = &result;
@ -128,13 +138,15 @@ uint8_t spi_read_byte(void) {
BusDevReadData(w5500_spi_bus->owner_haldev, &read_param); BusDevReadData(w5500_spi_bus->owner_haldev, &read_param);
return result; 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; struct BusBlockWriteParam write_param;
write_param.buffer = tx_buf; write_param.buffer = tx_buf;
write_param.size = len; write_param.size = len;
BusDevWriteData(w5500_spi_bus->owner_haldev, &write_param); 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; struct BusBlockReadParam read_param;
read_param.buffer = rx_buf; read_param.buffer = rx_buf;
read_param.size = len; read_param.size = len;
@ -143,7 +155,8 @@ void spi_read_burst(uint8_t *rx_buf, uint16_t len) {
/****************** chip init ******************/ /****************** chip init ******************/
void wiz_reset() { void wiz_reset()
{
gpiohs_set_drive_mode(WIZ_RST_PIN, GPIO_DM_OUTPUT); gpiohs_set_drive_mode(WIZ_RST_PIN, GPIO_DM_OUTPUT);
gpiohs_set_pin(WIZ_RST_PIN, GPIO_PV_LOW); gpiohs_set_pin(WIZ_RST_PIN, GPIO_PV_LOW);
MdelayKTask(20); MdelayKTask(20);
@ -152,10 +165,10 @@ void wiz_reset() {
MdelayKTask(20); MdelayKTask(20);
} }
void wiz_spi_handler_reg() { void wiz_spi_handler_reg()
{
// spi ops registration // spi ops registration
#if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_) || \ #if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_) || (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_)
(_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_)
/* register SPI device CS select callback function */ /* register SPI device CS select callback function */
gpiohs_set_drive_mode(SPI1_CS0_PIN, GPIO_DM_OUTPUT); gpiohs_set_drive_mode(SPI1_CS0_PIN, GPIO_DM_OUTPUT);
reg_wizchip_cs_cbfunc(spi_select_cs, spi_deselete_cs); 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); 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 } }; 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. */ /* reset WIZnet chip internal PHY, configures PHY mode. */
@ -190,11 +204,64 @@ int wiz_chip_cfg_init() {
} }
/****************** interrupt handle ******************/ /****************** 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; int32_t ret = -ERROR;
wizchip_interrupt_init(0, wiz_irq_handler);
struct Bus* pin_bus = PinBusInitGet(); struct Bus* pin_bus = PinBusInitGet();
struct PinParam pin_param; struct PinParam pin_param;
@ -241,11 +308,10 @@ int wiz_interrupt_init() {
} }
return EOK; return EOK;
return EOK;
} }
int HwWiznetInit(void) { int HwWiznetInit(void)
{
wiz_reset(); wiz_reset();
if (EOK != w5500_spi_init()) { if (EOK != w5500_spi_init()) {
@ -258,6 +324,31 @@ int HwWiznetInit(void) {
return ERROR; 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(); network_init();
return EOK; return EOK;

View File

@ -96,25 +96,30 @@ uint8_t sock_remained_byte[_WIZCHIP_SOCK_NUM_] = {
#define CHECK_SOCKNUM() \ #define CHECK_SOCKNUM() \
do { \ do { \
if (sn > _WIZCHIP_SOCK_NUM_) return SOCKERR_SOCKNUM; \ if (sn > _WIZCHIP_SOCK_NUM_) \
return SOCKERR_SOCKNUM; \
} while (0); } while (0);
#define CHECK_SOCKMODE(mode) \ #define CHECK_SOCKMODE(mode) \
do { \ do { \
if ((getSn_MR(sn) & 0x0F) != mode) return SOCKERR_SOCKMODE; \ if ((getSn_MR(sn) & 0x0F) != mode) \
return SOCKERR_SOCKMODE; \
} while (0); } while (0);
#define CHECK_SOCKINIT() \ #define CHECK_SOCKINIT() \
do { \ do { \
if ((getSn_SR(sn) != SOCK_INIT)) return SOCKERR_SOCKINIT; \ if ((getSn_SR(sn) != SOCK_INIT)) \
return SOCKERR_SOCKINIT; \
} while (0); } while (0);
#define CHECK_SOCKDATA() \ #define CHECK_SOCKDATA() \
do { \ do { \
if (len == 0) return SOCKERR_DATALEN; \ if (len == 0) \
return SOCKERR_DATALEN; \
} while (0); } 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(); CHECK_SOCKNUM();
switch (protocol) { switch (protocol) {
case Sn_MR_TCP: { 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; uint32_t taddr;
getSIPR((uint8_t*)&taddr); getSIPR((uint8_t*)&taddr);
if (taddr == 0) return SOCKERR_SOCKINIT; if (taddr == 0)
return SOCKERR_SOCKINIT;
break; break;
} }
case Sn_MR_UDP: 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 // M20150601 : For SF_TCP_ALIGN & W5300
// if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG; // 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 _WIZCHIP_ == 5200
if (flag & 0x10) return SOCKERR_SOCKFLAG; if (flag & 0x10)
return SOCKERR_SOCKFLAG;
#endif #endif
if (flag != 0) { if (flag != 0) {
@ -161,11 +169,13 @@ int8_t wiz_socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) {
break; break;
case Sn_MR_UDP: case Sn_MR_UDP:
if (flag & SF_IGMP_VER2) { 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 _WIZCHIP_ == 5500
if (flag & SF_UNI_BLOCK) { if (flag & SF_UNI_BLOCK) {
if ((flag & SF_MULTI_ENABLE) == 0) return SOCKERR_SOCKFLAG; if ((flag & SF_MULTI_ENABLE) == 0)
return SOCKERR_SOCKFLAG;
} }
#endif #endif
break; 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); wiz_sock_close(sn);
// M20150601 // M20150601
#if _WIZCHIP_ == 5300 #if _WIZCHIP_ == 5300
setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | (((uint16_t)(flag & 0x02)) << 7));
(((uint16_t)(flag & 0x02)) << 7));
#else #else
setSn_MR(sn, (protocol | (flag & 0xF0))); setSn_MR(sn, (protocol | (flag & 0xF0)));
#endif #endif
if (!port) { if (!port) {
port = sock_any_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_PORT(sn, port);
setSn_CR(sn, Sn_CR_OPEN); 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; return (int8_t)sn;
} }
int8_t wiz_sock_close(uint8_t sn) { int8_t wiz_sock_close(uint8_t sn)
{
CHECK_SOCKNUM(); CHECK_SOCKNUM();
// A20160426 : Applied the erratum 1 of W5300 // A20160426 : Applied the erratum 1 of W5300
#if (_WIZCHIP_ == 5300) #if (_WIZCHIP_ == 5300)
// M20160503 : Wrong socket parameter. s -> sn // M20160503 : Wrong socket parameter. s -> sn
// if( ((getSn_MR(s)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(s) != // if( ((getSn_MR(s)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(s) !=
// getSn_TxMAX(s)) ) // getSn_TxMAX(s)) )
if (((getSn_MR(sn) & 0x0F) == Sn_MR_TCP) && if (((getSn_MR(sn) & 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(sn) != getSn_TxMAX(sn))) {
(getSn_TX_FSR(sn) != getSn_TxMAX(sn))) {
uint8_t destip[4] = { 0, 0, 0, 1 }; uint8_t destip[4] = { 0, 0, 0, 1 };
// TODO // TODO
// You can wait for completing to sending data; // You can wait for completing to sending data;
@ -255,7 +265,8 @@ int8_t wiz_sock_close(uint8_t sn) {
return SOCK_OK; return SOCK_OK;
} }
int8_t wiz_sock_listen(uint8_t sn) { int8_t wiz_sock_listen(uint8_t sn)
{
CHECK_SOCKNUM(); CHECK_SOCKNUM();
CHECK_SOCKMODE(Sn_MR_TCP); CHECK_SOCKMODE(Sn_MR_TCP);
CHECK_SOCKINIT(); CHECK_SOCKINIT();
@ -269,7 +280,8 @@ int8_t wiz_sock_listen(uint8_t sn) {
return SOCK_OK; 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_SOCKNUM();
CHECK_SOCKMODE(Sn_MR_TCP); CHECK_SOCKMODE(Sn_MR_TCP);
CHECK_SOCKINIT(); 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[1] & 0x000000FF);
taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF); taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF);
taddr = (taddr << 8) + ((uint32_t)addr[3] & 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_DIPR(sn, addr);
setSn_DPORT(sn, port); setSn_DPORT(sn, port);
setSn_CR(sn, Sn_CR_CONNECT); setSn_CR(sn, Sn_CR_CONNECT);
while (getSn_CR(sn)) 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) { while (getSn_SR(sn) != SOCK_ESTABLISHED) {
if (getSn_IR(sn) & Sn_IR_TIMEOUT) { if (getSn_IR(sn) & Sn_IR_TIMEOUT) {
setSn_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; return SOCK_OK;
} }
int8_t wiz_sock_disconnect(uint8_t sn) { int8_t wiz_sock_disconnect(uint8_t sn)
{
CHECK_SOCKNUM(); CHECK_SOCKNUM();
CHECK_SOCKMODE(Sn_MR_TCP); CHECK_SOCKMODE(Sn_MR_TCP);
setSn_CR(sn, Sn_CR_DISCON); setSn_CR(sn, Sn_CR_DISCON);
@ -315,7 +331,8 @@ int8_t wiz_sock_disconnect(uint8_t sn) {
while (getSn_CR(sn)) while (getSn_CR(sn))
; ;
sock_is_sending &= ~(1 << 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) { while (getSn_SR(sn) != SOCK_CLOSED) {
if (getSn_IR(sn) & Sn_IR_TIMEOUT) { if (getSn_IR(sn) & Sn_IR_TIMEOUT) {
wiz_sock_close(sn); wiz_sock_close(sn);
@ -325,7 +342,8 @@ int8_t wiz_sock_disconnect(uint8_t sn) {
return SOCK_OK; 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; uint8_t tmp = 0;
uint16_t freesize = 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; return SOCK_BUSY;
} }
freesize = getSn_TxMAX(sn); 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) { while (1) {
freesize = getSn_TX_FSR(sn); freesize = getSn_TX_FSR(sn);
tmp = getSn_SR(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); wiz_sock_close(sn);
return SOCKERR_SOCKSTATUS; return SOCKERR_SOCKSTATUS;
} }
if ((sock_io_mode & (1 << sn)) && (len > freesize)) return SOCK_BUSY; if ((sock_io_mode & (1 << sn)) && (len > freesize))
if (len <= freesize) break; return SOCK_BUSY;
if (len <= freesize)
break;
} }
wiz_send_data(sn, buf, len); wiz_send_data(sn, buf, len);
#if _WIZCHIP_ == 5200 #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; 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; uint8_t tmp = 0;
uint16_t recvsize = 0; uint16_t recvsize = 0;
// A20150601 : For integarating with W5300 // 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(); CHECK_SOCKDATA();
recvsize = getSn_RxMAX(sn); recvsize = getSn_RxMAX(sn);
if (recvsize < len) len = recvsize; if (recvsize < len)
len = recvsize;
// A20150601 : For Integrating with W5300 // A20150601 : For Integrating with W5300
#if _WIZCHIP_ == 5300 #if _WIZCHIP_ == 5300
@ -425,8 +449,10 @@ int32_t wiz_sock_recv(uint8_t sn, uint8_t *buf, uint16_t len) {
return SOCKERR_SOCKSTATUS; return SOCKERR_SOCKSTATUS;
} }
} }
if ((sock_io_mode & (1 << sn)) && (recvsize == 0)) return SOCK_BUSY; if ((sock_io_mode & (1 << sn)) && (recvsize == 0))
if (recvsize != 0) break; return SOCK_BUSY;
if (recvsize != 0)
break;
}; };
#if _WIZCHIP_ == 5300 #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; 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; recvsize = len;
if (sock_pack_info[sn] & PACK_FIFOBYTE) { if (sock_pack_info[sn] & PACK_FIFOBYTE) {
*buf = sock_remained_byte[sn]; *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; sock_remained_size[sn] -= recvsize;
if (sock_remained_size[sn] != 0) { if (sock_remained_size[sn] != 0) {
sock_pack_info[sn] |= PACK_REMAINED; 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 } else
sock_pack_info[sn] = PACK_COMPLETED; 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; // len = recvsize;
#else #else
if (recvsize < len) len = recvsize; if (recvsize < len)
len = recvsize;
wiz_recv_data(sn, buf, len); wiz_recv_data(sn, buf, len);
setSn_CR(sn, Sn_CR_RECV); setSn_CR(sn, Sn_CR_RECV);
while (getSn_CR(sn)) 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; 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, 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; uint8_t tmp = 0;
uint16_t freesize = 0; uint16_t freesize = 0;
uint32_t taddr; 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_DIPR(sn, addr);
setSn_DPORT(sn, port); setSn_DPORT(sn, port);
freesize = getSn_TxMAX(sn); 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) { while (1) {
freesize = getSn_TX_FSR(sn); freesize = getSn_TX_FSR(sn);
if (getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; if (getSn_SR(sn) == SOCK_CLOSED)
if ((sock_io_mode & (1 << sn)) && (len > freesize)) return SOCK_BUSY; return SOCKERR_SOCKCLOSED;
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); 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) { while (1) {
tmp = getSn_IR(sn); tmp = getSn_IR(sn);
// SYS_KDEBUG_LOG(WIZNET_DEBUG, ("[%s] %d, tmp: %x\n", __func__, __LINE__, tmp));
if (tmp & Sn_IR_SENDOK) { if (tmp & Sn_IR_SENDOK) {
setSn_IR(sn, Sn_IR_SENDOK); setSn_IR(sn, Sn_IR_SENDOK);
break; 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; // len = (uint16_t)SOCKERR_TIMEOUT;
// break; // break;
#if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata) #if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
if (taddr) setSUBR((uint8_t *)&taddr); if (taddr)
setSUBR((uint8_t*)&taddr);
#endif #endif
return SOCKERR_TIMEOUT; return SOCKERR_TIMEOUT;
} }
//////////// ////////////
} }
#if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata) #if _WIZCHIP_ < 5500 // M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
if (taddr) setSUBR((uint8_t *)&taddr); if (taddr)
setSUBR((uint8_t*)&taddr);
#endif #endif
// M20150409 : Explicit Type Casting // M20150409 : Explicit Type Casting
// return len; // 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, 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 // M20150601 : For W5300
#if _WIZCHIP_ == 5300 #if _WIZCHIP_ == 5300
uint16_t mr; 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) { if (sock_remained_size[sn] == 0) {
while (1) { while (1) {
pack_len = getSn_RX_RSR(sn); pack_len = getSn_RX_RSR(sn);
if (getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; if (getSn_SR(sn) == SOCK_CLOSED)
if ((sock_io_mode & (1 << sn)) && (pack_len == 0)) return SOCK_BUSY; return SOCKERR_SOCKCLOSED;
if (pack_len != 0) break; if ((sock_io_mode & (1 << sn)) && (pack_len == 0))
return SOCK_BUSY;
if (pack_len != 0)
break;
}; };
} }
// D20150601 : Move it to bottom // 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) { if (sock_remained_size[sn] != 0) {
sock_pack_info[sn] |= PACK_REMAINED; sock_pack_info[sn] |= PACK_REMAINED;
#if _WIZCHIP_ == 5300 #if _WIZCHIP_ == 5300
if (pack_len & 0x01) sock_pack_info[sn] |= PACK_FIFOBYTE; if (pack_len & 0x01)
sock_pack_info[sn] |= PACK_FIFOBYTE;
#endif #endif
} else } else
sock_pack_info[sn] = PACK_COMPLETED; 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; 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; uint8_t tmp = 0;
CHECK_SOCKNUM(); CHECK_SOCKNUM();
switch (cstype) { switch (cstype) {
@ -786,7 +832,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) {
*((uint16_t*)arg) = getSn_RxMAX(sn); *((uint16_t*)arg) = getSn_RxMAX(sn);
break; break;
case CS_CLR_INTERRUPT: 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); setSn_IR(sn, *(uint8_t*)arg);
break; break;
case CS_GET_INTERRUPT: case CS_GET_INTERRUPT:
@ -794,7 +841,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) {
break; break;
#if _WIZCHIP_ != 5100 #if _WIZCHIP_ != 5100
case CS_SET_INTMASK: 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); setSn_IMR(sn, *(uint8_t*)arg);
break; break;
case CS_GET_INTMASK: case CS_GET_INTMASK:
@ -807,7 +855,8 @@ int8_t wiz_ctlsocket(uint8_t sn, ctlsock_type cstype, void *arg) {
return SOCK_OK; 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 // M20131220 : Remove warning
// uint8_t tmp; // uint8_t tmp;
CHECK_SOCKNUM(); CHECK_SOCKNUM();
@ -831,7 +880,8 @@ int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void *arg) {
case SO_KEEPALIVESEND: case SO_KEEPALIVESEND:
CHECK_SOCKMODE(Sn_MR_TCP); CHECK_SOCKMODE(Sn_MR_TCP);
#if _WIZCHIP_ > 5200 #if _WIZCHIP_ > 5200
if (getSn_KPALVTR(sn) != 0) return SOCKERR_SOCKOPT; if (getSn_KPALVTR(sn) != 0)
return SOCKERR_SOCKOPT;
#endif #endif
setSn_CR(sn, Sn_CR_SEND_KEEP); setSn_CR(sn, Sn_CR_SEND_KEEP);
while (getSn_CR(sn) != 0) { while (getSn_CR(sn) != 0) {
@ -856,7 +906,8 @@ int8_t wiz_setsockopt(uint8_t sn, sockopt_type sotype, void *arg) {
return SOCK_OK; 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(); CHECK_SOCKNUM();
switch (sotype) { switch (sotype) {
case SO_FLAG: case SO_FLAG:
@ -901,7 +952,8 @@ int8_t wiz_getsockopt(uint8_t sn, sockopt_type sotype, void *arg) {
case SO_PACKINFO: case SO_PACKINFO:
// CHECK_SOCKMODE(Sn_MR_TCP); // CHECK_SOCKMODE(Sn_MR_TCP);
#if _WIZCHIP_ != 5300 #if _WIZCHIP_ != 5300
if ((getSn_MR(sn) == Sn_MR_TCP)) return SOCKERR_SOCKMODE; if ((getSn_MR(sn) == Sn_MR_TCP))
return SOCKERR_SOCKMODE;
#endif #endif
*(uint8_t*)arg = sock_pack_info[sn]; *(uint8_t*)arg = sock_pack_info[sn];
break; break;

View File

@ -65,8 +65,9 @@
#if (_WIZCHIP_ == 5500) #if (_WIZCHIP_ == 5500)
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
uint8_t WIZCHIP_READ(uint32_t AddrSel) { uint8_t WIZCHIP_READ(uint32_t AddrSel)
uint8_t ret; {
uint8_t ret = 0;
uint8_t spi_data[3]; uint8_t spi_data[3];
WIZCHIP_CRITICAL_ENTER(); WIZCHIP_CRITICAL_ENTER();
@ -74,8 +75,7 @@ uint8_t WIZCHIP_READ(uint32_t AddrSel) {
AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_);
if (!WIZCHIP.IF.SPI._read_burst || if (!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
!WIZCHIP.IF.SPI._write_burst) // byte operation
{ {
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
@ -94,7 +94,8 @@ uint8_t WIZCHIP_READ(uint32_t AddrSel) {
return ret; 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]; uint8_t spi_data[4];
WIZCHIP_CRITICAL_ENTER(); WIZCHIP_CRITICAL_ENTER();
@ -123,7 +124,8 @@ void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb) {
WIZCHIP_CRITICAL_EXIT(); 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]; uint8_t spi_data[3];
uint16_t i; 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_); AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_);
if (!WIZCHIP.IF.SPI._read_burst || if (!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
!WIZCHIP.IF.SPI._write_burst) // byte operation
{ {
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); 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(); 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]; uint8_t spi_data[3];
uint16_t i; uint16_t i;
@ -182,7 +184,8 @@ void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t *pBuf, uint16_t len) {
WIZCHIP_CRITICAL_EXIT(); 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; uint16_t val = 0, val1 = 0;
do { do {
@ -196,7 +199,8 @@ uint16_t getSn_TX_FSR(uint8_t sn) {
return val; return val;
} }
uint16_t getSn_RX_RSR(uint8_t sn) { uint16_t getSn_RX_RSR(uint8_t sn)
{
uint16_t val = 0, val1 = 0; uint16_t val = 0, val1 = 0;
do { do {
@ -210,7 +214,8 @@ uint16_t getSn_RX_RSR(uint8_t sn) {
return val; 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; uint16_t ptr = 0;
uint32_t addrsel = 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); 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; uint16_t ptr = 0;
uint32_t addrsel = 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); 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; uint16_t ptr = 0;
ptr = getSn_RX_RD(sn); 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); 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("Usage: iperf [-s|-c host] [options] [multi-threaded]\n");
KPrintf(" iperf [-h|--stop]\n"); KPrintf(" iperf [-h|--stop]\n");
@ -326,7 +326,7 @@ void iperf_usage(void)
return; return;
} }
int iperf(int argc, char **argv) int wiz_iperf(int argc, char** argv)
{ {
int mode = 0; /* server mode */ int mode = 0; /* server mode */
char *host = NULL; char *host = NULL;
@ -460,6 +460,6 @@ __usage:
return 0; return 0;
} }
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
iperf, iperf, wiz_iperf, wiz_iperf,
iperf throughput test); iperf throughput test);
#endif #endif

View File

@ -37,7 +37,8 @@ uint8_t ping_socket = 0;
#define bswap_16(A) ((((uint16)(A) & 0xff00) >> 8) | (((uint16)(A) & 0x00ff) << 8)) #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 { union {
int i; int i;
char c; char c;
@ -45,7 +46,8 @@ uint16_t htons(uint16_t n) {
return u.c ? bswap_16(n) : 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; uint16_t sum, tsum, i, j;
uint32_t lsum; uint32_t lsum;
@ -76,13 +78,14 @@ uint16_t checksum(uint8_t *src, uint32_t len) {
*@param pCount- ping的次数 *@param pCount- ping的次数
*@return 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; uint16_t rlen, cnt, i;
ping_reply_received = 0; ping_reply_received = 0;
ping_req = 0; ping_req = 0;
ping_rep = 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次*/ 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); wiz_sock_close(sn);
/* Create Socket */ /* Create Socket */
IINCHIP_WRITE(Sn_PROTO(sn), IPPROTO_ICMP); /*设置ICMP 协议*/ IINCHIP_WRITE(Sn_PROTO(sn), IPPROTO_ICMP); /*设置ICMP 协议*/
if (wiz_socket(sn, Sn_MR_IPRAW, PING_BIND_PORT, 0) != if (wiz_socket(sn, Sn_MR_IPRAW, PING_BIND_PORT, 0) != 0) /*判断ip raw模式socket是否开启*/
0) /*判断ip raw模式socket是否开启*/
{ {
} }
/* Check socket register */ /* Check socket register */
@ -142,26 +144,25 @@ uint8_t ping_count(uint8_t sn, uint16_t pCount, uint8_t *addr) {
*@param addr- P地址 *@param addr- P地址
*@return *@return
*/ */
uint8_t ping_request(uint8_t sn, uint8_t *addr) { uint8_t ping_request(uint8_t sn, uint8_t* addr)
{
uint8_t* buffer; uint8_t* buffer;
uint16_t i, temp_len = 0; uint16_t i, temp_len = 0;
ping_reply_received = 0; /*ping 回复初始化标志位*/ ping_reply_received = 0; /*ping 回复初始化标志位*/
PingRequest.Type = PING_REQUEST; /*Ping-Request*/ PingRequest.Type = PING_REQUEST; /*Ping-Request*/
PingRequest.Code = CODE_ZERO; /*总是 '0'*/ PingRequest.Code = CODE_ZERO; /*总是 '0'*/
PingRequest.ID = htons(ping_RandomID++); /*设置ping响应ID为随机的整型变量*/ PingRequest.ID = htons(ping_RandomID++); /*设置ping响应ID为随机的整型变量*/
PingRequest.SeqNum = PingRequest.SeqNum = htons(ping_RandomSeqNum++); /*设置ping响应的序列号为随机整形变量*/
htons(ping_RandomSeqNum++); /*设置ping响应的序列号为随机整形变量*/
for (i = 0; i < PING_BUF_LEN; i++) { for (i = 0; i < PING_BUF_LEN; i++) {
PingRequest.Data[i] = (i) % 8; /*ping相应的数在'0'~'8*/ PingRequest.Data[i] = (i) % 8; /*ping相应的数在'0'~'8*/
} }
PingRequest.CheckSum = 0; PingRequest.CheckSum = 0;
/* 计算响应次数*/ /* 计算响应次数*/
PingRequest.CheckSum = PingRequest.CheckSum = htons(checksum((uint8_t*)&PingRequest, sizeof(PingRequest)));
htons(checksum((uint8_t *)&PingRequest, sizeof(PingRequest)));
/*发送ping响应到目的方 */ /*发送ping响应到目的方 */
if (wiz_sock_sendto(sn, (uint8_t *)&PingRequest, sizeof(PingRequest), addr, if (wiz_sock_sendto(sn, (uint8_t*)&PingRequest, sizeof(PingRequest), addr, PING_BIND_PORT) == 0) {
PING_BIND_PORT) == 0) {
KPrintf("Fail to send ping-reply packet\r\n"); KPrintf("Fail to send ping-reply packet\r\n");
} else { } else {
KPrintf("ping send\n"); KPrintf("ping send\n");
@ -175,7 +176,8 @@ uint8_t ping_request(uint8_t sn, uint8_t *addr) {
*@param addr- Ping地址 *@param addr- Ping地址
*@return *@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 tmp_checksum;
uint16_t len; uint16_t len;
uint16_t i; uint16_t i;
@ -233,7 +235,8 @@ uint8_t ping_reply(uint8_t sn, uint8_t *addr, uint16_t rlen) {
return 0; return 0;
} }
void wiz_ping_test(int argc, char *argv[]) { void wiz_ping_test(int argc, char* argv[])
{
uint32_t tmp_ip[4]; uint32_t tmp_ip[4];
uint8_t target_ip[4]; uint8_t target_ip[4];
uint16_t pCount = 5; // 默认ping 5次 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), 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; spi_instance[device_master_id]->ssienr = 0x00;
transfer_done: transfer_done:
if (tx_buff) { if (tx_buff != NULL) {
x_free(tx_buff); x_free(tx_buff);
} }
} }

View File

@ -231,9 +231,9 @@ int MountFilesystem(const char *bus_name,
enum FilesystemType fs_type, const char *path) enum FilesystemType fs_type, const char *path)
{ {
struct MountPoint *mp = NULL, *itr; struct MountPoint *mp = NULL, *itr;
struct Bus *bus; struct Bus* bus = NULL;
HardwareDevType dev; HardwareDevType dev;
DriverType drv; DriverType drv = NULL;
struct SysDoubleLinklistNode *node; struct SysDoubleLinklistNode *node;
int ret = -EINVAL; int ret = -EINVAL;

View File

@ -46,6 +46,7 @@ extern "C" {
#define FILESYS_DEBUG 0 #define FILESYS_DEBUG 0
#define NETDEV_DEBUG 0 #define NETDEV_DEBUG 0
#define WEBNET_DEBUG 0 #define WEBNET_DEBUG 0
#define WIZNET_DEBUG 0
#define SYS_KDEBUG_LOG(section, information) \ #define SYS_KDEBUG_LOG(section, information) \
do { \ 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_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 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. * 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; register x_base lock = 0;
/* hold lock before allocation */ /* hold lock before allocation */
lock = CriticalAreaLock(); lock = FREE_LIST_LOCK();
/* alignment */ /* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE); size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE);
@ -641,7 +644,7 @@ void *x_malloc(x_size_t size)
#ifdef MEM_EXTERN_SRAM #ifdef MEM_EXTERN_SRAM
/* parameter detection */ /* parameter detection */
if (size == 0) { if (size == 0) {
CriticalAreaUnLock(lock); FREE_LIST_UNLOCK(lock);
return NONE; return NONE;
} }
if ((size > ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start - ByteManager.dynamic_buddy_manager.active_memory)) { 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 #else
/* parameter detection */ /* 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)) { 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; return NONE;
} }
#endif #endif
@ -682,7 +685,6 @@ try_extmem:
CHECK(ExtByteManager[i].dynamic_buddy_manager.done->JudgeLegal(&ExtByteManager[i].dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM)); CHECK(ExtByteManager[i].dynamic_buddy_manager.done->JudgeLegal(&ExtByteManager[i].dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM));
break; break;
} }
} }
} }
} }
@ -690,7 +692,7 @@ try_extmem:
} }
/* release lock */ /* release lock */
CriticalAreaUnLock(lock); FREE_LIST_UNLOCK(lock);
return ret; return ret;
} }
@ -789,10 +791,10 @@ void x_free(void *pointer)
} }
/* hold lock before release */ /* hold lock before release */
lock = CriticalAreaLock(); lock = FREE_LIST_LOCK();
if (!ByteManager.dynamic_buddy_manager.done->JudgeLegal(&ByteManager.dynamic_buddy_manager, pointer)) { 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__); SYS_ERR("[%s] Freeing a unallocated address.\n", __func__);
return; return;
} }
@ -823,7 +825,7 @@ void x_free(void *pointer)
} }
/* release the lock */ /* release the lock */
CriticalAreaUnLock(lock); FREE_LIST_UNLOCK(lock);
} }
#ifdef MEM_EXTERN_SRAM #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].dynamic_buddy_manager.done = &DynamicDone;
ExtByteManager[extsram_idx].done = &NodeDone; ExtByteManager[extsram_idx].done = &NodeDone;
/* dynamic buddy memory initialization */ /* 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); 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.static_manager[MM_SEGMENT_64B].done = &StaticDone;
ByteManager.done = &NodeDone; ByteManager.done = &NodeDone;
/* dynamic buddy memory initialization */ /* 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); 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; void* ret = NONE;
register x_base lock = 0; register x_base lock = 0;
#ifdef MEM_EXTERN_SRAM #ifdef MEM_EXTERN_SRAM
/* parameter detection */ /* parameter detection */
if (size == 0) { if (size == 0) {
return NONE; return NONE;
} }
if ((size > ByteManager.dynamic_buddy_manager.dynamic_buddy_end - ByteManager.dynamic_buddy_manager.dynamic_buddy_start - ByteManager.dynamic_buddy_manager.active_memory)) { 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 */ /* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE); size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE);
goto try_extmem; goto try_extmem;
@ -961,14 +960,13 @@ void *x_umalloc(x_size_t size)
#endif #endif
/* hold lock before allocation */ /* hold lock before allocation */
lock = CriticalAreaLock(); lock = FREE_LIST_LOCK();
/* alignment */ /* alignment */
size = ALIGN_MEN_UP(size, MEM_ALIGN_SIZE); 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); ret = UserByteManager.dynamic_buddy_manager.done->malloc(&UserByteManager.dynamic_buddy_manager, size, DYNAMIC_BLOCK_NO_EXTMEM_MASK);
if (ret != NONE) if (ret != NONE)
CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM)); CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, ret - SIZEOF_DYNAMICALLOCNODE_MEM));
#ifdef MEM_EXTERN_SRAM #ifdef MEM_EXTERN_SRAM
try_extmem: try_extmem:
if (NONE == ret) { if (NONE == ret) {
@ -984,7 +982,7 @@ try_extmem:
} }
#endif #endif
/* release lock */ /* release lock */
CriticalAreaUnLock(lock); FREE_LIST_UNLOCK(lock);
return ret; return ret;
} }
@ -1083,7 +1081,7 @@ void x_ufree(void *pointer)
CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, pointer)); CHECK(UserByteManager.dynamic_buddy_manager.done->JudgeLegal(&UserByteManager.dynamic_buddy_manager, pointer));
/* hold lock before release */ /* hold lock before release */
lock = CriticalAreaLock(); lock = FREE_LIST_LOCK();
node = PTR2ALLOCNODE((char*)pointer - SIZEOF_DYNAMICALLOCNODE_MEM); node = PTR2ALLOCNODE((char*)pointer - SIZEOF_DYNAMICALLOCNODE_MEM);
CHECK(UserByteManager.done->JudgeAllocated(node)); CHECK(UserByteManager.done->JudgeAllocated(node));
@ -1102,7 +1100,7 @@ void x_ufree(void *pointer)
UserByteManager.dynamic_buddy_manager.done->release(&UserByteManager, pointer); UserByteManager.dynamic_buddy_manager.done->release(&UserByteManager, pointer);
#endif #endif
/* release the lock */ /* release the lock */
CriticalAreaUnLock(lock); FREE_LIST_UNLOCK(lock);
} }
/** /**
@ -1213,7 +1211,7 @@ void ShowBuddy(void)
int lock = 0; int lock = 0;
struct DynamicFreeNode *debug = NONE; struct DynamicFreeNode *debug = NONE;
lock = CriticalAreaLock(); lock = FREE_LIST_LOCK();
KPrintf("\n\033[41;1mlist memory information\033[0m\n", __func__); KPrintf("\n\033[41;1mlist memory information\033[0m\n", __func__);
for(int level = 0; level < MEM_LINKNRS; level++) { for(int level = 0; level < MEM_LINKNRS; level++) {
KPrintf("%s level [%d],memory size[2^%d] \n",__func__, level,level +6); KPrintf("%s level [%d],memory size[2^%d] \n",__func__, level,level +6);
@ -1258,7 +1256,7 @@ void ShowBuddy(void)
} }
#endif #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), 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); 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(mq);
NULL_PARAM_CHECK(buffer); 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) if (size > mq->each_len)
return -ERROR; return -ERROR;

View File

@ -175,9 +175,9 @@ SWITCH:
HOOK(hook.assign.hook_Assign,(runningtask, new_task)); HOOK(hook.assign.hook_Assign,(runningtask, new_task));
SYS_KDEBUG_LOG(KDBG_SCHED, SYS_KDEBUG_LOG(KDBG_SCHED,
("[%d]switch to priority#%d " ("[%d]switch to priority#%ld "
"task:%.*s(sp:0x%08x), " "task:%.*s(sp:0x%8p), "
"from task:%.*s(sp: 0x%08x)\n", "from task:%.*s(sp: 0x%8p)\n",
isrManager.done->getCounter(), highest_prio, isrManager.done->getCounter(), highest_prio,
NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point, NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point,
NAME_NUM_MAX, runningtask->task_base_info.name, runningtask->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)); HOOK(hook.assign.hook_Assign,(runningtask, new_task));
SYS_KDEBUG_LOG(KDBG_SCHED, SYS_KDEBUG_LOG(KDBG_SCHED,
("[%d]switch to priority#%d " ("[%d]switch to priority#%ld "
"task:%.*s(sp:0x%08x), " "task:%.*s(sp:0x%8p), "
"from task:%.*s(sp: 0x%08x)\n", "from task:%.*s(sp: 0x%8p)\n",
isrManager.done->getCounter(), highest_prio, isrManager.done->getCounter(), highest_prio,
NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point, NAME_NUM_MAX, new_task->task_base_info.name, new_task->stack_point,
NAME_NUM_MAX, runningtask->task_base_info.name, runningtask->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/drivers \
-I$(BSP_ROOT)/third_party_driver/lcd \ -I$(BSP_ROOT)/third_party_driver/lcd \
-I$(KERNEL_ROOT)/include # -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 endif
ifeq ($(BSP_ROOT),$(KERNEL_ROOT)/board/kd233) ifeq ($(BSP_ROOT),$(KERNEL_ROOT)/board/kd233)

View File

@ -35,6 +35,15 @@
/* ---------- Debug options ---------- */ /* ---------- Debug options ---------- */
#ifndef LWIP_DEBUG #ifndef LWIP_DEBUG
#define LWIP_DEBUG 1 #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 #endif
#ifdef LWIP_DEBUG #ifdef LWIP_DEBUG
@ -208,7 +217,6 @@
#endif /* LWIP_DEBUG */ #endif /* LWIP_DEBUG */
#define LWIP_TIMEVAL_PRIVATE 0 #define LWIP_TIMEVAL_PRIVATE 0
#define LWIP_NO_UNISTD_H 0 #define LWIP_NO_UNISTD_H 0
#define LWIP_NO_STDDEF_H 0 #define LWIP_NO_STDDEF_H 0
@ -219,6 +227,7 @@
#define LWIP_SOCKET_SELECT 1 #define LWIP_SOCKET_SELECT 1
#define LWIP_SOCKET_POLL 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 * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
* critical regions during buffer allocation, deallocation and memory * 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 /* 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 lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
byte alignment -> define MEM_ALIGNMENT to 2. */ byte alignment -> define MEM_ALIGNMENT to 2. */
#ifndef RISCV_LWIP
#define MEM_ALIGNMENT 4 #define MEM_ALIGNMENT 4
#else
#define MEM_ALIGNMENT 8
#endif
/* MEM_SIZE: the size of the heap memory. If the application will send /* 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. */ a lot of data that needs to be copied, this should be set high. */
#ifndef RISCV_LWIP
#define MEM_SIZE (64 * 1024) #define MEM_SIZE (64 * 1024)
#else
#define MEM_SIZE (32 * 1024)
#endif
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application /* 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 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 /* Controls if TCP should queue segments that arrive out of
order. Define to 0 if your device is low on memory. */ 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. */ /* TCP Maximum segment size. */
#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header 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 8192
// #define TCP_WND (12 * TCP_MSS) // #define TCP_WND (12 * TCP_MSS)
/* Maximum number of retransmissions of data segments. */ /* Maximum number of retransmissions of data segments. */
#define TCP_MAXRTX 12 #define TCP_MAXRTX 12
@ -367,19 +383,16 @@ a lot of data that needs to be copied, this should be set high. */
/* ---------- ICMP options ---------- */ /* ---------- ICMP options ---------- */
#define LWIP_ICMP 1 #define LWIP_ICMP 1
/* ---------- DHCP options ---------- */ /* ---------- DHCP options ---------- */
/* Define LWIP_DHCP to 1 if you want DHCP configuration of /* Define LWIP_DHCP to 1 if you want DHCP configuration of
interfaces. DHCP is not implemented in lwIP 0.5.1, however, so interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
turning this on does currently not work. */ turning this on does currently not work. */
#define LWIP_DHCP 1 #define LWIP_DHCP 1
/* ---------- UDP options ---------- */ /* ---------- UDP options ---------- */
#define LWIP_UDP 1 #define LWIP_UDP 1
#define UDP_TTL 255 #define UDP_TTL 255
/* ---------- Statistics options ---------- */ /* ---------- Statistics options ---------- */
#define LWIP_PROVIDE_ERRNO 1 #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 use this feature let the following define uncommented.
- To disable it and process by CPU comment the the checksum. - To disable it and process by CPU comment the the checksum.
*/ */
#define CHECKSUM_BY_HARDWARE // #define CHECKSUM_BY_HARDWARE
#ifdef CHECKSUM_BY_HARDWARE #ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/ /* 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 #define CHECKSUM_GEN_ICMP 1
#endif #endif
/* /*
---------------------------------------------- ----------------------------------------------
---------- Sequential layer options ---------- ---------- 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) * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
*/ */
// #ifndef RISCV_LWIP
// #define LWIP_NETCONN 1
// #else
#define LWIP_NETCONN 1 #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_AUTOIP 0
#define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP && LWIP_AUTOIP) #define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP && LWIP_AUTOIP)
#define LWIP_UDPLITE 0 #define LWIP_UDPLITE 0
#define UDP_TTL 255 #define UDP_TTL 255
/* ---------- Statistics options ---------- */ /* ---------- Statistics options ---------- */
#define LWIP_STATS 1 #define LWIP_STATS 1
#define LWIP_STATS_DISPLAY 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_RAW_RECVMBOX_SIZE 8
#define DEFAULT_UDP_RECVMBOX_SIZE 8 #define DEFAULT_UDP_RECVMBOX_SIZE 8
#define DEFAULT_TCP_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_PRIO 20
#define DEFAULT_THREAD_STACKSIZE 2048 #define DEFAULT_THREAD_STACKSIZE 2048
#define TCPIP_THREAD_NAME "tcp" #define TCPIP_THREAD_NAME "tcp"
#define TCPIP_THREAD_STACKSIZE 2048 #define TCPIP_THREAD_STACKSIZE 4096
#define TCPIP_MBOX_SIZE 16 #define TCPIP_MBOX_SIZE 16
#define TCPIP_THREAD_PRIO 30 #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; typedef unsigned int nfds_t;
#endif #endif
#define MEMP_LIB_MALLOC 1 #define MEMP_LIB_MALLOC 1
#define MEMP_MEM_MALLOC 1 #define MEMP_MEM_MALLOC 1
@ -570,4 +583,3 @@ typedef unsigned int nfds_t;
#endif /* __LWIPOPTS_H__ */ #endif /* __LWIPOPTS_H__ */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ /************************ (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); th_id = sys_thread_new("eth_input", ethernetif_input, net, LWIP_TASK_STACK_SIZE, 30);
if (th_id >= 0) { // if (th_id >= 0) {
lw_print("%s %d successfully!\n", __func__, th_id); // lw_print("%s %d successfully!\n", __func__, th_id);
} else { // } else {
lw_print("%s failed!\n", __func__); // lw_print("%s failed!\n", __func__);
} // }
} }
void lwip_config_tcp(uint8_t enet_port, char* ip, char* mask, char* gw) 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 #endif
} }
netif_set_default(&gnetif); // netif_set_default(&gnetif);
netif_set_up(&gnetif); netif_set_up(&gnetif);
lw_print("\r\n************************************************\r\n"); lw_print("\r\n************************************************\r\n");

View File

@ -200,7 +200,9 @@ typedef uintptr_t mem_ptr_t;
#include <unistd.h> #include <unistd.h>
#endif #endif
#else /* SSIZE_MAX */ #else /* SSIZE_MAX */
#ifndef RISCV_LWIP
typedef int ssize_t; typedef int ssize_t;
#endif
#define SSIZE_MAX INT_MAX #define SSIZE_MAX INT_MAX
#endif /* SSIZE_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_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_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 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; 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)); 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; *req = NULL;
} }

View File

@ -266,6 +266,8 @@ void iperf_server_worker(void* arg) {
struct sock_conn_cb *sccb = (struct sock_conn_cb *)arg; struct sock_conn_cb *sccb = (struct sock_conn_cb *)arg;
x_ticks_t tick1, tick2; x_ticks_t tick1, tick2;
int cur_tid = GetKTaskDescriptor()->id.id;
uint8_t *recv_data = (uint8_t *)malloc(IPERF_BUFSZ); uint8_t *recv_data = (uint8_t *)malloc(IPERF_BUFSZ);
if(recv_data == NULL) { if(recv_data == NULL) {
KPrintf("[%s] No Memory.\n", __func__); KPrintf("[%s] No Memory.\n", __func__);
@ -282,8 +284,6 @@ void iperf_server_worker(void* arg) {
(void *) &flag, /* the cast is historical cruft */ (void *) &flag, /* the cast is historical cruft */
sizeof(int)); /* length of option value */ sizeof(int)); /* length of option value */
int cur_tid = GetKTaskDescriptor()->id.id;
tick1 = CurrentTicksGain(); tick1 = CurrentTicksGain();
while (param.mode != IPERF_MODE_STOP) { while (param.mode != IPERF_MODE_STOP) {
bytes_received = recv(sccb->connected, recv_data, IPERF_BUFSZ, 0); bytes_received = recv(sccb->connected, recv_data, IPERF_BUFSZ, 0);
@ -393,7 +393,7 @@ __exit:
void iperf_server(void *thread_param) void iperf_server(void *thread_param)
{ {
uint8_t *recv_data; uint8_t* recv_data = NULL;
socklen_t sin_size; socklen_t sin_size;
x_ticks_t tick1, tick2; x_ticks_t tick1, tick2;
int sock = -1, connected, bytes_received; int sock = -1, connected, bytes_received;

View File

@ -41,10 +41,10 @@ void LwipSetIPTest(int argc, char* argv[])
{ {
if (argc >= 4) { if (argc >= 4) {
printf("lw: [%s] ip %s mask %s gw %s netport %s\n", __func__, argv[1], argv[2], argv[3], argv[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[1], "%hhd.%hhd.%hhd.%hhd", &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[2], "%hhd.%hhd.%hhd.%hhd", &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[3], "%hhd.%hhd.%hhd.%hhd", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]);
sscanf(argv[4], "%d", &enet_id); sscanf(argv[4], "%hhd", &enet_id);
if (0 == enet_id) { if (0 == enet_id) {
printf("save eth0 info\n"); printf("save eth0 info\n");
@ -59,7 +59,7 @@ void LwipSetIPTest(int argc, char* argv[])
} }
} else if (argc == 2) { } else if (argc == 2) {
printf("lw: [%s] set eth0 ipaddr %s \n", __func__, argv[1]); 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)); 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); // 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 */ /* Print DHCP progress */
if(LwipPrintDHCP(&gnetif)) 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]); &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]); &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]); &lwip_gwaddr[2], &lwip_gwaddr[3]);
break; break;

View File

@ -47,8 +47,7 @@ void LwipPingTest(int argc, char *argv[])
printf("lw: [%s] ping %s\n", __func__, argv[1]); printf("lw: [%s] ping %s\n", __func__, argv[1]);
if(isdigit(argv[1][0])) 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"); lw_notice("input wrong ip\n");
return; return;
} }

View File

@ -28,7 +28,7 @@
#include "tcpecho_raw.h" #include "tcpecho_raw.h"
char tcp_demo_msg[LWIP_TEST_MSG_SIZE] = { 0 }; char tcp_demo_msg[LWIP_TEST_MSG_SIZE] = { 0 };
char tcp_server_ip[] = {192, 168, 130, 2}; 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_num = 0;
int tcp_send_task_on = 0; int tcp_send_task_on = 0;
uint32 tcp_interval = 50; uint32 tcp_interval = 50;
@ -101,14 +101,13 @@ void LwipTcpSendTest(int argc, char *argv[])
strcat(tcp_demo_msg, "\r\n"); strcat(tcp_demo_msg, "\r\n");
if(argc >= 3) { 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) 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[2], "%d.%d.%d.%d", &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[3], "%d", &tcp_send_num);
sscanf(argv[4], "%d", &tcp_interval); 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); lwip_config_tcp(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
memcpy(param.ip, tcp_server_ip, 4); 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); lwip_config_tcp(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
uint8_t *recv_data; uint8_t* recv_data = NULL;
socklen_t sin_size; socklen_t sin_size;
int sock = -1, connected, bytes_received, i; int sock = -1, connected, bytes_received, i;
struct sockaddr_in server_addr, client_addr; struct sockaddr_in server_addr, client_addr;

View File

@ -165,12 +165,12 @@ static int LwipUdpSend(int argc, char* argv[])
} }
// translate string to array // 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); int msg_len = strlen(msg_ptr);
strncpy(udp_demo_buffer, msg_ptr, msg_len < UDP_BUFFER_SIZE ? msg_len : UDP_BUFFER_SIZE); strncpy(udp_demo_buffer, msg_ptr, msg_len < UDP_BUFFER_SIZE ? msg_len : UDP_BUFFER_SIZE);
/* start task */ /* 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()->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()->port,
get_udp_test_info()->num, get_udp_test_info()->num,
@ -191,7 +191,7 @@ void LwipUdpRecvTest(void)
//init lwip and net dirver //init lwip and net dirver
lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr); lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
uint8_t *recv_data; uint8_t* recv_data = NULL;
socklen_t sin_size; socklen_t sin_size;
int sock = -1, connected, bytes_received, i; int sock = -1, connected, bytes_received, i;
struct sockaddr_in server_addr, client_addr; 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 message
ack_buf = pbuf_alloc(PBUF_TRANSPORT, TCP_ACK_MSG_SIZE, PBUF_RAM); 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->len = strlen(ack_buf->payload);
ack_buf->tot_len = strlen(ack_buf->payload); ack_buf->tot_len = strlen(ack_buf->payload);
ack_buf->next = NULL; ack_buf->next = NULL;

View File

@ -788,7 +788,7 @@ void OTA_Download(int size, int offset)
/******************************************************************************* /*******************************************************************************
* : app_ota_by_platform * : app_ota_by_platform
* : ota升级,,MQTT进行升级 * : MQTT进行升级
* : * :
* : * :
*******************************************************************************/ *******************************************************************************/

View File

@ -116,7 +116,7 @@ static int CopyRecursive(const char *from, const char *to, char *buf,
DIR *dirp; DIR *dirp;
struct dirent *dirent; struct dirent *dirent;
char *sub_from, *sub_to; char *sub_from = NULL, *sub_to = NULL;
ret = mkdir(to, 0777); ret = mkdir(to, 0777);
if (ret < 0) { if (ret < 0) {

View File

@ -31,7 +31,7 @@ static void PrintOctal(char *str, int len, uint64_t value)
char *cp; char *cp;
int written_len; int written_len;
written_len = sprintf(buf, "%0*llo", len, value); written_len = sprintf(buf, "%0*lo", len, value);
cp = buf + written_len - len; cp = buf + written_len - len;
if (*cp == '0') if (*cp == '0')