diff --git a/hal/src/main/native/systemcore/CAN.cpp b/hal/src/main/native/systemcore/CAN.cpp index 3837440ac9..a7956f4e61 100644 --- a/hal/src/main/native/systemcore/CAN.cpp +++ b/hal/src/main/native/systemcore/CAN.cpp @@ -166,7 +166,14 @@ bool SocketCanState::InitializeBuses() { } ifreq ifr; - std::snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "can_s%d", i); + + if (i < 5) { + std::snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "can_s%u", + static_cast(i)); + } else { + std::snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "can_d%u", + static_cast(i - 5)); + } if (ioctl(socketHandle[i], SIOCGIFINDEX, &ifr) == -1) { wpi::util::print("ioctl(SIOCGIFINDEX) for CAN {} failed with {}\n", @@ -336,6 +343,13 @@ void HAL_CAN_SendMessage(int32_t busId, uint32_t messageId, return; } + if (busId >= 5 && + ((message->flags & HAL_CANFlags::HAL_CAN_FD_DATALENGTH) || + (message->flags & HAL_CANFlags::HAL_CAN_FD_BITRATESWITCH))) { + *status = PARAMETER_OUT_OF_RANGE; + return; + } + messageId = MapMessageIdToSocketCan(messageId); // TODO determine on the real roborio is a non periodic send removes any diff --git a/hal/src/main/native/systemcore/PortsInternal.hpp b/hal/src/main/native/systemcore/PortsInternal.hpp index bb3439ef5a..413b97cb1c 100644 --- a/hal/src/main/native/systemcore/PortsInternal.hpp +++ b/hal/src/main/native/systemcore/PortsInternal.hpp @@ -8,7 +8,7 @@ namespace wpi::hal { -constexpr int32_t kNumCanBuses = 5; +constexpr int32_t kNumCanBuses = 25; constexpr int32_t kNumSmartIo = 6; constexpr int32_t kNumI2cBuses = 2; constexpr int32_t kNumAccumulators = 0;