예제 #1
0
// Tokenizer::skip_line_comment: Skips a '//' comment
void Tokenizer::skip_line_comment()
{
	while (current[0] != '\n' && current[0] != 13)
	{
		if (!increment_current())
			return;
	}

	increment_current();
}
예제 #2
0
// Tokenizer::skip_multiline_comment: Skips a '/* ... */' comment
void Tokenizer::skip_multiline_comment()
{
	while (!(current[0] == '*' && current[1] == '/'))
	{
		if (!increment_current())
			return;
	}

	// Skip the ending '*/'
	increment_current();
	increment_current();
}
예제 #3
0
// Tokenizer::get_token: Gets the next 'token' from the text
// ------------------------------------------------------ >>
string Tokenizer::get_token()
{
	string ret_str = "";
	bool ready = false;

	// Increment pointer to next token
	while (!ready)
	{
		ready = true;

		// Increment pointer until non-whitespace is found
		while (is_whitespace(current[0]))
		{
			if (!increment_current())
			{
				ret_str = "!END";
				return ret_str;
			}
		}

		// Check if we have a line comment
		if (current[0] == '/' && current[1] == '/')
		{
			skip_line_comment();	// Skip it
			ready = false;
		}

		// Check if we have a multiline comment
		if (current[0] == '/' && current[1] == '*')
		{
			skip_multiline_comment();	// Skip it
			ready = false;
		}

		// Check for end of text
		if (position == size)
		{
			ret_str = "!END";
			return ret_str;
		}
	}

	// Check for literal string (enclosed with "")
	if (current[0] == '\"')
	{
		// Skip opening "
		increment_current();

		// Read literal string (include whitespace)
		while (current[0] != '\"')
		{
			ret_str += current[0];

			if (!increment_current())
				return ret_str;
		}

		// Skip closing "
		increment_current();
	}
	else
	{
		// Read token (don't include whitespace
		while (!is_whitespace(current[0]))
		{
			ret_str += current[0];

			if (!increment_current())
				return ret_str;
		}
	}

	return ret_str;
}
예제 #4
0
int main(void)
{
	uint32_t start_time;
	uint32_t end_time;
	uint16_t max_current;
	uint16_t max_voltage;
	uint8_t on_off = 0;
	const button_status_t* bstatus;
	
	// safety delay
	_delay_ms(200);
	
	load_fuses_from_eeprom(&max_current,&max_voltage);
		
	systime_init();
	sound_init();
	uart_init();
	ui_measure_init();
	buttons_init();
	lcd_init();
	sei();
	
	lcd_write("abcdefghijklmnop","ABCDEFGHIJKLMNOP");
	
	dbg_trace1("Project name: %s\r\n", FIRMWARE_NAME);
	dbg_trace1("Version: %s\r\n", FIRMWARE_VERSION);
	dbg_trace1("Last update date: %s\r\n", FIRMWARE_LAST_UPDATE_DATE);
	dbg_trace1("Last update time: %s\r\n", FIRMWARE_LAST_UPDATE_TIME);
	dbg_trace1("Author: %s\r\n\r\n", FIRMWARE_AUTHOR);
	
	dbg_trace1("Maximal current is: %u\r\n", max_current);
	dbg_trace1("Maximal voltage is: %u\r\n\r\n", max_voltage);
	
	sound_play_intro();
	
	start_time = systime_get_time();
	end_time = start_time + 100; 
	 
    while (1)
    {	
		if ((bstatus = buttons_routine(&bstatus)))
		{
		
		if (bstatus->butt1_redge)
		{
			increment_current(&max_current);
			sound_beep_high();
			store_fuses_to_eeprom(max_current,max_voltage);
			dbg_trace1("current fuse set to %u mA\n", max_current);
		}
		else if (bstatus->butt2_redge)
		{
			decrement_current(&max_current);
			sound_beep_low();
			store_fuses_to_eeprom(max_current,max_voltage);
			dbg_trace1("current fuse set to %u mA\n", max_current);
		}
		else if (bstatus->butt3_redge)
		{
			increment_voltage(&max_voltage);
			sound_beep_high();
			store_fuses_to_eeprom(max_current,max_voltage);
			dbg_trace1("voltage fuse set to %u mV\n", max_voltage);
		}
		else if (bstatus->butt4_redge)
		{
			decrement_voltage(&max_voltage);
			sound_beep_low();
			store_fuses_to_eeprom(max_current,max_voltage);
			dbg_trace1("voltage fuse set to %u mV\n", max_voltage);
		}
		else if (bstatus->butt5_redge)
		{
			if (on_off)
			{
				on_off = 0;
				dbg_trace0("power supply is off\n");
				sound_beep_low();
			}
			else                                  
			{
				on_off = 1;
				dbg_trace0("power supply is on\n");
				sound_beep_high();
			}
		}
		}
		
        
		if (systime_is_time_passed(start_time, end_time))
		{
			start_time = end_time;
			end_time = start_time + 100;
			
			uint16_t voltage = ui_measure_get_voltage();
			uint16_t current = ui_measure_get_current();			
			
			char c[32];
			char v[32];
			
			sprintf(v,"%u",voltage);
			sprintf(c,"%u",current);
			
			lcd_write(v,c);
			
			dbg_trace2("%u\t %u\n", current, voltage);
		}
		
		sound_routine();
		
		// watch dog reset a sleep
    }
}