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:
Thomas Clark
2014-10-19 16:27:47 -04:00
parent 8a541a67ca
commit 023d20abc1

View File

@@ -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);
}
/**