USB HID डिस्क्रिप्टर बनाने के लिए मैं मान कहाँ खोजता हूँ?


10

मैं एक PIC32 USB परियोजना के लिए मैं कोशिश करना चाहता हूँ के लिए सी में एक USB छिपाई वर्णक बनाने पर अपने आप को थोड़ा शिक्षित करने की कोशिश कर रहा हूँ।

मैंने http://www.usb.org/developers/hidpage/ से HID यूसेज टेबल्स डॉक्यूमेंट डाउनलोड किया है और यह जानने की कोशिश कर रहा हूँ कि HID डिस्क्रिप्टर में विभिन्न तत्वों के लिए वास्तविक मान कहाँ दर्शाए गए हैं।

मैं जिस नमूने को देख रहा हूं, उसके एक अंश के साथ समझाता हूं:

ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={{
  0x05,0x01,        // USAGE_PAGE (Generic Desktop)
  0x09,0x05,        // USAGE (Game Pad)
  0xA1,0x01,        // COLLECTION (Application)
  0x15,0x00,        //   LOGICAL_MINIMUM(0)
  0x25,0x01,        //   LOGICAL_MAXIMUM(1)
  0x35,0x00,        //   PHYSICAL_MINIMUM(0)
  0x45,0x01,        //   PHYSICAL_MAXIMUM(1)
  // ...

उपर्युक्त उदाहरण से, यह स्पष्ट है कि BYTE सरणी मुख्य / मूल्य जोड़े का गठन है, अगर मैं इसे कह सकता हूं। उदाहरण के लिए दूसरी पंक्ति: 0x05,0x01 कुंजी 0x05 को इंगित करती है, जो कि उपयोग पृष्ठ है , और 0x01 जेनेरिक डेस्कटॉप को इंगित करने वाला मान है

मैं यह पता लगाने की कोशिश कर रहा हूं कि इन मूल्यों को एचआईडी उपयोग तालिका पीडीएफ दस्तावेज़ में कहां इंगित किया गया है। उदाहरण के लिए, मुझे कोई संदर्भ नहीं मिल रहा है

USAGE_PAGE == 0x05

और उदाहरण के लिए

COLLECTION == 0xA1

मैंने 0xA1 के लिए पीडीएफ को खोजने की कोशिश की, कोई नतीजा नहीं निकला। एकमात्र तरीका मैं यह पता लगाने में सक्षम हूं कि मान क्या हैं, या तो उदाहरण की टिप्पणियों को देख रहे हैं, या ऊपर दिए गए लिंक से यूएसबी डिस्क्रिप्टर टूल का उपयोग करके ।

मैं बस सोच रहा हूँ, क्या मैं इस कुंजी / मूल्य संदर्भ दस्तावेज को गायब करने के लिए पूरी तरह से पागल हूँ?

उदाहरणों के भार ऑनलाइन हैं, उदाहरण के लिए निम्न लिंक: http://www.frank-zhao.com/cache/hid_tutorial_1.php

लेकिन यहां तक ​​कि यह END_COLLECTION == 0xc0 जैसे स्ट्रिंग मानों का भी संदर्भ देता है

मुझे इन मूल्यों के लिए संदर्भ कहां मिलेगा? मैं क्या खो रहा हूँ?


ऐसा लगता है कि मैं HID डिस्क्रिप्टर को बनाने के लिए USB डिस्क्रिप्टर टूल का उपयोग करने जा रहा हूं। :)
josef.van.niekerk

जवाबों:


20

USB प्रलेखन बहुत भयानक है। यह अत्यधिक सामान्यीकरण से ग्रस्त है, जहां वे सब कुछ इतना सामान्य और सामान्य बनाने की कोशिश कर रहे हैं कि डॉक्स से किसी भी विशिष्ट एप्लिकेशन को प्राप्त करना कठिन है।

वर्णनकर्ता प्रारूप आपके द्वारा प्रदान किए गए usb.org के लिंक पर " HID के लिए डिवाइस क्लास परिभाषा " नामक दस्तावेज़ में स्थित है ।

महत्वपूर्ण बात यह है कि आप याद कर रहे हैं कि विभिन्न खंड (जैसे 0x05) उपसर्ग 0x के साथ प्रलेखित नहीं है । वास्तव में, वे आम तौर पर कच्चे बाइनरी में उनका वर्णन करते हैं ।

उदाहरण के लिए, 0xA1 के संबंध में: यहां छवि विवरण दर्ज करें

आप देख सकते हैं कि द्विआधारी उपसर्ग 1010_00nnइंगित करता है कि एक संग्रह है, और पोस्टफिक्स nnnn_nn01इंगित करता है कि यह 1 बाइट लंबा है। फिर बाद के बाइट को फिर संग्रह प्रकार के रूप में व्याख्या की जाती है, इस प्रकार के आवेदन में। यह तब संदर्भ सेट करता है जिसमें आगे बाइट्स की व्याख्या की जाती है, जब तक छिपाई डिस्क्रिप्टर पार्सर या तो एक और संग्रह टैग, या एक अंत संग्रह मार्कर देखता है।

आप देख सकते हैं कि END COLLECTIONके रूप में निर्दिष्ट किया जाता है 0b1100_00nn, के साथ nnपर ध्यान नहीं दिया जा रहा है। यहीं 0xC0से आ रहा है।

आप यह भी देखना शुरू कर सकते हैं कि अन्य तर्कों का निर्माण कैसे किया जाता है। उदाहरण के लिए, LOGICAL MINIMUMहै 0x25, या 0b0010_0101। उस से, हम देख सकते हैं कि हमारे पास एक 0bnnnn_nn01या एक बाइट की डेटा-लंबाई है , और इसके लिए निर्दिष्ट LOGICAL MINIMUMहै0b0010_01nn

यहां छवि विवरण दर्ज करें

USAGE PAGEविवरणक के लिए संरचना समान है। उपयोग पृष्ठ का चयन करने का आदेश है 0000_01nn, और nnnn_nn01यह इंगित करता है कि यह 1 बाइट लंबा है। मुझे लगता है कि, क्योंकि प्रलेखन कहता है कि उपयोग-पृष्ठ 32 बिट्स हैं, ऊपरी बिट्स को शून्य माना जाता है, या प्रलेखन के दूसरे भाग से अनुमान लगाया गया है। मैं वास्तव में नहीं जानता कि वे कैसे निर्दिष्ट हैं।

यहाँ विभिन्न HID स्थिरांक का एक अच्छा पृष्ठ है

और बीएसडी स्रोतों से एक और हालिया संस्करण यहां (धन्यवाद, @crazysim!) (नवीनतम हेड , पिछले नहीं हो सकता है)।


मुझे जिस चीज की जरूरत थी। गहराई से जवाब देने के लिए बहुत बहुत धन्यवाद। यह वास्तव में बहुत मदद करता है! ;)
josef.van.niekerk

1
@ josef.van.niekerk - कोई समस्या नहीं। USB मानकों में खोदने से पहले यह एक समय हो चुका है, और मुझे याद के रूप में वे अपारदर्शी हैं।
कॉनर वुल्फ

मैं ग्रेडिंग के लिए माफी माँगता हूँ, लेकिन USB.org का लिंक किसी और काम नहीं करता।
रॉब वैन डेर वीर

1
@RobvanderVeer को अब ठीक किया जाना चाहिए।
HoosierEE

1
क्या "विभिन्न HID स्थिरांक के अच्छे पृष्ठ" को FreeBSD स्रोतों से उस फ़ाइल के बाद के संस्करण में बदला जाना चाहिए ? ?
crazysim
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.