Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Od Windows 8 operační systém Windows obsahuje ovladač třídy HID (SensorsHIDClassDriver.dll), který podporuje jedenáct typů senzorů, které komunikují pomocí HID přenosu.
Tady je seznam podporovaných senzorů:
- Akcelerometr 3D
- Okolní světlo
- Okolní teplota
- Tlak vzduchu
- Kompas 3D
- Orientace zařízení
- Gyroskop 3D
- Vlhkost
- 3D Inklinometr
- Přítomnost
- Blízkost
Následující obrázek znázorňuje tok dat ze dvou aplikací snímačů směrem dolů přes zásobník ovladačů a nakonec do samotného hardwaru.
Podpora vlastních senzorů
Kromě jedenácti senzorů zahrnutých v předchozích seznamech podporuje třídní ovladač také vlastní třídu. Tato třída umožňuje výrobci senzorů integrovat zařízení, které nebylo nalezeno v předchozím seznamu: Například senzor oxidu uhelnatého. Vlastní senzor se prezentuje rozhraní API senzoru jako vlastní zařízení s jedinečnými vlastnostmi.
Architektura a přehled
Pokud vytváříte firmware kompatibilního senzoru, budete potřebovat základní znalost V/V modelu podporovaného ovladačem třídy.
- Senzor odešle buď zprávu o funkci, nebo vstupní zprávu ovladači třídy HID. Hlášení o vlastnostech se odešle v reakci na požadavek od ovladače. Tato sestava obsahuje data vlastností, včetně nastavení citlivosti změny senzoru, intervalu zprávy a stavu zprávy. Vstupní zpráva se odešle buď na žádost, nebo asynchronně v reakci na událost. Tato zpráva obsahuje skutečná data ze snímačů. Například u akcelerometru sestava obsahuje přetížení G podél os x, y a z.
- Ovladač třídy HID odesílá do senzoru zprávy o funkcích. Když například aplikace požádá o nový interval citlivosti vůči změnám nebo interval sestavy, ovladač tyto hodnoty zabalí do reportu o funkcích a použije tento report k odeslání požadavku do firmwaru senzoru.
Následující diagram znázorňuje V/V model:
Ukázkový deskriptor zprávy
Pokud váš senzor podporuje jednu ze sedmi kategorií nativních pro třídní ovladač, jeho firmware musí podporovat konkrétní funkce a vstupní sestavy. Hlášení funkcí zahrnují aktuální stav hlášení senzoru, jeho stav, citlivost změny a interval hlášení (kromě dalších možných vlastností). Vstupní zprávy obsahují měření snímačů, například hodnoty Pravda nebo Nepravda pro přepínač, hodnoty přetížení (G-force) pro akcelerometr nebo LUX pro senzor okolního světla.
Ukázková zpráva o funzionalitě akcelerometru
Následující příklad kódu ukazuje výkaz funkcí HID pro akcelerometr. Všimněte si samopopisné povahy této sestavy. Zahrnuje minimální a maximální hodnoty a počet a velikost jednotlivých polí.
//feature reports (xmit/receive)
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_SENSOR_STATUS,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_CHANGE_SENSITIVITY_ABS,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_16(0xFF,0xFF), //LOGICAL_MAXIMUM (65535)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF), //LOGICAL_MAXIMUM (4294967295)
HID_REPORT_SIZE(32),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_MILLISECOND,
HID_UNIT_EXPONENT(0),
HID_FEATURE(Data_Var_Abs),
Ukázková zpráva o vstupu z akcelerometru
Následující příklad kódu ukazuje vstupní zprávu HID pro stejné zařízení. Znovu si všimněte samopopisné povahy polí v této zprávě.
//input reports (transmit)
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_STATE,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_EVENT,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_X_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Y_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Z_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(3),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_INTENSITY,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),