bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data) { settings_t *settings = config_get_ptr(); switch (state) { case RARCH_WIFI_CTL_DESTROY: wifi_driver_active = false; wifi_driver_data_own = false; wifi_driver = NULL; wifi_data = NULL; break; case RARCH_WIFI_CTL_SET_OWN_DRIVER: wifi_driver_data_own = true; break; case RARCH_WIFI_CTL_UNSET_OWN_DRIVER: wifi_driver_data_own = false; break; case RARCH_WIFI_CTL_OWNS_DRIVER: return wifi_driver_data_own; case RARCH_WIFI_CTL_SET_ACTIVE: wifi_driver_active = true; break; case RARCH_WIFI_CTL_FIND_DRIVER: { int i; driver_ctx_info_t drv; drv.label = "wifi_driver"; drv.s = settings->wifi.driver; driver_ctl(RARCH_DRIVER_CTL_FIND_INDEX, &drv); i = drv.len; if (i >= 0) wifi_driver = (const wifi_driver_t*)wifi_driver_find_handle(i); else { unsigned d; RARCH_ERR("Couldn't find any wifi driver named \"%s\"\n", settings->wifi.driver); RARCH_LOG_OUTPUT("Available wifi drivers are:\n"); for (d = 0; wifi_driver_find_handle(d); d++) RARCH_LOG_OUTPUT("\t%s\n", wifi_driver_find_ident(d)); RARCH_WARN("Going to default to first wifi driver...\n"); wifi_driver = (const wifi_driver_t*)wifi_driver_find_handle(0); if (!wifi_driver) retroarch_fail(1, "find_wifi_driver()"); } } break; case RARCH_WIFI_CTL_UNSET_ACTIVE: wifi_driver_active = false; break; case RARCH_WIFI_CTL_IS_ACTIVE: return wifi_driver_active; case RARCH_WIFI_CTL_DEINIT: if (wifi_data && wifi_driver) { if (wifi_driver->free) wifi_driver->free(wifi_data); } wifi_data = NULL; break; case RARCH_WIFI_CTL_STOP: if ( wifi_driver && wifi_driver->stop && wifi_data) wifi_driver->stop(wifi_data); break; case RARCH_WIFI_CTL_START: if (wifi_driver && wifi_data && wifi_driver->start) { if (settings->wifi.allow) return wifi_driver->start(wifi_data); } return false; case RARCH_WIFI_CTL_SET_CB: { /*struct retro_wifi_callback *cb = (struct retro_wifi_callback*)data; wifi_cb = *cb;*/ } break; case RARCH_WIFI_CTL_INIT: /* Resource leaks will follow if wifi is initialized twice. */ if (wifi_data) return false; wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL); wifi_data = wifi_driver->init(); if (!wifi_data) { RARCH_ERR("Failed to initialize wifi driver. Will continue without wifi.\n"); wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_ACTIVE, NULL); } /*if (wifi_cb.initialized) wifi_cb.initialized();*/ break; default: break; } return false; }
/** * find_driver_nonempty: * @label : string of driver type to be found. * @i : index of driver. * @str : identifier name of the found driver * gets written to this string. * @len : size of @str. * * Find driver based on @label. * * Returns: NULL if no driver based on @label found, otherwise * pointer to driver. **/ static const void *find_driver_nonempty(const char *label, int i, char *s, size_t len) { const void *drv = NULL; if (string_is_equal(label, "camera_driver")) { drv = camera_driver_find_handle(i); if (drv) strlcpy(s, camera_driver_find_ident(i), len); } else if (string_is_equal(label, "location_driver")) { drv = location_driver_find_handle(i); if (drv) strlcpy(s, location_driver_find_ident(i), len); } #ifdef HAVE_MENU else if (string_is_equal(label, "menu_driver")) { drv = menu_driver_find_handle(i); if (drv) strlcpy(s, menu_driver_find_ident(i), len); } #endif else if (string_is_equal(label, "input_driver")) { drv = input_driver_find_handle(i); if (drv) strlcpy(s, input_driver_find_ident(i), len); } else if (string_is_equal(label, "input_joypad_driver")) { drv = joypad_driver_find_handle(i); if (drv) strlcpy(s, joypad_driver_find_ident(i), len); } else if (string_is_equal(label, "video_driver")) { drv = video_driver_find_handle(i); if (drv) strlcpy(s, video_driver_find_ident(i), len); } else if (string_is_equal(label, "audio_driver")) { drv = audio_driver_find_handle(i); if (drv) strlcpy(s, audio_driver_find_ident(i), len); } else if (string_is_equal(label, "record_driver")) { drv = record_driver_find_handle(i); if (drv) strlcpy(s, record_driver_find_ident(i), len); } else if (string_is_equal(label, "midi_driver")) { drv = midi_driver_find_handle(i); if (drv) strlcpy(s, midi_driver_find_ident(i), len); } else if (string_is_equal(label, "audio_resampler_driver")) { drv = audio_resampler_driver_find_handle(i); if (drv) strlcpy(s, audio_resampler_driver_find_ident(i), len); } else if (string_is_equal(label, "wifi_driver")) { drv = wifi_driver_find_handle(i); if (drv) strlcpy(s, wifi_driver_find_ident(i), len); } return drv; }