WPILibC++  unspecified
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
HAL.hpp
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2013. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
5 /*----------------------------------------------------------------------------*/
6 #pragma once
7 
8 #include <stdint.h>
9 #include <cmath>
10 
11 #include "Accelerometer.hpp"
12 #include "Analog.hpp"
13 #include "Compressor.hpp"
14 #include "Digital.hpp"
15 #include "Solenoid.hpp"
16 #include "Notifier.hpp"
17 #include "Interrupts.hpp"
18 #include "Errors.hpp"
19 #include "PDP.hpp"
20 #include "Power.hpp"
21 #include "SerialPort.hpp"
22 
23 #include "Utilities.hpp"
24 #include "Semaphore.hpp"
25 #include "Task.hpp"
26 
27 #define HAL_IO_CONFIG_DATA_SIZE 32
28 #define HAL_SYS_STATUS_DATA_SIZE 44
29 #define HAL_USER_STATUS_DATA_SIZE (984 - HAL_IO_CONFIG_DATA_SIZE - HAL_SYS_STATUS_DATA_SIZE)
30 
31 #define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Input 17
32 #define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Output 18
33 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Header 19
34 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra1 20
35 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices1 21
36 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra2 22
37 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices2 23
38 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Joystick 24
39 #define HALFRC_NetworkCommunication_DynamicType_Kinect_Custom 25
40 
41 namespace HALUsageReporting
42 {
43  enum tResourceType
44  {
45  kResourceType_Controller,
46  kResourceType_Module,
47  kResourceType_Language,
48  kResourceType_CANPlugin,
49  kResourceType_Accelerometer,
50  kResourceType_ADXL345,
51  kResourceType_AnalogChannel,
52  kResourceType_AnalogTrigger,
53  kResourceType_AnalogTriggerOutput,
54  kResourceType_CANJaguar,
55  kResourceType_Compressor,
56  kResourceType_Counter,
57  kResourceType_Dashboard,
58  kResourceType_DigitalInput,
59  kResourceType_DigitalOutput,
60  kResourceType_DriverStationCIO,
61  kResourceType_DriverStationEIO,
62  kResourceType_DriverStationLCD,
63  kResourceType_Encoder,
64  kResourceType_GearTooth,
65  kResourceType_Gyro,
66  kResourceType_I2C,
67  kResourceType_Framework,
68  kResourceType_Jaguar,
69  kResourceType_Joystick,
70  kResourceType_Kinect,
71  kResourceType_KinectStick,
72  kResourceType_PIDController,
73  kResourceType_Preferences,
74  kResourceType_PWM,
75  kResourceType_Relay,
76  kResourceType_RobotDrive,
77  kResourceType_SerialPort,
78  kResourceType_Servo,
79  kResourceType_Solenoid,
80  kResourceType_SPI,
81  kResourceType_Task,
82  kResourceType_Ultrasonic,
83  kResourceType_Victor,
84  kResourceType_Button,
85  kResourceType_Command,
86  kResourceType_AxisCamera,
87  kResourceType_PCVideoServer,
88  kResourceType_SmartDashboard,
89  kResourceType_Talon,
90  kResourceType_HiTechnicColorSensor,
91  kResourceType_HiTechnicAccel,
92  kResourceType_HiTechnicCompass,
93  kResourceType_SRF08,
94  kResourceType_AnalogOutput,
95  kResourceType_VictorSP,
96  kResourceType_TalonSRX,
97  kResourceType_CANTalonSRX,
98  kResourceType_ADXL362,
99  kResourceType_ADXRS450,
100  kResourceType_RevSPARK,
101  kResourceType_MindsensorsSD540,
102  kResourceType_DigitalFilter,
103  };
104 
105  enum tInstances
106  {
107  kLanguage_LabVIEW = 1,
108  kLanguage_CPlusPlus = 2,
109  kLanguage_Java = 3,
110  kLanguage_Python = 4,
111 
112  kCANPlugin_BlackJagBridge = 1,
113  kCANPlugin_2CAN = 2,
114 
115  kFramework_Iterative = 1,
116  kFramework_Sample = 2,
117  kFramework_CommandControl = 3,
118 
119  kRobotDrive_ArcadeStandard = 1,
120  kRobotDrive_ArcadeButtonSpin = 2,
121  kRobotDrive_ArcadeRatioCurve = 3,
122  kRobotDrive_Tank = 4,
123  kRobotDrive_MecanumPolar = 5,
124  kRobotDrive_MecanumCartesian = 6,
125 
126  kDriverStationCIO_Analog = 1,
127  kDriverStationCIO_DigitalIn = 2,
128  kDriverStationCIO_DigitalOut = 3,
129 
130  kDriverStationEIO_Acceleration = 1,
131  kDriverStationEIO_AnalogIn = 2,
132  kDriverStationEIO_AnalogOut = 3,
133  kDriverStationEIO_Button = 4,
134  kDriverStationEIO_LED = 5,
135  kDriverStationEIO_DigitalIn = 6,
136  kDriverStationEIO_DigitalOut = 7,
137  kDriverStationEIO_FixedDigitalOut = 8,
138  kDriverStationEIO_PWM = 9,
139  kDriverStationEIO_Encoder = 10,
140  kDriverStationEIO_TouchSlider = 11,
141 
142  kADXL345_SPI = 1,
143  kADXL345_I2C = 2,
144 
145  kCommand_Scheduler = 1,
146 
147  kSmartDashboard_Instance = 1,
148  };
149 }
150 
152  uint32_t enabled : 1;
153  uint32_t autonomous : 1;
154  uint32_t test :1;
155  uint32_t eStop : 1;
156  uint32_t fmsAttached:1;
157  uint32_t dsAttached:1;
158  uint32_t control_reserved : 26;
159 };
160 
161 enum HALAllianceStationID {
162  kHALAllianceStationID_red1,
163  kHALAllianceStationID_red2,
164  kHALAllianceStationID_red3,
165  kHALAllianceStationID_blue1,
166  kHALAllianceStationID_blue2,
167  kHALAllianceStationID_blue3,
168 };
169 
170 /* The maximum number of axes that will be stored in a single HALJoystickAxes
171  struct. This is used for allocating buffers, not bounds checking, since
172  there are usually less axes in practice. */
173 static const size_t kMaxJoystickAxes = 12;
174 static const size_t kMaxJoystickPOVs = 12;
175 
177  uint16_t count;
178  int16_t axes[kMaxJoystickAxes];
179 };
180 
182  uint16_t count;
183  int16_t povs[kMaxJoystickPOVs];
184 };
185 
187  uint32_t buttons;
188  uint8_t count;
189 };
190 
192  uint8_t isXbox;
193  uint8_t type;
194  char name[256];
195  uint8_t axisCount;
196  uint8_t axisTypes[kMaxJoystickAxes];
197  uint8_t buttonCount;
198  uint8_t povCount;
199 };
200 
201 inline float intToFloat(int value)
202 {
203  return (float)value;
204 }
205 
206 inline int floatToInt(float value)
207 {
208  return round(value);
209 }
210 
211 extern "C"
212 {
213  extern const uint32_t dio_kNumSystems;
214  extern const uint32_t solenoid_kNumDO7_0Elements;
215  extern const uint32_t interrupt_kNumSystems;
216  extern const uint32_t kSystemClockTicksPerMicrosecond;
217 
218  void* getPort(uint8_t pin);
219  void* getPortWithModule(uint8_t module, uint8_t pin);
220  void freePort(void* port);
221  const char* getHALErrorMessage(int32_t code);
222 
223  uint16_t getFPGAVersion(int32_t *status);
224  uint32_t getFPGARevision(int32_t *status);
225  uint64_t getFPGATime(int32_t *status);
226 
227  bool getFPGAButton(int32_t *status);
228 
229  int HALSetErrorData(const char *errors, int errorsLength, int wait_ms);
230  int HALSendError(int isError, int32_t errorCode, int isLVCode,
231  const char *details, const char *location, const char *callStack,
232  int printMsg);
233 
234  int HALGetControlWord(HALControlWord *data);
235  int HALGetAllianceStation(enum HALAllianceStationID *allianceStation);
236  int HALGetJoystickAxes(uint8_t joystickNum, HALJoystickAxes *axes);
237  int HALGetJoystickPOVs(uint8_t joystickNum, HALJoystickPOVs *povs);
238  int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons);
239  int HALGetJoystickDescriptor(uint8_t joystickNum, HALJoystickDescriptor *desc);
240  int HALGetJoystickIsXbox(uint8_t joystickNum);
241  int HALGetJoystickType(uint8_t joystickNum);
242  char* HALGetJoystickName(uint8_t joystickNum);
243  int HALGetJoystickAxisType(uint8_t joystickNum, uint8_t axis);
244  int HALSetJoystickOutputs(uint8_t joystickNum, uint32_t outputs, uint16_t leftRumble, uint16_t rightRumble);
245  int HALGetMatchTime(float *matchTime);
246 
247  void HALSetNewDataSem(MULTIWAIT_ID sem);
248 
249  bool HALGetSystemActive(int32_t *status);
250  bool HALGetBrownedOut(int32_t *status);
251 
252  int HALInitialize(int mode = 0);
253  void HALNetworkCommunicationObserveUserProgramStarting();
254  void HALNetworkCommunicationObserveUserProgramDisabled();
255  void HALNetworkCommunicationObserveUserProgramAutonomous();
256  void HALNetworkCommunicationObserveUserProgramTeleop();
257  void HALNetworkCommunicationObserveUserProgramTest();
258 
259  uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context = 0,
260  const char *feature = NULL);
261 }
262 
263 // TODO: HACKS for now...
264 extern "C"
265 {
266 
267  void NumericArrayResize();
268  void RTSetCleanupProc();
269  void EDVR_CreateReference();
270  void Occur();
271 }
Definition: HAL.hpp:181
Definition: HAL.hpp:191
Definition: priority_condition_variable.h:23
Definition: HAL.hpp:176
Definition: HAL.hpp:186
Definition: HAL.hpp:151