#include <unistd.h>
#include <vconf.h>
#include <vconf-keys.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include "log.h"
#include "wifi.h"
#include "wifi-eap.h"
#include "wifi-wps.h"
#include "wifi-bssid-scan.h"
+#include "wifi-netlink-scan.h"
#include "wifi-power.h"
#include "wifi-state.h"
#include "wifi-agent.h"
#include "ip-conflict-detect.h"
#include "wifi-config.h"
#include "wifi-tdls.h"
+#include "wifi-key-encryption.h"
#include "wifi-extension.h"
#define SPRD_CP2_FIRMWARE_PATH "/usr/bin/cp2-downloader"
+#define SPRD_CP2_FIRMWARE_STATE_PATH "/tmp/.wifi-firmware-loaded"
static int is_wifi_firmware_downloaded = FALSE;
static Wifi *wifi_object = NULL;
return;
}
+static void _update_wifi_firmware_state(void)
+{
+ int fd;
+ mode_t mode = S_IRGRP | S_IWUSR | S_IXGRP;
+
+ fd = creat(SPRD_CP2_FIRMWARE_STATE_PATH, mode);
+ if (fd >= 0)
+ close(fd);
+ else
+ DBG("Failed to create wifi firmware state file");
+
+ is_wifi_firmware_downloaded = TRUE;
+}
+
+static int _get_wifi_firmware_state(void)
+{
+ if (!is_wifi_firmware_downloaded
+ && access(SPRD_CP2_FIRMWARE_STATE_PATH, F_OK) != 0)
+ is_wifi_firmware_downloaded = FALSE;
+ else
+ is_wifi_firmware_downloaded = TRUE;
+ return is_wifi_firmware_downloaded;
+}
+
int wifi_firmware_download(void)
{
int rv = 0;
char *const args[] = { SPRD_CP2_FIRMWARE_PATH, NULL };
char *const envs[] = { NULL };
- if (!is_wifi_firmware_downloaded) {
+ if (!_get_wifi_firmware_state()) {
rv = netconfig_execute_file(path, args, envs);
if (rv < 0) {
DBG("wifi firmware download fails");
return -EIO;
}
- is_wifi_firmware_downloaded = TRUE;
+ _update_wifi_firmware_state();
DBG("wifi firmware download successes");
}
G_CALLBACK(handle_request_bssid_scan), NULL);
g_signal_connect(wifi_object, "handle-get-bssid-list",
G_CALLBACK(handle_get_bssid_list), NULL);
+ g_signal_connect(wifi_object, "handle-netlink-scan",
+ G_CALLBACK(handle_netlink_scan), NULL);
/* WPS Connect */
g_signal_connect(wifi_object, "handle-request-wps-connect",
g_signal_connect(wifi_object, "handle-tdls-cancel-channel-switch",
G_CALLBACK(handle_tdls_cancel_channel_switch), NULL);
+ /* Passphrase Encryption */
+ g_signal_connect(wifi_object, "handle-encrypt-passphrase",
+ G_CALLBACK(handle_encrypt_passphrase), NULL);
+ g_signal_connect(wifi_object, "handle-decrypt-passphrase",
+ G_CALLBACK(handle_decrypt_passphrase), NULL);
+
if (!g_dbus_interface_skeleton_export(interface_wifi, connection,
NETCONFIG_WIFI_PATH, NULL)) {
ERR("Export WIFI_PATH for wifi failed");