diff --git a/APP_Framework/Framework/connection/ethernet/hfa21_ethernet/hfa21_ethernet.c b/APP_Framework/Framework/connection/ethernet/hfa21_ethernet/hfa21_ethernet.c index 4b5856365..07bc3330a 100644 --- a/APP_Framework/Framework/connection/ethernet/hfa21_ethernet/hfa21_ethernet.c +++ b/APP_Framework/Framework/connection/ethernet/hfa21_ethernet/hfa21_ethernet.c @@ -333,7 +333,7 @@ static int Hfa21EthernetConnect(struct Adapter *adapter, enum NetRoleType net_ro { int ret = 0; char hfa21_ethernet_cmd[128]; - char net_role_string[6] = {0}; + char net_role_string[7] = {0}; /*Step1 : enter AT mode*/ Hfa21EthernetInitAtCmd(adapter->agent); diff --git a/APP_Framework/Framework/control/plc/shared/plc.c b/APP_Framework/Framework/control/plc/shared/plc.c index b30206836..644a5ff47 100755 --- a/APP_Framework/Framework/control/plc/shared/plc.c +++ b/APP_Framework/Framework/control/plc/shared/plc.c @@ -17,8 +17,9 @@ * @author AIIT XUOS Lab * @date 2021.12.15 */ - +#ifdef USING_CONTROL_PLC_OPCUA #include "../interoperability/opcua/open62541.h" +#endif #include "plc.h" diff --git a/APP_Framework/Framework/transform_layer/nuttx/transform.c b/APP_Framework/Framework/transform_layer/nuttx/transform.c index b31989482..1cb49fd61 100644 --- a/APP_Framework/Framework/transform_layer/nuttx/transform.c +++ b/APP_Framework/Framework/transform_layer/nuttx/transform.c @@ -95,6 +95,12 @@ int PrivTaskDelay(int32_t ms) return usleep(ms); } +uint32_t PrivGetTickTime(){ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; +} + /*********************fs**************************/ /************************Driver Posix Transform***********************/ diff --git a/APP_Framework/Framework/transform_layer/nuttx/transform.h b/APP_Framework/Framework/transform_layer/nuttx/transform.h index 7f21e332a..3810bf3ec 100644 --- a/APP_Framework/Framework/transform_layer/nuttx/transform.h +++ b/APP_Framework/Framework/transform_layer/nuttx/transform.h @@ -190,6 +190,7 @@ int PrivTaskStartup(pthread_t *thread); int PrivTaskDelete(pthread_t thread, int sig); void PrivTaskQuit(void *value_ptr); int PrivTaskDelay(int32_t ms); +uint32_t PrivGetTickTime(); /*********************driver*************************/ diff --git a/APP_Framework/Framework/transform_layer/rtthread/transform.c b/APP_Framework/Framework/transform_layer/rtthread/transform.c index 15226a9d7..c3d41ce12 100644 --- a/APP_Framework/Framework/transform_layer/rtthread/transform.c +++ b/APP_Framework/Framework/transform_layer/rtthread/transform.c @@ -101,6 +101,11 @@ int PrivTaskDelay(int32_t ms) rt_thread_mdelay(ms); } +uint32_t PrivGetTickTime() +{ + return rt_tick_get_millisecond(); +} + /*********************fs**************************/ /************************Driver Posix Transform***********************/ diff --git a/APP_Framework/Framework/transform_layer/rtthread/transform.h b/APP_Framework/Framework/transform_layer/rtthread/transform.h index a6db34732..1210976dc 100644 --- a/APP_Framework/Framework/transform_layer/rtthread/transform.h +++ b/APP_Framework/Framework/transform_layer/rtthread/transform.h @@ -179,6 +179,7 @@ int PrivTaskStartup(pthread_t *thread); int PrivTaskDelete(pthread_t thread, int sig); void PrivTaskQuit(void *value_ptr); int PrivTaskDelay(int32_t ms); +uint32_t PrivGetTickTime(); /*********************driver*************************/ diff --git a/APP_Framework/Framework/transform_layer/xiuos/transform.c b/APP_Framework/Framework/transform_layer/xiuos/transform.c index 4ae2d21b3..6d2e69dd6 100644 --- a/APP_Framework/Framework/transform_layer/xiuos/transform.c +++ b/APP_Framework/Framework/transform_layer/xiuos/transform.c @@ -102,6 +102,11 @@ int PrivTaskDelay(int32_t ms) UserTaskDelay(ms); } +uint32_t PrivGetTickTime() +{ + return CalculteTimeMsFromTick(CurrentTicksGain()); +} + /*********************fs**************************/ #ifdef FS_VFS /************************Driver Posix Transform***********************/ diff --git a/APP_Framework/Framework/transform_layer/xiuos/transform.h b/APP_Framework/Framework/transform_layer/xiuos/transform.h index e020b4f51..ae0d380e4 100644 --- a/APP_Framework/Framework/transform_layer/xiuos/transform.h +++ b/APP_Framework/Framework/transform_layer/xiuos/transform.h @@ -207,6 +207,7 @@ int PrivTaskDelete(pthread_t thread, int sig); void PrivTaskQuit(void *value_ptr); int PrivTaskDelay(int32_t ms); int PrivUserTaskSearch(void); +uint32_t PrivGetTickTime(); /*********************driver*************************/ diff --git a/Ubiquitous/XiUOS/lib/newlib/fs_syscalls.c b/Ubiquitous/XiUOS/lib/newlib/fs_syscalls.c index 4a02ab97d..cfa7f9e3b 100644 --- a/Ubiquitous/XiUOS/lib/newlib/fs_syscalls.c +++ b/Ubiquitous/XiUOS/lib/newlib/fs_syscalls.c @@ -27,7 +27,9 @@ Modification: Use file system functions *************************************************/ #include +#ifndef LWIP_PROVIDE_ERRNO #include +#endif #include #include diff --git a/Ubiquitous/XiUOS/resources/ethernet/LwIP/arch/lwipopts.h b/Ubiquitous/XiUOS/resources/ethernet/LwIP/arch/lwipopts.h index 2b058129c..ff32bc38b 100644 --- a/Ubiquitous/XiUOS/resources/ethernet/LwIP/arch/lwipopts.h +++ b/Ubiquitous/XiUOS/resources/ethernet/LwIP/arch/lwipopts.h @@ -201,6 +201,11 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums */ #define LWIP_SOCKET 1 +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#define LWIP_SO_RCVBUF 1 + /* --------------------------------- ---------- OS options ---------- diff --git a/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/errno.h b/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/errno.h index 17fadeee4..a62bfe5ee 100644 --- a/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/errno.h +++ b/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/errno.h @@ -45,6 +45,10 @@ extern "C" { #ifdef LWIP_PROVIDE_ERRNO +#ifndef ENOTSUP +#define ENOTSUP EOPNOTSUPP +#endif + #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ @@ -79,15 +83,15 @@ extern "C" { #define EPIPE 32 /* Broken pipe */ #define EDOM 33 /* Math argument out of domain of func */ #define ERANGE 34 /* Math result not representable */ -// #define EDEADLK 35 /* Resource deadlock would occur */ -// #define ENAMETOOLONG 36 /* File name too long */ -// #define ENOLCK 37 /* No record locks available */ -// #define ENOSYS 38 /* Function not implemented */ -// #define ENOTEMPTY 39 /* Directory not empty */ -// #define ELOOP 40 /* Too many symbolic links encountered */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ #define EWOULDBLOCK EAGAIN /* Operation would block */ -// #define ENOMSG 42 /* No message of desired type */ -// #define EIDRM 43 /* Identifier removed */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ #define ECHRNG 44 /* Channel number out of range */ #define EL2NSYNC 45 /* Level 2 not synchronized */ #define EL3HLT 46 /* Level 3 halted */ @@ -118,10 +122,10 @@ extern "C" { #define ESRMNT 69 /* Srmount error */ #define ECOMM 70 /* Communication error on send */ #define EPROTO 71 /* Protocol error */ -// #define EMULTIHOP 72 /* Multihop attempted */ +#define EMULTIHOP 72 /* Multihop attempted */ #define EDOTDOT 73 /* RFS specific error */ -// #define EBADMSG 74 /* Not a data message */ -// #define EOVERFLOW 75 /* Value too large for defined data type */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ #define ENOTUNIQ 76 /* Name not unique on network */ #define EBADFD 77 /* File descriptor in bad state */ #define EREMCHG 78 /* Remote address changed */ @@ -130,45 +134,45 @@ extern "C" { #define ELIBSCN 81 /* .lib section in a.out corrupted */ #define ELIBMAX 82 /* Attempting to link in too many shared libraries */ #define ELIBEXEC 83 /* Cannot exec a shared library directly */ -// #define EILSEQ 84 /* Illegal byte sequence */ +#define EILSEQ 84 /* Illegal byte sequence */ #define ERESTART 85 /* Interrupted system call should be restarted */ #define ESTRPIPE 86 /* Streams pipe error */ #define EUSERS 87 /* Too many users */ -// #define ENOTSOCK 88 /* Socket operation on non-socket */ -// #define EDESTADDRREQ 89 /* Destination address required */ -// #define EMSGSIZE 90 /* Message too long */ -// #define EPROTOTYPE 91 /* Protocol wrong type for socket */ -// #define ENOPROTOOPT 92 /* Protocol not available */ -// #define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ #define ESOCKTNOSUPPORT 94 /* Socket type not supported */ #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ #define EPFNOSUPPORT 96 /* Protocol family not supported */ -// #define EAFNOSUPPORT 97 /* Address family not supported by protocol */ -// #define EADDRINUSE 98 /* Address already in use */ -// #define EADDRNOTAVAIL 99 /* Cannot assign requested address */ -// #define ENETDOWN 100 /* Network is down */ -// #define ENETUNREACH 101 /* Network is unreachable */ -// #define ENETRESET 102 /* Network dropped connection because of reset */ -// #define ECONNABORTED 103 /* Software caused connection abort */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ #define ECONNRESET 104 /* Connection reset by peer */ #define ENOBUFS 105 /* No buffer space available */ -// #define EISCONN 106 /* Transport endpoint is already connected */ -// #define ENOTCONN 107 /* Transport endpoint is not connected */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ #define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ -// #define ETOOMANYREFS 109 /* Too many references: cannot splice */ -// #define ETIMEDOUT 110 /* Connection timed out */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ #define ECONNREFUSED 111 /* Connection refused */ -// #define EHOSTDOWN 112 /* Host is down */ -// #define EHOSTUNREACH 113 /* No route to host */ -// #define EALREADY 114 /* Operation already in progress */ -// #define EINPROGRESS 115 /* Operation now in progress */ -// #define ESTALE 116 /* Stale NFS file handle */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ #define EUCLEAN 117 /* Structure needs cleaning */ #define ENOTNAM 118 /* Not a XENIX named type file */ #define ENAVAIL 119 /* No XENIX semaphores available */ #define EISNAM 120 /* Is a named type file */ #define EREMOTEIO 121 /* Remote I/O error */ -// #define EDQUOT 122 /* Quota exceeded */ +#define EDQUOT 122 /* Quota exceeded */ #define ENOMEDIUM 123 /* No medium found */ #define EMEDIUMTYPE 124 /* Wrong medium type */ diff --git a/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/sockets.h b/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/sockets.h index a07937e3c..9492e78ef 100644 --- a/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/sockets.h +++ b/Ubiquitous/XiUOS/resources/ethernet/LwIP/include/lwip/sockets.h @@ -55,6 +55,8 @@ extern "C" { #endif +#define SOMAXCONN 8 + /* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED to prevent this code from redefining it. */ #if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED) diff --git a/Ubiquitous/XiUOS/resources/serial/dev_serial.c b/Ubiquitous/XiUOS/resources/serial/dev_serial.c index cfd6aa099..25c578c8f 100644 --- a/Ubiquitous/XiUOS/resources/serial/dev_serial.c +++ b/Ubiquitous/XiUOS/resources/serial/dev_serial.c @@ -123,41 +123,30 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru NULL_PARAM_CHECK(serial_dev); NULL_PARAM_CHECK(read_param); - int char_num = 0; struct SerialHwDevDone *hwdev_done = serial_dev->hwdev_done; struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_dev->private_data; uint8 *read_data = (uint8 *)read_param->buffer; x_size_t read_length = read_param->size; - int start_pointer, end_pointer; - int i; - while (read_length) { + uint8 get_char; x_base lock; - start_pointer = serial_dev->serial_fifo.serial_rx->serial_recv_num; - end_pointer = serial_dev->serial_fifo.serial_rx->serial_send_num; lock = CriticalAreaLock(); - if (start_pointer == end_pointer) { + if (serial_dev->serial_fifo.serial_rx->serial_recv_num == serial_dev->serial_fifo.serial_rx->serial_send_num) { if (RET_FALSE == serial_dev->serial_fifo.serial_rx->serial_rx_full) { CriticalAreaUnLock(lock); break; } } - - /* Read all the chars from the serial_rx_buffer */ - while (start_pointer != end_pointer) - { - read_data[char_num] = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[start_pointer]; - start_pointer += 1; - if (start_pointer >= serial_cfg->data_cfg.serial_buffer_size) { - start_pointer = 0; - } - char_num = char_num + 1; + + get_char = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[serial_dev->serial_fifo.serial_rx->serial_recv_num]; + serial_dev->serial_fifo.serial_rx->serial_recv_num += 1; + if (serial_dev->serial_fifo.serial_rx->serial_recv_num >= serial_cfg->data_cfg.serial_buffer_size) { + serial_dev->serial_fifo.serial_rx->serial_recv_num = 0; } - read_data[char_num]='\0'; if (RET_TRUE == serial_dev->serial_fifo.serial_rx->serial_rx_full) { serial_dev->serial_fifo.serial_rx->serial_rx_full = RET_FALSE; @@ -165,9 +154,10 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru CriticalAreaUnLock(lock); + *read_data = get_char; + read_data++; read_length--; - read_param->read_length += char_num; - serial_dev->serial_fifo.serial_rx->serial_recv_num = start_pointer; + read_param->read_length++; } return EOK;