mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
This is a follow-up of 3cd1253. A C++ program was written to automate the license update originally. That program was translated to Python so it can be kept in the repository and run when needed. It has been tested on Windows using the standard Python 3 installation and on Linux.
The original version skipped files that had "//" at the beginning since most were files that should be excluded. The relevant files are now in an exclusion list and the rest are processed normally. The .hpp file extension has been added as well. The script rewrote CompressorJNI.cpp to remove the carriage returns from its line endings.
168 lines
5.3 KiB
C++
168 lines
5.3 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
// This file must compile on ALL PLATFORMS. Be very careful what you put in
|
|
// here.
|
|
|
|
#include "HAL/HAL.h"
|
|
#include <cstring>
|
|
#include "FRC_NetworkCommunication/FRCComm.h"
|
|
|
|
struct HALJoystickAxesInt {
|
|
uint16_t count;
|
|
int16_t axes[kMaxJoystickAxes];
|
|
};
|
|
|
|
extern "C" {
|
|
|
|
int HALGetControlWord(HALControlWord* data) {
|
|
return FRC_NetworkCommunication_getControlWord((ControlWord_t*)data);
|
|
}
|
|
|
|
void HALSetNewDataSem(MULTIWAIT_ID sem) { setNewDataSem(sem->native_handle()); }
|
|
|
|
int HALGetAllianceStation(enum HALAllianceStationID* allianceStation) {
|
|
return FRC_NetworkCommunication_getAllianceStation(
|
|
(AllianceStationID_t*)allianceStation);
|
|
}
|
|
|
|
int HALGetJoystickAxes(uint8_t joystickNum, HALJoystickAxes* axes) {
|
|
HALJoystickAxesInt axesInt;
|
|
|
|
int retVal = FRC_NetworkCommunication_getJoystickAxes(
|
|
joystickNum, (JoystickAxes_t*)&axesInt, kMaxJoystickAxes);
|
|
|
|
// copy int values to float values
|
|
axes->count = axesInt.count;
|
|
// current scaling is -128 to 127, can easily be patched in the future by
|
|
// changing this function.
|
|
for (unsigned int i = 0; i < axesInt.count; i++) {
|
|
int8_t value = axesInt.axes[i];
|
|
if (value < 0) {
|
|
axes->axes[i] = value / 128.0f;
|
|
} else {
|
|
axes->axes[i] = value / 127.0f;
|
|
}
|
|
}
|
|
|
|
return retVal;
|
|
}
|
|
|
|
int HALGetJoystickPOVs(uint8_t joystickNum, HALJoystickPOVs* povs) {
|
|
return FRC_NetworkCommunication_getJoystickPOVs(
|
|
joystickNum, (JoystickPOV_t*)povs, kMaxJoystickPOVs);
|
|
}
|
|
|
|
int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons* buttons) {
|
|
return FRC_NetworkCommunication_getJoystickButtons(
|
|
joystickNum, &buttons->buttons, &buttons->count);
|
|
}
|
|
/**
|
|
* Retrieve the Joystick Descriptor for particular slot
|
|
* @param desc [out] descriptor (data transfer object) to fill in. desc is
|
|
* filled in regardless of success. In other words, if descriptor is not
|
|
* available, desc is filled in with default values matching the init-values in
|
|
* Java and C++ Driverstation for when caller requests a too-large joystick
|
|
* index.
|
|
*
|
|
* @return error code reported from Network Comm back-end. Zero is good,
|
|
* nonzero is bad.
|
|
*/
|
|
int HALGetJoystickDescriptor(uint8_t joystickNum, HALJoystickDescriptor* desc) {
|
|
desc->isXbox = 0;
|
|
desc->type = -1;
|
|
desc->name[0] = '\0';
|
|
desc->axisCount =
|
|
kMaxJoystickAxes; /* set to the desc->axisTypes's capacity */
|
|
desc->buttonCount = 0;
|
|
desc->povCount = 0;
|
|
int retval = FRC_NetworkCommunication_getJoystickDesc(
|
|
joystickNum, &desc->isXbox, &desc->type, (char*)(&desc->name),
|
|
&desc->axisCount, (uint8_t*)&desc->axisTypes, &desc->buttonCount,
|
|
&desc->povCount);
|
|
/* check the return, if there is an error and the RIOimage predates FRC2017,
|
|
* then axisCount needs to be cleared */
|
|
if (retval != 0) {
|
|
/* set count to zero so downstream code doesn't decode invalid axisTypes. */
|
|
desc->axisCount = 0;
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
int HALGetJoystickIsXbox(uint8_t joystickNum) {
|
|
HALJoystickDescriptor joystickDesc;
|
|
if (HALGetJoystickDescriptor(joystickNum, &joystickDesc) < 0) {
|
|
return 0;
|
|
} else {
|
|
return joystickDesc.isXbox;
|
|
}
|
|
}
|
|
|
|
int HALGetJoystickType(uint8_t joystickNum) {
|
|
HALJoystickDescriptor joystickDesc;
|
|
if (HALGetJoystickDescriptor(joystickNum, &joystickDesc) < 0) {
|
|
return -1;
|
|
} else {
|
|
return joystickDesc.type;
|
|
}
|
|
}
|
|
|
|
char* HALGetJoystickName(uint8_t joystickNum) {
|
|
HALJoystickDescriptor joystickDesc;
|
|
if (HALGetJoystickDescriptor(joystickNum, &joystickDesc) < 0) {
|
|
char* name = (char*)std::malloc(1);
|
|
name[0] = '\0';
|
|
return name;
|
|
} else {
|
|
size_t len = std::strlen(joystickDesc.name);
|
|
char* name = (char*)std::malloc(len + 1);
|
|
std::strcpy(name, joystickDesc.name);
|
|
return name;
|
|
}
|
|
}
|
|
|
|
int HALGetJoystickAxisType(uint8_t joystickNum, uint8_t axis) {
|
|
HALJoystickDescriptor joystickDesc;
|
|
if (HALGetJoystickDescriptor(joystickNum, &joystickDesc) < 0) {
|
|
return -1;
|
|
} else {
|
|
return joystickDesc.axisTypes[axis];
|
|
}
|
|
}
|
|
|
|
int HALSetJoystickOutputs(uint8_t joystickNum, uint32_t outputs,
|
|
uint16_t leftRumble, uint16_t rightRumble) {
|
|
return FRC_NetworkCommunication_setJoystickOutputs(joystickNum, outputs,
|
|
leftRumble, rightRumble);
|
|
}
|
|
|
|
int HALGetMatchTime(float* matchTime) {
|
|
return FRC_NetworkCommunication_getMatchTime(matchTime);
|
|
}
|
|
|
|
void HALNetworkCommunicationObserveUserProgramStarting(void) {
|
|
FRC_NetworkCommunication_observeUserProgramStarting();
|
|
}
|
|
|
|
void HALNetworkCommunicationObserveUserProgramDisabled(void) {
|
|
FRC_NetworkCommunication_observeUserProgramDisabled();
|
|
}
|
|
|
|
void HALNetworkCommunicationObserveUserProgramAutonomous(void) {
|
|
FRC_NetworkCommunication_observeUserProgramAutonomous();
|
|
}
|
|
|
|
void HALNetworkCommunicationObserveUserProgramTeleop(void) {
|
|
FRC_NetworkCommunication_observeUserProgramTeleop();
|
|
}
|
|
|
|
void HALNetworkCommunicationObserveUserProgramTest(void) {
|
|
FRC_NetworkCommunication_observeUserProgramTest();
|
|
}
|
|
|
|
} // extern "C"
|