blob: 93a422b5dd5b985384d280a34e11d2f30134447c [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "hal/CAN.h"
6
7#include "mockdata/CanDataInternal.h"
8
9using namespace hal;
10
Austin Schuh812d0d12021-11-04 20:16:48 -070011namespace hal::init {
Brian Silverman8fce7482020-01-05 13:18:21 -080012void InitializeCAN() {}
Austin Schuh812d0d12021-11-04 20:16:48 -070013} // namespace hal::init
Brian Silverman8fce7482020-01-05 13:18:21 -080014
15extern "C" {
16
17void HAL_CAN_SendMessage(uint32_t messageID, const uint8_t* data,
18 uint8_t dataSize, int32_t periodMs, int32_t* status) {
19 SimCanData->sendMessage(messageID, data, dataSize, periodMs, status);
20}
21void HAL_CAN_ReceiveMessage(uint32_t* messageID, uint32_t messageIDMask,
22 uint8_t* data, uint8_t* dataSize,
23 uint32_t* timeStamp, int32_t* status) {
24 // Use a data size of 42 as call check. Difficult to add check to invoke
25 // handler
26 *dataSize = 42;
27 auto tmpStatus = *status;
28 SimCanData->receiveMessage(messageID, messageIDMask, data, dataSize,
29 timeStamp, status);
30 // If no handler invoked, return message not found
31 if (*dataSize == 42 && *status == tmpStatus) {
32 *status = HAL_ERR_CANSessionMux_MessageNotFound;
33 }
34}
35void HAL_CAN_OpenStreamSession(uint32_t* sessionHandle, uint32_t messageID,
36 uint32_t messageIDMask, uint32_t maxMessages,
37 int32_t* status) {
38 SimCanData->openStreamSession(sessionHandle, messageID, messageIDMask,
39 maxMessages, status);
40}
41void HAL_CAN_CloseStreamSession(uint32_t sessionHandle) {
42 SimCanData->closeStreamSession(sessionHandle);
43}
44void HAL_CAN_ReadStreamSession(uint32_t sessionHandle,
45 struct HAL_CANStreamMessage* messages,
46 uint32_t messagesToRead, uint32_t* messagesRead,
47 int32_t* status) {
48 SimCanData->readStreamSession(sessionHandle, messages, messagesToRead,
49 messagesRead, status);
50}
51void HAL_CAN_GetCANStatus(float* percentBusUtilization, uint32_t* busOffCount,
52 uint32_t* txFullCount, uint32_t* receiveErrorCount,
53 uint32_t* transmitErrorCount, int32_t* status) {
54 SimCanData->getCANStatus(percentBusUtilization, busOffCount, txFullCount,
55 receiveErrorCount, transmitErrorCount, status);
56}
57
58} // extern "C"