forked from xuos/xiuos
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:
commit
f45477ab2a
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
||||
|
|
|
@ -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***********************/
|
||||
|
|
|
@ -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*************************/
|
||||
|
||||
|
|
|
@ -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***********************/
|
||||
|
|
|
@ -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*************************/
|
||||
|
||||
|
|
|
@ -102,6 +102,11 @@ int PrivTaskDelay(int32_t ms)
|
|||
UserTaskDelay(ms);
|
||||
}
|
||||
|
||||
uint32_t PrivGetTickTime()
|
||||
{
|
||||
return CalculteTimeMsFromTick(CurrentTicksGain());
|
||||
}
|
||||
|
||||
/*********************fs**************************/
|
||||
#ifdef FS_VFS
|
||||
/************************Driver Posix Transform***********************/
|
||||
|
|
|
@ -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*************************/
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 ----------
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue