diff --git a/headers/os/drivers/usb/USB_audio.h b/headers/os/drivers/usb/USB_audio.h new file mode 100644 index 0000000000..d3086e54da --- /dev/null +++ b/headers/os/drivers/usb/USB_audio.h @@ -0,0 +1,47 @@ +#ifndef USB_AUDIO_H +#define USB_AUDIO_H + +// (Partial) USB Class Definitions for Audio Devices, version 1.0 +// (usb_audio_class_10.pdf) + +#define USB_AUDIO_DEVICE_CLASS 0x01 +#define USB_AUDIO_CLASS_VERSION 0x0100 + +enum { + USB_AUDIO_INTERFACE_AUDIO_CLASS = 0x01 +}; + +enum { // Audio Interface Subclasses + USB_AUDIO_INTERFACE_AUDIOCONTROL_SUBCLASS = 0x01, // + USB_AUDIO_INTERFACE_AUDIOSTREAMING_SUBCLASS, // + USB_AUDIO_INTERFACE_MIDISTREAMING_SUBCLASS // +}; + +enum { // Audio Class-Specific AudioControl Interface descriptor subtypes + USB_AUDIO_AC_HEADER = 0x01, + USB_AUDIO_AC_INPUT_TERMINAL, + USB_AUDIO_AC_OUTPUT_TERMINAL, + USB_AUDIO_AC_MIXER_UNIT, + USB_AUDIO_AC_SELECTOR_UNIT, + USB_AUDIO_AC_FEATURE_UNIT, + USB_AUDIO_AC_PROCESSING_UNIT, + USB_AUDIO_AC_EXTENSION_UNIT +}; + +enum { // Audio Class-Specific AudioStreaming Interface descriptor subtypes + USB_AUDIO_AS_GENERAL = 0x01, + USB_AUDIO_AS_FORMAT_GENERAL, + USB_AUDIO_AS_FORMAT_SPECIFIC +}; + +enum { // Processing Unit Process Types (for USB_AUDIO_AC_PROCESSING_UNIT) + USB_AUDIO_UP_DOWNMIX_PROCESS = 0x01, + USB_AUDIO_DOLBY_PROLOGIC_PROCESS, + USB_AUDIO_3D_STEREO_EXTENDER_PROCESS, + USB_AUDIO_REVERBERATION_PROCESS, + USB_AUDIO_CHORUS_PROCESS, + USB_AUDIO_DYN_RANGE_COMP_PROCESS +}; + + +#endif // USB_AUDIO_H diff --git a/headers/os/drivers/usb/USB_cdc.h b/headers/os/drivers/usb/USB_cdc.h new file mode 100644 index 0000000000..22e46ccf43 --- /dev/null +++ b/headers/os/drivers/usb/USB_cdc.h @@ -0,0 +1,136 @@ +#ifndef USB_CDC_H +#define USB_CDC_H + +// (Partial) USB Class Definitions for Communication Devices (CDC), version 1.1 +// (usbcdc11.pdf) + +#define USB_COMMUNICATION_DEVICE_CLASS 0x02 + +#define USB_CDC_COMMUNICATION_INTERFACE_CLASS 0x02 +#define USB_CDC_CLASS_VERSION 0x0101 + +enum { // Communication Interface Subclasses + USB_CDC_COMMUNICATION_INTERFACE_DLCM_SUBCLASS = 0x01, // Direct Line Control Model + USB_CDC_COMMUNICATION_INTERFACE_ACM_SUBCLASS, // Abstract Control Model + USB_CDC_COMMUNICATION_INTERFACE_TCM_SUBCLASS, // Telephone Control Model + USB_CDC_COMMUNICATION_INTERFACE_MCCM_SUBCLASS, // Multi-Channel Control Model + USB_CDC_COMMUNICATION_INTERFACE_CAPICM_SUBCLASS, // CAPI Control Model + USB_CDC_COMMUNICATION_INTERFACE_ENCM_SUBCLASS, // Ethernet Networking Control Model + USB_CDC_COMMUNICATION_INTERFACE_ATMNCM_SUBCLASS // ATM Networking Control Model +}; + +enum { // Communication Interface Class Control Protocols + USB_CDC_COMMUNICATION_INTERFACE_NONE_PROTOCOL = 0x00, // No class specific protocol required + USB_CDC_COMMUNICATION_INTERFACE_V25TER_PROTOCOL = 0x01, // Common AT commands (also knowns as "Hayes compatible") + USB_CDC_COMMUNICATION_INTERFACE_SPECIFIC_PROTOCOL = 0xff // Vendor-specific protocol +}; + +#define USB_CDC_DATA_INTERFACE_CLASS 0x0a + +enum { // Management Element Requests (p62) + USB_CDC_SEND_ENCAPSULATED_COMMAND = 0x00, + USB_CDC_GET_ENCAPSULATED_RESPONSE, + USB_CDC_SET_COMM_FEATURE, + USB_CDC_GET_COMM_FEATURE, + USB_CDC_CLEAR_COMM_FEATURE, + // 0x05 -> 0x0F: reserved for future use + USB_CDC_SET_AUX_LINE_STATE = 0x10, + USB_CDC_SET_HOOK_STATE, + USB_CDC_PULSE_SETUP, + USB_CDC_SEND_PULSE, + USB_CDC_SET_PULSE_TIME, + USB_CDC_RING_AUX_JACK, + // 0x16 -> 0x1F: reserved for future use + USB_CDC_SET_LINE_CODING = 0x20, + USB_CDC_GET_LINE_CODING, + USB_CDC_SET_CONTROL_LINE_STATE, + USB_CDC_SEND_BREAK, + // 0x24 -> 0x2F: reserved for future use + USB_CDC_SET_RINGER_PARMS = 0x30, + USB_CDC_GET_RINGER_PARMS, + USB_CDC_SET_OPERATION_PARMS, + USB_CDC_GET_OPERATION_PARMS, + USB_CDC_SET_LINE_PARMS, + USB_CDC_GET_LINE_PARMS, + USB_CDC_DIAL_DIGITS, + USB_CDC_SET_UNIT_PARAMETER, + USB_CDC_GET_UNIT_PARAMETER, + USB_CDC_CLEAR_UNIT_PARAMETER, + USB_CDC_GET_PROFILE, + // 0x3B -> 0x3F: reserved for future use + USB_CDC_SET_ETHERNET_MULTICAST_FILTERS = 0x40, + USB_CDC_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER, + USB_CDC_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER, + USB_CDC_SET_ETHERNET_PACKET_FILTER, + USB_CDC_GET_ETHERNET_STATISTIC, + // 0x45 -> 0x4F: reserved for future use + USB_CDC_SET_ATM_DATA_FORMAT = 0x50, + USB_CDC_GET_ATM_DEVICE_STATISTICS, + USB_CDC_SET_ATM_DEFAULT_VC, + USB_CDC_GET_ATM_VC_STATISTICS + // 0x54 -> 0xFF: reserved for future use +}; + +enum { // Feature Selector (for USB_CDC_SET/GET/CLEAR_COMM_FEATURE (p65-66)) + USB_CDC_ABSTRACT_STATE = 0x01, + USB_CDC_COUNTRY_SETTING = 0x02 +}; + +enum { // ABSTRACT_STATE bitmap (for USB_CDC_ABSTRAT_STATE Feature Selector (p66)) + USB_CDC_ABSTRACT_STATE_IDLE = 0x01, + USB_CDC_ABSTRACT_STATE_DATA_MULTIPLEXED = 0x02 +}; + +typedef struct { // Line Coding Structure (for USB_CDC_SET/GET_LINE_CODING (p69)) + uint32 speed; + uint8 stopbits; + uint8 parity; + uint8 databits; +} _PACKED usb_cdc_line_coding; + +enum { // CDC stopbits values (for Line Coding Structure stopbits field) + USB_CDC_1_STOPBIT = 0, + USB_CDC_1_5_STOPBITS, + USB_CDC_2_STOPBITS +}; + +enum { // CDC parity values (for Line Coding Structure parity field) + USB_CDC_NO_PARITY = 0, + USB_CDC_ODD_PARITY, + USB_CDC_EVEN_PARITY, + USB_CDC_MARK_PARITY, + USB_CDC_SPACE_PARITY +}; + +enum { // CDC Control Signal bitmap (for CDC_SET_CONTROL_LINE_STATE request) + USB_CDC_CONTROL_SIGNAL_STATE_DTR = 0x01, + USB_CDC_CONTROL_SIGNAL_STATE_RTS = 0x02 +}; + +enum { // Notification Elements notifications (p84) + USB_CDC_NETWORK_CONNECTION = 0x00, + USB_CDC_RESPONSE_AVAILABLE, + // 0x02 -> 0x07: reserved for future use + USB_CDC_AUX_JACK_HOOK_STATE = 0x08, + USB_CDC_RING_DETECT, + // 0x0a -> 0x1f: reserved for future use + USB_CDC_SERIAL_STATE = 0x20, + // 0x21 -> 0x27: reserved for future use + USB_CDC_CALL_STATE_CHANGE = 0x28, + USB_CDC_LINE_STATE_CHANGE, + USB_CDC_CONNECTION_SPEED_CHANGE + // 0x2b -> 0xff: reserved for future use +}; + +enum { // CDC UART State bitmap (for USB_CDC_SERIAL_STATE notification) + USB_CDC_UART_STATE_DCD = 0x01, + USB_CDC_UART_STATE_DSR = 0x02, + USB_CDC_UART_STATE_BREAK = 0x04, + USB_CDC_UART_STATE_RING = 0x08, + USB_CDC_UART_STATE_FRAMING_ERROR = 0x10, + USB_CDC_UART_STATE_PARITY_ERROR = 0x20, + USB_CDC_UART_STATE_OVERRUN_ERROR = 0x40 +}; + +#endif // USB_CDC_H + diff --git a/headers/os/drivers/usb/USB_langIDs.h b/headers/os/drivers/usb/USB_langIDs.h new file mode 100644 index 0000000000..e8e5d7c0f8 --- /dev/null +++ b/headers/os/drivers/usb/USB_langIDs.h @@ -0,0 +1,173 @@ +#ifndef USB_LANGIDS_H +#define USB_LANGIDS_H + +// USB Language Identifiers, 3/29/2000, version 1.0 +// (http://www.usb.org/developers/data/USB_LANGIDs.pdf) + +#define USB_LANGIDS_VERSION 0x0100 // version 1.0 + +// descriptor string index 0 = supported LANGIDs array +#define USB_LANGIDS_STRING_INDEX (0) + +#define USB_PRIMARY_LANGID_MASK (0x003F) // 9 to 0 bits +#define USB_SUB_LANGID_MASK (0xFC00) // 15 to 10 bits + +#define USB_PRIMARY_LANGID(id) (id & USB_PRIMARY_LANGID_MASK) +#define USB_SUB_LANGID(id) ((id & USB_SUB_LANGID_MASK) >> 10) + +enum { + USB_LANGID_AFRIKAANS = 0x0436, // Afrikaans + USB_LANGID_ALBANIAN = 0x041c, // Albanian + USB_LANGID_ARABIC_SAUDI_ARABIA = 0x0401, // Arabic (Saudi Arabia) + USB_LANGID_ARABIC_IRAK = 0x0801, // Arabic (Irak) + USB_LANGID_ARABIC_EGYPT = 0x0c01, // Arabic (Egypt) + USB_LANGID_ARABIC_LYBYA = 0x1001, // Arabic (Libya) + USB_LANGID_ARABIC_ALGERIA = 0x1401, // Arabic (Algeria) + USB_LANGID_ARABIC_MOROCCO = 0x1801, // Arabic (Morocco) + USB_LANGID_ARABIC_TUNISIA = 0x1c01, // Arabic (Tunisia) + USB_LANGID_ARABIC_OMAN = 0x2001, // Arabic (Oman) + USB_LANGID_ARABIC_YEMEN = 0x2401, // Arabic (Yemen) + USB_LANGID_ARABIC_SYRIA = 0x2801, // Arabic (Syria) + USB_LANGID_ARABIC_JORDAN = 0x2c01, // Arabic (Jordan) + USB_LANGID_ARABIC_LEBANON = 0x3001, // Arabic (Lebanon) + USB_LANGID_ARABIC_KUWAIT = 0x3401, // Arabic (Kuwait) + USB_LANGID_ARABIC_UAE = 0x3801, // Arabic (U.A.E.) + USB_LANGID_ARABIC_BAHRAIN = 0x3c01, // Arabic (Bahrain) + USB_LANGID_ARABIC_QATAR = 0x4001, // Arabic (Qatar) + USB_LANGID_ARMENIAN = 0x042b, // Armenian + USB_LANGID_ASSAMESE = 0x044d, // Assamese + USB_LANGID_AZERI_LATIN = 0x042c, // Azeri (Latin) + USB_LANGID_AZERI_CYRILLIC = 0x082c, // Azeri (Cyrillic) + USB_LANGID_BASQUE = 0x042d, // Basque + USB_LANGID_BELARUSSIAN = 0x0423, // Belarussian + USB_LANGID_BENGALI = 0x0445, // Bengali + USB_LANGID_BULGARIAN = 0x0402, // Bulgarian + USB_LANGID_BURMESE = 0x0455, // Burmese + USB_LANGID_CATALAN = 0x0403, // Catalan + USB_LANGID_CHINESE_TAIWAN = 0x0404, // Chinese (Taiwan) + USB_LANGID_CHINESE_PRC = 0x0804, // Chinese (PRC = People Republic of Chinese) + USB_LANGID_CHINESE_HONG_KONG = 0x0c04, // Chinese (Hong Kong) + USB_LANGID_CHINESE_SINGAPORE = 0x1004, // Chinese (Singapore) + USB_LANGID_CHINESE_MACAU_SAR = 0x1404, // Chinese (Macau SAR) + USB_LANGID_CROATIAN = 0x041a, // Croatian + USB_LANGID_CZECH = 0x0405, // Czech + USB_LANGID_DANISH = 0x0406, // Danish + USB_LANGID_DUTCH_NETHERLANDS = 0x0413, // Dutch (Netherlands) + USB_LANGID_DUTCH_BELGIUM = 0x0813, // Dutch (Belgium) + USB_LANGID_ENGLISH_UNITED_STATES = 0x0409, // English (United States) + USB_LANGID_ENGLISH_UNITED_KINGDOM = 0x0809, // English (United Kingdom) + USB_LANGID_ENGLISH_AUSTRALIAN = 0x0c09, // English (Australian) + USB_LANGID_ENGLISH_CANADIAN = 0x1009, // English (Canadian) + USB_LANGID_ENGLISH_NEW_ZEALAND = 0x1409, // English (New Zealand) + USB_LANGID_ENGLISH_IRELAND = 0x1809, // English (Ireland) + USB_LANGID_ENGLISH_SOUTH_AFRICA = 0x1c09, // English (South Africa) + USB_LANGID_ENGLISH_JAMAICA = 0x2009, // English (Jamaica) + USB_LANGID_ENGLISH_CARIBBEAN = 0x2409, // English (Caribbean) + USB_LANGID_ENGLISH_BELIZE = 0x2809, // English (Belize) + USB_LANGID_ENGLISH_TRINIDAD = 0x2c09, // English (Trinidad) + USB_LANGID_ENGLISH_ZIMBABWE = 0x3009, // English (Zimbabwe) + USB_LANGID_ENGLISH_PHLIPPINES = 0x3409, // English (Philippines) + USB_LANGID_ESTONIAN = 0x0425, // Estonian + USB_LANGID_FAEROESE = 0x0438, // Faeroese + USB_LANGID_FARSI = 0x0429, // Farsi + USB_LANGID_FINNISH = 0x040b, // Finnish + USB_LANGID_FRENCH_STANDARD = 0x040c, // French (Standard) + USB_LANGID_FRENCH_BELGIAN = 0x080c, // French (Belgian) + USB_LANGID_FRENCH_CANADIAN = 0x0c0c, // French (Canadian) + USB_LANGID_FRENCH_SWITZERLAND = 0x100c, // French (Switzerland) + USB_LANGID_FRENCH_LUXEMBOURG = 0x140c, // French (Luxembourg) + USB_LANGID_FRENCH_MONACO = 0x180c, // French (Monaco) + USB_LANGID_GEORGIAN = 0x0437, // Georgian + USB_LANGID_GERMAN_STANDARD = 0x0407, // German (Standard) + USB_LANGID_GERMAN_SWITZERLAND = 0x0807, // German (Switzerland) + USB_LANGID_GERMAN_AUSTRIA = 0x0c07, // German (Austria) + USB_LANGID_GERMAN_LUXEMBOURG = 0x1007, // German (Luxembourg) + USB_LANGID_GERMAN_LIECHTENSTEIN = 0x1407, // German (Liechtenstein) + USB_LANGID_GREEK = 0x0408, // Greek + USB_LANGID_GUJARATI = 0x0447, // Gujarati + USB_LANGID_HEBREW = 0x040d, // Hebrew + USB_LANGID_HINDI = 0x0439, // Hindi + USB_LANGID_HUNGARIAN = 0x040e, // Hungarian + USB_LANGID_ICELANDIC = 0x040f, // Icelandic + USB_LANGID_INDONESIAN = 0x0421, // Indonesian + USB_LANGID_ITALIAN_STANDARD = 0x0410, // Italian (Standard) + USB_LANGID_ITALIAN_SWITZERLAND = 0x0810, // Italian (Switzerland) + USB_LANGID_JAPANESE = 0x0411, // Japanese + USB_LANGID_KANNADA = 0x044b, // Kannada + USB_LANGID_KASHMIRI_INDIA = 0x0860, // Kashmiri (India) + USB_LANGID_KAZAKH = 0x043f, // Kazakh + USB_LANGID_KONKANI = 0x0457, // Konkani + USB_LANGID_KOREAN_JOHAB = 0x0412, // Korean (Johab) + USB_LANGID_LATVIAN = 0x0426, // Latvian + USB_LANGID_LITHUANIAN = 0x0427, // Lithuanian + USB_LANGID_LITHUANIAN_CLASSIC = 0x0827, // Lithuanian (Classic) + USB_LANGID_MACEDONIAN = 0x042f, // Macedonian + USB_LANGID_MALAY_MALAYSIAN = 0x043e, // Malay (Malaysian) + USB_LANGID_MALAY_BRUNEI_DARUSSALAM = 0x083e, // Malay (Brunei Darussalam) + USB_LANGID_MALAYALAM = 0x044c, // Malayalam + USB_LANGID_MANIPURI = 0x0458, // Manipuri + USB_LANGID_MARATHI = 0x044e, // Marathi + USB_LANGID_NEPALI_INDIA = 0x0861, // Nepali (India) + USB_LANGID_NORWEGIAN_BOKMAL = 0x0414, // Norwegian (Bokmal) + USB_LANGID_NORWEGIAN_NYNORSK = 0x0814, // Norwegian (Nynorsk) + USB_LANGID_ORIYA = 0x0448, // Oriya + USB_LANGID_POLISH = 0x0415, // Polish + USB_LANGID_PORTUGUESE_BRAZIL = 0x0416, // Portuguese (Brazil) + USB_LANGID_PORTUGUESE_STANDARD = 0x0816, // Portuguese (Standard) + USB_LANGID_PUNJABI = 0x0446, // Punjabi + USB_LANGID_ROMANIAN = 0x0418, // Romanian + USB_LANGID_RUSSIAN = 0x0419, // Russian + USB_LANGID_SANSKRIT = 0x044f, // Sanskrit + USB_LANGID_SERBIAN_CYRILLIC = 0x0c1a, // Serbian (Cyrillic) + USB_LANGID_SERBIAN_LATIN = 0x081a, // Serbian (Latin) + USB_LANGID_SINDHI = 0x0459, // Sindhi + USB_LANGID_SLOVAK = 0x041b, // Slovak + USB_LANGID_SLOVENIAN = 0x0424, // Slovenian + USB_LANGID_SPANNISH_TRADITIONAL_SORT= 0x040a, // Spannish (Traditional Sort) + USB_LANGID_SPANNISH_MEXICAN = 0x080a, // Spannish (Mexican) + USB_LANGID_SPANNISH_MODERN_SORT = 0x0c0a, // Spannish (Modern Sort) + USB_LANGID_SPANNISH_GUATEMALA = 0x100a, // Spannish (Guatemala) + USB_LANGID_SPANNISH_COSTA_RICA = 0x140a, // Spannish (Costa Rica) + USB_LANGID_SPANNISH_PANAMA = 0x180a, // Spannish (Panama) + USB_LANGID_SPANNISH_DOMINICAN_REPUBLIC = 0x1c0a, // Spannish (Dominican Republic) + USB_LANGID_SPANNISH_VENEZUELA = 0x200a, // Spannish (Venezuela) + USB_LANGID_SPANNISH_COLOMBIA = 0x240a, // Spannish (Colombia) + USB_LANGID_SPANNISH_PERU = 0x280a, // Spannish (Peru) + USB_LANGID_SPANNISH_ARGENTINA = 0x2c0a, // Spannish (Argentina) + USB_LANGID_SPANNISH_ECUADOR = 0x300a, // Spannish (Ecuador) + USB_LANGID_SPANNISH_CHILE = 0x340a, // Spannish (Chile) + USB_LANGID_SPANNISH_URUGUAY = 0x380a, // Spannish (Uruguay) + USB_LANGID_SPANNISH_PARAGUAY = 0x3c0a, // Spannish (Paraguay) + USB_LANGID_SPANNISH_BOLIVIA = 0x400a, // Spannish (Bolivia) + USB_LANGID_SPANNISH_EL_SALVADOR = 0x440a, // Spannish (El Salvador) + USB_LANGID_SPANNISH_HONDURAS = 0x480a, // Spannish (Honduras) + USB_LANGID_SPANNISH_NICARAGUA = 0x4c0a, // Spannish (Nicaragua) + USB_LANGID_SPANNISH_PUERTO_RICO = 0x500a, // Spannish (Puerto Rico) + USB_LANGID_SUTU = 0x0430, // Sutu + USB_LANGID_SWAHILI_KENYA = 0x0441, // Swahili (Kenya) + USB_LANGID_SWEDISH = 0x041d, // Swedish + USB_LANGID_SWEDISH_FINLAND = 0x081d, // Swedish (Finland) + USB_LANGID_TAMIL = 0x0449, // Tamil + USB_LANGID_TATAR_TATARSTAN = 0x0444, // Tatar (Tatarstan) + USB_LANGID_TELUGU = 0x044a, // Telugu + USB_LANGID_THAI = 0x041e, // Thai + USB_LANGID_TURKISH = 0x041f, // Turkish + USB_LANGID_UKRAINIAN = 0x0422, // Ukrainian + USB_LANGID_URDU_PAKISTAN = 0x0420, // Urdu (Pakistan) + USB_LANGID_URDU_INDIA = 0x0820, // Urdu (India) + USB_LANGID_UZBEK_LATIN = 0x0443, // Uzbek (Latin) + USB_LANGID_UZBEK_CYRILLIC = 0x0843, // Uzbek (Cyrillic) + USB_LANGID_VIETNAMESE = 0x042a, // Vietnamese + + USB_LANGID_HID_UDD = 0x04ff, // HID (Usage Data Descriptor) + USB_LANGID_HID1 = 0xf0ff, // HID (Vendor Defined 1) + USB_LANGID_HID2 = 0xf4ff, // HID (Vendor Defined 2) + USB_LANGID_HID3 = 0xf8ff, // HID (Vendor Defined 3) + USB_LANGID_HID4 = 0xfcff, // HID (Vendor Defined 4) + + USB_LANGID_INVALID = 0x0000 // Invalid LANG ID +}; + +#endif // USB_LANGIDS_H + + diff --git a/headers/os/drivers/usb/USB_midi.h b/headers/os/drivers/usb/USB_midi.h new file mode 100644 index 0000000000..6c3f7e6456 --- /dev/null +++ b/headers/os/drivers/usb/USB_midi.h @@ -0,0 +1,20 @@ +#ifndef USB_MIDI_H +#define USB_MIDI_H + +#include "USB_audio.h" + +// (Partial) USB Class Definitions for MIDI Devices, version 1.0 +// (usb_midi_class_10.pdf) + +#define USB_MIDI_CLASS_VERSION 0x0100 // Class specification version 1.0 + +// USB MIDI Event Packet + +// ... as clean structure: +typedef struct { // USB MIDI Event Packet + uint8 cin:4; // Code Index Number + uint8 cn:4; // Cable Number + uint8 midi[3]; +} _PACKED usb_midi_event_packet; + +#endif // USB_MIDI_H