Муфты электромонтажные от производителя Fucon

USB Generic HID Framework с открытым исходным кодом для Atmel AVR и Windows. Часть 3 - USB Generic HID библиотека коммуникационных функций

Часть 1 - Аппаратная часть
Часть 2 - ПО микроконтроллера, приложения для Windows

Коммуникация по USB и специфические функции USB интерфейса (например, подключение/отключение устройства) обеспечиваются программной библиотекой USB Generic HID, которая компилируется как подключаемая динамическая библиотека (DLL) в среде Visual Studio 2010. Это означает, что библиотека может быть быстро и просто подключена в любом проекте на С#, который требует таких возможностей.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Кроме того, библиотека предоставляет богатые возможности отладки, если ее скомпилировать в режим отладки. Это позволит быстро решать проблемы при разработке приложений.

Использование библиотеки классов

После того, как вы включили библиотеку классов в свой проект (смотрите предоставляемое приложение, чтобы увидеть как это делается), вам потребуется включить несколько строк на Си в основной форме для настройки и возможности использования функций библиотеки, а также для определения интерфейса на устройство USB.

Прежде всего? нам нужно создать класс, который представляет наше устройство и определяет методы коммуникации с ним. Вы просто добавляете класс в проект и присваиваете ему имя в соответствии с вашим USB устройством. В демонстрационном приложении этот класс имеет имя usbDemoDevice. Конструктор класса является наследником конструктора устройства из библиотеки и вы можете разместить в нем любые необходимые команды инициализации (см. пример ниже).

class usbDemoDevice : WFF_GenericHID_Communication_Library 
{
public usbDemoDevice(int vid, int pid) : base(vid, pid)
{
// Initialise the local copy of the device's state
deviceState.led1State = false;
deviceState.led2State = false;
deviceState.led3State = false;
deviceState.led4State = false;
deviceState.button1State = false;
deviceState.button2State = false;
deviceState.potState = 0;
}

После этого вы должны определить методы для каждой команды, поддерживаемой программой микроконтроллера (хотя, при необходимости, вы можете использовать один метод для вызова многих команд USB). Ниже представлен пример из демонстрационного приложения, который создает 64-байтный пакет, затем добавляются необходимые байты команды и параметров для формирования сообщения аппаратному устройству:

public bool setDeviceStatus()
{
// Command 0x81 - Set device status
Debug.WriteLine(
"Demo Application -> Sending set device status command (0x81) to USB device");
// Declare our output buffer
Byte[] outputBuffer = new Byte[64];
// Byte 0 must be set to our command
outputBuffer[0] = 0x81;
// Set the packet data according to the local LED status
if (deviceState.led1State == true) outputBuffer[1] = 1; else outputBuffer[1] = 0;
if (deviceState.led2State == true) outputBuffer[2] = 1; else outputBuffer[2] = 0;
if (deviceState.led3State == true) outputBuffer[3] = 1; else outputBuffer[3] = 0;
if (deviceState.led4State == true) outputBuffer[4] = 1; else outputBuffer[4] = 0;
// Perform the write command
bool success;
success = writeSingleReportToDevice(outputBuffer);
return success;
}

Если у вас есть класс USB устройства и определены методы, то самое время вернуться в основную форму и добавить некоторый код для вызова и использования класса USB устройства. Сперва нам необходимо поместить код в конструктор основной формы для инициализации устройства при запуске формы, а затем нужно создать экземпляр USB устройства. Код из демонстрационного приложения:

public mainForm()
{
InitializeComponent();
// ATmega32U4 example firmware uses VID=0x03EB and PID=0x2150
theUsbDemoDevice = new usbDemoDevice(0x03EB, 0x2150);
// Add a listener for usb events
theUsbDemoDevice.usbEvent += new usbDemoDevice.usbEventsHandler(usbEvent_receiver);
// Perform an initial search for the target USB device (in case
// it is already connected as we will not get an event for it)
theUsbDemoDevice.findTargetDevice();
}

Далее нам необходимо создать «прослушку» событий USB интерфейса, которые будут перехватываться библиотекой. Эти события будут информировать наше приложение, когда целевое устройство будет подключаться к компьютеру или отключаться от него. Ниже приведен простой пример реализации этого процесса.

// Create a listener for USB events
private void usbEvent_receiver(object o, EventArgs e)
{
// Check the status of the USB device and update the form accordingly
if (theUsbDemoDevice.isDeviceAttached)
{
// USB Device is currently attached
// Update the form's status label
this.usbDeviceStatusLabel.Text = "USB Device is attached";
}
else
{
// USB Device is currently unattached
// Update the form's status label
this.usbDeviceStatusLabel.Text = "USB Device is detached";
}
}

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

Методы библиотеки классов

Библиотека USB Generic HID предоставляет простой путь для понимания процесса коммуникации по USB интерфейсу в ОС Windows. Она была преднамеренно разработана простой, насколько это возможно. Перечислим ее открытые методы (public methods) и функции.

void findTargetDevice() – этот метод выбирает из списка текущих подключенных HID USB устройств HID устройство с необходимыми идентификаторами VID и PID целевого устройства. Он используется для обнаружения устройства, которое уже подключено при инициализации приложения.

void usbEventsHandler(object sender, EventArgs e) – метод usbEventsHandler позволяет приложению отслеживать специфические события, которые вызываются целевым устройством (подключение, отключение).

WFF_GenericHID_Communication_Library(int vid, int pid) – конструктор метода создает объект для HID коммуникации и пытается найти (и связаться) с USB устройством с указанными Vendor ID и Product IВ, которые должны быть переданы как целые числа без знака (unsigned integer). Это базовый класс, который будет использоваться при создании класса для вашего USB HID устройства, как было описано выше.

bool isDeviceAttached – метод обеспечивает простой механизм для приложений, который позволит определить, подключено ли еще USB устройство. Метод возвращает логическое значение: истина – устройство подключено, ложь – устройство не подключено.

bool writeSingleReportToDevice(Byte[] outputReportBuffer) – этот метод отправляет одно сообщение USB устройству. OutputReportBuffer должен быть соответствующей длины для сообщения (в предоставленных примерах он установлен на максимальное значение 64 Байт). Метод возвращает значение «истина» при успешной отправке сообщения.

bool writeMultipleReportsToDevice(Byte[] outputReportBuffer, int numberOfReports) – с помощью этого метода отправляется несколько сообщений USB устройству за одну операцию. В этом случае буфер outputReportBuffer должен иметь размер 64 Байта, умноженные на количество сообщений, которые будут отправлены.

bool readSingleReportFromDevice(ref Byte[] inputReportBuffer) – метод предназначен для чтения одного сообщения от устройства, помещенного в предопределенный буфер inputReportBuffer (размер которого 64 Байта). Возвращаемое значение «истина», если операция выполнена успешно.

bool readMultipleReportsFromDevice(ref Byte[] inputReportBuffer, int numberOfReports) – чтение нескольких сообщений от USB устройства . В этом случае буфер inputReportBuffer должен иметь размер 64 Байта, умноженные на количество сообщений, которые будут считаны.

Программное обеспечение, прошивки микроконтроллера, примеры приложений могут использоваться как в открытых, так и закрытых проектах, на коммерческой и некоммерческой основе. Единственное требование – приложения должны содержать сообщение вида «Содержит части кода коммуникационной библиотеки WFF GenericHID Communication Library Simon Inns - http://www.waitingforfriday.com»

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: USB Generic HID Open Source Framework for Atmel AVR and Windows. Part 3 - USB Generic HID C# Communication Library

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя