Ejemplo n.º 1
0
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;
	}
}
Ejemplo n.º 2
0
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();
}