X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Fbbb_pin.c;h=7248c5abe97786ea139eaa9a2b44f0cebc005a77;hb=bea3040e0456bc002dfa77fbf49bc37b2ee609f1;hp=db18f6936b5bb45c5054b61760d99694c45c6d95;hpb=ab00d4e4fdd18f65ec9a73725b72d16f5bcc28b9;p=matches%2FMCTX3420.git diff --git a/server/bbb_pin.c b/server/bbb_pin.c index db18f69..7248c5a 100644 --- a/server/bbb_pin.c +++ b/server/bbb_pin.c @@ -10,7 +10,6 @@ #include #include #include -#include #include "options.h" /** @@ -109,6 +108,7 @@ bool GPIO_Export(int pin) /** * Unexport a GPIO pin and close its' file descriptors + * @param pin The GPIO number to be unexported */ void GPIO_Unexport(int pin) { @@ -272,7 +272,7 @@ bool ADC_Export(int pin) return true; } - sprintf(g_buffer, "%s/in_voltage%d_raw", g_options.adc_device_path, pin); + sprintf(g_buffer, "%s/in_voltage%d_raw", ADC_DEVICE_PATH, pin); g_adc[pin].fd_value = open(g_buffer, O_RDONLY); if (g_adc[pin].fd_value <0) { @@ -316,7 +316,7 @@ bool GPIO_Set(int pin, bool value) } GPIO_Pin *gpio = &g_gpio[g_pin_gpio_to_index[pin]]; - if (gpio->initialised) + if (!gpio->initialised) { AbortBool("GPIO %d is not initialised.", pin); } @@ -349,13 +349,21 @@ bool GPIO_Read(int pin, bool *result) } GPIO_Pin *gpio = &g_gpio[g_pin_gpio_to_index[pin]]; + if (!gpio->initialised) + { + AbortBool("GPIO %d is not initialised.", pin); + } if (pwrite(gpio->fd_direction, "in", 2, 0) != 2) - AbortBool("Couldn't set GPIO %d direction - %s", pin, strerror(errno)); + { + AbortBool("Couldn't set GPIO %d direction - %s", pin, strerror(errno)); + } char c = '0'; if (pread(gpio->fd_value, &c, 1, 0) != 1) + { AbortBool("Couldn't read GPIO %d value - %s", pin, strerror(errno)); + } *result = (c == '1'); return true; @@ -386,36 +394,36 @@ bool PWM_Set(int pin, bool polarity, long period, long duty) // Have to stop PWM before changing it if (pwrite(pwm->fd_run, "0", 1, 0) != 1) { - AbortBool("Couldn't stop PWM%d - %s", pin, strerror(errno)); + AbortBool("Couldn't stop PWM %d - %s", pin, strerror(errno)); } char c = polarity ? '1' : '0'; if (pwrite(pwm->fd_polarity, &c, 1, 0) != 1) { - AbortBool("Couldn't set PWM%d polarity - %s", pin, strerror(errno)); + AbortBool("Couldn't set PWM %d polarity - %s", pin, strerror(errno)); } //This must be done first, otherwise period/duty settings can conflict if (fwrite("0", 1, 1, pwm->file_duty) < 1) { - AbortBool("Couldn't zero the duty for PWM%d - %s", pin, strerror(errno)); + AbortBool("Couldn't zero the duty for PWM %d - %s", pin, strerror(errno)); } if (fprintf(pwm->file_period, "%lu", period) < 0) { - AbortBool("Couldn't set period for PWM%d - %s", pin, strerror(errno)); + AbortBool("Couldn't set period for PWM %d - %s", pin, strerror(errno)); } if (fprintf(pwm->file_duty, "%lu", duty) < 0) { - AbortBool("Couldn't set duty cycle for PWM%d - %s", pin, strerror(errno)); + AbortBool("Couldn't set duty cycle for PWM %d - %s", pin, strerror(errno)); } if (pwrite(pwm->fd_run, "1", 1, 0) != 1) { - AbortBool("Couldn't start PWM%d - %s", pin, strerror(errno)); + AbortBool("Couldn't start PWM %d - %s", pin, strerror(errno)); } return true; @@ -424,18 +432,25 @@ bool PWM_Set(int pin, bool polarity, long period, long duty) /** * Deactivate a PWM pin * @param pin - The syfs pin number + * @return true on success, false otherwise */ -void PWM_Stop(int pin) +bool PWM_Stop(int pin) { if (pin < 0 || pin >= PWM_NUM_PINS) { - Abort("Invalid PWM pin number %d specified.", pin); + AbortBool("Invalid PWM pin number %d specified.", pin); + } + else if (!g_pwm[pin].initialised) + { + AbortBool("PWM %d is not initialised.", pin); } if (pwrite(g_pwm[pin].fd_run, "0", 1, 0) != 1) { - Abort("Couldn't stop PWM %d - %s", pin, strerror(errno)); + AbortBool("Couldn't stop PWM %d - %s", pin, strerror(errno)); } + + return true; } /** @@ -461,6 +476,14 @@ bool ADC_Read(int id, int *value) { AbortBool("ADC %d read failed: %s", id, strerror(errno)); } + *value = strtol(adc_str, NULL, 10); return true; -} \ No newline at end of file +} + +#ifndef _BBB +//For running on systems that are not the BBB +bool True_Stub(void *arg, ...) { return true; } +bool ADC_Read_Stub(int *val, ...) { *val = 0; return true; } +bool GPIO_Read_Stub(bool *val, ...) { *val = false; return true; } +#endif