На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

2
Ожидается:
16 Июня 2024

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

Power saving algorithm for mobile devices with a wireless self-organizing android Wi-Fi networks (ad-hoc)
Статья опубликована в выпуске журнала № 2 за 2013 год. [ на стр. 198-201 ]
Аннотация:Рассмотрен энергосберегающий алгоритм работы мобильных устройств c беспроводными самоорганизующими-ся Wi-Fi-сетями (Ad-hoc). Он предназначен для использования в мобильных устройствах, работающих на основе операционной системы Android. Предлагаемый алгоритм позволяет оптимизировать процесс взаимодействия подоб-ных устройств с беспроводными сетями с позиции как энергосбережения, так и возможностей автоматизации выше-упомянутого процесса. Все это достигается за счет усовершенствования процессов поиска и подключения к беспро-водным сетям, а также более рационального использования недокументированных возможностей смартфонов и планшетных компьютеров на основе Android по взаимодействию с ad-hoc-сетями. Необходимо заметить, что при на-личии уже имеющегося подключения к беспроводной Wi-Fi-сети с позиций энергосбережения мобильного устройст-ва представляется нерациональным непрерывное циклическое сканирование других доступных сетей. Это продик-товано изначальными возможностями Android, предполагающими единовременное подключение только к одной сети. Процесс подключения к ad-hoc-сети осуществляется с помощью задания набора статических параметров (ip-адрес, маска сети, основной шлюз и т.д.), формируемых с помощью предлагаемого алгоритма, оформленного в виде программного модуля. В работе рассмотрена одна из возможных реализаций вышеназванного алгоритма на языке программирования Java. Тестирование данного алгоритма проводилось на смартфонах (коммуникаторах) HTC Sensation и Samsung Galaxy S на платформе Android (версии 2.2–4.1.1). Программный модуль, разработанный на ос-нове предлагаемого алгоритма, может найти применение у разработчиков сетевого ПО для решения достаточно ши-рокого круга задач, связанных с взаимодействием мобильных устройств и беспроводных Wi-Fi-сетей.
Abstract:The article considers energy efficient algorithm for mobile devices with self-organizing wireless Wi-Fi net-work (Ad-hoc). It is designed for using in mobile devices based on the operating system (OS) Android. The proposed algo-rithm allows optimizing the interaction of described devices with wireless networks, both from the point of energy saving and automation capabilities of the process. It is achieved by improving the process of finding and connecting to wireless net-works, as well as better use of undocumented features of Android-based smartphones and tablets to interact with ad-hoc net-works. When there is already existing connection to a wireless Wi-Fi network, continuous cyclic scanning other available networks is irrational from the point of energy saving. The primordial features of OS Android determine a one-time connec-tion to a single network. Connecting to ad-hoc network is carried out by specifying a set of static parameters (ip-address, subnet mask, default gateway, etc.) generated by the proposed algorithm designed as a software module. The paper considers one of possible implementations of the proposed algorithm in the Java programming language. Testing of this algorithm was performed on smartphones HTC Sensation and Samsung Galaxy S based on OS Android (2.2–4.1.1). The software module based on the proposed algorithm can be used by developers of network software for solving a wide range of problems con-nected to mobile devices interaction and wireless Wi-Fi networks.
Авторы: Окунев Б.В. (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
Количество просмотров: 9421
Версия для печати
Выпуск в формате PDF (7.68Мб)
Скачать обложку в формате PDF (1.35Мб)

Размер шрифта:       Шрифт:

Многофункциональные мобильные устройства на основе операционной системы (ОС) 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?page=article&id=3493&lang=&lang=&like=1
Версия для печати
Выпуск в формате PDF (7.68Мб)
Скачать обложку в формате PDF (1.35Мб)
Статья опубликована в выпуске журнала № 2 за 2013 год. [ на стр. 198-201 ]

Возможно, Вас заинтересуют следующие статьи схожих тематик: