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:
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",
|
||||
|
||||
Reference in New Issue
Block a user