Add TI support

This commit is contained in:
Alex Alashkin 2022-05-15 19:18:18 +03:00
parent 95e22e8d4f
commit 0ed7545947
8 changed files with 88 additions and 8 deletions

View File

@ -120,6 +120,8 @@ jobs:
path: infineon/infineon-xmc4700_4800-lwip-rtx-rtos path: infineon/infineon-xmc4700_4800-lwip-rtx-rtos
- name: zephyr - name: zephyr
path: zephyr path: zephyr
- name: ti
path: ti/ti-ek-tm4c1294xl-http-server
name: ${{ matrix.example.name }} name: ${{ matrix.example.name }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3

View File

@ -0,0 +1,10 @@
NAME = ti-ek-tm4c1294xl-http-server
DOCKER ?= docker run -v $(CURDIR):/workspace mdashnet/ccs
build:
git clone --depth 1 https://github.com/mongoose-examples/$(NAME)
cp ./../../../mongoose.[ch] $(NAME)/
$(DOCKER) /opt/ti/ccs/eclipse/eclipse -noSplash -data /workspace -application com.ti.ccstudio.apps.projectBuild -ccs.autoImport -ccs.projects $(NAME) -ccs.configuration Release
clean:
rm -rf $(NAME)

View File

@ -2006,9 +2006,7 @@ static void logs(const char *buf, size_t len) {
static void mg_log_stdout(const void *buf, size_t len, void *userdata) { static void mg_log_stdout(const void *buf, size_t len, void *userdata) {
(void) userdata, (void) buf, (void) len; (void) userdata, (void) buf, (void) len;
#if MG_ENABLE_FILE
logs((const char *) buf, len); logs((const char *) buf, len);
#endif
} }
static const char *s_spec = "2"; static const char *s_spec = "2";
@ -3156,6 +3154,9 @@ struct mg_connection *mg_sntp_connect(struct mg_mgr *mgr, const char *url,
#define MG_SOCK_ERRNO errno #define MG_SOCK_ERRNO errno
typedef Socket_t SOCKET; typedef Socket_t SOCKET;
#define INVALID_SOCKET FREERTOS_INVALID_SOCKET #define INVALID_SOCKET FREERTOS_INVALID_SOCKET
#elif MG_ARCH == MG_ARCH_TIRTOS
#define MG_SOCK_ERRNO errno
#define closesocket(x) close(x)
#else #else
#define MG_SOCK_ERRNO errno #define MG_SOCK_ERRNO errno
#ifndef closesocket #ifndef closesocket
@ -3319,6 +3320,16 @@ static void mg_set_non_blocking_mode(SOCKET fd) {
lwip_fcntl(fd, F_SETFL, O_NONBLOCK); lwip_fcntl(fd, F_SETFL, O_NONBLOCK);
#elif MG_ARCH == MG_ARCH_AZURERTOS #elif MG_ARCH == MG_ARCH_AZURERTOS
fcntl(fd, F_SETFL, O_NONBLOCK); fcntl(fd, F_SETFL, O_NONBLOCK);
#elif MG_ARCH == MG_ARCH_TIRTOS
int val = 0;
setsockopt(fd, 0, SO_BLOCKING, &val, sizeof(val));
int status = 0;
int res = SockStatus(fd, FDSTATUS_SEND, &status);
if (res == 0 && status > 0) {
val = status / 2;
int val_size = sizeof(val);
res = SockSet(fd, SOL_SOCKET, SO_SNDLOWAT, &val, val_size);
}
#else #else
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); // Non-blocking mode fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); // Non-blocking mode
fcntl(fd, F_SETFD, FD_CLOEXEC); // Set close-on-exec fcntl(fd, F_SETFD, FD_CLOEXEC); // Set close-on-exec
@ -3436,7 +3447,7 @@ static void close_conn(struct mg_connection *c) {
} }
static void setsockopts(struct mg_connection *c) { static void setsockopts(struct mg_connection *c) {
#if MG_ARCH == MG_ARCH_FREERTOS_TCP || MG_ARCH == MG_ARCH_AZURERTOS #if MG_ARCH == MG_ARCH_FREERTOS_TCP || MG_ARCH == MG_ARCH_AZURERTOS || MG_ARCH == MG_ARCH_TIRTOS
(void) c; (void) c;
#else #else
int on = 1; int on = 1;
@ -3477,6 +3488,7 @@ void mg_connect_resolved(struct mg_connection *c) {
mg_error(c, "connect: %d", MG_SOCK_ERRNO); mg_error(c, "connect: %d", MG_SOCK_ERRNO);
} }
} }
(void)rc;
MG_DEBUG(("%lu %p", c->id, c->fd)); MG_DEBUG(("%lu %p", c->id, c->fd));
} }
@ -3502,7 +3514,7 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) {
if (MG_SOCK_ERRNO != EAGAIN) if (MG_SOCK_ERRNO != EAGAIN)
#endif #endif
MG_ERROR(("%lu accept failed, errno %d", lsn->id, MG_SOCK_ERRNO)); MG_ERROR(("%lu accept failed, errno %d", lsn->id, MG_SOCK_ERRNO));
#if ((MG_ARCH != MG_ARCH_WIN32) && (MG_ARCH != MG_ARCH_FREERTOS_TCP)) #if (MG_ARCH != MG_ARCH_WIN32) && (MG_ARCH != MG_ARCH_FREERTOS_TCP) && (MG_ARCH != MG_ARCH_TIRTOS)
} else if ((long) fd >= FD_SETSIZE) { } else if ((long) fd >= FD_SETSIZE) {
MG_ERROR(("%ld > %ld", (long) fd, (long) FD_SETSIZE)); MG_ERROR(("%ld > %ld", (long) fd, (long) FD_SETSIZE));
closesocket(fd); closesocket(fd);

View File

@ -39,6 +39,7 @@ extern "C" {
#define MG_ARCH_ZEPHYR 9 #define MG_ARCH_ZEPHYR 9
#define MG_ARCH_NEWLIB 10 #define MG_ARCH_NEWLIB 10
#define MG_ARCH_RTX 11 #define MG_ARCH_RTX 11
#define MG_ARCH_TIRTOS 12
#if !defined(MG_ARCH) #if !defined(MG_ARCH)
#if defined(__unix__) || defined(__APPLE__) #if defined(__unix__) || defined(__APPLE__)
@ -392,6 +393,27 @@ struct timeval {
#endif #endif
#if MG_ARCH == MG_ARCH_TIRTOS
#include <stdlib.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <time.h>
#include <errno.h>
#include <sys/socket.h>
extern int SockStatus(SOCKET hSock, int request, int *results );
extern int SockSet(SOCKET hSock, int Type, int Prop, void *pbuf, int size);
#endif
#if MG_ARCH == MG_ARCH_UNIX #if MG_ARCH == MG_ARCH_UNIX
#define _DARWIN_UNLIMITED_SELECT 1 // No limit on file descriptors #define _DARWIN_UNLIMITED_SELECT 1 // No limit on file descriptors

View File

@ -12,6 +12,7 @@
#define MG_ARCH_ZEPHYR 9 #define MG_ARCH_ZEPHYR 9
#define MG_ARCH_NEWLIB 10 #define MG_ARCH_NEWLIB 10
#define MG_ARCH_RTX 11 #define MG_ARCH_RTX 11
#define MG_ARCH_TIRTOS 12
#if !defined(MG_ARCH) #if !defined(MG_ARCH)
#if defined(__unix__) || defined(__APPLE__) #if defined(__unix__) || defined(__APPLE__)

21
src/arch_tirtos.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#if MG_ARCH == MG_ARCH_TIRTOS
#include <stdlib.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <time.h>
#include <errno.h>
#include <sys/socket.h>
extern int SockStatus(SOCKET hSock, int request, int *results );
extern int SockSet(SOCKET hSock, int Type, int Prop, void *pbuf, int size);
#endif

View File

@ -12,9 +12,7 @@ static void logs(const char *buf, size_t len) {
static void mg_log_stdout(const void *buf, size_t len, void *userdata) { static void mg_log_stdout(const void *buf, size_t len, void *userdata) {
(void) userdata, (void) buf, (void) len; (void) userdata, (void) buf, (void) len;
#if MG_ENABLE_FILE
logs((const char *) buf, len); logs((const char *) buf, len);
#endif
} }
static const char *s_spec = "2"; static const char *s_spec = "2";

View File

@ -19,6 +19,9 @@
#define MG_SOCK_ERRNO errno #define MG_SOCK_ERRNO errno
typedef Socket_t SOCKET; typedef Socket_t SOCKET;
#define INVALID_SOCKET FREERTOS_INVALID_SOCKET #define INVALID_SOCKET FREERTOS_INVALID_SOCKET
#elif MG_ARCH == MG_ARCH_TIRTOS
#define MG_SOCK_ERRNO errno
#define closesocket(x) close(x)
#else #else
#define MG_SOCK_ERRNO errno #define MG_SOCK_ERRNO errno
#ifndef closesocket #ifndef closesocket
@ -182,6 +185,16 @@ static void mg_set_non_blocking_mode(SOCKET fd) {
lwip_fcntl(fd, F_SETFL, O_NONBLOCK); lwip_fcntl(fd, F_SETFL, O_NONBLOCK);
#elif MG_ARCH == MG_ARCH_AZURERTOS #elif MG_ARCH == MG_ARCH_AZURERTOS
fcntl(fd, F_SETFL, O_NONBLOCK); fcntl(fd, F_SETFL, O_NONBLOCK);
#elif MG_ARCH == MG_ARCH_TIRTOS
int val = 0;
setsockopt(fd, 0, SO_BLOCKING, &val, sizeof(val));
int status = 0;
int res = SockStatus(fd, FDSTATUS_SEND, &status);
if (res == 0 && status > 0) {
val = status / 2;
int val_size = sizeof(val);
res = SockSet(fd, SOL_SOCKET, SO_SNDLOWAT, &val, val_size);
}
#else #else
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); // Non-blocking mode fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); // Non-blocking mode
fcntl(fd, F_SETFD, FD_CLOEXEC); // Set close-on-exec fcntl(fd, F_SETFD, FD_CLOEXEC); // Set close-on-exec
@ -299,7 +312,7 @@ static void close_conn(struct mg_connection *c) {
} }
static void setsockopts(struct mg_connection *c) { static void setsockopts(struct mg_connection *c) {
#if MG_ARCH == MG_ARCH_FREERTOS_TCP || MG_ARCH == MG_ARCH_AZURERTOS #if MG_ARCH == MG_ARCH_FREERTOS_TCP || MG_ARCH == MG_ARCH_AZURERTOS || MG_ARCH == MG_ARCH_TIRTOS
(void) c; (void) c;
#else #else
int on = 1; int on = 1;
@ -340,6 +353,7 @@ void mg_connect_resolved(struct mg_connection *c) {
mg_error(c, "connect: %d", MG_SOCK_ERRNO); mg_error(c, "connect: %d", MG_SOCK_ERRNO);
} }
} }
(void)rc;
MG_DEBUG(("%lu %p", c->id, c->fd)); MG_DEBUG(("%lu %p", c->id, c->fd));
} }
@ -365,7 +379,7 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) {
if (MG_SOCK_ERRNO != EAGAIN) if (MG_SOCK_ERRNO != EAGAIN)
#endif #endif
MG_ERROR(("%lu accept failed, errno %d", lsn->id, MG_SOCK_ERRNO)); MG_ERROR(("%lu accept failed, errno %d", lsn->id, MG_SOCK_ERRNO));
#if ((MG_ARCH != MG_ARCH_WIN32) && (MG_ARCH != MG_ARCH_FREERTOS_TCP)) #if (MG_ARCH != MG_ARCH_WIN32) && (MG_ARCH != MG_ARCH_FREERTOS_TCP) && (MG_ARCH != MG_ARCH_TIRTOS)
} else if ((long) fd >= FD_SETSIZE) { } else if ((long) fd >= FD_SETSIZE) {
MG_ERROR(("%ld > %ld", (long) fd, (long) FD_SETSIZE)); MG_ERROR(("%ld > %ld", (long) fd, (long) FD_SETSIZE));
closesocket(fd); closesocket(fd);