Revise LwIP for control framework Add a PrivGetTickTime API to transform layer Fix compile error on aiit-arm32-board Rollback SerialDevIntRead

it is OK
This commit is contained in:
xuedongliang 2022-03-01 09:52:56 +08:00
commit f45477ab2a
13 changed files with 80 additions and 57 deletions

View File

@ -333,7 +333,7 @@ static int Hfa21EthernetConnect(struct Adapter *adapter, enum NetRoleType net_ro
{ {
int ret = 0; int ret = 0;
char hfa21_ethernet_cmd[128]; char hfa21_ethernet_cmd[128];
char net_role_string[6] = {0}; char net_role_string[7] = {0};
/*Step1 : enter AT mode*/ /*Step1 : enter AT mode*/
Hfa21EthernetInitAtCmd(adapter->agent); Hfa21EthernetInitAtCmd(adapter->agent);

View File

@ -17,8 +17,9 @@
* @author AIIT XUOS Lab * @author AIIT XUOS Lab
* @date 2021.12.15 * @date 2021.12.15
*/ */
#ifdef USING_CONTROL_PLC_OPCUA
#include "../interoperability/opcua/open62541.h" #include "../interoperability/opcua/open62541.h"
#endif
#include "plc.h" #include "plc.h"

View File

@ -95,6 +95,12 @@ int PrivTaskDelay(int32_t ms)
return usleep(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**************************/ /*********************fs**************************/
/************************Driver Posix Transform***********************/ /************************Driver Posix Transform***********************/

View File

@ -190,6 +190,7 @@ int PrivTaskStartup(pthread_t *thread);
int PrivTaskDelete(pthread_t thread, int sig); int PrivTaskDelete(pthread_t thread, int sig);
void PrivTaskQuit(void *value_ptr); void PrivTaskQuit(void *value_ptr);
int PrivTaskDelay(int32_t ms); int PrivTaskDelay(int32_t ms);
uint32_t PrivGetTickTime();
/*********************driver*************************/ /*********************driver*************************/

View File

@ -101,6 +101,11 @@ int PrivTaskDelay(int32_t ms)
rt_thread_mdelay(ms); rt_thread_mdelay(ms);
} }
uint32_t PrivGetTickTime()
{
return rt_tick_get_millisecond();
}
/*********************fs**************************/ /*********************fs**************************/
/************************Driver Posix Transform***********************/ /************************Driver Posix Transform***********************/

View File

@ -179,6 +179,7 @@ int PrivTaskStartup(pthread_t *thread);
int PrivTaskDelete(pthread_t thread, int sig); int PrivTaskDelete(pthread_t thread, int sig);
void PrivTaskQuit(void *value_ptr); void PrivTaskQuit(void *value_ptr);
int PrivTaskDelay(int32_t ms); int PrivTaskDelay(int32_t ms);
uint32_t PrivGetTickTime();
/*********************driver*************************/ /*********************driver*************************/

View File

@ -102,6 +102,11 @@ int PrivTaskDelay(int32_t ms)
UserTaskDelay(ms); UserTaskDelay(ms);
} }
uint32_t PrivGetTickTime()
{
return CalculteTimeMsFromTick(CurrentTicksGain());
}
/*********************fs**************************/ /*********************fs**************************/
#ifdef FS_VFS #ifdef FS_VFS
/************************Driver Posix Transform***********************/ /************************Driver Posix Transform***********************/

View File

@ -207,6 +207,7 @@ int PrivTaskDelete(pthread_t thread, int sig);
void PrivTaskQuit(void *value_ptr); void PrivTaskQuit(void *value_ptr);
int PrivTaskDelay(int32_t ms); int PrivTaskDelay(int32_t ms);
int PrivUserTaskSearch(void); int PrivUserTaskSearch(void);
uint32_t PrivGetTickTime();
/*********************driver*************************/ /*********************driver*************************/

View File

@ -27,7 +27,9 @@ Modification: Use file system functions
*************************************************/ *************************************************/
#include <reent.h> #include <reent.h>
#ifndef LWIP_PROVIDE_ERRNO
#include <sys/errno.h> #include <sys/errno.h>
#endif
#include <stdio.h> #include <stdio.h>
#include <xiuos.h> #include <xiuos.h>

View File

@ -201,6 +201,11 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums
*/ */
#define LWIP_SOCKET 1 #define LWIP_SOCKET 1
/**
* LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing.
*/
#define LWIP_SO_RCVBUF 1
/* /*
--------------------------------- ---------------------------------
---------- OS options ---------- ---------- OS options ----------

View File

@ -45,6 +45,10 @@ extern "C" {
#ifdef LWIP_PROVIDE_ERRNO #ifdef LWIP_PROVIDE_ERRNO
#ifndef ENOTSUP
#define ENOTSUP EOPNOTSUPP
#endif
#define EPERM 1 /* Operation not permitted */ #define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */ #define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */ #define ESRCH 3 /* No such process */
@ -79,15 +83,15 @@ extern "C" {
#define EPIPE 32 /* Broken pipe */ #define EPIPE 32 /* Broken pipe */
#define EDOM 33 /* Math argument out of domain of func */ #define EDOM 33 /* Math argument out of domain of func */
#define ERANGE 34 /* Math result not representable */ #define ERANGE 34 /* Math result not representable */
// #define EDEADLK 35 /* Resource deadlock would occur */ #define EDEADLK 35 /* Resource deadlock would occur */
// #define ENAMETOOLONG 36 /* File name too long */ #define ENAMETOOLONG 36 /* File name too long */
// #define ENOLCK 37 /* No record locks available */ #define ENOLCK 37 /* No record locks available */
// #define ENOSYS 38 /* Function not implemented */ #define ENOSYS 38 /* Function not implemented */
// #define ENOTEMPTY 39 /* Directory not empty */ #define ENOTEMPTY 39 /* Directory not empty */
// #define ELOOP 40 /* Too many symbolic links encountered */ #define ELOOP 40 /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN /* Operation would block */ #define EWOULDBLOCK EAGAIN /* Operation would block */
// #define ENOMSG 42 /* No message of desired type */ #define ENOMSG 42 /* No message of desired type */
// #define EIDRM 43 /* Identifier removed */ #define EIDRM 43 /* Identifier removed */
#define ECHRNG 44 /* Channel number out of range */ #define ECHRNG 44 /* Channel number out of range */
#define EL2NSYNC 45 /* Level 2 not synchronized */ #define EL2NSYNC 45 /* Level 2 not synchronized */
#define EL3HLT 46 /* Level 3 halted */ #define EL3HLT 46 /* Level 3 halted */
@ -118,10 +122,10 @@ extern "C" {
#define ESRMNT 69 /* Srmount error */ #define ESRMNT 69 /* Srmount error */
#define ECOMM 70 /* Communication error on send */ #define ECOMM 70 /* Communication error on send */
#define EPROTO 71 /* Protocol error */ #define EPROTO 71 /* Protocol error */
// #define EMULTIHOP 72 /* Multihop attempted */ #define EMULTIHOP 72 /* Multihop attempted */
#define EDOTDOT 73 /* RFS specific error */ #define EDOTDOT 73 /* RFS specific error */
// #define EBADMSG 74 /* Not a data message */ #define EBADMSG 74 /* Not a data message */
// #define EOVERFLOW 75 /* Value too large for defined data type */ #define EOVERFLOW 75 /* Value too large for defined data type */
#define ENOTUNIQ 76 /* Name not unique on network */ #define ENOTUNIQ 76 /* Name not unique on network */
#define EBADFD 77 /* File descriptor in bad state */ #define EBADFD 77 /* File descriptor in bad state */
#define EREMCHG 78 /* Remote address changed */ #define EREMCHG 78 /* Remote address changed */
@ -130,45 +134,45 @@ extern "C" {
#define ELIBSCN 81 /* .lib section in a.out corrupted */ #define ELIBSCN 81 /* .lib section in a.out corrupted */
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ #define ELIBMAX 82 /* Attempting to link in too many shared libraries */
#define ELIBEXEC 83 /* Cannot exec a shared library directly */ #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 ERESTART 85 /* Interrupted system call should be restarted */
#define ESTRPIPE 86 /* Streams pipe error */ #define ESTRPIPE 86 /* Streams pipe error */
#define EUSERS 87 /* Too many users */ #define EUSERS 87 /* Too many users */
// #define ENOTSOCK 88 /* Socket operation on non-socket */ #define ENOTSOCK 88 /* Socket operation on non-socket */
// #define EDESTADDRREQ 89 /* Destination address required */ #define EDESTADDRREQ 89 /* Destination address required */
// #define EMSGSIZE 90 /* Message too long */ #define EMSGSIZE 90 /* Message too long */
// #define EPROTOTYPE 91 /* Protocol wrong type for socket */ #define EPROTOTYPE 91 /* Protocol wrong type for socket */
// #define ENOPROTOOPT 92 /* Protocol not available */ #define ENOPROTOOPT 92 /* Protocol not available */
// #define EPROTONOSUPPORT 93 /* Protocol not supported */ #define EPROTONOSUPPORT 93 /* Protocol not supported */
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ #define ESOCKTNOSUPPORT 94 /* Socket type not supported */
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96 /* Protocol family not supported */ #define EPFNOSUPPORT 96 /* Protocol family not supported */
// #define EAFNOSUPPORT 97 /* Address family not supported by protocol */ #define EAFNOSUPPORT 97 /* Address family not supported by protocol */
// #define EADDRINUSE 98 /* Address already in use */ #define EADDRINUSE 98 /* Address already in use */
// #define EADDRNOTAVAIL 99 /* Cannot assign requested address */ #define EADDRNOTAVAIL 99 /* Cannot assign requested address */
// #define ENETDOWN 100 /* Network is down */ #define ENETDOWN 100 /* Network is down */
// #define ENETUNREACH 101 /* Network is unreachable */ #define ENETUNREACH 101 /* Network is unreachable */
// #define ENETRESET 102 /* Network dropped connection because of reset */ #define ENETRESET 102 /* Network dropped connection because of reset */
// #define ECONNABORTED 103 /* Software caused connection abort */ #define ECONNABORTED 103 /* Software caused connection abort */
#define ECONNRESET 104 /* Connection reset by peer */ #define ECONNRESET 104 /* Connection reset by peer */
#define ENOBUFS 105 /* No buffer space available */ #define ENOBUFS 105 /* No buffer space available */
// #define EISCONN 106 /* Transport endpoint is already connected */ #define EISCONN 106 /* Transport endpoint is already connected */
// #define ENOTCONN 107 /* Transport endpoint is not connected */ #define ENOTCONN 107 /* Transport endpoint is not connected */
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ #define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
// #define ETOOMANYREFS 109 /* Too many references: cannot splice */ #define ETOOMANYREFS 109 /* Too many references: cannot splice */
// #define ETIMEDOUT 110 /* Connection timed out */ #define ETIMEDOUT 110 /* Connection timed out */
#define ECONNREFUSED 111 /* Connection refused */ #define ECONNREFUSED 111 /* Connection refused */
// #define EHOSTDOWN 112 /* Host is down */ #define EHOSTDOWN 112 /* Host is down */
// #define EHOSTUNREACH 113 /* No route to host */ #define EHOSTUNREACH 113 /* No route to host */
// #define EALREADY 114 /* Operation already in progress */ #define EALREADY 114 /* Operation already in progress */
// #define EINPROGRESS 115 /* Operation now in progress */ #define EINPROGRESS 115 /* Operation now in progress */
// #define ESTALE 116 /* Stale NFS file handle */ #define ESTALE 116 /* Stale NFS file handle */
#define EUCLEAN 117 /* Structure needs cleaning */ #define EUCLEAN 117 /* Structure needs cleaning */
#define ENOTNAM 118 /* Not a XENIX named type file */ #define ENOTNAM 118 /* Not a XENIX named type file */
#define ENAVAIL 119 /* No XENIX semaphores available */ #define ENAVAIL 119 /* No XENIX semaphores available */
#define EISNAM 120 /* Is a named type file */ #define EISNAM 120 /* Is a named type file */
#define EREMOTEIO 121 /* Remote I/O error */ #define EREMOTEIO 121 /* Remote I/O error */
// #define EDQUOT 122 /* Quota exceeded */ #define EDQUOT 122 /* Quota exceeded */
#define ENOMEDIUM 123 /* No medium found */ #define ENOMEDIUM 123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */ #define EMEDIUMTYPE 124 /* Wrong medium type */

View File

@ -55,6 +55,8 @@
extern "C" { extern "C" {
#endif #endif
#define SOMAXCONN 8
/* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED /* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED
to prevent this code from redefining it. */ to prevent this code from redefining it. */
#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED) #if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED)

View File

@ -123,41 +123,30 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
NULL_PARAM_CHECK(serial_dev); NULL_PARAM_CHECK(serial_dev);
NULL_PARAM_CHECK(read_param); NULL_PARAM_CHECK(read_param);
int char_num = 0;
struct SerialHwDevDone *hwdev_done = serial_dev->hwdev_done; struct SerialHwDevDone *hwdev_done = serial_dev->hwdev_done;
struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_dev->private_data; struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_dev->private_data;
uint8 *read_data = (uint8 *)read_param->buffer; uint8 *read_data = (uint8 *)read_param->buffer;
x_size_t read_length = read_param->size; x_size_t read_length = read_param->size;
int start_pointer, end_pointer;
int i;
while (read_length) while (read_length)
{ {
uint8 get_char;
x_base lock; 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(); 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) { if (RET_FALSE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
CriticalAreaUnLock(lock); CriticalAreaUnLock(lock);
break; break;
} }
} }
/* Read all the chars from the serial_rx_buffer */ get_char = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[serial_dev->serial_fifo.serial_rx->serial_recv_num];
while (start_pointer != end_pointer) 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) {
read_data[char_num] = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[start_pointer]; serial_dev->serial_fifo.serial_rx->serial_recv_num = 0;
start_pointer += 1;
if (start_pointer >= serial_cfg->data_cfg.serial_buffer_size) {
start_pointer = 0;
}
char_num = char_num + 1;
} }
read_data[char_num]='\0';
if (RET_TRUE == serial_dev->serial_fifo.serial_rx->serial_rx_full) { if (RET_TRUE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
serial_dev->serial_fifo.serial_rx->serial_rx_full = RET_FALSE; 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); CriticalAreaUnLock(lock);
*read_data = get_char;
read_data++;
read_length--; read_length--;
read_param->read_length += char_num; read_param->read_length++;
serial_dev->serial_fifo.serial_rx->serial_recv_num = start_pointer;
} }
return EOK; return EOK;