Files
allwpilib/hal/lib/Athena/Solenoid.cpp

87 lines
2.7 KiB
C++

#include "HAL/Solenoid.hpp"
#include "Port.h"
#include "HAL/Errors.hpp"
#include "ChipObject.h"
#include "HAL/cpp/Synchronized.hpp"
#include "NetworkCommunication/LoadOut.h"
// XXX No solenoid abstraction :(
// struct solenoid_port_t {
// Port port;
// tSolenoid *module;
// uint32_t PWMGeneratorID;
// };
// typedef struct solenoid_port_t SolenoidPort;
// static ReentrantSemaphore solenoidSemaphore;
// static tSolenoid* solenoidModules[2] = {NULL, NULL};
// bool solenoidModulesInitialized = false;
// /**
// * Initialize the digital modules.
// */
// void initializeSolenoid(int32_t *status) {
// if (solenoidModulesInitialized) return;
// for (unsigned int i = 0; i < (sizeof(solenoidModules)/sizeof(solenoidModules[0])); i++) {
// Synchronized sync(solenoidSemaphore);
// solenoidModules[i] = tSolenoid::create(status);
// }
// solenoidModulesInitialized = true;
// }
// void* initializeSolenoidPort(void* port_pointer, int32_t *status) {
// initializeSolenoid(status);
// Port* port = (Port*) port_pointer;
// // Initialize port structure
// SolenoidPort* solenoid_port = new SolenoidPort();
// solenoid_port->port = *port;
// solenoid_port->module = solenoidModules[solenoid_port->port.module-1];
// return solenoid_port;
// }
// bool checkSolenoidModule(uint8_t module) {
// if (nLoadOut::getModulePresence(nLoadOut::kModuleType_Solenoid, module - 1))
// return true;
// return false;
// }
// bool getSolenoid(void* solenoid_port_pointer, int32_t *status) {
// SolenoidPort* port = (SolenoidPort*) solenoid_port_pointer;
// if (checkSolenoidModule(port->port.module)) {
// uint8_t mask = 1 << (port->port.pin - 1);
// return (mask & port->module->readDO7_0(port->port.module - 1, status));
// }
// return false;
// }
// void setSolenoid(void* solenoid_port_pointer, bool value, int32_t *status) {
// SolenoidPort* port = (SolenoidPort*) solenoid_port_pointer;
// if (checkSolenoidModule(port->port.module)) {
// Synchronized sync(solenoidSemaphore);
// uint8_t currentValue = port->module->readDO7_0(port->port.module - 1, status);
// uint8_t mask = 1 << (port->port.pin - 1);
// if (value) currentValue = currentValue | mask; // Flip the bit on
// else currentValue = currentValue & ~mask; // Flip the bit off
// port->module->writeDO7_0(port->port.module - 1, currentValue, status);
// }
// }
// XXX No solenoid abstraction :(
/**
* Initialize the digital modules.
*/
void initializeSolenoid(int32_t *status) {}
void* initializeSolenoidPort(void* port_pointer, int32_t *status) { return NULL; }
bool checkSolenoidModule(uint8_t module) { return false; }
bool getSolenoid(void* solenoid_port_pointer, int32_t *status) { return false; }
void setSolenoid(void* solenoid_port_pointer, bool value, int32_t *status) {}