]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - rpp/src/rpp/lout.c
Make configuration of SPI devices target dependent
[pes-rpp/rpp-lib.git] / rpp / src / rpp / lout.c
index 507506844b3b63839866c11f2ef6ded4a1496201..798a2c607d1b265513eb6e0425ca4702efbfc25e 100644 (file)
 
 
 #include "rpp/rpp.h"
+#include "rpp/mutex.h"
+
+RPP_MUTEX_DEFINE(mutex_lout);
 
 #ifndef FREERTOS_POSIX
 #include "drv/lout.h"
-#include "drv/spi_tms570.h"
+#include "drv/spi_def.h"
 #endif
 
 static boolean_t initialized = FALSE;
@@ -31,9 +34,11 @@ int8_t rpp_lout_init()
 {
        if (initialized)
                return FAILURE;
+       if (!RPP_MUTEX_INIT(mutex_lout))
+               return FAILURE;
        initialized = TRUE;
 #ifndef FREERTOS_POSIX
-       spi_tms570_init();
+       spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs));
 #endif
 
        // FIXME: Implement.
@@ -49,10 +54,12 @@ int8_t rpp_lout_set(uint8_t pin, uint8_t val)
                return -1;
 
        uint8_t index = pin - 1;
+       RPP_MUTEX_LOCK(mutex_lout);
        if (val)
                bit_set(out_cache, index);
        else
                bit_clear(out_cache, index);
+       RPP_MUTEX_UNLOCK(mutex_lout);
        return SUCCESS;
 }
 
@@ -64,15 +71,20 @@ int8_t rpp_lout_diag(uint8_t pin)
        if ((pin < 1) || (pin > 8))
                return -1;
 
+       int8_t ret_val = LOW;
+
+       RPP_MUTEX_LOCK(mutex_lout);
        if (is_bit_set(diag_cache, pin - 1))
-               return HIGH;
-       return LOW;
+               ret_val = HIGH;
+       RPP_MUTEX_UNLOCK(mutex_lout);
+       return ret_val;
 }
 
 
 int8_t rpp_lout_update()
 {
 #ifndef FREERTOS_POSIX
+       RPP_MUTEX_LOCK(mutex_lout);
        // Update output values
        lout_set_word(out_cache);
        // FIXME: Check which SPI transfer statuses could be considered errors
@@ -82,9 +94,11 @@ int8_t rpp_lout_update()
        // FIXME: Implement. Dummy assign for now.
        diag_cache = out_cache;
 
-       if (diag_cache != out_cache)
+       if (diag_cache != out_cache) {
+               RPP_MUTEX_UNLOCK(mutex_lout);
                return FAILURE;
-
+       }
+       RPP_MUTEX_UNLOCK(mutex_lout);
 #endif
 
        return SUCCESS;