Remove unused files and add week7 & week8 reports
[matches/MCTX3420.git] / server / bbb_pin.c
index f8ba011..4569578 100644 (file)
@@ -9,6 +9,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <ctype.h>
+#include "options.h"
 
 /**
  * Structure to represent a GPIO pin
@@ -26,7 +28,7 @@ typedef struct
  */
 typedef struct
 {
-       FILE * file_value;
+       int fd_value;
 } ADC_Pin;
 
 /**
@@ -59,7 +61,9 @@ static char g_buffer[BUFSIZ] = "";
 void GPIO_Export(int pin)
 {
        if (pin < 0 || pin > GPIO_NUM_PINS)
-               Fatal("Invalid pin number %d", pin);
+       {
+               Abort("Invalid pin number %d", pin);
+       }
 
        
 
@@ -67,7 +71,9 @@ void GPIO_Export(int pin)
        sprintf(g_buffer, "%s/export", GPIO_DEVICE_PATH);
        FILE * export = fopen(g_buffer, "w");
        if (export == NULL)
-               Fatal("Couldn't open %s to export GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s to export GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        fprintf(export, "%d", pin);     
        fclose(export);
@@ -76,14 +82,21 @@ void GPIO_Export(int pin)
        sprintf(g_buffer, "%s/gpio%d/direction", GPIO_DEVICE_PATH, pin);
        g_gpio[pin].fd_direction = open(g_buffer, O_RDWR);
        if (g_gpio[pin].fd_direction < 0)
-               Fatal("Couldn't open %s for GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
 
        // Setup value file descriptor
        sprintf(g_buffer, "%s/gpio%d/value", GPIO_DEVICE_PATH, pin);
        g_gpio[pin].fd_value = open(g_buffer, O_RDWR);
        if (g_gpio[pin].fd_value < 0)
-               Fatal("Couldn't open %s for GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       }
+
+       Log(LOGDEBUG, "Exported GPIO%d", pin);
+       //sleep(1);
 }
 
 /**
@@ -93,7 +106,9 @@ void GPIO_Unexport(int pin)
 {
 
        if (pin < 0 || pin > GPIO_NUM_PINS)
-               Fatal("Invalid pin number %d", pin);
+       {
+               Abort("Invalid pin number %d", pin);
+       }
 
        // Close file descriptors
        close(g_gpio[pin].fd_value);
@@ -105,7 +120,9 @@ void GPIO_Unexport(int pin)
                sprintf(g_buffer, "%s/unexport", GPIO_DEVICE_PATH);     
        FILE * export = fopen(g_buffer, "w");
        if (export == NULL)
-               Fatal("Couldn't open %s to export GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s to export GPIO pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        fprintf(export, "%d", pin);     
        fclose(export);
@@ -121,37 +138,49 @@ void GPIO_Unexport(int pin)
 void PWM_Export(int pin)
 {
        if (pin < 0 || pin > PWM_NUM_PINS)
-               Fatal("Invalid pin number %d", pin);
+       {
+               Abort("Invalid pin number %d", pin);
+       }
        
        // Export the pin
        sprintf(g_buffer, "%s/export", PWM_DEVICE_PATH);
        FILE * export = fopen(g_buffer, "w");
        if (export == NULL)
-               Fatal("Couldn't open %s to export PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s to export PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       }
        
-       fprintf(export, "%d", pin);
+       fprintf(export, "%d\n", pin);
        fclose(export);
 
        // Open file descriptors
        sprintf(g_buffer, "%s/pwm%d/run", PWM_DEVICE_PATH, pin);
        g_pwm[pin].fd_run = open(g_buffer, O_WRONLY);
        if (g_pwm[pin].fd_run < 0)
-               Fatal("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        sprintf(g_buffer, "%s/pwm%d/polarity",PWM_DEVICE_PATH, pin);
        g_pwm[pin].fd_polarity = open(g_buffer, O_WRONLY);
        if (g_pwm[pin].fd_polarity < 0)
-               Fatal("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        sprintf(g_buffer, "%s/pwm%d/period_ns",PWM_DEVICE_PATH, pin);
        g_pwm[pin].file_period = fopen(g_buffer, "w");
        if (g_pwm[pin].file_period == NULL)
-               Fatal("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        sprintf(g_buffer, "%s/pwm%d/duty_ns",PWM_DEVICE_PATH, pin);
        g_pwm[pin].file_duty = fopen(g_buffer, "w");
        if (g_pwm[pin].file_duty == NULL)
-               Fatal("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s for PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       }
 
        // Don't buffer the streams
        setbuf(g_pwm[pin].file_period, NULL);
@@ -167,7 +196,9 @@ void PWM_Export(int pin)
 void PWM_Unexport(int pin)
 {
        if (pin < 0 || pin > PWM_NUM_PINS)
-               Fatal("Invalid pin number %d", pin);
+       {
+               Abort("Invalid pin number %d", pin);
+       }
 
        // Close the file descriptors
        close(g_pwm[pin].fd_polarity);
@@ -179,7 +210,9 @@ void PWM_Unexport(int pin)
        sprintf(g_buffer, "%s/unexport", PWM_DEVICE_PATH);
        FILE * export = fopen(g_buffer, "w");
        if (export == NULL)
-               Fatal("Couldn't open %s to unexport PWM pin %d - %s", g_buffer, pin, strerror(errno));
+       {
+               Abort("Couldn't open %s to unexport PWM pin %d - %s", g_buffer, pin, strerror(errno));  
+       }
        
        fprintf(export, "%d", pin);
        fclose(export);
@@ -194,22 +227,16 @@ void PWM_Unexport(int pin)
  */
 void ADC_Export()
 {
-       
-       FILE * export = fopen(ADC_EXPORT_PATH, "w");
-       if (export == NULL)
-               Fatal("Couldn't open %s to export ADCs - %s", ADC_EXPORT_PATH, strerror(errno));
-
-       fprintf(export, "cape-bone-iio");
-       fclose(export);
-
        for (int i = 0; i < ADC_NUM_PINS; ++i)
        {
-               sprintf(g_buffer, "%s/AIN%d", ADC_DEVICE_PATH, i);
-               g_adc[i].file_value = fopen(g_buffer, "r");
-               if (g_adc[i].file_value == NULL)
-                       Fatal("Couldn't open ADC %d device file %s - %s", i, g_buffer, strerror(errno));
+               sprintf(g_buffer, "%s/AIN%d", g_options.adc_device_path, i);
+               g_adc[i].fd_value = open(g_buffer, O_RDONLY);
+               if (g_adc[i].fd_value < 0)
+               {
+                       Abort("Couldn't open ADC %d device file %s - %s", i, g_buffer, strerror(errno));
+               }
 
-               setbuf(g_adc[i].file_value, NULL);
+               //setbuf(g_adc[i].file_value, NULL);
 
        }
 }
@@ -220,7 +247,7 @@ void ADC_Export()
 void ADC_Unexport()
 {
        for (int i = 0; i < ADC_NUM_PINS; ++i)
-               fclose(g_adc[i].file_value);
+               close(g_adc[i].fd_value);
 }
 
 /**
@@ -229,12 +256,16 @@ void ADC_Unexport()
  */
 void GPIO_Set(int pin, bool value)
 {
-       if (pwrite(g_gpio[pin].fd_direction, "out", 3*sizeof(char), 0) != 3)
-               Fatal("Couldn't set GPIO %d direction - %s", pin, strerror(errno));
+       if (pwrite(g_gpio[pin].fd_direction, "out", 3, 0) != 3)
+       {
+               Abort("Couldn't set GPIO %d direction - %s", pin, strerror(errno));
+       }
 
        char c = '0' + (value);
-       if (pwrite(g_gpio[pin].fd_value, &c, 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't read GPIO %d value - %s", pin, strerror(errno));
+       if (pwrite(g_gpio[pin].fd_value, &c, 1, 0) != 1)
+       {
+               Abort("Couldn't read GPIO %d value - %s", pin, strerror(errno));
+       }
 
 }
 
@@ -244,11 +275,11 @@ void GPIO_Set(int pin, bool value)
  */
 bool GPIO_Read(int pin)
 {
-       if (pwrite(g_gpio[pin].fd_direction, "in", 2*sizeof(char), 0) != 2)
-               Fatal("Couldn't set GPIO %d direction - %s", pin, strerror(errno)); 
+       if (pwrite(g_gpio[pin].fd_direction, "in", 2, 0) != 2)
+               Log(LOGERR,"Couldn't set GPIO %d direction - %s", pin, strerror(errno)); 
        char c = '0';
-       if (pread(g_gpio[pin].fd_value, &c, 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't read GPIO %d value - %s", pin, strerror(errno));
+       if (pread(g_gpio[pin].fd_value, &c, 1, 0) != 1)
+               Log(LOGERR,"Couldn't read GPIO %d value - %s", pin, strerror(errno));
 
        return (c == '1');
 
@@ -264,25 +295,32 @@ bool GPIO_Read(int pin)
 void PWM_Set(int pin, bool polarity, long period, long duty)
 {
        // Have to stop PWM before changing it
-       if (pwrite(g_pwm[pin].fd_run, "0", 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't stop PWM %d - %s", pin, strerror(errno));
+       if (pwrite(g_pwm[pin].fd_run, "0", 1, 0) != 1)
+       {
+               Abort("Couldn't stop PWM %d - %s", pin, strerror(errno));
+       }
 
        char c = '0' + polarity;
-       if (pwrite(g_pwm[pin].fd_polarity, &c, 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't set PWM %d polarity - %s", pin, strerror(errno));
-
+       if (pwrite(g_pwm[pin].fd_polarity, &c, 1, 0) != 1)
+       {
+               Abort("Couldn't set PWM %d polarity - %s", pin, strerror(errno));
+       }
        
        rewind(g_pwm[pin].file_period); 
        rewind(g_pwm[pin].file_duty);
 
        if (fprintf(g_pwm[pin].file_duty, "%lu", duty) == 0)
-               Fatal("Couldn't set duty cycle for PWM %d - %s", pin, strerror(errno));
-
+       {
+               Abort("Couldn't set duty cycle for PWM %d - %s", pin, strerror(errno));
+       }
        if (fprintf(g_pwm[pin].file_period, "%lu", period) == 0)
-               Fatal("Couldn't set period for PWM %d - %s", pin, strerror(errno));
-       
-       if (pwrite(g_pwm[pin].fd_run, "1", 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't start PWM %d - %s", pin, strerror(errno));
+       {
+               Abort("Couldn't set period for PWM %d - %s", pin, strerror(errno));
+       }
+       if (pwrite(g_pwm[pin].fd_run, "1", 1, 0) != 1)
+       {
+               Abort("Couldn't start PWM %d - %s", pin, strerror(errno));
+       }
 
 }
 
@@ -292,9 +330,10 @@ void PWM_Set(int pin, bool polarity, long period, long duty)
  */
 void PWM_Stop(int pin)
 {
-       if (pwrite(g_pwm[pin].fd_run, "0", 1*sizeof(char), 0) != 1)
-               Fatal("Couldn't stop PWM %d - %s", pin, strerror(errno));
-
+       if (pwrite(g_pwm[pin].fd_run, "0", 1, 0) != 1)
+       {
+               Abort("Couldn't stop PWM %d - %s", pin, strerror(errno));
+       }
 }
 
 /**
@@ -302,25 +341,28 @@ void PWM_Stop(int pin)
  * @param id - The ID of the ADC pin to read
  * @returns - The reading of the ADC channel
  */
-long ADC_Read(int id)
+int ADC_Read(int id)
 {
-
-       //Log(LOGDEBUG, "Called for pin %d", id);
-       char adc_val[ADC_DIGITS] = "";
-       rewind(g_adc[id].file_value);
-       fgets(adc_val, sizeof(adc_val)/sizeof(char), g_adc[id].file_value);
-       for(int i = ADC_DIGITS-1; i > 0; --i)
+       char adc_str[ADC_DIGITS] = "";
+       lseek(g_adc[id].fd_value, 0, SEEK_SET);
+       
+       int i = 0;
+       for (i = 0; i < ADC_DIGITS-1; ++i)
        {
-               if (adc_val[i] == '\n')
-                       adc_val[i] = '\0';
+               if (read(g_adc[id].fd_value, adc_str+i, 1) != 1)
+                       break;
+               if (adc_str[i] == '\n')
+               {
+                       adc_str[i] = '\0';
+                       break;
+               }
        }
 
        char * end;
-       long val = strtol(adc_val, &end, 10);
+       int val = strtol(adc_str, &end, 10);
        if (*end != '\0')
        {
-               Log(LOGERR, "Reading ADC%d gives %s - invalid!", id, adc_val);
-       }
-       //Log(LOGDEBUG, "Returns %lu", val);
-       return val;
+               Log(LOGERR, "Read non integer from ADC %d - %s", id, adc_str);
+       }       
+       return val;     
 }

UCC git Repository :: git.ucc.asn.au