]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - rpp/src/rpp/gio.c
Give the HAL functions better names
[pes-rpp/rpp-lib.git] / rpp / src / rpp / gio.c
index e35a793ccde33b7b61d0b8392b8b0d9d9745e1af..0c3b1d83c246427845c204573331565b08fd5354 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013-2014 Czech Technical University in Prague
+/* Copyright (C) 2013-2015 Czech Technical University in Prague
  * Authors:
  *     - Michal Horn <hornmich@fel.cvut.cz>
  *
 
 #include "rpp/gio.h"
 
-static boolean_t gioa_initialized = FALSE;
-static boolean_t giob_initialized = FALSE;
-static boolean_t nhet_initialized = FALSE;
+static uint32_t ports_initialized = 0;
 
-int8_t rpp_gio_init(uint32_t ports)
+/* Configuration consistency check */
+#if RPP_GIO_PORT_GIOA != (1 << PORT_ID_GIOA) || \
+       RPP_GIO_PORT_GIOB != (1 << PORT_ID_GIOB) || \
+       RPP_GIO_PORT_NHET1 != (1 << PORT_ID_HET1)
+#error Port configuration is not consistent.
+#endif
+
+int8_t rpp_gio_init(uint32_t init_ports)
 {
-       uint8_t pin = 0;
-
-       if (ports & RPP_GIO_PORT_GIOA && !gioa_initialized) {
-               gioREG->GCR0 = 1;   // Bring GIO out of reset
-               for (pin = PIN_MAP_GIOA_BEGIN; pin <= PIN_MAP_GIOA_END; pin++) {
-                       hal_gpio_pin_conf(pin_map[pin].pin_desc);
-               }
-               gioa_initialized = TRUE;
-       }
+       unsigned pin;
 
-       if (ports & RPP_GIO_PORT_GIOB && !giob_initialized) {
-               gioREG->GCR0 = 1;   // Bring GIO out of reset
-               for (pin = PIN_MAP_GIOB_BEGIN; pin <= PIN_MAP_GIOB_END; pin++) {
-                       hal_gpio_pin_conf(pin_map[pin].pin_desc);
-               }
-               giob_initialized = TRUE;
-       }
+       gioREG->GCR0 = 1;   // Bring GIO out of reset
+       pin_map_element_t* pin_map = hal_gpio_get_pin_map();
 
-       if (ports & RPP_GIO_PORT_NHET1 && !nhet_initialized) {
-               for (pin = PIN_MAP_HET1_BEGIN; pin <= PIN_MAP_HET1_END; pin++) {
-                       hal_gpio_pin_conf(pin_map[pin].pin_desc);
-               }
-               nhet_initialized = TRUE;
+
+       for (pin = 0; pin < hal_gpio_get_pin_cnt(); pin++) {
+               int port_num = hal_gpio_pin_get_port_num(pin_map[pin].pin_desc);
+               if ((init_ports & (1 << port_num)) &&
+                       !(ports_initialized & (1 << port_num)))
+                       hal_gpio_pin_configure(pin_map[pin].pin_desc);
        }
 
+       ports_initialized |= init_ports;
+
        return SUCCESS;
 }