diff options
author | Uros Majstorovic <majstor@majstor.org> | 2025-04-30 22:06:55 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2025-04-30 22:06:55 +0200 |
commit | 1e6da97af1c10c10e8b4022f89f23f4ccfe32d0f (patch) | |
tree | 0db3893cb76b4f89ca6152c41736e5b8b65f38bd | |
parent | fc19aca65dc9b4481cbae2dce7e3d4c152b7eb69 (diff) |
fixed fe310 platform
-rw-r--r-- | ecp/src/platform/fe310/time.c | 6 | ||||
-rw-r--r-- | ecp/src/platform/fe310/transport.c | 50 |
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(); |