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; }
/*! \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; }