aboutsummaryrefslogtreecommitdiffstats
path: root/src/fsm/main.c
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-01-02 20:57:40 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-01-02 20:57:40 +0100
commitb0dc8db95eaf530cb0fffd3912dd8e8201a17c52 (patch)
tree61d4bbc0d9f4d8889fa05e539261491421e81d6c /src/fsm/main.c
parente0c26be3a945ec5f201dd632710f493964a45904 (diff)
downloadglutte-o-matic-b0dc8db95eaf530cb0fffd3912dd8e8201a17c52.tar.gz
glutte-o-matic-b0dc8db95eaf530cb0fffd3912dd8e8201a17c52.tar.bz2
glutte-o-matic-b0dc8db95eaf530cb0fffd3912dd8e8201a17c52.zip
Change CW queue to contain text only, not on/off data
Diffstat (limited to 'src/fsm/main.c')
-rw-r--r--src/fsm/main.c81
1 files changed, 39 insertions, 42 deletions
diff --git a/src/fsm/main.c b/src/fsm/main.c
index 0dc2ffc..0bd00ef 100644
--- a/src/fsm/main.c
+++ b/src/fsm/main.c
@@ -136,7 +136,7 @@ static void launcher_task(void *pvParameters)
xTaskCreate(
gps_monit_task,
"TaskGPSMonit",
- 6*configMINIMAL_STACK_SIZE,
+ 4*configMINIMAL_STACK_SIZE,
(void*) NULL,
tskIDLE_PRIORITY + 2UL,
&task_handle);
@@ -163,22 +163,28 @@ static void launcher_task(void *pvParameters)
static void detect_button_press(void *pvParameters)
{
+ int pin_high_count = 0;
+ const int pin_high_thresh = 10;
while (1) {
- if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)>0) {
-
- while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) > 0) {
- vTaskDelay(100 / portTICK_RATE_MS); /* Button Debounce Delay */
+ if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_SET) {
+ if (pin_high_count < pin_high_thresh) {
+ pin_high_count++;
}
-
- tm_trigger = 1;
-
- while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) {
- vTaskDelay(100 / portTICK_RATE_MS); /* Button Debounce Delay */
+ }
+ else {
+ if (pin_high_count > 0) {
+ pin_high_count--;
}
+ }
+ vTaskDelay(10 / portTICK_RATE_MS); /* Debounce Delay */
+
+ if (pin_high_count == pin_high_thresh) {
+ tm_trigger = 1;
+ }
+ else if (pin_high_count == 0) {
tm_trigger = 0;
}
- taskYIELD();
}
}
@@ -216,15 +222,11 @@ static void audio_callback(void* context, int select_buffer)
}
-static char psk31_msg[256];
static struct gps_time_s gps_time;
static void gps_monit_task(void *pvParameters)
{
GPIO_SetBits(GPIOD, GPIOD_BOARD_LED_BLUE);
- int trigger_psk31 = 0;
- int last_trigger_psk31 = 0;
-
while (1) {
if (gps_locked()) {
@@ -236,33 +238,9 @@ static void gps_monit_task(void *pvParameters)
else {
GPIO_ResetBits(GPIOD, GPIOD_BOARD_LED_BLUE);
}
-
- if (gps_time.sec == 0 || gps_time.sec == 20 || gps_time.sec == 40) {
- trigger_psk31 = 1;
- }
- else {
- trigger_psk31 = 0;
- }
-
- }
-
- if (trigger_psk31 && !last_trigger_psk31) {
- snprintf(psk31_msg, 255, "Hello PSK31\nDate: %4d-%02d-%02d %02d:%02d:%02d\n73!",
- gps_time.year, gps_time.month, gps_time.day,
- gps_time.hour, gps_time.min, gps_time.sec);
-
- psk31_push_message(psk31_msg, 400);
}
- last_trigger_psk31 = trigger_psk31;
- if (psk31_busy()) {
- GPIO_SetBits(GPIOD, GPIOD_BOARD_LED_GREEN);
- }
- else {
- GPIO_ResetBits(GPIOD, GPIOD_BOARD_LED_GREEN);
- }
-
- taskYIELD();
+ vTaskDelay(100 / portTICK_RATE_MS);
}
}
@@ -270,6 +248,7 @@ static struct fsm_input_signals_t fsm_input;
static void exercise_fsm(void *pvParameters)
{
int cw_last_trigger = 0;
+ int psk31_last_trigger = 0;
int last_tm_trigger = 0;
fsm_input.humidity = 0;
@@ -278,11 +257,14 @@ static void exercise_fsm(void *pvParameters)
fsm_input.sstv_mode = 0;
fsm_input.wind_generator_ok = 1;
while (1) {
+ vTaskDelay(10 / portTICK_RATE_MS);
+
pio_set_fsm_signals(&fsm_input);
fsm_input.start_tm = (tm_trigger == 1 && last_tm_trigger == 0) ? 1 : 0;
last_tm_trigger = tm_trigger;
fsm_input.sq = fsm_input.carrier; // TODO clarify
+
fsm_input.cw_done = !cw_busy();
if (fsm_input.cw_done) {
@@ -292,6 +274,16 @@ static void exercise_fsm(void *pvParameters)
GPIO_SetBits(GPIOD, GPIOD_BOARD_LED_ORANGE);
}
+ fsm_input.psk_done = !psk31_busy();
+
+ if (fsm_input.psk_done) {
+ GPIO_SetBits(GPIOD, GPIOD_BOARD_LED_GREEN);
+ }
+ else {
+ GPIO_ResetBits(GPIOD, GPIOD_BOARD_LED_GREEN);
+ }
+
+
fsm_update_inputs(&fsm_input);
fsm_update();
@@ -304,10 +296,15 @@ static void exercise_fsm(void *pvParameters)
// Add message to CW generator only on rising edge of trigger
if (fsm_out.cw_trigger && !cw_last_trigger) {
- cw_push_message(fsm_out.cw_msg, fsm_out.cw_dit_duration, fsm_out.cw_frequency);
+ cw_push_message(fsm_out.msg, fsm_out.cw_dit_duration, fsm_out.msg_frequency);
}
-
cw_last_trigger = fsm_out.cw_trigger;
+
+ // Same for PSK31
+ if (fsm_out.psk_trigger && !psk31_last_trigger) {
+ psk31_push_message(fsm_out.msg, fsm_out.msg_frequency);
+ }
+ psk31_last_trigger = fsm_out.psk_trigger;
}
}