X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Fsensors%2Fstrain.c;h=64233e25666d4517c7a8c9071da6bef0d2a9fa9e;hb=6bc90047ed36b392d90a1bf778baf9687b835f2d;hp=3ee1624a867780452eaae8c0365e3c8c5d988503;hpb=c931502bda5042411d5757294e3a1ef8df638c44;p=matches%2FMCTX3420.git diff --git a/server/sensors/strain.c b/server/sensors/strain.c index 3ee1624..64233e2 100644 --- a/server/sensors/strain.c +++ b/server/sensors/strain.c @@ -6,6 +6,8 @@ #include #define STRAIN_ADC ADC0 +// TODO: Choose this +#define STRAIN_GPIO 45 /** * Convert Strain gauge id number to a GPIO pin on the Mux @@ -23,17 +25,17 @@ static int Strain_To_GPIO(StrainID id) switch (id) { case STRAIN0: - return GPIO0_30; + return 44; case STRAIN1: - return GPIO1_28; + return 26; case STRAIN2: - return GPIO0_31; + return 46; case STRAIN3: - return GPIO1_16; + return 65; default: Fatal("Unknown StrainID %d", id); return -1; // Should never happen - } + } } /** @@ -59,15 +61,36 @@ bool Strain_Init(const char * name, int id) if (!GPIO_Set(gpio_num, false)) Fatal("Couldn't set GPIO%d for strain sensor %d to LOW", gpio_num, id); - static bool init_adc = false; - if (!init_adc) + static int init = 0; + if (++init == 1) { - init_adc = true; + GPIO_Export(STRAIN_GPIO); + GPIO_Set(STRAIN_GPIO, true); ADC_Export(STRAIN_ADC); } return true; } +bool Strain_Cleanup(int id) +{ + static int killed = 0; + if (++killed == 4) + { + + GPIO_Set(STRAIN_GPIO, false); + ADC_Unexport(STRAIN_ADC); + } + + int gpio_num = Strain_To_GPIO(id); + GPIO_Unexport(gpio_num); + return true; +} + +bool Strain_Sanity(int id, double value) +{ + return true; +} + /** * Read from a Strain gauge * @param id - The strain gauge to read @@ -96,6 +119,9 @@ bool Strain_Read(int id, double * value) if (!GPIO_Set(gpio_num, false)) Fatal("Couldn't set GPIO%d for strain sensor %d to LOW (after reading)", gpio_num, id); + + usleep(200); + pthread_mutex_unlock(&mutex); return result;