summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Majstorovic <majstor@majstor.org>2025-04-30 22:06:55 +0200
committerUros Majstorovic <majstor@majstor.org>2025-04-30 22:06:55 +0200
commit1e6da97af1c10c10e8b4022f89f23f4ccfe32d0f (patch)
tree0db3893cb76b4f89ca6152c41736e5b8b65f38bd
parentfc19aca65dc9b4481cbae2dce7e3d4c152b7eb69 (diff)
fixed fe310 platform
-rw-r--r--ecp/src/platform/fe310/time.c6
-rw-r--r--ecp/src/platform/fe310/transport.c50
2 files changed, 30 insertions, 26 deletions
diff --git a/ecp/src/platform/fe310/time.c b/ecp/src/platform/fe310/time.c
index 4bf530c..5f92d7f 100644
--- a/ecp/src/platform/fe310/time.c
+++ b/ecp/src/platform/fe310/time.c
@@ -24,15 +24,15 @@ int ecp_tm_init(ECPContext *ctx) {
}
ecp_sts_t ecp_tm_get_s(void) {
- return eos_time_get_tick() / EOS_TIMER_RTC_FREQ;
+ return eos_get_tick() / EOS_TIMER_RTC_FREQ;
}
ecp_sts_t ecp_tm_get_ms(void) {
- return eos_time_get_tick() * 1000 / EOS_TIMER_RTC_FREQ;
+ return eos_get_tick() * 1000 / EOS_TIMER_RTC_FREQ;
}
void ecp_tm_sleep(ecp_sts_t msec) {
- eos_time_sleep(msec);
+ eos_sleep(msec);
}
void ecp_tm_timer_set(ecp_sts_t next) {
diff --git a/ecp/src/platform/fe310/transport.c b/ecp/src/platform/fe310/transport.c
index 1ae0f56..ed33fa0 100644
--- a/ecp/src/platform/fe310/transport.c
+++ b/ecp/src/platform/fe310/transport.c
@@ -10,31 +10,34 @@
ECPSocket *_ecp_tr_sock = NULL;
unsigned char pld_buf[ECP_MAX_PLD];
-static void packet_handler(unsigned char type, unsigned char *buffer, uint16_t len) {
- ECPContext *ctx;
+static void packet_handler(unsigned char type, unsigned char *buffer, uint16_t buf_len) {
ECP2Buffer bufs;
ECPBuffer packet;
ECPBuffer payload;
ecp_tr_addr_t addr;
+ size_t hdr_size;
ssize_t rv;
+ unsigned char *_packet;
+ int _rv;
+
+ _rv = eos_sock_recvfrom(buffer, buf_len, &addr, NULL, 0);
+ if (!_rv) _packet = eos_sock_buf2pkt(buffer, buf_len);
+ if (_rv || _packet == NULL) {
+ if (_rv == EOS_SOCK_ERR_CLOSED) _ecp_tr_sock->sock = 0;
+ eos_net_free(buffer, 0);
+ return;
+ }
bufs.packet = &packet;
bufs.payload = &payload;
- packet.buffer = buffer+EOS_SOCK_SIZE_UDP_HDR;
- packet.size = EOS_NET_MTU-EOS_SOCK_SIZE_UDP_HDR;
+ hdr_size = _packet - buffer;
+ packet.buffer = _packet;
+ packet.size = EOS_NET_MTU - hdr_size;
payload.buffer = pld_buf;
payload.size = ECP_MAX_PLD;
- if (len < EOS_SOCK_SIZE_UDP_HDR) {
- eos_net_free(buffer, 0);
- return;
- }
-
- eos_sock_recvfrom(buffer, len, NULL, 0, &addr);
-
- ctx = _ecp_tr_sock->ctx;
- rv = ecp_pkt_handle(_ecp_tr_sock, NULL, &addr, &bufs, len-EOS_SOCK_SIZE_UDP_HDR);
+ rv = ecp_pkt_handle(_ecp_tr_sock, NULL, &addr, &bufs, buf_len - hdr_size);
if (rv < 0) ECP_LOG_ERR(_ecp_tr_sock, "packet_handler: err:%d\n", (int)rv);
if (bufs.packet->buffer) {
@@ -81,24 +84,25 @@ void ecp_tr_close(ECPSocket *sock) {
}
ssize_t ecp_tr_send(ECPSocket *sock, ECPBuffer *packet, size_t pkt_size, ecp_tr_addr_t *addr, unsigned char flags) {
- unsigned char *buf = NULL;
+ unsigned char *buffer = NULL;
int reply;
int rv;
+ if (sock->sock == 0) return ECP_ERR_CLOSED;
+
reply = 0;
if (flags & ECP_SEND_FLAG_REPLY) {
if (flags & ECP_SEND_FLAG_MORE) return ECP_ERR;
- if (packet->buffer) {
- buf = packet->buffer-EOS_SOCK_SIZE_UDP_HDR;
- packet->buffer = NULL;
- reply = 1;
- }
+ if (packet->buffer == NULL) return ECP_ERR;
+ buffer = packet->buffer;
+ packet->buffer = NULL;
+ reply = 1;
} else {
- buf = eos_net_alloc();
+ rv = eos_sock_pkt_alloc(&buffer, packet->buffer, pkt_size);
+ if (rv) return ECP_ERR;
}
- if (buf == NULL) return ECP_ERR_ALLOC;
- rv = eos_sock_sendto_async(sock->sock, reply ? NULL : packet->buffer, pkt_size, addr, buf, !!(flags & ECP_SEND_FLAG_MORE));
+ rv = eos_sock_sendto_async(sock->sock, addr, buffer, pkt_size, !!(flags & ECP_SEND_FLAG_MORE));
if (rv) return ECP_ERR_SEND;
return pkt_size;
@@ -110,7 +114,7 @@ ssize_t ecp_tr_recv(ECPSocket *sock, ECPBuffer *packet, ecp_tr_addr_t *addr, int
void ecp_tr_release(ECPBuffer *packet, unsigned char more) {
if (packet->buffer) {
- eos_net_free(packet->buffer-EOS_SOCK_SIZE_UDP_HDR, more);
+ eos_net_free(eos_sock_pkt2buf(packet->buffer), more);
packet->buffer = NULL;
} else if (!more) {
eos_net_release();