mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
[hal,wpilib] Switch CANBusMap to Enum, use it for CAN API (#8977)
Will make it easier to solve https://github.com/wpilibsuite/SystemcoreTesting/issues/286
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
package org.wpilib.hardware.hal;
|
||||
|
||||
public final class CANBusMap {
|
||||
public static final int CAN_S0 = 0;
|
||||
public static final int CAN_S1 = 1;
|
||||
public static final int CAN_S2 = 2;
|
||||
public static final int CAN_S3 = 3;
|
||||
public static final int CAN_S4 = 4;
|
||||
public static final int CAN_D0 = 5;
|
||||
public static final int CAN_D1 = 6;
|
||||
public static final int CAN_D2 = 7;
|
||||
public static final int CAN_D3 = 8;
|
||||
public static final int CAN_D4 = 9;
|
||||
public static final int CAN_D5 = 10;
|
||||
public static final int CAN_D6 = 11;
|
||||
public static final int CAN_D7 = 12;
|
||||
public static final int CAN_D8 = 13;
|
||||
public static final int CAN_D9 = 14;
|
||||
public static final int CAN_D10 = 15;
|
||||
public static final int CAN_D11 = 16;
|
||||
public static final int CAN_D12 = 17;
|
||||
public static final int CAN_D13 = 18;
|
||||
public static final int CAN_D14 = 19;
|
||||
public static final int CAN_D15 = 20;
|
||||
public static final int CAN_D16 = 21;
|
||||
public static final int CAN_D17 = 22;
|
||||
public static final int CAN_D18 = 23;
|
||||
public static final int CAN_D19 = 24;
|
||||
|
||||
private CANBusMap() {
|
||||
throw new UnsupportedOperationException("This is a utility class!");
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "wpi/hal/Types.h"
|
||||
|
||||
/**
|
||||
* @defgroup hal_canapi CAN BUS Mapping Enums
|
||||
* @ingroup hal_capi
|
||||
* @{
|
||||
*/
|
||||
|
||||
HAL_ENUM(HAL_CANBusMap) {
|
||||
HAL_CAN_BUS_S0 = 0,
|
||||
HAL_CAN_BUS_S1 = 1,
|
||||
HAL_CAN_BUS_S2 = 2,
|
||||
HAL_CAN_BUS_S3 = 3,
|
||||
HAL_CAN_BUS_S4 = 4,
|
||||
HAL_CAN_BUS_D0 = 5,
|
||||
HAL_CAN_BUS_D1 = 6,
|
||||
HAL_CAN_BUS_D2 = 7,
|
||||
HAL_CAN_BUS_D3 = 8,
|
||||
HAL_CAN_BUS_D4 = 9,
|
||||
HAL_CAN_BUS_D5 = 10,
|
||||
HAL_CAN_BUS_D6 = 11,
|
||||
HAL_CAN_BUS_D7 = 12,
|
||||
HAL_CAN_BUS_D8 = 13,
|
||||
HAL_CAN_BUS_D9 = 14,
|
||||
HAL_CAN_BUS_D10 = 15,
|
||||
HAL_CAN_BUS_D11 = 16,
|
||||
HAL_CAN_BUS_D12 = 17,
|
||||
HAL_CAN_BUS_D13 = 18,
|
||||
HAL_CAN_BUS_D14 = 19,
|
||||
HAL_CAN_BUS_D15 = 20,
|
||||
HAL_CAN_BUS_D16 = 21,
|
||||
HAL_CAN_BUS_D17 = 22,
|
||||
HAL_CAN_BUS_D18 = 23,
|
||||
HAL_CAN_BUS_D19 = 24,
|
||||
};
|
||||
|
||||
/** @} */
|
||||
@@ -8,10 +8,11 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "wpi/hal/CANAPI.h"
|
||||
#include "wpi/hal/CANBusMap.h"
|
||||
#include "wpi/hal/simulation/CanData.h"
|
||||
|
||||
namespace wpi::hal {
|
||||
static constexpr int32_t kCANBusS0 = 0;
|
||||
|
||||
struct CANTestStore {
|
||||
CANTestStore(int32_t busId, int32_t deviceId, int32_t* status) {
|
||||
this->deviceId = deviceId;
|
||||
@@ -45,7 +46,7 @@ struct CANSendCallbackStore {
|
||||
TEST(CANTest, CanIdPacking) {
|
||||
int32_t status = 0;
|
||||
int32_t deviceId = 12;
|
||||
CANTestStore testStore(HAL_CAN_BUS_S0, deviceId, &status);
|
||||
CANTestStore testStore(kCANBusS0, deviceId, &status);
|
||||
ASSERT_EQ(0, status);
|
||||
|
||||
std::pair<int32_t, bool> storePair;
|
||||
|
||||
8
wpilibc/robotpy_pybind_build_info.bzl
generated
8
wpilibc/robotpy_pybind_build_info.bzl
generated
@@ -414,6 +414,14 @@ def wpilib_extension(srcs = [], header_to_dat_deps = [], extra_hdrs = [], includ
|
||||
("wpi::CAN", "wpi__CAN.hpp"),
|
||||
],
|
||||
),
|
||||
struct(
|
||||
class_name = "CANBusMap",
|
||||
yml_file = "semiwrap/CANBusMap.yml",
|
||||
header_root = "$(execpath :robotpy-native-wpilib.copy_headers)",
|
||||
header_file = "$(execpath :robotpy-native-wpilib.copy_headers)/wpi/hardware/bus/CANBusMap.hpp",
|
||||
tmpl_class_names = [],
|
||||
trampolines = [],
|
||||
),
|
||||
struct(
|
||||
class_name = "I2C",
|
||||
yml_file = "semiwrap/I2C.yml",
|
||||
|
||||
@@ -12,13 +12,15 @@
|
||||
|
||||
using namespace wpi;
|
||||
|
||||
CAN::CAN(int busId, int deviceId)
|
||||
CAN::CAN(CANBusMap busId, int deviceId)
|
||||
: CAN{busId, deviceId, TEAM_MANUFACTURER, TEAM_DEVICE_TYPE} {}
|
||||
|
||||
CAN::CAN(int busId, int deviceId, int deviceManufacturer, int deviceType) {
|
||||
CAN::CAN(CANBusMap busId, int deviceId, int deviceManufacturer,
|
||||
int deviceType) {
|
||||
int32_t status = 0;
|
||||
m_handle = HAL_InitializeCAN(
|
||||
busId, static_cast<HAL_CANManufacturer>(deviceManufacturer), deviceId,
|
||||
static_cast<int>(busId),
|
||||
static_cast<HAL_CANManufacturer>(deviceManufacturer), deviceId,
|
||||
static_cast<HAL_CANDeviceType>(deviceType), &status);
|
||||
WPILIB_CheckErrorStatus(status, "device id {} mfg {} type {}", deviceId,
|
||||
deviceManufacturer, deviceType);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "wpi/hal/CANAPI.h"
|
||||
#include "wpi/hardware/bus/CANBusMap.hpp"
|
||||
#include "wpi/util/Handle.hpp"
|
||||
|
||||
namespace wpi {
|
||||
@@ -31,7 +32,7 @@ class CAN {
|
||||
* @param busId The bus id
|
||||
* @param deviceId The device id
|
||||
*/
|
||||
CAN(int busId, int deviceId);
|
||||
CAN(CANBusMap busId, int deviceId);
|
||||
|
||||
/**
|
||||
* Create a new CAN communication interface with a specific device ID,
|
||||
@@ -43,7 +44,7 @@ class CAN {
|
||||
* @param deviceManufacturer The device manufacturer
|
||||
* @param deviceType The device type
|
||||
*/
|
||||
CAN(int busId, int deviceId, int deviceManufacturer, int deviceType);
|
||||
CAN(CANBusMap busId, int deviceId, int deviceManufacturer, int deviceType);
|
||||
|
||||
CAN(CAN&&) = default;
|
||||
CAN& operator=(CAN&&) = default;
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace wpi {
|
||||
|
||||
/**
|
||||
* CAN bus mapping.
|
||||
*
|
||||
* S0-S4 are Systemcore CAN buses. D0-D19 are Motioncore CAN buses.
|
||||
*/
|
||||
enum class CANBusMap {
|
||||
/// CAN bus S0.
|
||||
CAN_S0 = 0,
|
||||
/// CAN bus S1.
|
||||
CAN_S1 = 1,
|
||||
/// CAN bus S2.
|
||||
CAN_S2 = 2,
|
||||
/// CAN bus S3.
|
||||
CAN_S3 = 3,
|
||||
/// CAN bus S4.
|
||||
CAN_S4 = 4,
|
||||
/// CAN bus D0.
|
||||
CAN_D0 = 5,
|
||||
/// CAN bus D1.
|
||||
CAN_D1 = 6,
|
||||
/// CAN bus D2.
|
||||
CAN_D2 = 7,
|
||||
/// CAN bus D3.
|
||||
CAN_D3 = 8,
|
||||
/// CAN bus D4.
|
||||
CAN_D4 = 9,
|
||||
/// CAN bus D5.
|
||||
CAN_D5 = 10,
|
||||
/// CAN bus D6.
|
||||
CAN_D6 = 11,
|
||||
/// CAN bus D7.
|
||||
CAN_D7 = 12,
|
||||
/// CAN bus D8.
|
||||
CAN_D8 = 13,
|
||||
/// CAN bus D9.
|
||||
CAN_D9 = 14,
|
||||
/// CAN bus D10.
|
||||
CAN_D10 = 15,
|
||||
/// CAN bus D11.
|
||||
CAN_D11 = 16,
|
||||
/// CAN bus D12.
|
||||
CAN_D12 = 17,
|
||||
/// CAN bus D13.
|
||||
CAN_D13 = 18,
|
||||
/// CAN bus D14.
|
||||
CAN_D14 = 19,
|
||||
/// CAN bus D15.
|
||||
CAN_D15 = 20,
|
||||
/// CAN bus D16.
|
||||
CAN_D16 = 21,
|
||||
/// CAN bus D17.
|
||||
CAN_D17 = 22,
|
||||
/// CAN bus D18.
|
||||
CAN_D18 = 23,
|
||||
/// CAN bus D19.
|
||||
CAN_D19 = 24,
|
||||
};
|
||||
} // namespace wpi
|
||||
@@ -146,6 +146,7 @@ AnalogAccelerometer = "wpi/hardware/accelerometer/AnalogAccelerometer.hpp"
|
||||
|
||||
# wpi/hardware/bus
|
||||
CAN = "wpi/hardware/bus/CAN.hpp"
|
||||
CANBusMap = "wpi/hardware/bus/CANBusMap.hpp"
|
||||
I2C = "wpi/hardware/bus/I2C.hpp"
|
||||
SerialPort = "wpi/hardware/bus/SerialPort.hpp"
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ classes:
|
||||
methods:
|
||||
CAN:
|
||||
overloads:
|
||||
int, int:
|
||||
int, int, int, int:
|
||||
CANBusMap, int:
|
||||
CANBusMap, int, int, int:
|
||||
WritePacket:
|
||||
WritePacketNoError:
|
||||
WritePacketRepeating:
|
||||
|
||||
2
wpilibc/src/main/python/semiwrap/CANBusMap.yml
Normal file
2
wpilibc/src/main/python/semiwrap/CANBusMap.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
enums:
|
||||
CANBusMap:
|
||||
@@ -13,6 +13,7 @@ from ._wpilib import (
|
||||
AnalogPotentiometer,
|
||||
BooleanEvent,
|
||||
CAN,
|
||||
CANBusMap,
|
||||
CANStatus,
|
||||
Compressor,
|
||||
CompressorConfigType,
|
||||
@@ -129,6 +130,7 @@ __all__ = [
|
||||
"AnalogPotentiometer",
|
||||
"BooleanEvent",
|
||||
"CAN",
|
||||
"CANBusMap",
|
||||
"CANStatus",
|
||||
"Compressor",
|
||||
"CompressorConfigType",
|
||||
|
||||
@@ -36,7 +36,7 @@ public class CAN implements Closeable {
|
||||
* @param busId The bus ID
|
||||
* @param deviceId The device id
|
||||
*/
|
||||
public CAN(int busId, int deviceId) {
|
||||
public CAN(CANBusMap busId, int deviceId) {
|
||||
this(busId, deviceId, TEAM_MANUFACTURER, TEAM_DEVICE_TYPE);
|
||||
}
|
||||
|
||||
@@ -49,8 +49,8 @@ public class CAN implements Closeable {
|
||||
* @param deviceManufacturer The device manufacturer
|
||||
* @param deviceType The device type
|
||||
*/
|
||||
public CAN(int busId, int deviceId, int deviceManufacturer, int deviceType) {
|
||||
m_handle = CANAPIJNI.initializeCAN(busId, deviceManufacturer, deviceId, deviceType);
|
||||
public CAN(CANBusMap busId, int deviceId, int deviceManufacturer, int deviceType) {
|
||||
m_handle = CANAPIJNI.initializeCAN(busId.value, deviceManufacturer, deviceId, deviceType);
|
||||
HAL.reportUsage("CAN[" + deviceType + "][" + deviceManufacturer + "][" + deviceId + "]", "");
|
||||
}
|
||||
|
||||
|
||||
70
wpilibj/src/main/java/org/wpilib/hardware/bus/CANBusMap.java
Normal file
70
wpilibj/src/main/java/org/wpilib/hardware/bus/CANBusMap.java
Normal file
@@ -0,0 +1,70 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
package org.wpilib.hardware.bus;
|
||||
|
||||
/**
|
||||
* CAN bus mapping.
|
||||
*
|
||||
* <p>S0-S4 are Systemcore CAN buses. D0-D19 are Motioncore CAN buses.
|
||||
*/
|
||||
public enum CANBusMap {
|
||||
/** CAN bus S0. */
|
||||
CAN_S0(0),
|
||||
/** CAN bus S1. */
|
||||
CAN_S1(1),
|
||||
/** CAN bus S2. */
|
||||
CAN_S2(2),
|
||||
/** CAN bus S3. */
|
||||
CAN_S3(3),
|
||||
/** CAN bus S4. */
|
||||
CAN_S4(4),
|
||||
/** CAN bus D0. */
|
||||
CAN_D0(5),
|
||||
/** CAN bus D1. */
|
||||
CAN_D1(6),
|
||||
/** CAN bus D2. */
|
||||
CAN_D2(7),
|
||||
/** CAN bus D3. */
|
||||
CAN_D3(8),
|
||||
/** CAN bus D4. */
|
||||
CAN_D4(9),
|
||||
/** CAN bus D5. */
|
||||
CAN_D5(10),
|
||||
/** CAN bus D6. */
|
||||
CAN_D6(11),
|
||||
/** CAN bus D7. */
|
||||
CAN_D7(12),
|
||||
/** CAN bus D8. */
|
||||
CAN_D8(13),
|
||||
/** CAN bus D9. */
|
||||
CAN_D9(14),
|
||||
/** CAN bus D10. */
|
||||
CAN_D10(15),
|
||||
/** CAN bus D11. */
|
||||
CAN_D11(16),
|
||||
/** CAN bus D12. */
|
||||
CAN_D12(17),
|
||||
/** CAN bus D13. */
|
||||
CAN_D13(18),
|
||||
/** CAN bus D14. */
|
||||
CAN_D14(19),
|
||||
/** CAN bus D15. */
|
||||
CAN_D15(20),
|
||||
/** CAN bus D16. */
|
||||
CAN_D16(21),
|
||||
/** CAN bus D17. */
|
||||
CAN_D17(22),
|
||||
/** CAN bus D18. */
|
||||
CAN_D18(23),
|
||||
/** CAN bus D19. */
|
||||
CAN_D19(24);
|
||||
|
||||
/** CAN bus ID. */
|
||||
public final int value;
|
||||
|
||||
CANBusMap(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user