mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-27 02:01:42 +00:00
Fix segfault in DIO PWM generators [artf3653]
The HAL PWM generator functions tried to interpret ID numbers as int pointers instead of ints, leading to segfaults whenever PWM generators were used. Change-Id: I51d50162a8fc04a04795e7ca20a23de26b9e848d
This commit is contained in:
@@ -256,7 +256,7 @@ void* allocatePWM(int32_t *status) {
|
||||
* @param pwmGenerator The pwmGen to free that was allocated with AllocateDO_PWM()
|
||||
*/
|
||||
void freePWM(void* pwmGenerator, int32_t *status) {
|
||||
uint32_t id = *((uint32_t*) pwmGenerator);
|
||||
uint32_t id = (uint32_t) pwmGenerator;
|
||||
if (id == ~0ul) return;
|
||||
DO_PWMGenerators->Free(id);
|
||||
}
|
||||
@@ -283,7 +283,7 @@ void setPWMRate(double rate, int32_t *status) {
|
||||
* @param dutyCycle The percent duty cycle to output [0..1].
|
||||
*/
|
||||
void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t *status) {
|
||||
uint32_t id = *((uint32_t*) pwmGenerator);
|
||||
uint32_t id = (uint32_t) pwmGenerator;
|
||||
if (id == ~0ul) return;
|
||||
if (dutyCycle > 1.0) dutyCycle = 1.0;
|
||||
if (dutyCycle < 0.0) dutyCycle = 0.0;
|
||||
@@ -308,28 +308,9 @@ void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t *status) {
|
||||
* @param channel The Digital Output channel to output on
|
||||
*/
|
||||
void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t *status) {
|
||||
uint32_t id = *((uint32_t*) pwmGenerator);
|
||||
if (id == ~0ul) return;
|
||||
switch(id) {
|
||||
case 0:
|
||||
digitalSystem->writePWMOutputSelect(0, pin, status);
|
||||
break;
|
||||
case 1:
|
||||
digitalSystem->writePWMOutputSelect(1, pin, status);
|
||||
break;
|
||||
case 2:
|
||||
digitalSystem->writePWMOutputSelect(2, pin, status);
|
||||
break;
|
||||
case 3:
|
||||
digitalSystem->writePWMOutputSelect(3, pin, status);
|
||||
break;
|
||||
case 4:
|
||||
digitalSystem->writePWMOutputSelect(4, pin, status);
|
||||
break;
|
||||
case 5:
|
||||
digitalSystem->writePWMOutputSelect(5, pin, status);
|
||||
break;
|
||||
}
|
||||
uint32_t id = (uint32_t) pwmGenerator;
|
||||
if (id > 5) return;
|
||||
digitalSystem->writePWMOutputSelect(id, pin, status);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user