Работа с драйверами

Материал из iRidium Mobile Wiki
Перейти к: навигация, поиск

Скачать пример проекта


Описание

С помощью iRidiumScript вы можете:

  • Создавать драйвера
  • Редактировать драйвера
  • Отсылать данные на устройство
  • Принимать и редактировать данные пришедшие с устройства


Создание драйвера

1. Для создания драйвера с помощью iRidiumScript необходимо использовать команду

IR.CreateDevice(Device_Type, "Device_Name", "IP", Port);

  • Device_Type - тип протокола с которым работает устройство. В настоящий момент вы можете использовать следующие типы свободно конфигурируемых протоколов:
    • IR.DEVICE_CUSTOM_TCP
    • IR.DEVICE_CUSTOM_UDP
    • IR.DEVICE_CUSTOM_HTTP_TCP
  • Device_Name - имя устройства(Задается пользователем)
  • IP - IP-адрес устройства
  • Port - порт на устройстве, через который будут приниматься и отправляться данные


2. Когда драйвер создан, необходимо подключить его к устройству командой

IR.GetDevice("Device_Name").Connect;

IR.AddListener(IR.EVENT_START, 0, function()  //Событие, которое срабатывает при начале работы приложения
{
  IR.CreateDevice(IR.DEVICE_CUSTOM_TCP, "DEVICE", "192.168.0.116", 80); //Команда для создания драйвера 
  IR.GetDevice("DEVICE").Connect(); //Команда для подключения к устройству
});


Изменение драйвера

С помощью iRidiumScript вы можете в любой момент изменить любые свойства драйвера, для это вам следует присвоить драйвер переменной с помощью команды

IR.GetDevice("Driver_Name");

После этого обратитесь в свойству драйвера и присвойте ему новое значение используя конструкцию:

driver.Name = "New_Device";

IR.AddListener(IR.EVENT_START, 0, function()  //Событие, которое срабатывает при начале работы приложения
{ 
  var driver = IR.GetDevice("DEVICE");//Присваиваем драйвер переменной 
  driver.Name = "New_Device"; //Изменяем имя драйвера
});


Отправка данных

С помощью iRidiumScript Вы можете отправлять на устройство необходимые инструкции. Для этого следует использовать команду

IR.GetDevice("Device_Name").Send([command]);

  • Device_Name - имя устройства созданного в iRidium GUI или в iRidiumScript
  • command - инструкция, отправляемая на устройство
IR.AddListener(IR.EVENT_START, 0, function()  //Событие, которое срабатывает при начале работы приложения
{ 
  IR.CreateDevice(IR.DEVICE_CUSTOM_TCP, "DEVICE", "192.168.0.116", 80); //Команда для создания драйвера 
  IR.GetDevice("DEVICE").Send(['getverion\r\n HTTP 1.1\r\n\r\n']);//Команда отправляет на устройство инструкцию('getverion\r\n HTTP 1.1\r\n\r\n')
});


Получение и разбор данных

С помощью iRidiumScript вы можете получить данные, пришедшие с устройства с помощью слушателя

IR.AddListener(Тип_отображения_информации, Имя_устройства, function(text)

  • Тип_отображения_информации - в каком виде будет отображаться полученная информация (текстовый формат - IR.EVENT_RECEIVE_TEXT или битовый формат - IR.EVENT_RECEIVE_DATA)
  • Имя_устройства - имя устройства созданного в iRidium GUI или с помощью iRidiumScript
DEVICE = IR.GetDevice("Global") //Указываем имя устройства
IR.AddListener(IR.EVENT_RECEIVE_TEXT, DEVICE, function(text) //Событие срабатывающее при принятии данных от устройства
{  
IR.Log(text) //В лог выводим текст
});


Работа с UPnP

UPnP (Universal Plug and Play) — это архитектура многоранговых соединений между персональными компьютерами и интеллектуальными устройствами, например, в домашней локальной сети. UPnP строится на основе стандартов и технологий Интернета, таких как TCP/IP, HTTP и XML, и обеспечивает автоматическое подключение интллектуальных устройств друг к другу и их совместную работу в сетевой среде, в результате чего сеть (например, домашняя) становится лёгкой для настройки большему числу пользователей.

В iRidiumScript вы можете находить, настраивать и управлять всеми устройствами поддерживающими UPnP. Если вы работаете с UPnP, то вам не нужно знать IP-адрес и порт вашего устройства. Система сама найдет все устройства в вашей сети и отобразит их.

Для создания UPnP драйвера используется команда

upnpControl = IR.CreateDevice(IR.DEVICE_UPNP_CONTROL, "MyUPnP");

  • MyUPnP - имя UPnP драйвера
  • IR.DEVICE_UPNP_CONTROL - указание типа UPnP
  • upnpControl - переменная, которой присваивается идентификатор драйвера.

После этого драйвер нужно включить с помощью команды

upnpControl.Connect();

При запуске клиента, драйвер начнет опрашивать сеть на предмет наличия UPnP устройств. Чтобы вы могли манипулировать найденными устройствами следует использовать слушателя:

IR.AddListener(IR.EVENT_DEVICE_FOUND, 0, FoundDevice);

  • IR.EVENT_DEVICE_FOUND - событие, которое активируется в случае идентификации устройства поддерживающего UPnP
  • FoundDevice - функция, которая запустится при активации события IR.EVENT_DEVICE_FOUND


Инструкция по созданию драйверов

Для создания драйверов следует использовать объектно-ориентированную парадигму. Драйвера создаются в несколько этапов:


  • 1 этап. Создание Главного класса

На данном этапе Вы должны создать главный класс с помощью которого вы в итоге будете создавать экземпляры драйвера. В iRidiumScript главный класс создается как функция:


var GlobalCache = function() //Инициализация главного класса
{
  //тело класса
}


  • 2 этап. Подключение экземпляра класса к драйверу в GUI Editor

Для корректной работы, каждому устройству, с которым Вы будете работать, нужно создать базовый драйвер в GUI Editor, в окне Device Tree. После этого требуется описать подключение каждого экземпляра драйвера с базовому устройству (драйверу) из Device Tree редактора GUI Editor.

Базовые драйвера различаются по именам, поэтому во время инициализации экземпляров класса надо присваивать каждый экземпляр класса к своему базовому драйверу из Device Tree по его имени. В главном классе это реализуется следующим образом:

this.DEVICE = IR.GetDevice(this.DriverName);

  • this.DEVICE - переменная хранящая идентификатор драйвера полученный по указанному имени
  • this.DriverName - переменная хранящая имя базового драйвера, которое указал пользователь


var GlobalCache = function() //Инициализация главного класса
{
  this.DriverName; //Имя драйвера, задающееся пользователем
  this.DEVICE; //Указатель на базовый драйвер в Device Tree
  
  function initalization()//Метод инициализации экземпляра класса
  {
    this.DEVICE = IR.GetDevice(this.DriverName); //определение указателя на базовый драйвер по его имени
  }
  
  this.Init = initalization; // Определение метода инициализации экземпляра драйвера
}


  • 3 этап. Делаем проверку сетевого статуса устройства (Online/Offline)

Делается это затем, чтобы была возможность проверки, запустилось или нет устройство (открылась ли сессия подключения к управляемому оборудованию). В первоначальном состоянии that.Online = false, что означает что девайс не вошел в сеть, но после этого происходит запуск устройства и статус that.Online меняется на that.Online = true. Если устройство не в сети (подключение не установилось), то мы не сможем посылать на него команды.


//-------------------------------------------------------
// Обработчик перехода устройства в Online
//-------------------------------------------------------     
    IR.AddListener(IR.EVENT_ONLINE, that.DEVICE, function(text)
    { 
      IR.Log(that.DriverName+" DEVICE is Online");
      that.OnLine = true;
    }, that);
//-------------------------------------------------------
// Обработчик перехода устройства в Offline
//-------------------------------------------------------
    IR.AddListener(IR.EVENT_OFFLINE, that.DEVICE, function(text)
    { 
      IR.Log(that.DriverName+" DEVICE is Offline");
      that.OnLine = false;
    }, that);
  });


  • 4 этап. Отправка команды с помощью скрипта

С помощью iRidiumScript можно отсылать команды, например:


function SendGetDevice()
{
Device.Send(['getdevices',13]); //Отправка команды getdevices
};

this.sendgetdevice = SendGetDevice

function SendGetVersion()
{
Device.Send(['getversion',13]); //Отправка команды  getversion
};

this.sendgetversion = SendGetVersion


  • 5 этап. Вывод данных в лог

В iRidiumScript в лог можно выводить как текстовые так и бинарные данные:


IR.AddListener(IR.EVENT_RECEIVE_TEXT,0.function(text) //обработка текстовых данных
{
IR.Log(text)
});
IR.AddListener(IR.EVENT_RECEIVE_DATA,0.function(text) //обработка бинарных данных
{
IR.Log(text)
});


  • 6 этап. Парсер и вызов методов парсера (обработчик входящих данных)

В iRidiumScript есть возможность парсить данные как через поиск (text.indexOf) так и через регулярное выражение (text.search)


this.IsDeviceRegex       = "DEVICE";
this.IsVersionRegex      = "version";

IR.AddListener(IR.EVENT_RECEIVE_TEXT, this.DEVICE, function(text)
   {
     
     IR.Log("responce text = "+text);
     that.IsDevice = text.indexOf(that.IsDeviceRegex.toLowerCase());
     that.IsVersion = text.indexOf(that.IsVersionRegex);

      if (that.IsDevice != -1)
     {
       that.getdevices(text);
     } else if (that.IsVersion != -1)
     { 
      that.getversion(text);
     }
});


  • 7 этап. Обращение к функции после парсинга

Для того, чтобы произошло обращение к функциям, нужно:


this.ResponceGetDevices;
function GetDevices(text)               
{
  var EndPacketRegex = 'endlistdevices';                      
  var EndPacket = text.indexOf(EndPacketRegex);                      
  var Responce;
  Responce = text.slice(0,EndPacket);                                
  that.ResponceGetDevices = Responce; 
}
this.getdevices = GetDevices;

this.ResponceGetVersion;
 function GetVersion(text)    //Функция обработки канала getversion
{
  var EndPacket = text.length;
  var Module;
  var Version;
  Module = text.slice(8,9);
  Version = text.slice(10,EndPacket-1);
  that.ResponceGetVersion = "Module: "+Module; 
  that.ResponceGetVersion = "Version: "+Version;
}
this.getversion = GetVersion;


  • 8 этап. Создание экземпляра драйвера


var [Имя_устройства] = new GlobalCache();

[Имя_устройства].DriverName = "Имя_драйвера(указанное в DEVICE TREE)"; 

[Имя_устройства].Init(); 
  
var GC06 = new GlobalCache();

GC06.DriverName = "gc-2"; 

GC06.Init();


  • 9 этап. Привязка методов и свойств к элементам GUI (интерфейса)


IR.AddListener(IR.EVENT_ITEM_PRESS,IR.GetItem("Page 1").GetItem("Item 1"),function()
{
  GC06.sendgetversion()
});


ЗАГРУЗИТЬ: Пример проекта