static PT_THREAD(thread_uart(struct pt *pt)) { PT_BEGIN(pt); while(1) { PT_WAIT_UNTIL(pt, uart_flag); led_green_blink(10); /* 10 timer ticks = 100 ms */ /* does the local node expects an id * or do we have to broadcast it? */ if(timer_reached(TIMER_ID_INPUT, ID_INPUT_TIMEOUT_TICKS)) { send_id_reply(uart_data); } else { set_node_id(uart_data); } uart_flag = 0; } PT_END(pt); }
void frame_process() { if(!frame_check_sync()) return; Packet pkt = framebuf.packets[node_id]; if(!packet_check_checksum(&pkt)) { /*leds_set(255, 0, 0);*/ return; } switch(pkt.cmd_id) { case CMD_SYNC: return; case CMD_SET_ID: set_node_id(&pkt); break; case CMD_BOOTLOAD: bootload(&pkt); break; default: leds_set(pkt.r, pkt.g, pkt.b); sound_set(pkt.sound_id, pkt.sound_freq, pkt.sound_mag); } }