Skip to content

Instantly share code, notes, and snippets.

@nachocarballeda
Created January 2, 2020 19:56
Show Gist options
  • Save nachocarballeda/f8ec2fc9594975fa441b710c73ff666c to your computer and use it in GitHub Desktop.
Save nachocarballeda/f8ec2fc9594975fa441b710c73ff666c to your computer and use it in GitHub Desktop.
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