среда, 10 сентября 2014 г.

Описание API вызова библиотеки HIDOUTEXMP709.DLL

Библиотека HIDOUTEXMP709.dll позволяет, независимое от записи, чтение любого заданного HID-устройства. Таким образом, вы можете управлять выходами одного заданного HID-устройства и считывать параметры с него же или с другого HID-устройства. К примеру, подключив к USB портам ПК/ноутбука/нетбука HID устройство uniUSB или USB-реле производства Master-Kit - MP709 или USB HID-термометр, можно осуществить управление одним, считывая показания другого через одну функцию в один и тот же момент времени.

Данная DLL предназначена для работы с любыми USB.HID (VID=ваш, PID=ваш) через SetupAPI в ОС NT/2000/2003/XP, предоставляет универсальный доступ к записи и считыванию для других приложений вне зависимости от языка в среде Win32/64. Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

Таблица расшифровок входных и выходных параметров экспортируемой функции 'setget_leds()' библиотеки 'HIDOUTEXMP709.DLL':


Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5-7):
var  leds: byte;           // значение байта данных c HID устройства  mp709: boolean; // контроль и считывание состояния MP709  smp709: pchar;   // наличие MP709

  setget_leds:function(outvid, outpid: integer; outleds: byte;                       invid, inpid: integer; var inleds: longword                       var state_mp709: boolean;                       var status_mp709: pchar): pchar;stdcall;  LibHandle: THandle;
{ установка любого бита в байте }function SetBit(AWord: longword; ABit: byte; AState: boolean = true): longword;begin if AState then Result:= AWord or (1 shl ABit)  else Result:= AWord and (not (1 shl ABit))end;
function LinkProc(ProcName: string):Pointer;begin result:= GetProcAddress(LibHandle, PChar(ProcName))end;
{ инициализация }begin LibHandle:= LoadLibrary('hidoutexMP709.dll'); if LibHandle<>0 then  setget_leds:= LinkProc('setget_leds');end;
{ пример вызова (записи) }var rd: cardinal;begin // управление выходами setget_leds($0207, $2010, inleds, $0, $3, rd, mp709, smp709);  // параметр чтения температуры  caption:= rd - 273 + 3; ...
{ пример управления и чтения состояния MP709 }begin mp709:= CheckBox9.Checked; // true - включить MP709, false - выключить MP709
 setget_leds($0, $0, leds, $0, $0, rd, mp709, smp709); // состояние MP709  CheckBox9.Checked:= mp709; // состояние реле sb.Panels[1].Text:= smp709 // наличие MP709 ...
Примеры контроля HID устройства

1. Нужно зажечь нулевой бит (установить в "1"), что соответствует порту PB0 (выв.14 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 0, true) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
2. Нужно погасить нулевой бит (установить в "0"), что соответствует порту PB0 (выв.14 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 0, false) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
3. Нужно зажечь первый бит (установить в "1"), что соответствует порту PB1 (выв.15 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 1, true) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
4. Нужно погасить первый бит (установить в "0"), что соответствует порту PB1 (выв.15 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 1, false) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
5. Нужно зажечь седьмой бит (установить в "1"), что соответствует порту PС1 (выв.24 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 7, true) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
6. Нужно погасить седьмой бит (установить в "0"), что соответствует порту PС1 (выв.24 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 7, false) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
7. Нужно зажечь одновременно нулевой и первый бит (установить в "1"), что соответствует порту PB0, PB1 (выв.14, 15 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 0, true) leds:= SetBit(leds, 1, true) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
8. Нужно погасить одновременно нулевой и первый бит (установить в "0"), что соответствует порту PB0, PB1 (выв.14, 15 МК)
 // пользуемся функцией SetBit() и передадим значение байта в функцию setleds() leds:= SetBit(leds, 0, false) leds:= SetBit(leds, 1, false) setleds($0207, $2010, leds, $0, $0, rd, mp709, smp709)
Схема HID-устройства на ATMega8:
Тестовое приложение считывания температуры и контроля выходов UNI.USB:


Ниже показан пример вызова (под С):
function TestDLL(){  // определяем новый тип DLL   setledsdll = DLL.DefineDLL("MyDLL");
  // описываем вызываемую функцию   // последний параметр - возвращаемое значение, должен быть указан обязательно   proc = setledsdll.DefineProc("setget_leds", *char);
  // загружаем DLL в память, связывая имя DLL-файла с созданным ранее типом DLL  lib = DLL.Load("hidoutexMP709.dll", "MyDLL");
  // вызываем функцию  lib.setget_leds(int outvid, outpid; byte outleds; int invid, inpid; var long inleds; var bool mp709; var long smp709);}
Ниже показан пример вызова (под С#):
using System.Runtime.InteropServices;...
    unsafe static class hidout    {
        [DllImport("hidoutexMP709.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.char)]        static extern char setget_leds (            [In] int outvid,            [In] int outpid,            [In] byte outleds,            [In] int invid,            [In] int inpid,            [Out] long inleds,            [Out] bool mp709,            [Out] long smp709,            );
        public static int setget_leds_ ( int outvid, outpid; byte outleds; int invid, inpid; long inleds; bool mp709; long smp709 ) {            setget_leds(outvid, outpid, outleds, invid, inpid, inleds, mp709, smp709);             return 0;        }    }
{ пример вызова }hidout.setget_leds_(0x0207, 0x2010, 0x00, 0x00, 0x00, long rd, bool mp709, long smp709);
Тестовое приложение контроля MP709:


скачать

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.