/*! \brief initializes the MegaSquirt plugin via locating and attaching to all needed functions within the core MegaTunix. It also registers any plugin specific enumerations, and registers/sets up any additional resources needed like threads, Queues, memory, etc \param data is a pointer to the global data container. */ G_MODULE_EXPORT void plugin_init(gconstpointer *data) { global_data = data; *(void **)(&error_msg_f) = (void **)DATA_GET(global_data,"error_msg_f"); g_assert(error_msg_f); *(void **)(&get_symbol_f) = (void **)DATA_GET(global_data,"get_symbol_f"); g_assert(get_symbol_f); get_symbol_f("dbg_func",(void **)&dbg_func_f); ENTER(); /* Initializes function pointers since on Winblows was can NOT call functions within the program that loaded this DLL, so we need to pass pointers over and assign them here. */ get_symbol_f("_get_sized_data",(void **)&_get_sized_data_f); get_symbol_f("_set_sized_data",(void **)&_set_sized_data_f); get_symbol_f("add_additional_rtt",(void **)&add_additional_rtt_f); get_symbol_f("alter_widget_state",(void **)&alter_widget_state_f); get_symbol_f("bind_to_lists",(void **)&bind_to_lists_f); get_symbol_f("c_to_k",(void **)&c_to_k_f); get_symbol_f("check_tab_existance",(void **)&check_tab_existance_f); get_symbol_f("cleanup",(void **)&cleanup_f); get_symbol_f("combo_set_labels",(void **)&combo_set_labels_f); get_symbol_f("combo_toggle_groups_linked",(void **)&combo_toggle_groups_linked_f); get_symbol_f("combo_toggle_labels_linked",(void **)&combo_toggle_labels_linked_f); get_symbol_f("convert_after_upload",(void **)&convert_after_upload_f); get_symbol_f("convert_before_download",(void **)&convert_before_download_f); get_symbol_f("create_rtv_value_change_watch",(void **)&create_rtv_value_change_watch_f); get_symbol_f("direct_lookup_data",(void **)&direct_lookup_data_f); get_symbol_f("direct_reverse_lookup",(void **)&direct_reverse_lookup_f); get_symbol_f("entry_changed_handler",(void **)&entry_changed_handler_f); get_symbol_f("evaluator_create_w",(void **)&evaluator_create_f); get_symbol_f("evaluator_destroy_w",(void **)&evaluator_destroy_f); get_symbol_f("evaluator_evaluate_x_w",(void **)&evaluator_evaluate_x_f); get_symbol_f("f_to_k",(void **)&f_to_k_f); get_symbol_f("flush_serial",(void **)&flush_serial_f); get_symbol_f("focus_out_handler",(void **)&focus_out_handler_f); get_symbol_f("get_bitshift",(void **)&get_bitshift_f); get_symbol_f("get_choice_count",(void **)&get_choice_count_f); get_symbol_f("get_colors_from_hue",(void **)&get_colors_from_hue_f); get_symbol_f("get_extreme_from_size",(void **)&get_extreme_from_size_f); get_symbol_f("get_file_api",(void **)&get_file_api_f); get_symbol_f("get_list",(void **)&get_list_f); get_symbol_f("get_multiplier",(void **)&get_multiplier_f); get_symbol_f("get_table",(void **)&get_table_f); get_symbol_f("io_cmd",(void **)&io_cmd_f); get_symbol_f("initialize_outputdata",(void **)&initialize_outputdata_f); get_symbol_f("jump_to_tab",(void **)&jump_to_tab_f); get_symbol_f("key_event",(void **)&key_event_f); get_symbol_f("lookup_current_value",(void **)&lookup_current_value_f); get_symbol_f("lookup_data",(void **)&lookup_data_f); get_symbol_f("lookup_precision",(void **)&lookup_precision_f); get_symbol_f("lookup_widget",(void **)&lookup_widget_f); get_symbol_f("mem_alloc",(void **)&mem_alloc_f); get_symbol_f("parse_keys",(void **)&parse_keys_f); get_symbol_f("process_rt_vars",(void **)&process_rt_vars_f); get_symbol_f("queue_function",(void **)&queue_function_f); get_symbol_f("read_data",(void **)&read_data_f); get_symbol_f("read_wrapper",(void **)&read_wrapper_f); get_symbol_f("recalc_table_limits",(void **)&recalc_table_limits_f); get_symbol_f("register_widget",(void **)®ister_widget_f); get_symbol_f("remove_rtv_watch",(void **)&remove_rtv_watch_f); get_symbol_f("remove_from_lists",(void **)&remove_from_lists_f); get_symbol_f("reverse_lookup",(void **)&reverse_lookup_f); get_symbol_f("search_model",(void **)&search_model_f); get_symbol_f("set_file_api",(void **)&set_file_api_f); get_symbol_f("table_color_refresh_wrapper",(void **)&table_color_refresh_wrapper_f); get_symbol_f("thread_set_group_color",(void **)&thread_set_group_color_f); get_symbol_f("set_reqfuel_color",(void **)&set_reqfuel_color_f); get_symbol_f("set_title",(void **)&set_title_f); get_symbol_f("set_widget_labels",(void **)&set_widget_labels_f); get_symbol_f("set_widget_sensitive",(void **)&set_widget_sensitive_f); get_symbol_f("spin_button_handler",(void **)&spin_button_handler_f); get_symbol_f("start_restore_monitor",(void **)&start_restore_monitor_f); get_symbol_f("start_tickler",(void **)&start_tickler_f); get_symbol_f("std_entry_handler",(void **)&std_entry_handler_f); get_symbol_f("stop_tickler",(void **)&stop_tickler_f); get_symbol_f("swap_labels",(void **)&swap_labels_f); get_symbol_f("temp_to_ecu",(void **)&temp_to_ecu_f); get_symbol_f("temp_to_host",(void **)&temp_to_host_f); get_symbol_f("thread_refresh_widget",(void **)&thread_refresh_widget_f); get_symbol_f("thread_refresh_widget_range",(void **)&thread_refresh_widget_range_f); get_symbol_f("thread_refresh_widgets_at_offset",(void **)&thread_refresh_widgets_at_offset_f); get_symbol_f("thread_update_logbar",(void **)&thread_update_logbar_f); get_symbol_f("thread_update_widget",(void **)&thread_update_widget_f); get_symbol_f("thread_widget_set_sensitive",(void **)&thread_widget_set_sensitive_f); get_symbol_f("translate_string",(void **)&translate_string_f); get_symbol_f("update_current_notebook_page",(void **)&update_current_notebook_page_f); get_symbol_f("update_entry_color",(void **)&update_entry_color_f); get_symbol_f("update_logbar",(void **)&update_logbar_f); get_symbol_f("update_ve3d_if_necessary",(void **)&update_ve3d_if_necessary_f); get_symbol_f("warn_user",(void **)&warn_user_f); get_symbol_f("write_wrapper",(void **)&write_wrapper_f); register_common_enums(); EXIT(); return; }
G_MODULE_EXPORT void plugin_init(gconstpointer *data) { GAsyncQueue *queue = NULL; GCond *cond = NULL; GThread *thread = NULL; GMutex *mutex = NULL; GHashTable *hash = NULL; global_data = data; /* Initializes function pointers since on Winblows was can NOT call functions within the program that loaded this DLL, so we need to pass pointers over and assign them here. */ error_msg_f = (void *)DATA_GET(global_data,"error_msg_f"); g_assert(error_msg_f); get_symbol_f = (void *)DATA_GET(global_data,"get_symbol_f"); g_assert(get_symbol_f); get_symbol_f("_get_sized_data",(void *)&_get_sized_data_f); get_symbol_f("_set_sized_data",(void *)&_set_sized_data_f); get_symbol_f("check_tab_existance",(void *)&check_tab_existance_f); get_symbol_f("cleanup",(void *)&cleanup_f); get_symbol_f("combo_set_labels",(void *)&combo_set_labels_f); get_symbol_f("combo_toggle_groups_linked",(void *)&combo_toggle_groups_linked_f); get_symbol_f("combo_toggle_labels_linked",(void *)&combo_toggle_labels_linked_f); get_symbol_f("convert_after_upload",(void *)&convert_after_upload_f); get_symbol_f("convert_before_download",(void *)&convert_before_download_f); get_symbol_f("dbg_func",(void *)&dbg_func_f); get_symbol_f("dump_output",(void *)&dump_output_f); get_symbol_f("evaluator_create",(void *)&evaluator_create_f); get_symbol_f("evaluator_destroy",(void *)&evaluator_destroy_f); get_symbol_f("evaluator_evaluate_x",(void *)&evaluator_evaluate_x_f); get_symbol_f("flush_binary_logs",(void *)&flush_binary_logs_f); get_symbol_f("flush_serial",(void *)&flush_serial_f); get_symbol_f("get_colors_from_hue",(void *)&get_colors_from_hue_f); get_symbol_f("get_file_api",(void *)&get_file_api_f); get_symbol_f("get_list",(void *)&get_list_f); get_symbol_f("get_multiplier",(void *)&get_multiplier_f); get_symbol_f("lookup_current_value",(void *)&lookup_current_value_f); get_symbol_f("lookup_widget",(void *)&lookup_widget_f); get_symbol_f("io_cmd",(void *)&io_cmd_f); get_symbol_f("initialize_outputdata",(void *)&initialize_outputdata_f); get_symbol_f("jump_to_tab",(void *)&jump_to_tab_f); get_symbol_f("log_inbound_data",(void *)&log_inbound_data_f); get_symbol_f("log_outbound_data",(void *)&log_outbound_data_f); get_symbol_f("mem_alloc",(void *)&mem_alloc_f); get_symbol_f("parse_keys",(void *)&parse_keys_f); get_symbol_f("queue_function",(void *)&queue_function_f); get_symbol_f("process_rt_vars",(void *)&process_rt_vars_f); get_symbol_f("read_data",(void *)&read_data_f); get_symbol_f("read_wrapper",(void *)&read_wrapper_f); get_symbol_f("recalc_table_limits",(void *)&recalc_table_limits_f); get_symbol_f("set_file_api",(void *)&set_file_api_f); get_symbol_f("set_group_color",(void *)&set_group_color_f); get_symbol_f("set_widget_labels",(void *)&set_widget_labels_f); get_symbol_f("set_widget_sensitive",(void *)&set_widget_sensitive_f); get_symbol_f("set_title",(void *)&set_title_f); get_symbol_f("swap_labels",(void *)&swap_labels_f); get_symbol_f("temp_to_ecu",(void *)&temp_to_ecu_f); get_symbol_f("temp_to_host",(void *)&temp_to_host_f); get_symbol_f("toggle_groups_linked",(void *)&toggle_groups_linked_f); get_symbol_f("thread_refresh_widget_range",(void *)&thread_refresh_widget_range_f); get_symbol_f("thread_refresh_widgets_at_offset",(void *)&thread_refresh_widgets_at_offset_f); get_symbol_f("thread_update_logbar",(void *)&thread_update_logbar_f); get_symbol_f("thread_update_widget",(void *)&thread_update_widget_f); get_symbol_f("thread_widget_set_sensitive",(void *)&thread_widget_set_sensitive_f); get_symbol_f("translate_string",(void *)&translate_string_f); get_symbol_f("update_logbar",(void *)&update_logbar_f); get_symbol_f("warn_user",(void *)&warn_user_f); get_symbol_f("write_wrapper",(void *)&write_wrapper_f); register_common_enums(); /* Packet handling queue */ cond = g_cond_new(); DATA_SET(global_data,"serial_reader_cond",cond); cond = g_cond_new(); DATA_SET(global_data,"packet_handler_cond",cond); /* Packet subscribers */ hash = g_hash_table_new(g_direct_hash,g_direct_equal); DATA_SET(global_data,"sequence_num_queue_hash",hash); hash = g_hash_table_new(g_direct_hash,g_direct_equal); DATA_SET(global_data,"payload_id_queue_hash",hash); mutex = g_mutex_new(); DATA_SET(global_data,"queue_mutex",mutex); queue = g_async_queue_new(); DATA_SET(global_data,"packet_queue",queue); queue = g_async_queue_new(); register_packet_queue(PAYLOAD_ID,queue,RESPONSE_UPDATE_BLOCK_IN_RAM); DATA_SET(global_data,"RAM_write_queue",queue); queue = g_async_queue_new(); register_packet_queue(PAYLOAD_ID,queue,RESPONSE_REPLACE_BLOCK_IN_FLASH); DATA_SET(global_data,"FLASH_write_queue",queue); queue = g_async_queue_new(); register_packet_queue(PAYLOAD_ID,queue,RESPONSE_BURN_BLOCK_FROM_RAM_TO_FLASH); DATA_SET(global_data,"burn_queue",queue); thread = g_thread_create(packet_handler,NULL,TRUE,NULL); DATA_SET(global_data,"packet_handler_thread",thread); return; }