aboutsummaryrefslogtreecommitdiffstats
path: root/src/glutt-o-logique
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-09-04 11:58:52 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-09-04 11:58:52 +0200
commit0957e3135cc8268939955b00333b79c6846f304e (patch)
treed71995ac1a5614cd7997b4ce73e2af715b5eba3c /src/glutt-o-logique
parentf8d80ab977fcec6952bf215e658b03409222b521 (diff)
downloadglutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.tar.gz
glutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.tar.bz2
glutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.zip
Fix D and U transmission
Diffstat (limited to 'src/glutt-o-logique')
-rw-r--r--src/glutt-o-logique/pio.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/glutt-o-logique/pio.c b/src/glutt-o-logique/pio.c
index b3b372a..b7420dc 100644
--- a/src/glutt-o-logique/pio.c
+++ b/src/glutt-o-logique/pio.c
@@ -77,8 +77,13 @@ struct fsm_input_signals_t pio_signals;
* variables are shift registers.
*/
static uint8_t debounce_sq[3] = {0};
-static uint8_t debounce_discrim_d[3] = {0};
-static uint8_t debounce_discrim_u[3] = {0};
+
+/* D and U have to stay on longer than SQ, otherwise the
+ * letter selection can fail, and transmit a K when it should
+ * send a D or U
+ */
+static uint8_t debounce_discrim_d[6] = {0};
+static uint8_t debounce_discrim_u[6] = {0};
void pio_init()
@@ -160,21 +165,24 @@ void read_fsm_input_task(void __attribute__ ((unused))*pvParameters)
* if one toggles to 1, set to 1; reset to 0 only if all
* are at 0
*/
- debounce_discrim_u[0] = debounce_discrim_u[1];
- debounce_discrim_u[1] = debounce_discrim_u[2];
- debounce_discrim_u[2] =
+ for (int i = 0; i < 5; i++) {
+ debounce_discrim_d[i] = debounce_discrim_d[i+1];
+ debounce_discrim_u[i] = debounce_discrim_u[i+1];
+ }
+
+ debounce_discrim_u[5] =
GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_U) ? 1 : 0;
pio_signals.discrim_u =
- debounce_discrim_u[0] | debounce_discrim_u[1] | debounce_discrim_u[2];
+ debounce_discrim_u[0] | debounce_discrim_u[1] | debounce_discrim_u[2] |
+ debounce_discrim_u[3] | debounce_discrim_u[4] | debounce_discrim_u[5];
- debounce_discrim_d[0] = debounce_discrim_d[1];
- debounce_discrim_d[1] = debounce_discrim_d[2];
- debounce_discrim_d[2] =
+ debounce_discrim_d[5] =
GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_D) ? 1 : 0;
pio_signals.discrim_d =
- debounce_discrim_d[0] | debounce_discrim_d[1] | debounce_discrim_d[2];
+ debounce_discrim_d[0] | debounce_discrim_d[1] | debounce_discrim_d[2] |
+ debounce_discrim_d[3] | debounce_discrim_d[4] | debounce_discrim_d[5];
pio_signals.wind_generator_ok =
GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_REPLIE) ? 0 : 1;