From 6df6c4e46181d2daf768d0d90cfd0495eb84405c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Sun, 21 May 2017 11:47:50 +0200 Subject: [PATCH] adjust definitions to prototype and add documentation --- main.c | 93 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/main.c b/main.c index 579fb5d..0ebde84 100644 --- a/main.c +++ b/main.c @@ -47,7 +47,7 @@ #define WATCHDOG_PERIOD 10000 /**< watchdog period in ms */ -/** @defgroup main_flags flag set in interrupts to be processed in main task +/** @defgroup main_flags flag set in interrupts to be processed in main loop * @{ */ volatile bool rtc_tick_flag = false; /**< flag set when RTC ticked */ @@ -60,7 +60,7 @@ volatile bool clap_flag = false; /**< flag set on clap */ #define SQUARE_WAVE_PIN 0 /**< pin connected to RTC DS1307 square wave output */ volatile uint8_t rtc_seconds = 0; /**< number of seconds passed incremented by the square wave */ -#define STANDBY_TIMEOUT 5 /**< number of seconds after last shake before going down */ +#define STANDBY_TIMEOUT 30 /**< number of seconds after last shake before going down */ volatile uint16_t standby_timer = 0; /**< number of seconds since last wake-up/activity */ #define FRAME_TIMER 2 /**< timer to count frame time */ @@ -87,36 +87,40 @@ struct number_t { uint16_t number; /**< number to display (0-9999, 0xffff=off) */ uint8_t up; /**< which of the 16 buttons is to increment the number */ uint8_t down; /**< which of the 16 buttons is to decrement the number */ + uint8_t display; /**< which display on the channel multiplexer */ }; -/** episode, scene, take, video 1, audio 1, video 2, audio 2 number (does not have to be in this order) */ +/** episode, scene, take, video 1, audio 1, video 2, audio 2 number (in this order) */ struct number_t numbers[] = { - {0, 2, 3}, - {0, 14, 15}, - {0, 10, 11}, - {0, 6, 7}, - {0, 1, 0}, - {0, 13, 12}, - {0, 5, 4}, + {0, 0, 4, 4}, // episode + {0, 8, 12, 5}, // scene + {0, 1, 5, 6}, // take + {0, 2, 6, 3}, // video 1 + {0, 10, 14, 2}, // audio 1 + {0, 3, 7, 1}, // video 2 + {0, 11, 15, 0}, // audio 2 }; +#define BUTTON_SECONDS_UP 9 /**< which of the 16 buttons is to increment the seconds */ +#define BUTTON_SECONDS_DOWN 13 /**< which of the 16 buttons is to decrement the seconds */ #define POWER_SWITCH_PORT B /**< port to switch power of all devices (including this micro-controller) */ #define POWER_SWITCH_PIN 8 /**< pin to switch power of all devices (including this micro-controller) */ #define POWER_BUTTON_PORT B /**< port to detect power switching activity (to keep alive) */ #define POWER_BUTTON_PIN 1 /**< pin to detect power switching activity (to keep alive) */ -#define BUTTONS_DRIVE_PORT A -#define BUTTONS_DRIVE_PIN0 0 -#define BUTTONS_DRIVE_PIN1 1 -#define BUTTONS_DRIVE_PIN2 2 -#define BUTTONS_DRIVE_PIN3 3 -#define BUTTONS_READ_PORT A -#define BUTTONS_READ_PIN0 4 -#define BUTTONS_READ_PIN1 5 -#define BUTTONS_READ_PIN2 6 -#define BUTTONS_READ_PIN3 15 +// buttons to adjust numbers and seconds (mutliplexed in a 4x4 matrix) +#define BUTTONS_DRIVE_PORT A /**< port used to drive the buttons rows */ +#define BUTTONS_DRIVE_PIN0 0 /**< pin used to drive buttons row 0 */ +#define BUTTONS_DRIVE_PIN1 1 /**< pin used to drive buttons row 1 */ +#define BUTTONS_DRIVE_PIN2 2 /**< pin used to drive buttons row 2 */ +#define BUTTONS_DRIVE_PIN3 3 /**< pin used to drive buttons row 3 */ +#define BUTTONS_READ_PORT A /**< port used to read the buttons columns */ +#define BUTTONS_READ_PIN0 4 /**< pin used to read buttons column 0 */ +#define BUTTONS_READ_PIN1 5 /**< pin used to read buttons column 1 */ +#define BUTTONS_READ_PIN2 6 /**< pin used to read buttons column 2 */ +#define BUTTONS_READ_PIN3 15 /**< pin used to read buttons column 3 */ -#define CLAP_BUTTON_PORT B -#define CLAP_BUTTON_PIN 14 +#define CLAP_BUTTON_PORT B /**< port for button to detect clap action */ +#define CLAP_BUTTON_PIN 14 /**< port for button to detect clap action */ /** Morse code variables, to buzz scene and take */ #define MORSE_DOT 1 /**< unit Morse code duration in frames */ @@ -288,11 +292,12 @@ static void mux_select(uint8_t output) } } +/** encode scene and take into Morse code (in morse) */ static void encode_morse(void) { // encode numbers (scene and take) in Morse code - uint16_t morse_numbers[] = {numbers[0].number, numbers[1].number}; - printf("scene: %u, take: %u\n", morse_numbers[0], morse_numbers[1]); + uint16_t morse_numbers[] = {numbers[1].number, numbers[2].number}; + printf("morsing scene: %u, take: %u\n", morse_numbers[0], morse_numbers[1]); for (uint8_t morse_number=0; morse_number0) { @@ -749,7 +754,7 @@ void main(void) } } // display numbers on TM1637 - mux_select(number); + mux_select(numbers[number].display); if (0xffff==numbers[number].number) { led_tm1637_off(); } else { @@ -761,14 +766,14 @@ void main(void) printf("could not set number on EEPROM\n"); } } - if ((buttons_diff&(1<<9) && buttons&(1<<9)) || (buttons_diff&(1<<8) && buttons&(1<<8))) { // buttons for time pressed + if ((buttons_diff&(1<=60) { @@ -783,7 +788,7 @@ void main(void) rtc_ds1307_time[2] -= 24; } } - } else if (buttons_diff&(1<<8) && buttons&(1<<8)) { // down pressed + } else if (buttons_diff&(1<0) { rtc_ds1307_time[0] -= 1; @@ -818,21 +823,25 @@ void main(void) // increment and save take if there has been a clap if (-2==morse_delay) { morse_delay = -1; // prevent incrementing multiple times - if (numbers[1].number!=0xffff) { - numbers[1].number = (numbers[1].number+1)%10000; - uint8_t bytes[2] = {numbers[1].number>>8, numbers[1].number}; - if (!rtc_ds1307_write_rom(1*LENGTH(bytes), bytes, LENGTH(bytes))) { - printf("could not set number on EEPROM\n"); + uint8_t bytes[LENGTH(numbers)*2] = {0}; // all numbers to write again in EEPROM + for (uint8_t number=0; number>8; // set number to save + bytes[2*number+1] = numbers[number].number; // set number to save + } + if (!rtc_ds1307_write_rom(0, bytes, LENGTH(bytes))) { // save numbers to EEPROM + printf("could not set numbers on EEPROM\n"); } - printf("incrementing to take %u\n", numbers[1].number); } - timer_disable_counter(TIM(BUZZER_TIMER)); // stop buzzing - led_max7219_off(0xff); // switch off MAX7219 displays for (uint8_t tm1637=0; tm1637<7; tm1637++) { // switch off TM1637 displays mux_select(tm1637); // selecting TM1637 display led_tm1637_off(); // switch off TM1637 display } + led_max7219_off(0xff); // switch off MAX7219 displays + timer_disable_counter(TIM(BUZZER_TIMER)); // stop buzzing gpio_clear(GPIO(POWER_SWITCH_PORT), GPIO(POWER_SWITCH_PIN)); // switch power of by disconnecting from battery SCB_SCR |= SCB_SCR_SLEEPDEEP; // enable deep sleep pwr_set_standby_mode(); // go to deep sleep @@ -846,7 +855,7 @@ void main(void) } else { rtc_seconds = rtc_ds1307_time[0]; // get actual number of seconds if (0==rtc_ds1307_time[1] && 0==rtc_ds1307_time[2]) { // new day arrived - led_max7219_number(20000000+rtc_ds1307_time[6]*10000+rtc_ds1307_time[5]*100+rtc_ds1307_time[4], 0x14, 1); // display date on 2nd display + led_max7219_number(20000000+rtc_ds1307_time[6]*10000+rtc_ds1307_time[5]*100+rtc_ds1307_time[4], 0x14, 0); // display date on 1st display } } }