ISSN 0236-235X (P)
ISSN 2311-2735 (E)
3

13 Сентября 2024

Энергосберегающий алгоритм работы мобильных устройств с беспроводными самоорганизующимися Wi-Fi-сетями (ad-hoc)


Окунев Б.В. (ok-bmv@rambler.ru) - Смоленский филиал Национального исследовательского университета МЭИ, г. Смоленск, Россия, кандидат технических наук
Ключевые слова: язык программирования java., беспровод-ные самоорганизующиеся сети (ad-hoc), ос android, беспроводные wi-fi-сети, мобильные устройства, энергосбережение
Keywords: java, wireless self-organizing network (ad-hoc), operation system android, wireless Wi-Fi network, mobile devices, the energy savings


     

Многофункциональные мобильные устройства на основе операционной системы (ОС) Android обретают все большую популярность. Абсолютное большинство этих устройств имеют функцию работы с беспроводными Wi-Fi-сетями. При этом энергопотребление подобных устройств в режиме работы с беспроводными Wi-Fi-сетями значительно увеличивается по сравнению с автономным. Энергопотребление любого мобильного устройства является его важнейшей характеристикой и зависит от множества различных факторов, таких как версия ОС, набор запущенных программ, режим работы и т.д.

В последние несколько лет беспроводные технологии прошли процесс стандартизации, значительно повысилась скорость передачи данных, а цена стала доступной. Беспроводные сети позволяют без труда подключить пользователей к Интернету (или корпоративным ресурсам) там, где необходима высочайшая мобильность.

При выборе способа построения сети в качестве основных преимуществ беспроводных решений можно выделить гибкость конфигурации, простоту расширения сети, мобильность, безопасность, большое разнообразие поддерживаемых устройств. Существуют типовые решения конфигурации беспроводных локальных сетей – ad-hос (самоорганизующаяся сеть) и Infrastructure (взаимодействие через точку доступа). Первая группа типовых решений собрана на основе режима работы «равный с равным». В режиме ad-hoc, который также называют Independent Basic Service Set, станции непосредственно взаимодействуют друг с другом. Для этого режима требуется минимум оборудования: каждая станция должна быть оснащена беспроводным адаптером. При такой конфигурации не требуется создание какой-либо сетевой инфраструктуры. Главный недостаток режима ad-hoc – ограниченный радиус действия возможной сети. Остальные решения создаются на основе более сложного режима работы Infrastruc­ture. В данном режиме станции взаимодействуют друг с другом через точку доступа (Access Point). Точки доступа соединяются между собой либо с помощью сегментов кабельной сети, либо радиомостами. При этом основным протоколом в организации данной сети является Dynamic Host Confi­guration Protocol (DHCP), а главным инструментом, реализующим этот протокол, – DHCP-сервер [1]. DHCP – протокол динамической конфигурации узла, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети Transmission Control Protocol/Internet Protocol (TCP/IP).

При использовании стандартных процедур мобильные устройства на основе ОС Android дают возможность организовать подключение к Wi-Fi-сети через точку доступа и неполнофункциональное подключение к ad-hoc-сети. При таком подключении мобильное устройство посылает запрос на получение ip-адреса от DHCP-сервера, который отсутствует в ad-hoc-сети. Поэтому разработчику при создании своего приложения приходится использовать узконаправленные системные функции и алгоритмы для подключения к такой сети.

Рассмотрим стандартные процедуры поиска доступных беспроводных Wi-Fi-сетей, подключения и работы с ними. Важной особенностью этих процедур является возможность единовременного подключения одного устройства только к одной сети (в случае наличия одного сетевого адаптера). В соответствии со стандартной процедурой работы с беспроводными сетями в устройствах на основе ОС Android пользователь, выбирая соответствующий пункт меню, проводит настройку беспроводных Wi-Fi-сетей. Устройство автоматически начинает поиск доступных сетей в радиусе действия. После выполнения поиска доступные сети выводятся в виде списка на экран. Если найдена предпочтительная или запомненная сеть, устройство автоматически подключается к ней. Запомненной Wi-Fi-сетью в устройствах на основе ОС Android является каждая сеть, подключение к которой уже осуществлялось с этого мобильного устройства. Предпочтительнее сеть с наилучшим сигналом из списка запомненных. Список доступных сетей обновляется через определенные интервалы времени, длительность которых зависит от версии ОС мобильного устройства и лежит в диапазоне от долей секунды до нескольких секунд. Таким образом, выполнение сканирования сети происходит циклично с заданным периодом времени. Если пользователь выбирает в списке доступных другую сеть, производится автоматическое подключение к этой сети.

Следует обратить внимание на то, что пользователю предоставляется возможность практически непрерывно наблюдать обновленный список доступных сетей. Цикличный бесконечный поиск этих сетей введен для быстрого переподключения пользователя от одной сети к другой, при этом то, что каждый поиск довольно энергозатратный, игнорируется. Необходимо заметить, что данная возможность не является часто востребованной, а комфортное для пользователя время переподключения в обычных режимах составляет несколько секунд. При этом, как отмечалось выше, нет возможности одновременного подключения к нескольким сетям.

На основании вышеизложенного, а также учитывая замечания в работах [2, 3], представляется рациональным с точки зрения энергосбережения и расширения функциональных возможностей использовать следующий обобщенный алгоритм поиска и подключения мобильного устройства к беспроводной Wi-Fi-сети. На начальном этапе производится поиск доступных беспроводных сетей в радиусе действия, далее пользователю предоставляется возможность выбора сети из сформированного списка. После подключения к выбранной сети циклический поиск других доступных сетей больше не производится до того момента, пока этого не пожелает пользователь.

В большинстве случаев разработка ПО для мобильных устройств на основе ОС Android осуществляется на языке Java, поэтому реализация вышеописанной процедуры представлена именно на этом языке [4].

На начальном этапе необходимо обратиться к классу WiFiManager через функцию getSystemSer­vice с параметрами WIFI_SERVICE. Данный класс позволяет получить подробную информацию об адаптере и подключениях к беспроводной Wi-Fi-сети.

На следующем этапе следует убедиться в том, что Wi-Fi-адаптер мобильного устройства включен. Сделать это можно с помощью метода isWifi­Enabled класса WiFiManager, который возвращает значение true при включенном адаптере. Если Wi-Fi-передатчик включен, можно приступить к сканированию беспроводных Wi-Fi-сетей в радиусе действия с помощью метода startScan класса WiFiManager. Результат сканирования сетей записывается в переменную класса ScanResult с помощью функции getScanResults. После этого следует вывести список доступных сетей в объект ListView, используя класс ArrayAdapter. Для объекта ListView нужно обработать процедуру выбора сети и произвести подключение с помощью метода enabledNetWork. При этом параметром подключения является идентификатор (id) поля WiFiConfiguration, поэтому предварительно нужно добавить сеть из класса ScanResult в WiFiConfigu­ration. Если подключаемая беспроводная сеть является ad-hoc-сетью, предлагается следующий вариант подключения. Из настроек приложения (Preferences) извлекаются пароль для подключения к сети, желаемый ip, основной шлюз и предпочитаемые DNS-серверы. Затем с помощью функции setIp­Assignment можно установить использование статических параметров подключения. Установка параметров происходит при помощи функций setIpAddress, setGateway, setDNS. После этого следует применить новые параметры сети и добавить в поле WiFiConfiguration.

Далее приведен фрагмент программы, реализующей вышеописанный алгоритм, на языке программирования Java:

public void onItemClick(AdapterView parent, View view,int position, long id)

   { MSR fff = (MSR) LV_WiFi.getItemAtPosi­tion(position);

   ScanResult ggg = fff.SR;

   String service = Context.WIFI_SERVICE;

   WifiManager wifi = (WifiManager) getSys­temService(service);

   List configurations = wifi .getConfiguredNetworks();

   final ContentResolver cr = getContentRe­solver();

   Pref = getSharedPreferences("MyFile", MODE_PRIVATE);

   String savedYourIP = Pref.getString(YOUR_ IP, "");

   String savedPASS = Pref.getString(PASS, "");

   WifiConfiguration dd = new WifiConfigura­tion();

    if (ggg.capabilities.length()==0)

      {dd.SSID = '\"' + ggg.SSID + '\"';

      dd.hiddenSSID = true;

      dd.BSSID = ggg.BSSID;

      dd.status = WifiConfiguration.Sta­tus.ENABLED;

      dd.allowedKeyManagement.set(WifiConfi­guration.KeyMgmt.NONE);

      try{ setIpAssignment("STATIC", dd); //or "DHCP" for dynamic setting

          setIpAddress(InetAddress.getByNa­me(savedYourIP), 24, dd);

          setGateway(InetAddress.getByNa­me("4.4.4.4"), dd);

         setDNS(InetAddress.getByNa­me("4.4.4.4"), dd);

          wifi.updateNetwork(dd); }

      catch(Exception e) { e.printStack­Trace();}

      int res = wifi.addNetwork(dd);

      boolean b = wifi.enableNetwork(res, true);}

   else {dd.SSID = '\"' + ggg.SSID + '\"';

      dd.preSharedKey = "\""+savedPASS+"\"";

      dd.hiddenSSID = true;

      dd.BSSID = ggg.BSSID;

      dd.status = WifiConfiguration.Sta­tus.ENABLED;

      dd.allowedGroupCiphers.set(WifiConfigu­ration.GroupCipher.TKIP); 

      dd.allowedGroupCiphers.set(WifiConfigu­ration.GroupCipher.CCMP); 

      dd.allowedKeyManagement.set(WifiConfi­guration.KeyMgmt.NONE);

      dd.allowedKeyManagement.set(WifiConfi­guration.KeyMgmt.IEEE8021X);

      dd.allowedKeyManagement.set(WifiConfi­guration.KeyMgmt.WPA_EAP);

      dd.allowedKeyManagement.set(WifiConfi­guration.KeyMgmt.WPA_PSK);

      dd.allowedPairwiseCiphers.set(WifiCon­figuration.PairwiseCipher.TKIP);

      dd.allowedPairwiseCiphers.set(WifiCon­figuration.PairwiseCipher.NONE);

      dd.allowedPairwiseCiphers.set(WifiCon­figuration.PairwiseCipher.CCMP);

      dd.allowedProtocols.set(WifiConfigu­ration.Protocol.RSN);

      dd.allowedProtocols.set(WifiConfigura­tion.Protocol.WPA);

      dd.allowedAuthAlgorithms.set(WifiConfi­guration.AuthAlgorithm.SHARED);

      dd.allowedAuthAlgorithms.set(WifiConfi­guration.AuthAlgorithm.LEAP);

      dd.allowedAuthAlgorithms.set(WifiConfi­guration.AuthAlgorithm.OPEN);

      int res = wifi.addNetwork(dd);

   boolean b=wifi.enableNetwork(res, true);}}

После подключения для получения более подробной информации о сети используют класс Wi­FiInfo. Используемыми в данном случае методами этого класса являются получение имени подключенной сети WiFiInfo.getSSID, MAC-адреса подключенной сети WiFiInfo.getBSID и значения уровня сигнала сети WiFiInfo.getSingnalLevel. Предложенная последовательность этапов не предполагает циклического непрерывного повторения, а выполняется по требованию пользователя, что позволяет сократить энергопотребление мобильного устройства. Внедряя данную процедуру в любое сетевое приложение для мобильных устройств на основе ОС Android, можно сократить их энергозатраты во время работы с беспроводными Wi-Fi-сетями, а также автоматизировать процесс поиска и настройки ad-hoc-сетей.

В ходе исследований были проведены  вычислительные эксперименты с целью оценки работоспособности и эффективности предложенного подхода. В качестве мобильного устройства использовались смартфоны (коммуникаторы) HTC Sensation и Samsung Galaxy S на платформе ОС Android (версии 2.2–4.1.1). Исследования показали, что при прочих равных условиях энергопотребление вышеназванных смартфонов при работе с Wi-Fi-сетью уменьшалось в среднем на 10 %.

Литература

1.    Некоторые особенности построения беспроводных сетей. URL: http://citforum.ru/hardware/mobile/wlan/index.shtml (дата обращения: 10.01.2013).

2.    Пучков А.Ю., Павлов Д.А. Варианты построения алгоритма поиска решения обратных задач с применением нейронных сетей // Программные продукты и системы. 2012. № 2 (98). С. 149–153.

3.    Dli M.I., Gimarov V.A., Kruglov V.V., Journ. of Computer and Systems Sciences International, 2004, Vol. 43, no. 3, pp. 414–418.

4.    Шилдт Г. Полный справочник по Java. Java SE™ 6 Edition. М.: Вильямc, 2007. 1040 с.

References

1.  Gurevich Yu., Petrishchev V.,  Ekspress-Elektronika  [Ex-press-Electronics], 2003, no. 12, Available at:  http://citforum.ru/hardware/mobile/wlan/index.shtml (accessed 10 Jan. 2013).

2.  Puchkov A.Yu., Pavlov D.A.,  Programmnye produkty i systemy  [Software and Systems], Tver,  2012,  no.  2(98), pp. 149–153.

3.  Dli M.I., Gimarov V.A., Kruglov V.V.,  Journ. of Comp. and Systems Sc. Intern., 2004, Vol. 43, no.  3, pp. 414–418.

4.  Shildt G.,  Java SE 6: The Complete Reference, 7th Ed., McGraw-Hill/Osborne Media, 2006, 1024 p.



http://swsys.ru/index.php?id=3493&lang=%E2%8C%A9%3Den&like=1&page=article


Perhaps, you might be interested in the following articles of similar topics: