Esempio n. 1
0
EXPORT gboolean read_ve_const(void *data, XmlCmdType type)
{
	extern Firmware_Details *firmware;
	extern volatile gboolean offline;
	extern volatile gboolean outstanding_data;
	extern volatile gint last_page;
	OutputData *output = NULL;
	Command *command = NULL;
	gint i = 0;

	switch (type)
	{
		case MS1_VECONST:

			if (!offline)
			{
				g_list_foreach(get_list("get_data_buttons"),set_widget_sensitive,GINT_TO_POINTER(FALSE));
				if (outstanding_data)
					queue_burn_ecu_flash(last_page);
				for (i=0;i<firmware->total_pages;i++)
				{
					if (!firmware->page_params[i]->dl_by_default)
						continue;
					queue_ms1_page_change(i);
					output = initialize_outputdata();
					OBJ_SET(output->object,"page",GINT_TO_POINTER(i));
					OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[i]->phys_ecu_page));
					OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
					io_cmd(firmware->ve_command,output);
				}
			}
			command = (Command *)data;
			io_cmd(NULL,command->post_functions);
			break;
		case MS2_VECONST:
			if (!offline)
			{
				g_list_foreach(get_list("get_data_buttons"),set_widget_sensitive,GINT_TO_POINTER(FALSE));
				if ((firmware->capabilities & MS2_E) && (outstanding_data))
					queue_burn_ecu_flash(last_page);
				for (i=0;i<firmware->total_pages;i++)
				{
					if (!firmware->page_params[i]->dl_by_default)
						continue;
					output = initialize_outputdata();
					OBJ_SET(output->object,"page",GINT_TO_POINTER(i));
					OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[i]->phys_ecu_page));
					OBJ_SET(output->object,"canID",GINT_TO_POINTER(firmware->canID));
					OBJ_SET(output->object,"offset", GINT_TO_POINTER(0));
					OBJ_SET(output->object,"num_bytes", GINT_TO_POINTER(firmware->page_params[i]->length));
					OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
					io_cmd(firmware->ve_command,output);
				}
			}
			command = (Command *)data;
			io_cmd(NULL,command->post_functions);
			break;
		case MS2_E_COMPOSITEMON:
			if (!offline)
			{
				if ((firmware->capabilities & MS2_E) && (outstanding_data))
					queue_burn_ecu_flash(last_page);
				output = initialize_outputdata();
				OBJ_SET(output->object,"page",GINT_TO_POINTER(firmware->compositemon_page));
				OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->compositemon_page]->phys_ecu_page));
				OBJ_SET(output->object,"canID",GINT_TO_POINTER(firmware->canID));
				OBJ_SET(output->object,"offset", GINT_TO_POINTER(0));
				OBJ_SET(output->object,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->compositemon_page]->length));
				OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd(firmware->ve_command,output);
			}
			command = (Command *)data;
			io_cmd(NULL,command->post_functions);
			break;
		case MS2_E_TRIGMON:
			if (!offline)
			{
				if ((firmware->capabilities & MS2_E) && (outstanding_data))
					queue_burn_ecu_flash(last_page);
				output = initialize_outputdata();
				OBJ_SET(output->object,"page",GINT_TO_POINTER(firmware->trigmon_page));
				OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->phys_ecu_page));
				OBJ_SET(output->object,"canID",GINT_TO_POINTER(firmware->canID));
				OBJ_SET(output->object,"offset", GINT_TO_POINTER(0));
				OBJ_SET(output->object,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->length));
				OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd(firmware->ve_command,output);
			}
			command = (Command *)data;
			io_cmd(NULL,command->post_functions);
			break;
		case MS2_E_TOOTHMON:
			if (!offline)
			{
				if ((firmware->capabilities & MS2_E) && (outstanding_data))
					queue_burn_ecu_flash(last_page);
				output = initialize_outputdata();
				OBJ_SET(output->object,"page",GINT_TO_POINTER(firmware->toothmon_page));
				OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->phys_ecu_page));
				OBJ_SET(output->object,"canID",GINT_TO_POINTER(firmware->canID));
				OBJ_SET(output->object,"offset", GINT_TO_POINTER(0));
				OBJ_SET(output->object,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->length));
				OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd(firmware->ve_command,output);
			}
			command = (Command *)data;
			io_cmd(NULL,command->post_functions);
			break;
		case MS1_E_TRIGMON:
			if (!offline)
			{
				if (outstanding_data)
					queue_burn_ecu_flash(last_page);
				queue_ms1_page_change(firmware->trigmon_page);
				output = initialize_outputdata();
				OBJ_SET(output->object,"page",GINT_TO_POINTER(firmware->trigmon_page));
				OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->phys_ecu_page));
				OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd(firmware->ve_command,output);
				command = (Command *)data;
				io_cmd(NULL,command->post_functions);
			}
			break;
		case MS1_E_TOOTHMON:
			if (!offline)
			{
				if (outstanding_data)
					queue_burn_ecu_flash(last_page);
				queue_ms1_page_change(firmware->toothmon_page);
				output = initialize_outputdata();
				OBJ_SET(output->object,"page",GINT_TO_POINTER(firmware->toothmon_page));
				OBJ_SET(output->object,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->phys_ecu_page));
				OBJ_SET(output->object,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd(firmware->ve_command,output);
				command = (Command *)data;
				io_cmd(NULL,command->post_functions);
			}
			break;
		default:
			break;
	}
	return TRUE;
}
Esempio n. 2
0
/*!
  \brief function to do the actual read calls from the ECU
  \param data is a pointer to the Command structure
  \param func is an enumeration for the type of function
  \returns TRUE on success, FASE otherwise
  */
G_MODULE_EXPORT gboolean read_ve_const(void *data, FuncCall func)
{
	gint last_page;
	OutputData *output = NULL;
	Command *command = NULL;
	gint i = 0;
	Firmware_Details *firmware = NULL;

	ENTER();
	firmware = (Firmware_Details *)DATA_GET(global_data,"firmware");

	last_page = (GINT)DATA_GET(global_data,"last_page");
	switch (func)
	{
		case MS1_VECONST:

			if (!DATA_GET(global_data,"offline"))
			{
				g_list_foreach(get_list_f("get_data_buttons"),set_widget_sensitive_f,GINT_TO_POINTER(FALSE));

				for (i=0;i<firmware->total_pages;i++)
					if (firmware->page_params[i]->needs_burn)
						queue_burn_ecu_flash(i);
				for (i=0;i<firmware->total_pages;i++)
				{
					if (!firmware->page_params[i]->dl_by_default)
						continue;
					queue_ms1_page_change(i);
					output = initialize_outputdata_f();
					DATA_SET(output->data,"page",GINT_TO_POINTER(i));
					DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[i]->phys_ecu_page));
					DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
					io_cmd_f(firmware->read_command,output);
				}
			}
			command = (Command *)data;
			io_cmd_f(NULL,command->post_functions);
			break;
		case MS2_VECONST:
			if (!DATA_GET(global_data,"offline"))
			{
				g_list_foreach(get_list_f("get_data_buttons"),set_widget_sensitive_f,GINT_TO_POINTER(FALSE));
				for (i=0;i<firmware->total_pages;i++)
					if (firmware->page_params[i]->needs_burn)
						queue_burn_ecu_flash(i);
				for (i=0;i<firmware->total_pages;i++)
				{
					if (!firmware->page_params[i]->dl_by_default)
						continue;
					output = initialize_outputdata_f();
					DATA_SET(output->data,"page",GINT_TO_POINTER(i));
					DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[i]->phys_ecu_page));
					DATA_SET(output->data,"canID",GINT_TO_POINTER(firmware->canID));
					DATA_SET(output->data,"offset", GINT_TO_POINTER(0));
					DATA_SET(output->data,"num_bytes", GINT_TO_POINTER(firmware->page_params[i]->length));
					DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
					io_cmd_f(firmware->read_command,output);
				}
			}
			command = (Command *)data;
			io_cmd_f(NULL,command->post_functions);
			break;
		case MS2_E_COMPOSITEMON:
			if (!DATA_GET(global_data,"offline"))
			{
				if (firmware->capabilities & MS2_E)
				{
					for (i=0;i<firmware->total_pages;i++)
						if (firmware->page_params[i]->needs_burn)
							queue_burn_ecu_flash(i);
				}
				output = initialize_outputdata_f();
				DATA_SET(output->data,"page",GINT_TO_POINTER(firmware->compositemon_page));
				DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->compositemon_page]->phys_ecu_page));
				DATA_SET(output->data,"canID",GINT_TO_POINTER(firmware->canID));
				DATA_SET(output->data,"offset", GINT_TO_POINTER(0));
				DATA_SET(output->data,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->compositemon_page]->length));
				DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd_f(firmware->read_command,output);
			}
			command = (Command *)data;
			io_cmd_f(NULL,command->post_functions);
			break;
		case MS2_E_TRIGMON:
			if (!DATA_GET(global_data,"offline"))
			{
				if (firmware->capabilities & MS2_E)
				{
					for (i=0;i<firmware->total_pages;i++)
						if (firmware->page_params[i]->needs_burn)
							queue_burn_ecu_flash(i);
				}
				output = initialize_outputdata_f();
				DATA_SET(output->data,"page",GINT_TO_POINTER(firmware->trigmon_page));
				DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->phys_ecu_page));
				DATA_SET(output->data,"canID",GINT_TO_POINTER(firmware->canID));
				DATA_SET(output->data,"offset", GINT_TO_POINTER(0));
				DATA_SET(output->data,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->length));
				DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd_f(firmware->read_command,output);
			}
			command = (Command *)data;
			io_cmd_f(NULL,command->post_functions);
			break;
		case MS2_E_TOOTHMON:
			if (!DATA_GET(global_data,"offline"))
			{
				if (firmware->capabilities & MS2_E)
				{
					for (i=0;i<firmware->total_pages;i++)
						if (firmware->page_params[i]->needs_burn)
							queue_burn_ecu_flash(i);
				}
				output = initialize_outputdata_f();
				DATA_SET(output->data,"page",GINT_TO_POINTER(firmware->toothmon_page));
				DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->phys_ecu_page));
				DATA_SET(output->data,"canID",GINT_TO_POINTER(firmware->canID));
				DATA_SET(output->data,"offset", GINT_TO_POINTER(0));
				DATA_SET(output->data,"num_bytes", GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->length));
				DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd_f(firmware->read_command,output);
			}
			command = (Command *)data;
			io_cmd_f(NULL,command->post_functions);
			break;
		case MS1_E_TRIGMON:
			if (!DATA_GET(global_data,"offline"))
			{
				for (i=0;i<firmware->total_pages;i++)
					if (firmware->page_params[i]->needs_burn)
						queue_burn_ecu_flash(i);
				queue_ms1_page_change(firmware->trigmon_page);
				output = initialize_outputdata_f();
				DATA_SET(output->data,"page",GINT_TO_POINTER(firmware->trigmon_page));
				DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->trigmon_page]->phys_ecu_page));
				DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd_f(firmware->read_command,output);
				command = (Command *)data;
				io_cmd_f(NULL,command->post_functions);
			}
			break;
		case MS1_E_TOOTHMON:
			if (!DATA_GET(global_data,"offline"))
			{
				for (i=0;i<firmware->total_pages;i++)
					if (firmware->page_params[i]->needs_burn)
						queue_burn_ecu_flash(i);
				queue_ms1_page_change(firmware->toothmon_page);
				output = initialize_outputdata_f();
				DATA_SET(output->data,"page",GINT_TO_POINTER(firmware->toothmon_page));
				DATA_SET(output->data,"phys_ecu_page",GINT_TO_POINTER(firmware->page_params[firmware->toothmon_page]->phys_ecu_page));
				DATA_SET(output->data,"mode", GINT_TO_POINTER(MTX_CMD_WRITE));
				io_cmd_f(firmware->read_command,output);
				command = (Command *)data;
				io_cmd_f(NULL,command->post_functions);
			}
			break;
		default:
			break;
	}
	EXIT();
	return TRUE;
}