/** * Initialize PWMs given an module and channel. * * This method is private and is the common path for all the constructors for creating PWM * instances. Checks module and channel value ranges and allocates the appropriate channel. * The allocation is only done to help users ensure that they don't double assign channels. */ void PWM::InitPWM(UINT8 moduleNumber, UINT32 channel) { char buf[64]; Resource::CreateResourceObject(&allocated, tDIO::kNumSystems * kPwmChannels); if (!CheckPWMModule(moduleNumber)) { snprintf(buf, 64, "Digital Module %d", moduleNumber); wpi_setWPIErrorWithContext(ModuleIndexOutOfRange, buf); return; } if (!CheckPWMChannel(channel)) { snprintf(buf, 64, "PWM Channel %d", channel); wpi_setWPIErrorWithContext(ChannelIndexOutOfRange, buf); return; } snprintf(buf, 64, "PWM %d (Module: %d)", channel, moduleNumber); if (allocated->Allocate((moduleNumber - 1) * kPwmChannels + channel - 1, buf) == ~0ul) { CloneError(allocated); return; } m_channel = channel; m_module = DigitalModule::GetInstance(moduleNumber); m_module->SetPWM(m_channel, kPwmDisabled); m_eliminateDeadband = false; nUsageReporting::report(nUsageReporting::kResourceType_PWM, channel, moduleNumber - 1); }
/** * Initialize PWMs given an module and channel. * * This method is private and is the common path for all the constructors for creating PWM * instances. Checks module and channel value ranges and allocates the appropriate channel. * The allocation is only done to help users ensure that they don't double assign channels. */ void PWM::InitPWM(UINT32 slot, UINT32 channel) { Resource::CreateResourceObject(&allocated, tDIO::kNumSystems * kPwmChannels); CheckPWMModule(slot); CheckPWMChannel(channel); allocated->Allocate(DigitalModule::SlotToIndex(slot) * kPwmChannels + channel - 1); m_channel = channel; m_module = DigitalModule::GetInstance(slot); m_module->SetPWM(m_channel, kPwmDisabled); m_eliminateDeadband = false; }