Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od systemu Windows 8, system operacyjny Windows zawiera wbudowany sterownik klasy HID (SensorsHIDClassDriver.dll), który obsługuje jedenaście typów czujników komunikujących się przy użyciu transportu HID.
Oto lista obsługiwanych czujników:
- Akcelerometr 3D
- Światło otoczenia
- Temperatura otoczenia
- Ciśnienie atmosferyczne
- Compass 3D
- Orientacja urządzenia
- Gyroscope 3D
- Wilgotność
- Inklinometr 3D
- Obecność
- Bliskość
Poniższa ilustracja przedstawia przepływ danych tam i z powrotem z dwóch aplikacji czujników, w dół przez warstwę sterowników, a na koniec do samego sprzętu.
Obsługa czujników niestandardowych
Oprócz jedenastu czujników omówionych na poprzednich listach sterownik klasy obsługuje również klasę Custom. Ta klasa umożliwia producentowi czujnika zintegrowanie urządzenia, które nie znajduje się na poprzedniej liście: na przykład czujnik tlenku węgla. Czujnik niestandardowy przedstawia się interfejsowi API czujnika jako niestandardowemu urządzeniu z unikatowymi właściwościami.
Architektura i omówienie
Jeśli tworzysz oprogramowanie układowe dla zgodnego czujnika, powinieneś/powinnaś mieć podstawową wiedzę na temat modelu wejścia/wyjścia obsługiwanego przez sterownik klasy.
- Czujnik wysyła raport funkcji lub raport wejściowy do sterownika klasy HID. Raport funkcji jest wysyłany w odpowiedzi na żądanie od sterownika. Ten raport zawiera dane dotyczące właściwości, w tym ustawienie czułości czujnika, interwał raportowania i stan raportowania. Raport wejściowy jest wysyłany na żądanie lub asynchronicznie w odpowiedzi na zdarzenie. Ten raport zawiera rzeczywiste dane czujnika. Na przykład w przypadku akcelerometru raport zawiera siły G wzdłuż osi x, y i z.
- Sterownik klasy HID wysyła raporty funkcji do czujnika. Na przykład, gdy aplikacja żąda nowej czułości na zmiany lub interwału raportu, sterownik pakuje te wartości do raportu cech i używa tego raportu do wysyłania żądania do oprogramowania układowego czujnika.
Na poniższym diagramie przedstawiono model I/O:
Przykładowy deskryptor raportu
Jeśli czujnik obsługuje jedną z siedmiu kategorii natywnych dla sterownika klasy, jego oprogramowanie układowe musi obsługiwać określone funkcje i raporty wejściowe. Raporty funkcji obejmują bieżący stan raportowania czujnika, jego stan, czułość zmian i interwał raportowania (oprócz innych możliwych właściwości). Raporty wejściowe zawierają odczyty czujników: Prawda lub Fałsz dla przełącznika, wartości siły G dla akcelerometru lub LUX dla czujnika światła otoczenia.
Przykładowy raport funkcji akcelerometru
Poniższy przykład kodu przedstawia raport funkcji HID dla akcelerometru. Zwróć uwagę na opisowy charakter tego raportu. Zawiera minimalne i maksymalne wartości oraz liczbę i rozmiar poszczególnych pól.
//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),
Przykładowy raport wejściowy akcelerometru
Poniższy przykład kodu przedstawia raport wejściowy HID dla tego samego urządzenia. Ponownie zanotuj samoopisowy charakter pól w tym raporcie.
//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),