Compare commits

...

3 Commits

Author SHA1 Message Date
Peter van der Perk 9b89abd09f nuttx: update submodule (for i.MXRT FlexCAN rewrite)
Update FlexCAN driver from imx9 backport
2026-04-01 10:30:21 +02:00
Peter van der Perk 35a9aa98c8 fix(boards): V6X-RT increase IOB buffers
Enable IOB throttle to avoid RX starvation and increase amount
of IOB buffers since we've got 4 interfaces that uses IOB
2026-04-01 10:30:21 +02:00
Peter van der Perk 9aefd9058d fix(uavcan): Change SocketCAN return code handling
Don't forward posix return codes and parse errno instead so api knows
it neeeds to do a retry instead of a discard
2026-04-01 10:30:21 +02:00
3 changed files with 17 additions and 8 deletions
@@ -142,8 +142,9 @@ CONFIG_IMXRT_USDHC1_INVERT_CD=y
CONFIG_IMXRT_USDHC1_WIDTH_D1_D4=y
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_IOB_NBUFFERS=24
CONFIG_IOB_THROTTLE=0
CONFIG_IOB_NBUFFERS=256
CONFIG_IOB_NCHAINS=196
CONFIG_IOB_NOTIFIER=y
CONFIG_IPCFG_BINARY=y
CONFIG_IPCFG_CHARDEV=y
CONFIG_IPCFG_PATH="/fs/mtd_net"
@@ -200,7 +200,11 @@ uavcan::int16_t CanIface::send(const uavcan::CanFrame &frame, uavcan::MonotonicT
return 1;
} else {
return res;
if (errno == ENOBUFS || errno == EAGAIN || errno == EWOULDBLOCK) {
return 0; // Transmit queue is full, retry
}
return -1;
}
}
@@ -210,7 +214,11 @@ uavcan::int16_t CanIface::receive(uavcan::CanFrame &out_frame, uavcan::Monotonic
int32_t result = recvmsg(_fd, &_recv_msg, MSG_DONTWAIT);
if (result < 0) {
return result;
if (errno == EAGAIN || errno == EWOULDBLOCK) {
return 0;
}
return -1;
}
/* Copy SocketCAN frame to CanardFrame */
@@ -220,7 +228,7 @@ uavcan::int16_t CanIface::receive(uavcan::CanFrame &out_frame, uavcan::Monotonic
out_frame.id = recv_frame->can_id;
if (recv_frame->len > CANFD_MAX_DLEN) {
return -EFAULT;
return -1;
}
out_frame.dlc = recv_frame->len;
@@ -231,7 +239,7 @@ uavcan::int16_t CanIface::receive(uavcan::CanFrame &out_frame, uavcan::Monotonic
out_frame.id = recv_frame->can_id;
if (recv_frame->can_dlc > CAN_MAX_DLEN) {
return -EFAULT;
return -1;
}
out_frame.dlc = recv_frame->can_dlc;
@@ -245,7 +253,7 @@ uavcan::int16_t CanIface::receive(uavcan::CanFrame &out_frame, uavcan::Monotonic
out_ts_monotonic = uavcan::MonotonicTime::fromUSec(tv->tv_sec * 1000000ULL + tv->tv_usec);
}
return result;
return 1;
}