2020-12-05 19:26:32 +08:00
|
|
|
#pragma once
|
|
|
|
|
2021-05-11 16:12:06 +08:00
|
|
|
#if MG_ARCH == MG_ARCH_FREERTOS_TCP
|
2021-03-13 20:34:26 +08:00
|
|
|
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <limits.h>
|
|
|
|
#include <stdarg.h>
|
2021-05-11 16:12:06 +08:00
|
|
|
#include <stdbool.h>
|
2021-03-13 20:34:26 +08:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2021-05-19 15:10:38 +08:00
|
|
|
#include <sys/stat.h>
|
2021-07-24 10:44:00 +08:00
|
|
|
#include <time.h>
|
2021-05-19 15:10:38 +08:00
|
|
|
|
2020-12-05 19:26:32 +08:00
|
|
|
#include <FreeRTOS.h>
|
|
|
|
#include <FreeRTOS_IP.h>
|
|
|
|
#include <FreeRTOS_Sockets.h>
|
2021-05-11 16:12:06 +08:00
|
|
|
#include <task.h>
|
2020-12-05 19:26:32 +08:00
|
|
|
|
2021-05-18 00:36:57 +08:00
|
|
|
// Why FreeRTOS-TCP did not implement a clean BSD API, but its own thing
|
|
|
|
// with FreeRTOS_ prefix, is beyond me
|
2020-12-05 19:26:32 +08:00
|
|
|
#define IPPROTO_TCP FREERTOS_IPPROTO_TCP
|
|
|
|
#define IPPROTO_UDP FREERTOS_IPPROTO_UDP
|
|
|
|
#define AF_INET FREERTOS_AF_INET
|
|
|
|
#define SOCK_STREAM FREERTOS_SOCK_STREAM
|
|
|
|
#define SOCK_DGRAM FREERTOS_SOCK_DGRAM
|
|
|
|
#define SO_BROADCAST 0
|
|
|
|
#define SO_ERROR 0
|
|
|
|
#define SOL_SOCKET 0
|
|
|
|
#define SO_REUSEADDR 0
|
|
|
|
#define sockaddr_in freertos_sockaddr
|
2021-05-12 15:43:34 +08:00
|
|
|
#define sockaddr freertos_sockaddr
|
2020-12-05 19:26:32 +08:00
|
|
|
#define accept(a, b, c) FreeRTOS_accept((a), (b), (c))
|
|
|
|
#define connect(a, b, c) FreeRTOS_connect((a), (b), (c))
|
|
|
|
#define bind(a, b, c) FreeRTOS_bind((a), (b), (c))
|
|
|
|
#define listen(a, b) FreeRTOS_listen((a), (b))
|
|
|
|
#define socket(a, b, c) FreeRTOS_socket((a), (b), (c))
|
|
|
|
#define send(a, b, c, d) FreeRTOS_send((a), (b), (c), (d))
|
|
|
|
#define recv(a, b, c, d) FreeRTOS_recv((a), (b), (c), (d))
|
|
|
|
#define setsockopt(a, b, c, d, e) FreeRTOS_setsockopt((a), (b), (c), (d), (e))
|
|
|
|
#define sendto(a, b, c, d, e, f) FreeRTOS_sendto((a), (b), (c), (d), (e), (f))
|
|
|
|
#define recvfrom(a, b, c, d, e, f) \
|
|
|
|
FreeRTOS_recvfrom((a), (b), (c), (d), (e), (f))
|
|
|
|
#define closesocket(x) FreeRTOS_closesocket(x)
|
|
|
|
#define gethostbyname(x) FreeRTOS_gethostbyname(x)
|
2021-07-24 10:44:00 +08:00
|
|
|
#define getsockname(a, b, c) (-1)
|
2020-12-05 19:26:32 +08:00
|
|
|
|
2021-05-18 00:36:57 +08:00
|
|
|
// Re-route calloc/free to the FreeRTOS's functions, don't use stdlib
|
|
|
|
static inline void *mg_calloc(int cnt, size_t size) {
|
|
|
|
void *p = pvPortMalloc(cnt * size);
|
|
|
|
if (p != NULL) memset(p, 0, size);
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
#define calloc(a, b) mg_calloc((a), (b))
|
|
|
|
#define free(a) vPortFree(a)
|
|
|
|
#define malloc(a) pvPortMalloc(a)
|
|
|
|
|
2021-05-19 07:00:32 +08:00
|
|
|
#define gmtime_r(a, b) gmtime(a)
|
2020-12-05 19:26:32 +08:00
|
|
|
|
2021-05-19 07:00:32 +08:00
|
|
|
#if !defined(__GNUC__)
|
|
|
|
// copied from GCC on ARM; for some reason useconds are signed
|
|
|
|
typedef long suseconds_t;
|
|
|
|
struct timeval {
|
|
|
|
time_t tv_sec;
|
|
|
|
suseconds_t tv_usec;
|
|
|
|
};
|
|
|
|
#endif
|
2020-12-05 19:26:32 +08:00
|
|
|
|
2021-05-19 07:00:32 +08:00
|
|
|
#ifndef EINPROGRESS
|
|
|
|
#define EINPROGRESS pdFREERTOS_ERRNO_EINPROGRESS
|
|
|
|
#endif
|
|
|
|
#ifndef EWOULDBLOCK
|
|
|
|
#define EWOULDBLOCK pdFREERTOS_ERRNO_EWOULDBLOCK
|
|
|
|
#endif
|
|
|
|
#ifndef EAGAIN
|
|
|
|
#define EAGAIN pdFREERTOS_ERRNO_EAGAIN
|
|
|
|
#endif
|
|
|
|
#ifndef EINTR
|
|
|
|
#define EINTR pdFREERTOS_ERRNO_EINTR
|
|
|
|
#endif
|
2020-12-05 19:26:32 +08:00
|
|
|
|
2021-05-11 16:12:06 +08:00
|
|
|
#endif // MG_ARCH == MG_ARCH_FREERTOS_TCP
|