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;
char hfa21_ethernet_cmd[128];
char net_role_string[6] = {0};
char net_role_string[7] = {0};
/*Step1 : enter AT mode*/
Hfa21EthernetInitAtCmd(adapter->agent);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -27,7 +27,9 @@ Modification: Use file system functions
*************************************************/
#include <reent.h>
#ifndef LWIP_PROVIDE_ERRNO
#include <sys/errno.h>
#endif
#include <stdio.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
/**
* LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing.
*/
#define LWIP_SO_RCVBUF 1
/*
---------------------------------
---------- OS options ----------

View File

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

View File

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

View File

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