Пример #1
0
irom void i2c_error_format_string(string_t *dst, i2c_error_t error)
{
	string_cat(dst, ": i2c bus error: ");

	if(error < i2c_error_size)
		string_cat_ptr(dst, error_strings[error]);
	else
		string_cat(dst, "<unknown error>");

	string_cat(dst, " (in bus state: ");

	if(state < i2c_state_size)
		string_cat_ptr(dst, state_strings[state]);
	else
		string_format(dst, "<unknown state %d>", state);

	string_cat(dst, ")");
}
Пример #2
0
irom void io_config_dump(string_t *dst, const config_t *cfg, int io_id, int pin_id, bool html)
{
	const io_info_entry_t *info;
	io_data_entry_t *data;
	io_data_pin_entry_t *pin_data;
	const io_config_pin_entry_t *pin_config;
	const string_array_t *strings;
	int io, pin, value;
	io_error_t error;

	if(html)
		strings = &dump_strings.html;
	else
		strings = &dump_strings.plain;

	string_cat_ptr(dst, (*strings)[ds_id_header]);

	for(io = 0; io < io_id_size; io++)
	{
		if((io_id >= 0) && (io_id != io))
			continue;

		info = &io_info[io];
		data = &io_data[io];

		string_cat_ptr(dst, (*strings)[ds_id_preline]);
		string_format_ptr(dst, (*strings)[ds_id_io], io, info->name, info->address);
		string_cat_ptr(dst, (*strings)[ds_id_postline]);

		if(!data->detected)
		{
			string_cat_ptr(dst, (*strings)[ds_id_preline]);
			string_cat_ptr(dst, (*strings)[ds_id_not_detected]);
			string_cat_ptr(dst, (*strings)[ds_id_postline]);
			continue;
		}

		for(pin = 0; pin < info->pins; pin++)
		{
			if((pin_id >= 0) && (pin_id != pin))
				continue;

			pin_config = &cfg->io_config[io][pin];
			pin_data = &data->pin[pin];

			string_cat_ptr(dst, (*strings)[ds_id_preline]);
			string_format_ptr(dst, (*strings)[ds_id_pin], pin);

			string_cat_ptr(dst, (*strings)[ds_id_flags_1]);
			pin_string_from_flags(dst, pin_config);
			string_cat_ptr(dst, (*strings)[ds_id_flags_2]);

			string_cat_ptr(dst, (*strings)[ds_id_mode]);

			if((pin_config->mode != io_pin_disabled) && (pin_config->mode != io_pin_i2c) && (pin_config->mode != io_pin_uart))
				if((error = io_read_pin_x(dst, info, pin_data, pin_config, pin, &value)) != io_ok)
					string_cat(dst, "\n");
				else
					(void)0;
			else
				error = io_ok;

			switch(pin_config->mode)
			{
				case(io_pin_disabled):
				{
					string_cat_ptr(dst, (*strings)[ds_id_disabled]);

					break;
				}

				case(io_pin_input_digital):
				{
					if(error == io_ok)
						string_format_ptr(dst, (*strings)[ds_id_input], onoff(value));
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_counter):
				{
					if(error == io_ok)
						string_format_ptr(dst, (*strings)[ds_id_counter], value, pin_config->speed);
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_trigger):
				{
					if(error == io_ok)
					{
						string_format_ptr(dst, (*strings)[ds_id_trigger_1], value, pin_config->speed,
								pin_config->shared.trigger.io.io,
								pin_config->shared.trigger.io.pin);

						trigger_type_to_string(pin_config->shared.trigger.trigger_mode, dst);

						string_cat_ptr(dst, (*strings)[ds_id_trigger_2]);
					}
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_output_digital):
				{
					if(error == io_ok)
						string_format_ptr(dst, (*strings)[ds_id_output], onoff(value));
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_timer):
				{
					if(error == io_ok)
						string_format_ptr(dst, (*strings)[ds_id_timer],
								pin_config->direction == io_dir_up ? "up" : (pin_config->direction == io_dir_down ? "down" : "none"),
								pin_config->speed,
								pin_data->direction == io_dir_up ? "up" : (pin_data->direction == io_dir_down ? "down" : "none"),
								pin_data->speed,
								onoff(value));
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_output_analog):
				{
					if(error == io_ok)
						string_format_ptr(dst, (*strings)[ds_id_analog_output],
								pin_config->shared.output_analog.lower_bound,
								pin_config->shared.output_analog.upper_bound,
								pin_config->speed,
								pin_data->direction == io_dir_up ? "up" : (pin_data->direction == io_dir_down ? "down" : "none"),
								value);
					else
						string_cat_ptr(dst, (*strings)[ds_id_error]);

					break;
				}

				case(io_pin_i2c):
				{
					if(pin_config->shared.i2c.pin_mode == io_i2c_sda)
						string_cat_ptr(dst, (*strings)[ds_id_i2c_sda]);
					else
						string_cat_ptr(dst, (*strings)[ds_id_i2c_scl]);

					break;
				}

				case(io_pin_uart):
				{
					string_cat_ptr(dst, (*strings)[ds_id_uart]);

					break;
				}

				case(io_pin_lcd):
				{
					string_cat_ptr(dst, (*strings)[ds_id_lcd]);
					string_cat(dst, "/");
					io_string_from_lcd_mode(dst, pin_config->shared.lcd.pin_use);

					break;
				}


				default:
				{
					string_cat_ptr(dst, (*strings)[ds_id_unknown]);

					break;
				}
			}

			string_cat(dst, " [hw: ");
			io_string_from_ll_mode(dst, pin_config->llmode);
			string_cat(dst, "]");

			if(info->get_pin_info_fn)
			{
				string_cat_ptr(dst, (*strings)[ds_id_info_1]);
				info->get_pin_info_fn(dst, info, pin_data, pin_config, pin);
				string_cat_ptr(dst, (*strings)[ds_id_info_2]);
			}

			string_cat_ptr(dst, (*strings)[ds_id_postline]);
		}
	}

	string_cat_ptr(dst, (*strings)[ds_id_footer]);
}