Kitab: USB interfeysi (istifadə və proqramlaşdırma təcrübəsi). Android USB Proqramlaşdırma. Biz USB interfeysindən müxtəlif cihazları usb vasitəsilə proqramlaşdırmaq üçün istifadə edirik

Artıq qeyd edildiyi kimi, Windows əməliyyat sistemləri USB avtobusuna qoşulmuş cihazların işləməsi üçün proqram təminatı ilə təmin edir. USB cihaz məlumat axınının əməliyyat sistemi səviyyəsində emalı bütün USB cihazlarını idarə etmək və onlarla sistem arasında məlumat mübadiləsi kimi əsas funksiyaları yerinə yetirən standart drayverlər yığını tərəfindən həyata keçirilir.

Əgər USB cihazı üçün məlumatların emal imkanlarını artıran proqram təminatı yazmaq lazımdırsa, o zaman üç mümkün yoldan birini seçə bilərsiniz:

bütün lazımi idarəetmə və rabitə funksiyalarını təmin edəcək öz cihaz drayverinizi və istifadəçi rejimində bu sürücü ilə qarşılıqlı əlaqə quracaq proqramı yazın. Bu vəziyyətdə, standart sistem sürücüləri olmadan tamamilə edə bilərsiniz;

tələb olunan funksionallığı təmin edən, lakin sistem sürücülərinin üstündəki sürücü yığınında oturan bir filtr sürücüsü yazın. Beləliklə, bütün standart emal funksiyaları sistem tərəfindən quraşdırılmış USB sürücüləri tərəfindən yerinə yetiriləcək və əlavə funksiyalar istifadəçi proqramının qarşılıqlı əlaqədə olacağı filtr sürücüsü tərəfindən təmin ediləcək;

sərbəst paylanmış funksiya və sürücü kitabxanalarından istifadə edin

USB cihazına daxil olmaq üçün.

Əksər hallarda, cihazın çox spesifik funksiyası varsa, proqramlı şəkildə USB cihazına daxil olmanız lazım ola bilər. Məsələn, USB əsaslı "elektron osiloskoplar" və ya cihazın özünə daxil olmağı tələb edən məlumatların toplanması sistemləri hazırlanmışdır. Bu halların əksəriyyətində, demək olar ki, bütün populyar proqramlaşdırma mühitlərində işləyəcək, sərbəst paylanmış funksiya kitabxanalarından istifadə edə bilərsiniz. Məsələn, GNU-nun himayəsi altında Windows və Linux əməliyyat sistemlərində işləmək üçün lazımi drayverləri və funksiya kitabxanalarını özündə birləşdirən LibUsb kimi tanınan proqram təminatı hazırlanmışdır. Bu funksiya kitabxanaları çox populyardır və bir sıra standart funksiyalar vasitəsilə cihazınızla qarşılıqlı əlaqədə olan proqramları tez bir zamanda inkişaf etdirməyə imkan verir. Bu, öz cihaz drayverinizi yazmaq ehtiyacını aradan qaldırır ki, bu da çox vaxta qənaət edir.

Bundan əlavə, istifadəçilərin əksəriyyəti sürücü inkişaf texnikaları ilə tanış deyil,

və bu proqramlaşdırmanın çox mürəkkəb sahəsidir, ona görə də belə pulsuz proqram təminatının mövcudluğu istifadəçilərin geniş spektri üçün əvəzolunmaz kömək olacaqdır. LibUsb layihəsi əsasında Visual Basic .NET və C# .NET ilə işləmək üçün sarğılar hazırlanmışdır ki, onlardan ən populyarı LibUsbDotNet-dir ki, bu da azad proqram təminatının himayəsi altında hazırlanmışdır. USB cihazlarının proqramlaşdırılmasının görünən mürəkkəbliyinə baxmayaraq, sadalanan proqram təminatı bu tapşırığı o qədər asanlaşdırır ki, hətta yeni başlayanlar da bunu edə bilər. USB cihazlarınızla işləməyin praktiki nümunələrinə baxaq və LibUsb proqram paketindən başlayaq. Yeri gəlmişkən, yuxarıda göstərilən proqramı www.sourceforge.net saytından və ya çoxsaylı dublikat saytlardan pulsuz yükləmək olar.

LibUsb USB funksiya kitabxanaları ilə necə işləmək olar? Kitabxana belə qurulub.

zom ilə USB cihazı ilə bağlı əsas əməliyyatları yerinə yetirə bilərsiniz:

identifikasiya və ya başqa bir şəkildə sadalama. Bu əməliyyat libusb kitabxanasının müvafiq funksiyalarından istifadə etməklə həyata keçirilən USB avtobusuna qoşulmuş cihazları aşkarlayır;

kitabxananın bir sıra funksiyaları olan cihaz parametrlərinin (cihaz identifikatorları, istehsalçı və cihazın xüsusiyyətləri haqqında məlumatlar) əldə edilməsi;

məlumatların açılması, bağlanması, oxunması və yazılması, əmrlərin göndərilməsi. USB cihazına, eləcə də fayl sisteminin digər obyektlərinə oxumağa yazmaqla daxil olmaq olar, bu, müvafiq kitabxana funksiyalarından istifadə etməklə həyata keçirilir.

Sadalanan bütün funksiyalar müvafiq libusb funksiyalarına zəng etməklə həyata keçirilə bilər, lakin onlar burada qeyd edilməyəcək, çünki bu, çox yer tutacaq; bu funksiyalardan bəzilərini necə istifadə edəcəyimizi görəcəyik

düyü. 6.10

libusb0.sys drayverinin cihaz drayver yığınında yeri

praktiki nümunələr üzərində işləyir. Oxucular bütün funksiyaların təsvirini müvafiq sənədlərdə tapa bilərlər. Nəzərinizə çatdırım ki, biz Windows əməliyyat sistemlərində libusb kitabxana funksiyalarının istifadəsini nəzərdən keçiririk.

Windows əməliyyat sistemində libusb ilə paylama dəstini quraşdırarkən sistemdə libusb0.sys filtr sürücüsü quraşdırılır. Bu sürücü, məsələn, hər hansı bir USB cihazı üçün sürücü məlumatlarına baxmaqla asan görünən sistemin sürücü yığınının yuxarı hissəsində olacaq (Şəkil 6.10).

Bundan əlavə, istifadəçi proqramlarından sürücüyə daxil olmaq üçün sistemə libusb0.dll kitabxanası quraşdırılıb, ondan istifadə edərək istifadəçi proqramlarını inkişaf etdirə bilərsiniz.

düyü. 6.17

Silinən zaman proqram pəncərəsinin görünüşü

Sistemdən USB cihazları

USB Proqramlaşdırma

SF-50 peyk tünerinin USB portu vasitəsilə proqramlaşdırılması RS-232 portu vasitəsilə proqramlaşdırmadan yalnız məlumatların cihazdan kompüterə və kompüterdən cihaza ötürülməsi ilə fərqlənir. USB vasitəsilə proqramlaşdırma zamanı portativ USB sürücüsü (flash sürücü) istifadə olunur. Bu, məsələn, kompüterinizin və ya daha tez-tez noutbukun (netbukun) şassisində RS-232 seriya portu olmadıqda faydalıdır.
USB sürücüsündən istifadə edərək cihazı proqramlaşdırmaq üçün sizə lazım olacaq:
- FAT-32 fayl sistemində formatlanmış USB sürücü (flash disk);
- OPENBOX SF-50 proqram bölməsinin Database_editor_new qovluğunda yerləşən AliEditor redaktor proqramı.

Proqramlaşdırmaya başlamazdan əvvəl verilənlər bazasını cihazdan kompüterə köçürmək lazımdır. Bunu etmək üçün cihazı yandırın, USB flash sürücüsünü USB portuna qoşun. MENU-nu işə salın - Sistem - USB-də saxla,

Cari kanal görünənə qədər MENU düyməsini basaraq menyudan çıxın və ya hələ heç bir kanal yoxdursa əsas menyu şəklinə keçin və fləş sürücüsünü çıxarın. Flash sürücüyü kompüterə daxil edin.
Database_editor_new qovluğundan Editor.exe proqramını işə salın və içindəki flash sürücüdəki şəkli açın.

Verilənlər bazasını seçmək istənildikdə İstifadəçi Məlumat Bazasını seçin.

OK düyməsini basın. Bütün Xidmətləri seçin, verilənlər bazasında skan edilmiş və saxlanmış bütün TV, radio və xidmət kanallarının siyahısı açılacaqdır.

Kanalları istədiyiniz kimi redaktə edin, məsələn, yalnız açıq kanalları buraxın.
Kompüter klaviaturasında Shift düyməsini basıb saxlayın, "Aşağı ox" düyməsini basın və silmək istədiyiniz kanalları seçin. Seçimi silmək üçün Sil düyməsini basın.

Peyk parametrlərini redaktə etmək üçün Bütün Xidmətlər - Peyk Məlumatı - EUTELSAT W4, W7 seçin, ENTER düyməsini basın.

Lazım gələrsə, Antenna 1-də dəyərləri redaktə edin.
Transponderi silmək üçün lazımsız birini seçin və kompüter klaviaturasındakı Sil düyməsini basın, seçilmiş hərəkəti təsdiqləyin.

Transponder əlavə etmək üçün peykin adının üstündə durun, siçanın sağ düyməsini basın və Məlumat əlavə et seçin (yaxud peyki seçin və klaviaturada Daxil et düyməsini basın).

Yeni transponder üçün məlumatları, məsələn, lyngsat.com saytından götürərək daxil edin.

OK düyməsini basın, transponderin qeydə alındığından əmin olun.

Peyk əlavə etmək üçün Peyk Məlumatı xəttinə keçin, klaviaturada Daxil et düyməsini basın və yeni peykin parametrlərini daxil edin.

redaktor proqramını bağlayın, sürücünü çıxarın.
Sürücünü OPENBOX SF-50 cihazına daxil edin, MENU - Sistem - USB-dən yeniləməni ardıcıllıqla yerinə yetirin, "SAT&TP siyahısı" rejimini seçin.

Başlat seçin. Niyyətlərinizi təsdiqləyin.

Cihaz verilənlər bazasını yeniləyəcək və özünü yenidən işə salacaq. Yenidən başladıqdan sonra parametrlərdə rus menyu dilini yeni bir şəkildə təyin etməli olacaqsınız. Cihazı zavod parametrlərinə sıfırlayın.
MENU düyməsini iki dəfə basaraq parametrlər menyusundan çıxın. Cari kanalda OK düyməsini basın və kanal siyahısının redaktə olunduğundan əmin olun.

Siz həmçinin transponderlərin və peyklərin siyahısının redaktə olunduğuna əmin ola bilərsiniz.
Proqramlaşdırma tamamlandı.

Yaxşı kitab, çox şey izah edir. USB avtobus vasitəsilə məlumatların necə ötürüldüyünü anlamaq istəyənlər üçün faydalıdır.

Giriş 1
Bu kitab kimin üçündür: 2
2-ci kitabda nə tapacaqsınız
Proqram təminatı tələbləri 3
Avadanlıq tələbləri 4
Kod 4 haqqında
4-cü fəsillərin qısa təsviri
Qeyd 6
Təşəkkür 7
BÖLÜM I. USB 9-A GİRİŞ
Fəsil 1. USB 11 nədir
1.1. USB 11 tarixi
1.2. USB-nin digər interfeyslərlə müqayisəsi 14
1.3. USB Əsas Konseptləri 16
1.3.1. Ümumi avtobus memarlığı 16
1.3.2. Fiziki və məntiqi avtobus memarlığı 16
1.3.3. USB 18-in komponentləri
1.3.4. USB cihazının xüsusiyyətləri 18
1.3.5. Hub xüsusiyyətləri 19
1.3.6. Host xüsusiyyətləri 20
1.4. USB Cihazlarının nümunələri 20
1.4.1. Siçan və klaviatura., 21
1.4.2. Monitorlar 21
1.4.3. USB-COM və USB-to-LPT 22 adapterləri
1.4.4. Skanerlər 23
1.4.5. Modemlər 23
1.4.6. Natiqlər 24
1.4.7. Fleş disklər 25
1.4.8. Qovşaqlar 28
1.4.9. Ölçmə texnologiyası 28
1.4.10. Ekzotik qurğular 29
1.5. USB 30 vasitəsilə şəbəkə bağlantısı
1.5.1. USB-dən Ethernet çeviricisi 31
1.5.2. USB port 31 vasitəsilə birbaşa əlaqə
1.6. Məlumat ötürülməsi 31
1.6.1. Ünsiyyət prinsipləri 32
1.6.2. Kəsmə mexanizmi 32
1.6.3. Host adapter interfeysləri 32
1.6.4. Birbaşa yaddaşa giriş imkanı 34
1.6.5. Rabitə rejimləri 34
1.7. USB cihazlarının quraşdırılması və konfiqurasiyası 35
1.7.1. USB 38 üçün BIOS parametrləri
1.7.2. Problemlərin aradan qaldırılması 41
1.8. USB Limitləri 45
1.9. Kompüter alsanız 46
1.9.1. HS və USB 2.0 eyni deyil! 46
1.9.2. Ana plata 47
1.9.3. Bina 48
1.9.4. “Köhnə” kompüter modelləri üçün USB 48
1.10. Bu fəsil üçün onlayn resurslar 49
Fəsil 2 USB Hardware 51
2.1. Kabellər və birləşdiricilər 51
2.1.1. Kabel növləri 52
2.1.2. Kabel uzunluğu 53
2.1.3. Bağlayıcılar 53
2.2. Fiziki interfeys 55
2.2.1. Məlumatların kodlaşdırılması 57
2.2.2. Cihazın identifikasiyası 58
2.3. Qidalanma 59
2.3.1. USB Cihazlarının Güc Növləri 59
2.3.2. Enerji idarəetməsi 60
2.3.3. Aşağı Güc rejiminə daxil olmaq 61
2.4. Bu fəsil üçün onlayn resurslar 61
II HİSSƏ. USB DAXİLİ TƏŞKİLAT 63
Fəsil 3 Təkərlərin Daxili Təşkili 65
3.1. Ünsiyyətin məntiqi səviyyələri 65
3.1.1. Müştəri proqram səviyyəsi 66
3.1.2. USB sistem sürücü səviyyəsi 67
3.1.3. İnterfeys Host Nəzarətçisi Səviyyə 68
3.1.4. Periferik avtobus səviyyəsi 68
3.1.5. USB məntiqi cihaz səviyyəsi 69
3.1.6. USB cihazının funksional səviyyəsi 69
3.2. Layered Data Transfer 69
3.3. Məlumat ötürülməsinin növləri 71
3.4. İzoxron ötürmə ilə sinxronizasiya 73
3.5. Heyət 77
3.6. Son nöqtələr 78
3.7. Kanallar 79
3.8. Paketlər 81
3.8.1. IN, OUT, SETUP və PING 83 token paketlərinin formatı
3.8.2. SOF 83 Paket Format
3.8.3. Məlumat paketi formatı 84
3.8.4. Təsdiq paketi formatı< 84
3.8.5. SPLIT * 84 paket formatı
3.9. Yoxlama məbləği 85
3.9.1. CRC Hesablama Alqoritmi 86
3.9.2. CRC 87-nin proqram təminatının hesablanması
3.10. Əməliyyatlar 90
3.10.1. Əməliyyat növləri 91
3.10.2. Əməliyyatın təsdiqi və axına nəzarət 92
3.10.3. Əməliyyat protokolları 93
Fəsil 4. Cihazın daxili təşkili 96
4.1. USB cihazlarına sorğular 96
4.1.1. Konfiqurasiya paketi 96
4.1.2. Standart cihaz sorğuları 99
4.1.3. Cihaz deskriptorları 105
Fəsil 5. Host və mərkəzlərin daxili təşkili 123
5.1. Qovşaqlar 123
5.1.1. Əsas nəzarətçinin hub ilə qarşılıqlı əlaqəsi 126
5.1.2. Qovşaq təsviri 127
5.1.3. Hub sorğuları 129
5.1.4. CLEAR_HUB_FEATURE 130 tələb edin
5.1.5. CLEAR PORT_FEATURE 130 tələb edin
5.1.6. GET_BUS_STA TE 131 tələb edin
5.1.7. GET_HUB_DESCRfPTOR 131 tələb edin
5.1.8. GET_HUB_STATUS 131 tələb edin
5.1.9. GET_PORT_STA TUS 132 tələb edin
5.1.10. SET_HUB_DESCRIPTOR 134 tələb edin
5.1.11. SET_HUB_FEATURE 134 tələb edin
5.1.12. PORT XÜSUSİYYƏTLƏRİNİ SET sorğusu. 134
5.2. Müxtəlif sürətlərə malik cihazların əməkdaşlığı 135
Fəsil 6. PC olmadan USB 137
6.1. OTG birləşdiriciləri 138
6.2. OTG cihazlarının növləri 138
6.3. OTG Cihaz Deskriptoru 139
6.4. Bu fəsil üçün onlayn resurslar 140
III HİSSƏ. PROQRAMLAMA TƏCRÜBƏSİ 141
Fəsil 7. Windows 143-də USB dəstəyi
7.1. Model WDM 144
7.2. USB sürücüsü ilə qarşılıqlı əlaqə 146
Fəsil 8 HID Cihazları * 149
8.1. HID cihaz xüsusiyyətləri 149
8.2. HID cihazı ilə necə əlaqə qurmaq olar 151
8.3. HID Cihazının quraşdırılması 152
8.4. HID Cihazın İdentifikasiyası 152
8.4.1. Yükləmə cihazlarının identifikasiyası 153
8.4.2. HID cihaz konfiqurasiya deskriptoru 153
8.4.3. HID təsviri 154
8.4.4. Hesabat deskriptoru 156
8.5. Hesabat deskriptorunun strukturu 156
8.5.1. Hesabat elementlərinin strukturu 156
8.5.2. Hesabat elementlərinin növləri 157
8.5.3. Deskriptor Nümunələri 165
8.6. HID cihazına sorğular 168
8.6.1. GET_REPORT sorğusu. 169
8.6.2. SET_REPORT sorğusu 169
8.6.3. GETJDLE sorğusu. 170
8.6.4. SETJDLE 170 tələb edin
8.6.5. GET_PROTOCOL 171 tələb edin
8.6.6. SET_PROTOCOL 171 tələb edin
8.7. Alətlər 171
8.8. HID sürücüsü ilə qarşılıqlı əlaqə 172
Fəsil 9 WDM 181-ə giriş
9.1. Sürücü təbəqələri 183
9.2. Simvolik cihaz adları 184
9.3. WDM Sürücünün Əsas Prosedurları 189
9.3.1. Prosedur sürücü girişi 190
9.3.2. AddDevice proseduru 192
9.3.3. Boşaltma proseduru 194
9.3.4. Sürücünün əməliyyat prosedurları 196
9.3.5. IOCTL 203 sorğularına xidmət edir
9.4. Sürücünün yüklənməsi və sürücünün çağırılması prosedurları 209
9.4.1. Sürücü əməliyyat proseduru 209
9.4.2. Sürücü qeydiyyatı 210
9.4.3. İş prosedurlarına istinad 217
9.4.4. Sürücünün icra olunan 218 daxilində saxlanması
9.5. Sürücü yaratmaq alətləri 220
9.5.1. NuMega Driver Studio 220
9.5.2. Jungo WinDriver 220
9.5.3. Jungo kernel sürücü 220
Fəsil 10 USB PnP Spesifikasiyası 221
10.1. Plug and Play sisteminə giriş 221
10.1.1. Plug and Play Tapşırıqlar və Funksiyalar 221
10.1.2. PnP Prosedurunun Başlanması 222
10.1.3. PnP Proqram Komponentləri 224
10.2. USB 225 üçün Plug and Play
10.2.1. USB Cihazlarının Konfiqurasiyası 226
10.2.2. 226 nömrəli USB cihazı
10.2.3. PnP USB Cihaz İdentifikatorları 228
10.3. USB Cihazlarının Siyahısının əldə edilməsi 229
10.4. INF faylı 234
10.4.1. INF fayl strukturu 234
10.4.2. Bölmə Versiya 235
10.4.3. İstehsalçı bölməsi 237
10.4.4. Təyinat Direktoru Bölmə 239
10.4.5. Model 241 Təsvir Bölməsi
10.4.6. Bölmə xxx.AddReg və xxx.DelReg. 242
10.4.7. Bölmə xxx.LogConfig 244
10.4.8. Bölmə xxx.CopyFiles 244
10.4.9. Bölmə sətirləri 245
10.4.10. Bölmə birləşmələri 246
10.4.11. INF fayllarının yaradılması və sınaqdan keçirilməsi 247
10.4.12. INF faylından istifadə edərək cihazların quraşdırılması 248
10.5. USB 249 üçün reyestr filialları
Fəsil 11 BIOS Xüsusiyyətləri 251
11.1. BIOS xidməti 1AH 251
11.1.1. B101H funksiyası - PCI BIOS 252-nin mövcudluğunu aşkar etmək
11.1.2. Funksiya В102Н - identifikatorlarla PCI cihazını axtarın
cihaz və istehsalçı 253
11.1.3. B103H funksiyası - 254 sinif kodu ilə PCI cihazını axtarın
11.1.4. B108H funksiyası - konfiqurasiya registrini oxuyun (bayt) 255
11.1.5. ВУ9Н funksiyası - konfiqurasiya registrinin oxunması (Word) 256
11.1.6. B10AN funksiyası - konfiqurasiya registrini oxuyun (DWord) 256
11.1.7. V10ВН funksiyası - konfiqurasiya registrinin yazılması (Bayt) 257
11.1.8. B10CH funksiyası - konfiqurasiya registrini yazmaq (Word) 257
11.1.9. B10DH funksiyası - Konfiqurasiya Qeydiyyatını (DWord) 258 yazın
11.2. İstifadə nümunəsi 259
IV HİSSƏ. USB CİHAZLARININ YARADILMASI 283
Fəsil 12 USB periferik qurğular 285
12.1. Çips Atmel 286
12.1.1. MSC-51 arxitekturasına malik mikrokontrollerlər 286
12.1.2. Hub nəzarətçiləri 289
12.1.3. AVR 289 nüvəli mikroprosessor mərkəzləri
12.1.4. Digər Atmel 290 IC
12.2. Çiplər Cygnal 291
12.2.1. Mikroprosessorlar C8051F320 və C8051F321 291
12.2.2. Digər Cygnal 293 IC
12.3. Çiplər FTDI 296
12.3.1. FT232AM və FT232BM 297 çipləri
12.3.2. FT245AM və FT245BM 298 çipləri
12.3.3. Çip FT2232BM 299
12.3.4. Çip FT8U100AX 300
12.3.5. Sazlama dəstləri və modulları 301
12.3.6. Sürücülər 302
12.3.7. Əlavə kommunal xidmətlər 303
12.3.8. Digər modullar 304
12.4. Çiplər Intel 304
12.5. Mikroçip 308
12.6. Motorola 308 IC
12.7. Philips 309 çipləri
12.7.1. Mikroçiplər USB 310
12.7.2. Qovşaqlar 311
12.7.3. Digər Philips 313 çipləri
12.8. Mikrosxemlər Texas Instruments 314
12.9. Chips Trans Dimension 317
12.10. Enerji Mühafizəsi IC 318
12.11. Bu fəsil üçün onlayn resurslar 319
Fəsil 13 Atmel AT89C5131 HID Cihazı 322
13.1. АТ89С5131 322-nin struktur diaqramı
13.2. USB qeydləri AT89C5131 324
13.2.1. USBCON 324 qeydiyyatdan keçin
13.2.2. USBADDR 326 qeydiyyatdan keçin
13.2.3. USBINT 327-ni qeydiyyatdan keçirin
13.2.4. USBIEN 328 qeydiyyatdan keçin
13.2.5. UEPNUM reyestri. 329
13.2.6. UEPCONX 330-u qeydiyyatdan keçirin
13.2.7. UEPSTAX reyestri. 331
13.2.8. UEPRST qeydiyyatı. 334
13.2.9. UEPINT qeydiyyatı. 335
13.2.10. UEPIEN 336 qeydiyyatdan keçin
13.2.11. UEPDATX 337 qeydiyyatdan keçin
13.2.12. UBYCTLX 337-ni qeydiyyatdan keçirin
13.2.13. UFNUML 338 qeydiyyatdan keçin
13.2.14. UFNUMH qeydiyyatdan keçin. 338
13.3. Devre AT89S5131 338
13.4. Proqramlaşdırma alətləri 339
13.4.1. Kompilyator 341
13.4.2. Proqramçı 342
13.5. Proqram mikroprosessor 349
13.5.1. АТ89С5131 349 üçün proqramın ilk versiyası
13.5.2. String Deskriptorlarının Əlavə edilməsi 369
13.5.3. Son nöqtələrin əlavə edilməsi 374
13.5.4. HID cihazının yaradılması 377
13.5.5. HID cihazı ilə əlaqə 381
13.6. Windows 388-də hesabatların oxunması
13.7. Windows XP 396-nın əlavə xüsusiyyətləri
13.8. Çox hesabatlı cihaz 397
Fəsil 14 ATMEL AT89C5131 USB Cihazının yaradılması 402
14.1. HID olmayan cihaz 402
14.2. Driver Studio 405 ilə sürücü yaratmaq
14.2.1. Driver Studio 407 kitabxanası haqqında bir neçə söz
14.2.2. Digər driver studio 411 sinifləri
14.2.3. Driver Studio 412 proqramından istifadə edərək sürücü şablonunun yaradılması
14.2.4. Sürücü şablonunun dəqiqləşdirilməsi 422
14.2.5. Cihaz Sinfi Əsas Metodları 423
14.2.6. Məlumatların oxunmasının həyata keçirilməsi 426
14.2.7. Sürücü quraşdırma 428
14.2.8. Məlumat oxuyucu 429
14.2.9. Digər növ son nöqtələrdən məlumatların oxunması 438
14.2.10. Təmiz usb sürücü 439
Fəsil 15 FTDI 457 Çiplərindən istifadə
15.1. Funksional diaqram FT232BM 457
15.2. Devre FT232BM 460
15.3. Funksiyalar D2XX 460
15.4. COM-dan USB 465-ə keçid
15.4.1. 465 Konvertor dövrəsinin təsviri
15.4.2. 467 ötürmə sürətinin təyin edilməsi
V HİSSƏ. TƏLİMAT 469
Fəsil 16 Əsas Windows funksiyaları 471
16.1. CreateFile və CloseHandle funksiyaları: obyekti açın və bağlayın.471
16.1.1. Əlavə məlumat 472
16.1.2. Qaytarılan dəyər 472
16.1.3. 472 nümunəsinə zəng edin
16.2. Faylı oxuyun funksiyası: Məlumatı oxuyun 473
16.2.1. Əlavə məlumat 474
16.2.2. Qaytarılan dəyər 474
16.2.3. 474 nümunəsinə zəng edin
16.3. WriteFile funksiyası: Məlumat ötürülməsi 475
16.3.1. Əlavə məlumat 476
16.3.2. Qaytarılan dəyər 476
16.3.3. 476 nümunəsinə zəng edin
16.4. ReadFileEx funksiyası. APC Read Data 477
16.4.1. Qaytarılan dəyər 479
16.4.2. Əlavə məlumat 479
16.4.3. 479 nümunəsinə zəng edin
16.5. WriteFileEx funksiyası: APC Data Transfer 480
16.5.1. Qaytarılan dəyər 481
16.5.2. 481 nümunəsinə zəng edin
16.6. Siqnal gözləyən WaitForSingleObject funksiyası
obyekt vəziyyəti 482
16.6.1. Qaytarılan dəyər 482
16.7. WaitForMultipleObjects funksiyası: siqnal gözləyir
obyekt dövlətləri 483
16.7.1. Qaytarılan dəyər 484
16.8. GetOverlappedResult funksiyası asinxron əməliyyatın nəticəsi 484
16.8.1. Qaytarılan dəyər 485
16.9. DeviceIoControl Funksiya: Direct Driver Control 485
16.9.1. Qaytarılan dəyər 487
16.10. QueryDosDevice Funksiya: Cihazın adının alınması
DOS adı ilə 487
16.10.1. Qaytarılan dəyər 488
16.10.2. 488 nümunəsinə zəng edin
16.11: Dos Device Function müəyyən edin: DOS Cihaz Adı ​​Əməliyyatları 489
16.11.1. Qaytarılan dəyər 490
16.11.2. 490 nümunəsinə zəng edin
Fəsil 17 HID API Funksiyaları 492
17.1. HidD_Hello Funksiya: Kitabxana Yoxlanışı 492
17.2. HidD_GetHidGuid funksiyası: GUID 492 əldə edin
17.3. HidD_GetPreparsedData Funksiyası: Cihaz Deskriptorunun yaradılması 493
17.4. HidD_FreePreparsedData funksiyası: Qurğu Dəstəyi 493
17.5. HidD_GetFeature funksiyası: FEATURE hesabatı 494 əldə edilir
17.6. HidD_SetFeature Funksiya: FEATURE Report 494 göndərilir
17.7. HidD_GetNumInputBuffers funksiyası: buferlərin sayını 495 almaq
17.8. HidD_SetNumInputBuffers funksiyası: buferlərin sayını 495 təyin etmək
17.9. HidD_GetAttribntes Funksiyası: Cihaz Atributları 495 alın
17.10. HidD_GetMamifactnrerStnng funksiyası. İstehsalçı sətirini 496 əldə edin
17.11. HidD_GetProductString funksiyası. 497 məhsul xəttini əldə edin
17.12. Funksiya HidD_ Serial MumberString əldə edin. sim almaq
seriya nömrəsi 497
17.13. HidD_GetIndexedString funksiyası. 498 indeksində sıra alın
17.14. HidDjGetlnputReport funksiyası. INPUT hesabatının alınması 498
17.15. HidD_SetOutputReport funksiyası. OUTPUT hesabatını göndərin 499
17.16. HidP_GetCaps Funksiyası: Cihaz Xüsusiyyətlərini əldə edin 499
17.17. HidP_MaxDataListLength funksiyası: hesabat ölçüləri 500 əldə edilir
Fəsil 18 UCH 502 Host Controller
18.1. 502 Host Controller Control Registers
18.1.1. USB əmr qeydiyyatı (USBCMD) ..504
18.1.2. USB Vəziyyət Qeydiyyatı (USBSTS) 506
18.1.3. Kesintiyə Nəzarət Qeydiyyatı (USBINTR) 506
18.1.4. Çərçivə nömrəsi reyestri (FRNUM) 507
18.1.5. Çərçivə əsas ünvan reyestri (FLBASEADD) 508
18.1.6. Çərçivə Modifikator Registrinin (SOFMOD) 508 başlanğıcı
18.1.7. Liman Vəziyyəti və Nəzarət Registri (PORTSC) 509
18.2. UCH 510 ana nəzarətçi məlumat strukturları
18.2.1. Çərçivə siyahısı 510
18.2.2. Transmissiya təsviri i 511
18.2.3. Növbə başlığı 514
18.3. UCH 516 Deskriptor Siyahısının Emalı
Fəsil 19 Alətlər 518
19.1. Microsoft Visual Studio Alətləri 518
19.1.1. 518-dən asılıdır
19.1.2. Xəta Axtarışı 518
19.1.3. GuidGen 518
19.2. Microsoft DDK 520 Alətləri
19.2.1. Cihaz ağacı 520
19.2.2. DevCon.-521
19.2.3. Chklnf və Genlnf. 526
19.3. CompuWare Corporation 527 Alətləri
19.3.1. Monitor 527
19.3.2. Symlink 527
19.3.3. EzDriverInstaller 527
19.3.4. WdmSniff 527
19.4. Syslntemals 528 alətləri
19.4.1. WinObj 528
19.5. USB Forum 531 alətləri
19.5.1. HID Deskriptor Aləti 531
19.6. HDD Proqram Alətləri 533
19.7. Sourceforge 533 Alətləri
APPS 535
Əlavə 1 Əlavə Xüsusiyyətlər 537
Əlavə 2. Dil identifikatorlarının cədvəli (LangID) 539
Əlavə 3. Təchizatçı kodlarının cədvəli (Vendor ID, Device ID) 543
Əlavə 4 CD Təsviri 546
Ədəbiyyat 548
İndeks 549

Keçən dərsdə biz kontroller üçün proqram təminatını tərtib etdik ki, o, USB vasitəsilə işləsin. Ancaq kompüterlə qarşılıqlı əlaqə yaratmaq üçün kompüterdə işləyəcək xüsusi proqrama da ehtiyacımız var.

İndi biz onu yaratmağa gedirik.

Yenə də nəzarətçimiz üçün Microchip həllər paketində bir nümunə var, lakin mən onu öz qaydamda yenidən yazdım. Birincisi, mən bunu qrafik interfeysdən istifadə etmədən etdim və kodun ölçüsü 3-4 dəfə azaldı. Hansı öyrənmək daha yaxşıdır. Ancaq əməliyyat prinsipi eynidır. mikroçipin standart nümunəsindəki kod belə işləyir.

Proqram C++ dilində yazılmışdır. Layihə Visual C++ express 2010-un pulsuz tələbə versiyasında qurulub. Kod haqqında ümumi fikirlər və şərhlər verəcəyəm, lakin güman edirəm ki, siz artıq ən azı C++ proqramlaşdırma təcrübəniz var.

Beləliklə, başlayaq

Mənbə mətn linki də daxil olmaqla bütün layihə buradadır

USB portu vasitəsilə məlumatları oxumaq və yazmaq üçün cihazımıza göstərici əldə etməliyik. Köhnə portlardan fərqli olaraq, yüzdən çox cihaz qoşula biləcəyi üçün bu göstəricini əldə etmək o qədər də asan deyil. Bunu etmək üçün biz Windows sürücülərinə, yəni SetupAPI-ə müraciət edəcəyik. Yeri gəlmişkən, göstəricini əldə edən kimi USB portu ilə fayl kimi əlaqə saxlayacağıq.
Məlumat ötürülməsi yalnız bir neçə əmr alacaq. Ancaq hazırlıq budur!
Biz C++ dilində proqramlaşdırdığımız üçün məlumat növləri ilə çox diqqətli olmalıyıq.
Win32 konsol layihəsi yaradın. Və orada yeganə main.cpp faylını əlavə edin

Beləliklə, bəzi kitabxanaları daxil etməliyik.
#daxildir
#daxildir
#daxildir

Biz həmçinin xarici kitabxananı da daxil edirik:
#pragma şərhi (lib, "setupapi.lib")

Proqramda təsvir edilən ilk funksiya getUSBHandle() funksiyasıdır. Onun təsviri kod şərhlərindədir. Və ümumiyyətlə, əsas şərhlər kodda verilir. O, cihazımızın yerini müəyyən etməyə və cihaza yazıb oxuya bilməmiz üçün göstəricilər hazırlamağa xidmət edir.
Bir sözlə, USB sürücülərinə daxil olmaq üçün standart Windows funksiyalarından istifadə edir və onların vasitəsilə cihazın özünə göstərici əldə edir.
Bütün bu funksiyaların nə etdiyi və necə olması ilə maraqlanırsınızsa, MSDN və ya məzmun cədvəlində olan Aqurovun kitabına müraciət edin. Nəyi bilmək vacibdir: hər cihazın bir yolu var və onu əldə etmək bizim üçün vacibdir. Əvvəlcə ID-nin axtardığımız cihaza uyğun olub olmadığını yoxlayırıq. Və sonra biz cihazın yolunu tapırıq.Biz yalnız HID sinifli cihazlar arasında axtarırıq. bu Guid dəyişənində müəyyən edilir. Qalanlarına proqramın şərhlərində baxın
Növbəti funksiya writeReadUSB-dir. Bu, sadəcə olaraq cihazımıza yazan köməkçi funksiyadır. Diqqətinizi ona yönəldirəm ki, biz ona göstərici yaratdıqdan sonra cihazın yazılması və oxunması standart WriteFile və ReadFile əmrlərindən istifadə etməklə həyata keçirilir.
Və bundan sonra biz artıq proqramın icrasının başladığı əsas funksiyanı görürük. Biz cihaza göstərici əldə edənə qədər getUSBHandle-i çağırır, sonra klaviaturadan əmr oxuyur və ondan asılı olaraq USB cihazından məlumatları ötürür və oxuyur.
Yuxarıdakı linkdəki layihə şərhlərlə mənbə kodunu və tərtib edilmiş proqramın özünü ehtiva edir. Uğurlar.

Bir səhv axtarmaq prosesində hidapi kitabxanasına rast gəldim. Bu, çarpaz platformadır. Və yalnız gizli cihazlarla işləmək üçün. İstifadəsi çox asandır. Layihəni onun altına gətirirəm. keçid.
Hidapi rəsmi saytdan yüklənib. Layihəyə başlamaq üçün siz linkerə setupapi.lib əlavə etməlisiniz. layihə->properties->linker->daxil edin və orada setupapi.lib imzalayın;
Uğurlar.
Kitabxananın layiqli təsvirini burada tapa bilərsiniz: http://microsin.net/programming/PC/multi-platform-hid-api.html.
Çox sağ ol!

Ancaq cihazı kompüterə fiziki olaraq qoşmaq kifayət deyil, onlar arasında məlumat mübadiləsini də qurmaq lazımdır. Portu necə seçmək və əlaqəni təşkil etmək olar? Bir neçə il əvvəl standart həll yolu COM portundan istifadə etmək idi. Yeri gəlmişkən, müxtəlif mütəxəssislər hələ də sənaye kompüterlərində 8, 16 və ya hətta 32 COM portunu quraşdırırlar (seriyalı portlar, nəzarətçilər və s. üçün müxtəlif PCI genişləndirmə kartlarının bütün kateqoriyası var). Beləliklə, RS-232 interfeysi ilə bir neçə xarici cihazı birləşdirmək lazımdırsa, köhnə ənənəyə görə, buxar gəmilərində həftələrlə Rusiyaya üzən bahalı adapterlərə və ekzotik genişləndirmə lövhələrinə ehtiyacınız ola bilər. Yeri gəlmişkən, adi bir adapterin adı "DB9m / DB25f adapter" yalnız bir kompüter mağazası meneceri üçün qıcıqlanmaya səbəb ola bilər.

HID cihazı nədir

İndi demək olar ki, bütün qurğular USB interfeysi vasitəsilə kompüterə qoşulur. Buna görə də bir çox yeni kompüterlərdə COM portu ümumiyyətlə yoxdur.

USB interfeysi - yeni xarici cihazı kompüterlə qoşmaq üçün tipik həll yolu, daha doğrusu, USB 1.1 protokoluna əsaslanan HID interfeysidir.

Bir çox insanlar HID (İnsan İnterfeysi Qurğu) interfeysinin yalnız klaviatura, siçan və joystik üçün olduğunu düşünsələr də, xarici cihazların və kompüterin qarşılıqlı əlaqəsi ilə bağlı bir çox həllər üçün uyğundur.

Əgər istifadəçi aşağı sürətli məlumat mübadiləsini (64 kbps-ə qədər) həyata keçirməlidirsə və eyni zamanda öz sürücülərinin yorucu inkişafı üçün vaxtı azaltmaq istənirsə, HID onlar üçün olduqca uyğundur. Çıxış bütün ümumi proqram platformalarında zəmanətli dəstəyi olan standart USB proqram interfeysinə əsaslanan sadə və tamamilə müasir həll olacaq.

HID cihaz xüsusiyyətləri

HID cihazı üçün proqram təminatının təşkili nöqteyi-nəzərindən hər şey olduqca cəlbedici görünür: Windows-da işləmək üçün hazır sübut edilmiş alqoritmlər əsasında tez başa düşülən kompakt kod yarada bilərsiniz. Bu halda, tərtibatçının özünün yüksək səviyyəli məlumat mübadiləsi protokolunu həyata keçirmək üçün çox vaxtı olacaq, çünki lazımi abstraksiya səviyyəsi artıq HID protokolu tərəfindən təşkil edilmişdir (cədvələ bax). Bundan əlavə, bir proqramçı üçün yazılı mübadilə protokolunu sazlamaq asandır (əlbəttə ki, işləyən bir HID cihazı varsa) - protokolun özünün nisbi sərtliyinə görə cihazı dəstəkləmək üçün sadəcə bir proqram hazırlamaq kifayətdir. kompüter tərəfindən. Hələ ki! HID cihazının yaradıcısı artıq çox iş görüb.

HID cihazı və kompüter arasında məlumat mübadiləsinin qurulması

HID cihazının kompüterlə qarşılıqlı əlaqəsini təsvir etmək üçün biz "host" terminindən istifadə edəcəyik. Bu halda, USB protokolu üzərində rabitənin ümumi fiziki arxitekturasında idarəetmə qurğusuna aiddir. Beləliklə, kompüterdəki bütün portlar hostdur. Onlara hostu olmayan müxtəlif USB cihazları (flash disklər, siçanlar, veb-kameralar, kameralar və s.) qoşa bilərsiniz. Ev sahibi kəşf, əlaqə, əlaqəni kəsmə, cihazın konfiqurasiyası, həmçinin statistikanın toplanması və enerjinin idarə edilməsini təmin edir.

HID cihazı özü səsvermə tezliyini təyin edə bilər, bu müddət ərzində hər hansı yeni məlumatın mövcudluğu aşkarlanır. Bu o deməkdir ki, belə aşağı səviyyədə belə proqramçı sistemə etibar edə bilər, çünki səsvermə sürəti və digər rabitə parametrləri HID cihaz nəzarətçi proqramında əvvəlcədən təyin edilməlidir. Bununla HID protokolu protokolun təşkili üçün ciddi tələbləri olmayan USB 1.1 və ya USB 2.0-ın ümumi təsvirindən fərqlənir. Bununla belə, yüksək səviyyəli təhlükəsizlik tələb edən xüsusi tapşırıqlar üçün, demək olar ki, eyni məlumat blokları daim ötürüldükdə, tsiklik sorğulardan qurtulmaq olduqca çətin ola bilər.

HID cihazlarının proqramlaşdırılmasının xüsusiyyətləri

HID cihazlarının xüsusi deskriptorları var. Ev sahibi cihazın HID sinifinə aid olduğunu müəyyən etdikdə, onun nəzarətini müvafiq sürücüyə ötürür. Güman edilir ki, onun rəhbərliyi altında əlavə məlumat mübadiləsi aparılır.

Windows-da HidServ sistem xidməti HID cihazlarına daxil olmaq üçün cavabdehdir. HID cihazlarına sorğuların funksiyaları və HID sürücüsü ilə işləməyin digər xüsusiyyətləri haqqında daha ətraflı məlumat P. V. Aqurovun “USB interfeysi. İstifadə və proqramlaşdırma təcrübəsi” (Sankt-Peterburq: BHV-Peterburq, 2005).

HID cihazlarının "yuxarı səviyyədə" proqramlaşdırılması

Paskalda işləyən "tətbiqi" proqramçıların çətin həyatı sübut edilmiş HID modulu ilə asanlaşdırılır. PAS, gizlənmək üçün qabıq. dll (Gizli İstifadəçi Kitabxanası - fayl xüsusiyyətlərində göstərildiyi kimi). Fayla verilən şərhlərdə deyilir ki, o, Microsoft korporasiyasının hidsdi.h və hidpi.h modullarına əsaslanır. Və HID faylının özü. PAS JEDI() paketinin bir hissəsidir.

Win32 üçün Delphi mühitində HID cihazı ilə işləmək üçün HID cihazlarına daxil olmaq üçün əlverişli qlobal menecer olan TJvHidDeviceController komponentindən istifadə olunur. Və artıq onun əsasında müəyyən bir cihazla işləmək üçün bir obyekt nümunəsi əldə edə bilərsiniz.

TJvHidDeviceController komponentinin əsas xassələri və hadisələri

TJvHidDeviceController komponentini daha ətraflı nəzərdən keçirək. Sistemə HID cihazı gəldikdə (qoşulanda) OnArrival hadisəsi işə düşür, cihaza giriş TJvHidDevice sinifinin nümunəsi vasitəsilə bu hadisənin idarəedicisində təmin edilir. OnDeviceChange sadə hadisəsi cihazın vəziyyətindəki dəyişikliyə reaksiya verir, o, yalnız sistemdəki dəyişikliklərə siqnal verir. OnDeviceData hadisəsi məlumat HID cihazlarından birindən gələndə işə düşür və aşağıdakıları idarəediciyə ötürür: HidDev: TJvHidDevice; - məlumatın alındığı cihaz;

OnDeviceDataError hadisəsi HidDev parametrlərini emal proseduruna ötürməklə məlumat ötürmə xətası haqqında xəbər verir: TJvHidDevice; - HID cihazı və Xəta: DWORD; - xəta kodu. OnDeviceUnplug hadisəsi sizə cihazın sistemdə quraşdırılmış cihazların siyahısından silindiyini bildirir. Plug və Unplug-da hadisə idarəedicilərinin növləri eynidir (mənbə mətndə: TJvHidUnplugEvent = TJvHidPlugEvent). HID cihazına uyğun gələn TJvHidDevice sinfinin obyekti işləyiciyə ötürülür.

Enumerate metodunu çağıraraq sistemdə mövcud olan HID cihazlarını ardıcıl olaraq sadalamaq üçün OnEnumerate hadisəsi nəzərdə tutulur, yəni hadisə idarəedicisində tapılan qurğular ardıcıl olaraq obyektlər kimi ötürülür. Bu hadisə, məsələn, host (kompüter) tərəfindən başlatılan HID cihazlarının vəziyyətinin yoxlanılması zamanı mövcud HID cihazlarını işləyicidən "keçmək" üçün istifadə olunan Enumerate metodu ilə məcburi şəkildə tetiklenir.

OnRemoval hadisəsi cihaz fiziki olaraq sistemdən çıxarıldıqda və OnDeviceUnplug ilə eyni TJvHidUnplugEvent idarəedici növünə malik olduqda işə düşür. CountByProductName funksiyası arqumentdə göstərilən məhsul adına uyğun gələn cihazların sayını, CountByVendorName isə arqumentdə göstərilən satıcı adlarının sayını qaytarır.

TJvHidDevice sinfinin əsas xassələri və hadisələri

TJvHidDevice sinfi tək HID cihazının virtual təsviridir. Bu sinfin yeni obyekti artıq qeyd edildiyi kimi OnArrival və ya OnEnumerate hadisəsindən əldə edilə bilər. TJvHidDeviceController və TJvHidDevice siniflərinin funksionallığı qismən təkrarlanır, çünki onlardan birincisi sistemdə mövcud olan HID cihazları dəsti ilə işləmək üçün ümumi alətlər dəstini və onlardan birinə daxil olmaq mexanizmini birləşdirir. Cihaz SerialNumber, ProductName və VendorName xassələri ilə unikal şəkildə müəyyən edilə bilər. Belə bir obyektdən istifadə edərək məlumatların gəlməsi haqqında məlumat almaq üçün OnData hadisəsindən istifadə edə bilərsiniz. Məlumat WriteFile metodu ilə göndərilir (qəti mənada funksiya vasitəsilə). WriteFile WriteFile (kernel32) sistem funksiyası ətrafında sarğıdır.

Cihazın silinməsinə nəzarət etmək üçün OnUnplug hadisəsinə öz işləyicinizi təyin etməlisiniz. HID cihazı ilə məlumat mübadiləsinə başlamazdan əvvəl HasReadWriteAccess istifadə edərək belə bir mübadilənin mümkün olduğuna əmin olmalısınız. Bu sinifdə hətta məlumat mübadiləsi xətasının baş verməsi üçün ayrıca OnDataError hadisəsi var.

İndi isə qeyri-standart cihaz - HID əsaslı plastik çip kartları ilə məlumat mübadiləsinin təşkili üçün test müştəri tətbiqini həyata keçirən "canlı" layihənin kod fraqmentlərinə baxaq. Realizm uğrunda mübarizədə müəllif siyahılardan "əlavə" texnoloji kod bağlamalarını atmamaq azadlığını götürdü.

ScanDevices metodu (Siyahı 1) sistemdə tələb olunan HID cihazının axtarışı prosesini başlamaq üçün nəzərdə tutulmuşdur. Sadala metoduna çağırış istisna olmaqla, kodun əksəriyyəti isteğe bağlıdır və məsələn, eyni test proqramına qeyri-HID interfeysində işləmək qabiliyyətini əlavə edə bilmək üçün tətbiq çevikliyini təmin edir. AddError metodu proqram işləyərkən sazlama məlumatını pəncərəyə çap edir.

Siyahı 2 tələb olunan xarici cihazı tapmaq üçün OnEnumerate hadisə idarəçisini göstərir. Sadəlik üçün proqramın ehtiyac duyduğu tipdə yalnız bir cihazla işləyə biləcəyini güman edəcəyik.

Layihənin sonrakı həyata keçirilməsini nəzərdən keçirməzdən əvvəl, qəbul edilmiş yüksək səviyyəli məlumat mübadiləsi formatı, yəni məlumatların qəbulu və ötürülməsi üsulları ilə həll olunan xüsusi tətbiqi vəzifə arasında vasitəçi olmaq üçün hazırlanmış struktur haqqında bir az danışmalıyıq. . Fakt budur ki, burada tərtibatçıya yaradıcılıq qabiliyyətlərini reallaşdırmaq imkanı verilir. Daha doğrusu, tərtibatçılar, çünki yeni protokolun yaradılması prosesi çox vaxt ikitərəfli olur və ilk skripka mübadilə alqoritmini həyata keçirməkdə çətinlik çəkən şəxs tərəfindən ifa olunur. Ümumiyyətlə, mübadilə protokolu nə olursa olsun, bəzi ümumi qəbul edilmiş ənənələrin zərərinə olsa belə, hər bir proqram təminatı obyektini mümkün qədər vizual və özünü təmin etmək həmişə xoşdur. Ən yaxşı həll üçün proqram təminatı mühiti ilə minimum əlaqə ilə və gələcək inkişaf üçün böyük imkanlarla qısa müddət ərzində həyata keçiriləcəkdir. Bu prinsiplərə əsaslanaraq, əsas anlayışın “əmr” olduğu yüksək səviyyəli mübadilə protokolu yaradılmışdır. Siyahı 3, müəllifin proqram modullarını düzəldərkən onu bir dəfədən çox xilas edən sətir məlumatlarını nə qədər sevdiyini göstərir. Hətta bir String növünə sahib olmağımız necə də gözəldir! Bütün protokol əmrləri kateqoriyalara (siniflərə) bölünür, onların daxilində məqsədini unikal şəkildə xarakterizə edən bir əmr kodu var. edParam parametri məlumatı cihaza göndərmək üçün istifadə olunur və edAnswerData parametri cihazdan alınan məlumatları ehtiva edir. Təsvir edilən qeyd üzvlərinin sətir tipi HEX sətir formatında məlumatları sərbəst və vizual şəkildə idarə etməyə imkan verir. Ən xoşagələn odur ki, təsvir olunan qeydin formatı ideoloji olaraq birbaşa məqsədi ilə təqdimatın müxtəlif formaları (INI, HEX, XML və s.) arasında ortadadır.

Komandanın icrası, yəni məlumatların cihaza göndərilməsi, uzunluğu 8 bayt olan məlumat paketlərinin göndərilməsi ilə həyata keçirilir (Siyahı 4). Bu uzunluq yeganə qərar deyil, bu seçim yuxarı təbəqə protokolunun tələbləri ilə diktə olunur və hər bir konkret halda fərqli ola bilər. Bu dad məsələsi deyilən şeydir. ExecuteCommand metodunda qəribə IsUSBMode bayrağı (PC Disk Dünyasında 5-ci siyahı) USB ilə işləmək əvəzinə COM portundan və ya başqa bir interfeysdən istifadə etməmiz lazım ola biləcəyini xatırladır. Göndərilən məlumat qrupunun əvvəlində ixtiyari seçilmiş formatın (məsələn, 3E3E3E2B) sinxronizasiya ardıcıllığı cihaza ötürülür və cihazın girişdə tamamilə qanuni məlumatlara malik olduğunu bildirir. Nəzərinizə çatdırım ki, bu halda söhbət HID-dən çox deyil, ideoloji cəhətdən aparatdan ayrılmış və xüsusi tətbiq olunan problemlərin həlli üçün nəzərdə tutulmuş konkret yüksək səviyyəli protokoldan gedir.

Cihazdan alınan məlumatların GetDataExecutor işləyicisində (8 baytlıq paket), köhnə və yeni dəyərləri göstərən ilkin işlənmiş məlumatları sonrakı emal üçün ötürmək üçün xüsusi yaradılmış OnNewInputData hadisəsi istifadə edilmişdir ("PC-də Siyahı 6" -Disk Dünyası"). Bu yolla, ilkin mərhələdə səhv, təkrarlanan və ya lazımsız daxilolma məlumatı üçün bəzi xüsusi xəbərdarlıq alqoritminin əlavə edilməsinə imkan verən xam məlumatların daxil olma hadisələri və sonrakı emal göstəriciləri ayrılır.

Burada təqdim olunan HID cihazı ilə işləmək nümunələri məqalənin ümumi ideyasını - Delphi alətlərindən istifadə edərək qeyri-standart HID cihazlarının proqramlaşdırılmasının nisbi sadəliyini göstərir.