Now you can download a copy of these docs so you can use them offline! Download now
DoubleSolenoid.cpp
00001 /*----------------------------------------------------------------------------*/ 00002 /* Copyright (c) FIRST 2008. All Rights Reserved. */ 00003 /* Open Source Software - may be modified and shared by FRC teams. The code */ 00004 /* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ 00005 /*----------------------------------------------------------------------------*/ 00006 00007 #include "DoubleSolenoid.h" 00008 #include "WPIErrors.h" 00009 00013 void DoubleSolenoid::InitSolenoid() 00014 { 00015 char buf[64]; 00016 if (!CheckSolenoidModule(m_moduleNumber)) 00017 { 00018 snprintf(buf, 64, "Solenoid Module %d", m_moduleNumber); 00019 wpi_setWPIErrorWithContext(ModuleIndexOutOfRange, buf); 00020 return; 00021 } 00022 if (!CheckSolenoidChannel(m_forwardChannel)) 00023 { 00024 snprintf(buf, 64, "Solenoid Channel %d", m_forwardChannel); 00025 wpi_setWPIErrorWithContext(ChannelIndexOutOfRange, buf); 00026 return; 00027 } 00028 if (!CheckSolenoidChannel(m_reverseChannel)) 00029 { 00030 snprintf(buf, 64, "Solenoid Channel %d", m_reverseChannel); 00031 wpi_setWPIErrorWithContext(ChannelIndexOutOfRange, buf); 00032 return; 00033 } 00034 Resource::CreateResourceObject(&m_allocated, tSolenoid::kNumDO7_0Elements * kSolenoidChannels); 00035 00036 snprintf(buf, 64, "Solenoid %d (Module %d)", m_forwardChannel, m_moduleNumber); 00037 if (m_allocated->Allocate((m_moduleNumber - 1) * kSolenoidChannels + m_forwardChannel - 1, buf) == ~0ul) 00038 { 00039 CloneError(m_allocated); 00040 return; 00041 } 00042 snprintf(buf, 64, "Solenoid %d (Module %d)", m_reverseChannel, m_moduleNumber); 00043 if (m_allocated->Allocate((m_moduleNumber - 1) * kSolenoidChannels + m_reverseChannel - 1, buf) == ~0ul) 00044 { 00045 CloneError(m_allocated); 00046 return; 00047 } 00048 m_forwardMask = 1 << (m_forwardChannel - 1); 00049 m_reverseMask = 1 << (m_reverseChannel - 1); 00050 } 00051 00058 DoubleSolenoid::DoubleSolenoid(UINT32 forwardChannel, UINT32 reverseChannel) 00059 : SolenoidBase (GetDefaultSolenoidModule()) 00060 , m_forwardChannel (forwardChannel) 00061 , m_reverseChannel (reverseChannel) 00062 { 00063 InitSolenoid(); 00064 } 00065 00073 DoubleSolenoid::DoubleSolenoid(UINT8 moduleNumber, UINT32 forwardChannel, UINT32 reverseChannel) 00074 : SolenoidBase (moduleNumber) 00075 , m_forwardChannel (forwardChannel) 00076 , m_reverseChannel (reverseChannel) 00077 { 00078 InitSolenoid(); 00079 } 00080 00084 DoubleSolenoid::~DoubleSolenoid() 00085 { 00086 if (CheckSolenoidModule(m_moduleNumber)) 00087 { 00088 m_allocated->Free((m_moduleNumber - 1) * kSolenoidChannels + m_forwardChannel - 1); 00089 m_allocated->Free((m_moduleNumber - 1) * kSolenoidChannels + m_reverseChannel - 1); 00090 } 00091 } 00092 00098 void DoubleSolenoid::Set(Value value) 00099 { 00100 if (StatusIsFatal()) return; 00101 UINT8 rawValue = 0x00; 00102 00103 switch(value) 00104 { 00105 case kOff: 00106 rawValue = 0x00; 00107 break; 00108 case kForward: 00109 rawValue = m_forwardMask; 00110 break; 00111 case kReverse: 00112 rawValue = m_reverseMask; 00113 break; 00114 } 00115 00116 SolenoidBase::Set(rawValue, m_forwardMask | m_reverseMask); 00117 } 00118 00124 DoubleSolenoid::Value DoubleSolenoid::Get() 00125 { 00126 if (StatusIsFatal()) return kOff; 00127 UINT8 value = GetAll(); 00128 00129 if (value & m_forwardMask) return kForward; 00130 if (value & m_reverseMask) return kReverse; 00131 return kOff; 00132 }
Generated on Thu Jan 12 2012 22:35:19 for WPILibC++ by
1.7.1