Created
January 2, 2020 19:56
-
-
Save nachocarballeda/f8ec2fc9594975fa441b710c73ff666c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IRQ serie modem | |
IRQ serie gps | |
IRQ serie nano. | |
IRQ rtc - cuenta minutos | |
void send_msg_gps(); | |
void send_msg_modem(); | |
void send_msg_nano(); | |
bool new_msg_gps_; | |
bool new_msg_modem_; | |
bool new_msg_nano_; | |
enum gps_state {TURNING_ON =0, CONFIGURING=1, FIXING=2}; | |
unsigned int minute_counter | |
main: | |
void one_minute_alarm() | |
{ | |
minute_counter++; | |
if (should_fix_gps(minute_counter)) | |
{ | |
if (gps_state == OFF) | |
gps_state = POWER_ON; | |
} | |
if (should_read_nano(minute_counter)) { | |
if (nano_state == OFF) | |
nano_state = POWER_ON; | |
} | |
if (should_send_message(minute_counter)) { | |
if (modem_state == NOT_SENDING) | |
modem_state = SEND_MESSAGE; | |
} | |
} | |
main() | |
{ | |
init_board() // | |
configure_one_minute_timer_callback(one_minute_alarm); | |
while(true) | |
{ | |
switch (gps_state) | |
{ | |
case POWER_ON: | |
power_gps_on() // GPIO operation. | |
gps_state = FIXING; | |
gps_timeout = minute_counter + 10; | |
break; | |
case FIXING: | |
if(new_msg_gps_ && gps_has_fix(gps_message_buffer_)) | |
{ | |
save_gps_location_in_event_buffer(gps_message_buffer_); | |
gps_state = POWER_OFF; | |
} | |
else (minute_counter > gps_timeout) { | |
gps_state = POWER_OFF; | |
} | |
break; | |
case POWER_OFF: | |
power_gps_off(); | |
gps_state = OFF; | |
break; | |
case OFF; | |
break; | |
} | |
switch (nano_state) | |
{ | |
case POWER_ON: | |
turn_nano_on(); // gpio operation | |
nano_state = TURNING_ON; | |
break; | |
case OFF: | |
break; | |
case POWER_OFF: | |
turn_nano_off(); // gpio operation | |
nano_state = OFF; | |
break; | |
case TURNING_ON: | |
if (new_msg_nano_ && nano_message_buffer_ == "ME PRENDI") { | |
send_msg_nano("configuracion"); | |
nano_state = CONFIGURING; | |
} | |
else { | |
send_msg_nano("reset"); | |
nano_state = TURNING_ON; | |
} | |
case CONFIGURING: | |
if (nano_message_buffer_ == "ME CONFIGURE") { | |
send_msg_nano("read tags"); | |
nano_state = READING; | |
} | |
else { | |
send_msg_nano("reset"); | |
nano_state = TURNING_ON; | |
} | |
} | |
case READING: | |
if (new_tag_read_from_nano(nano_message_buffer_)) { | |
add_tag_id_event_to_message(tag_id); | |
process_and_deduplicate_tag_ids(); | |
nano_state = POWER_OFF; | |
} | |
else { | |
send_msg_nano("reset"); | |
nano_state = TURNING_ON; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment