7 #include "DoubleSolenoid.h"
8 #include "NetworkCommunication/UsageReporting.h"
11 #include "LiveWindow/LiveWindow.h"
16 void DoubleSolenoid::InitSolenoid()
23 wpi_setWPIErrorWithContext(ModuleIndexOutOfRange, buf);
28 snprintf(buf, 64,
"Solenoid Channel %d", m_forwardChannel);
29 wpi_setWPIErrorWithContext(ChannelIndexOutOfRange, buf);
34 snprintf(buf, 64,
"Solenoid Channel %d", m_reverseChannel);
35 wpi_setWPIErrorWithContext(ChannelIndexOutOfRange, buf);
40 snprintf(buf, 64,
"Solenoid %d (Module %d)", m_forwardChannel,
m_moduleNumber);
43 CloneError(m_allocated);
46 snprintf(buf, 64,
"Solenoid %d (Module %d)", m_reverseChannel,
m_moduleNumber);
49 CloneError(m_allocated);
52 m_forwardMask = 1 << (m_forwardChannel - 1);
53 m_reverseMask = 1 << (m_reverseChannel - 1);
55 nUsageReporting::report(nUsageReporting::kResourceType_Solenoid, m_forwardChannel,
m_moduleNumber - 1);
56 nUsageReporting::report(nUsageReporting::kResourceType_Solenoid, m_reverseChannel,
m_moduleNumber - 1);
68 , m_forwardChannel (forwardChannel)
69 , m_reverseChannel (reverseChannel)
83 , m_forwardChannel (forwardChannel)
84 , m_reverseChannel (reverseChannel)
109 uint8_t rawValue = 0x00;
117 rawValue = m_forwardMask;
120 rawValue = m_reverseMask;
137 if (value & m_forwardMask)
return kForward;
138 if (value & m_reverseMask)
return kReverse;
144 std::string *val = (std::string *)value.ptr;
145 if (*val ==
"Forward")
147 else if (*val ==
"Reverse")
153 if (m_table != NULL) {
154 m_table->
PutString(
"Value", (
Get() == kForward ?
"Forward" : (
Get() == kReverse ?
"Reverse" :
"Off")));
160 if (m_table != NULL) {
167 if (m_table != NULL) {
173 return "Double Solenoid";
virtual void RemoveTableListener(ITableListener *listener)=0
void StopLiveWindowMode()
void AddActuator(const char *subsystem, const char *name, LiveWindowSendable *component)
DoubleSolenoid(uint32_t forwardChannel, uint32_t reverseChannel)
uint32_t m_moduleNumber
Slot number where the module is plugged into the chassis.
virtual void AddTableListener(ITableListener *listener)=0
void InitTable(ITable *subTable)
std::string GetSmartDashboardType()
void Free(uint32_t index)
uint32_t Allocate(const char *resourceDesc)
void StartLiveWindowMode()
void ValueChanged(ITable *source, const std::string &key, EntryValue value, bool isNew)
virtual void Set(Value value)
static LiveWindow * GetInstance()
virtual ~DoubleSolenoid()
virtual bool StatusIsFatal() const
Check if the current error code represents a fatal error.
static bool CheckSolenoidModule(uint8_t moduleNumber)
static void CreateResourceObject(Resource **r, uint32_t elements)
void Set(uint8_t value, uint8_t mask)
static bool CheckSolenoidChannel(uint32_t channel)
virtual void PutString(std::string key, std::string value)=0