void process_packet(uint8_t len) { pkg_header_adjust_offset(); UART_PUTS("Received: "); print_bytearray(bufx, len); // check SenderID uint32_t senderID = pkg_header_get_senderid(); UART_PUTF("SenderID:%u;", senderID); if (senderID != 0) { UART_PUTS("\r\nERR: Illegal SenderID.\r\n"); return; } // check PacketCounter // TODO: Reject if packet counter lower than remembered!! uint32_t packcnt = pkg_header_get_packetcounter(); UART_PUTF("PacketCounter:%lu;", packcnt); if (0) // packcnt <= station_packetcounter ?? { UART_PUTF("\r\nERR: Received PacketCounter < %lu.\r\n", station_packetcounter); return; } // write received counter station_packetcounter = packcnt; e2p_dimmer_set_basestationpacketcounter(station_packetcounter); // check MessageType MessageTypeEnum messagetype = pkg_header_get_messagetype(); UART_PUTF("MessageType:%u;", messagetype); if ((messagetype != MESSAGETYPE_GET) && (messagetype != MESSAGETYPE_SET) && (messagetype != MESSAGETYPE_SETGET)) { UART_PUTS("\r\nERR: Unsupported MessageType.\r\n"); return; } // check device id uint8_t rcv_id = pkg_headerext_common_get_receiverid(); UART_PUTF("ReceiverID:%u;", rcv_id); if (rcv_id != device_id) { UART_PUTS("\r\nWRN: DeviceID does not match.\r\n"); return; } // check MessageGroup + MessageID uint32_t messagegroupid = pkg_headerext_common_get_messagegroupid(); uint32_t messageid = pkg_headerext_common_get_messageid(); UART_PUTF("MessageGroupID:%u;", messagegroupid); if (messagegroupid != MESSAGEGROUP_DIMMER) { UART_PUTS("\r\nERR: Unsupported MessageGroupID.\r\n"); return; } UART_PUTF("MessageID:%u;", messageid); switch (messageid) { case MESSAGEID_DIMMER_BRIGHTNESS: process_brightness(messagetype); break; case MESSAGEID_DIMMER_ANIMATION: process_animation(messagetype); break; default: UART_PUTS("\r\nERR: Unsupported MessageID.\r\n"); break; } }
void mode_selector::edit_options() { current_letter = 0; reset_high_score = false; init_letter_color(); buttons::enable_repeat(buttons::mask_fwd | buttons::mask_back, true); uint8_t menu_letter_count = 0; uint8_t brightness_demo_counter = 0; uint8_t current_mode = option_accelerometer; option_changed(static_cast<option>(current_mode)); while(!buttons::is_pressed(buttons::button_left)) { timer::wait_for_interrupt(); if(buttons::is_pressed(buttons::button_up)) { if(current_mode != max_option - 1) { menu_letter_count = 0; ++current_mode; output_menu_letter(current_mode + max_mode, true); option_changed(static_cast<option>(current_mode)); } } else if(buttons::is_pressed(buttons::button_down)) { if(current_mode != 0) { menu_letter_count = 0; --current_mode; output_menu_letter(current_mode + max_mode, true); option_changed(static_cast<option>(current_mode)); } } switch(current_mode) { case option::option_accelerometer: process_accelerometer(); break; case option::option_brightness: process_brightness(brightness_demo_counter); break; case option::option_reset_high_scores: process_reset_high_scores(); break; } if(++menu_letter_count == target_menu_letter_count) { menu_letter_count = 0; output_menu_letter(current_mode + max_mode, false); } redraw_if_needed(); } ws2812_matrix::clear(); ws2812_matrix::show(); buttons::enable_repeat(buttons::mask_fwd | buttons::mask_back, false); options::set_accelerometer_enabled(is_accelerometer_enabled); options::set_max_brightness(max_brightness); adxl345::enable_measurements(is_accelerometer_enabled); if(reset_high_score) options::reset_high_scores(); }