blob: a95d836b1f42d2831ce87712b321f639ff6d41d4 [file] [log] [blame]
Brian Silverman26e4e522015-12-17 01:56:40 -05001
2#include "HAL/Solenoid.hpp"
3
4#include "HAL/Port.h"
5#include "HAL/Errors.hpp"
6#include "ChipObject.h"
7#include "FRC_NetworkCommunication/LoadOut.h"
8#include "ctre/PCM.h"
9
10static const int NUM_MODULE_NUMBERS = 63;
11
12PCM *modules[NUM_MODULE_NUMBERS] = { NULL };
13
14struct solenoid_port_t {
15 PCM *module;
16 uint32_t pin;
17};
18
19void initializePCM(int module) {
20 if(!modules[module]) {
21 modules[module] = new PCM(module);
22 }
23}
24
25void* initializeSolenoidPort(void *port_pointer, int32_t *status) {
26 Port* port = (Port*) port_pointer;
27 initializePCM(port->module);
28
29 solenoid_port_t *solenoid_port = new solenoid_port_t;
30 solenoid_port->module = modules[port->module];
31 solenoid_port->pin = port->pin;
32
33 return solenoid_port;
34}
35
36void freeSolenoidPort(void* solenoid_port_pointer) {
37 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
38 delete port;
39}
40
41bool checkSolenoidModule(uint8_t module) {
42 return module < NUM_MODULE_NUMBERS;
43}
44
45bool getSolenoid(void* solenoid_port_pointer, int32_t *status) {
46 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
47 bool value;
48
49 *status = port->module->GetSolenoid(port->pin, value);
50
51 return value;
52}
53
54uint8_t getAllSolenoids(void* solenoid_port_pointer, int32_t *status) {
55 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
56 uint8_t value;
57
58 *status = port->module->GetAllSolenoids(value);
59
60 return value;
61}
62
63void setSolenoid(void* solenoid_port_pointer, bool value, int32_t *status) {
64 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
65
66 *status = port->module->SetSolenoid(port->pin, value);
67}
68
69int getPCMSolenoidBlackList(void* solenoid_port_pointer, int32_t *status){
70 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
71 UINT8 value;
72
73 *status = port->module->GetSolenoidBlackList(value);
74
75 return value;
76}
77bool getPCMSolenoidVoltageStickyFault(void* solenoid_port_pointer, int32_t *status){
78 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
79 bool value;
80
81 *status = port->module->GetSolenoidStickyFault(value);
82
83 return value;
84}
85bool getPCMSolenoidVoltageFault(void* solenoid_port_pointer, int32_t *status){
86 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
87 bool value;
88
89 *status = port->module->GetSolenoidFault(value);
90
91 return value;
92}
93void clearAllPCMStickyFaults_sol(void *solenoid_port_pointer, int32_t *status){
94 solenoid_port_t* port = (solenoid_port_t*) solenoid_port_pointer;
95
96 *status = port->module->ClearStickyFaults();
97}