HID Descriptor Tool

Everything else that doesn't fall into one of the other PB categories.
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

HID Descriptor Tool

Post by miso »

Heres a prototype HID descriptor parser. It's ugly.

Because of the strings, it would not fit in two posts, so link is provided. No zip, only a .pb text file.

==Link removed, code is down there==

Interesting, that the same keyboard gives different report on win7 and win10...
Last edited by miso on Thu Dec 11, 2025 1:01 pm, edited 1 time in total.
Fred
Administrator
Administrator
Posts: 18441
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: HID Descriptor Tool

Post by Fred »

My experience about downloads is they tends to disappear over years, so better try to post the code directly here, even if it's splitted
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

Fred wrote: Thu Dec 11, 2025 11:19 am My experience about downloads is they tends to disappear over years, so better try to post the code directly here, even if it's splitted
I absolutely agree.

Code: Select all

;Works with PB 6.30 Beta 6
;Version: 0.6

EnableExplicit

Global Dim pagenames.s($FF)
Global Dim pages.s($FF,$255)
Global Dim col.s($FF)

col($00)= "Physical"
col($01)= "Application"
col($02)= "Logical"
col($03)= "Report"
col($04)= "Named Array"
col($05)= "Usage Switch"
col($06)= "Usage Modifier"

Global indentation.i = 0
pagenames($01)="Generic Desktop Page,GD_"
;=========================================================
pages($01 , $00) = "Undefined"
pages($01 , $01) = "Pointer,CP,"
pages($01 , $02) = "Mouse,CA,"
pages($01 , $04) = "Joystick,CA,"
pages($01 , $05) = "Game Pad,CA,"
pages($01 , $06) = "Keyboard,CA,"
pages($01 , $07) = "Keypad,CA,"
pages($01 , $08) = "Multi-axis Controller,CA,"
pages($01 , $09) = "Tablet PC System Controls,CA,"
pages($01 , $0A) = "Water Cooling Device,CA,"
pages($01 , $0B) = "Computer Chassis Device,CA,"
pages($01 , $0C) = "Wireless Radio Controls,CA,"
pages($01 , $0D) = "Portable Device,CA,"
pages($01 , $0E) = "System Multi-axis Controller,CA,"
pages($01 , $0F) = "Spatial Controller,CA,"
pages($01 , $10) = "Assistive Control,CA,"
pages($01 , $30) = "X,DV,"
pages($01 , $31) = "Y,DV,"
pages($01 , $32) = "Z,DV,"
pages($01 , $33) = "Rx,DV,"
pages($01 , $34) = "Ry,DV,"
pages($01 , $35) = "Rz,DV,"
pages($01 , $36) = "Slider,DV,"
pages($01 , $37) = "Dial,DV,"
pages($01 , $38) = "Wheel,DV,"
pages($01 , $39) = "Hat switch,DV,"
pages($01 , $3A) = "Counted Buffer,CL,"
pages($01 , $3B) = "Byte Count,DV,"
pages($01 , $3C) = "Motion Wakeup,OSC,"
pages($01 , $3D) = "Start,OOC,"
pages($01 , $3E) = "Select,OOC,"
pages($01 , $40) = "Vx,DV,"
pages($01 , $41) = "Vy,DV,"
pages($01 , $42) = "Vz,DV,"
pages($01 , $43) = "Vbrx,DV,"
pages($01 , $44) = "Vbry,DV,"
pages($01 , $45) = "Vbrz,DV,"
pages($01 , $46) = "Vno,DV,"
pages($01 , $47) = "Feature Notification,DVDF,"
pages($01 , $48) = "Resolution Multiplier,DV,"
pages($01 , $49) = "Qx,DV,"
pages($01 , $4A) = "Qy,DV,"
pages($01 , $4B) = "Qz,DV,"
pages($01 , $4C) = "Qw,DV,"
pages($01 , $80) = "System Control,CA,"
pages($01 , $81) = "System Power Down,OSC,"
pages($01 , $82) = "System Sleep,OSC,"
pages($01 , $83) = "System Wake Up,OSC,"
pages($01 , $84) = "System Context Menu,OSC,"
pages($01 , $85) = "System Main Menu,OSC,"
pages($01 , $86) = "System App Menu,OSC,"
pages($01 , $87) = "System Menu Help,OSC,"
pages($01 , $88) = "System Menu Exit,OSC,"
pages($01 , $89) = "System Menu Select,OSC,"
pages($01 , $8A) = "System Menu Right,RTC,"
pages($01 , $8B) = "System Menu Left,RTC,"
pages($01 , $8C) = "System Menu Up,RTC,"
pages($01 , $8D) = "System Menu Down,RTC,"
pages($01 , $8E) = "System Cold Restart,OSC,"
pages($01 , $8F) = "System Warm Restart,OSC,"
pages($01 , $90) = "D-pad Up,OOC,"
pages($01 , $91) = "D-pad Down,OOC,"
pages($01 , $92) = "D-pad Right,OOC,"
pages($01 , $93) = "D-pad Left,OOC,"
pages($01 , $94) = "Index Trigger,MCDV,"
pages($01 , $95) = "Palm Trigger,MCDV,"
pages($01 , $96) = "Thumbstick,CP,"
pages($01 , $97) = "System Function Shift,MC,"
pages($01 , $98) = "System Function Shift Lock,OOC,"
pages($01 , $99) = "System Function Shift Lock Indicator,DV,"
pages($01 , $9A) = "System Dismiss Notification,OSC,"
pages($01 , $A0) = "System Dock,OSC,"
pages($01 , $A1) = "System Undock,OSC,"
pages($01 , $A2) = "System Setup,OSC,"
pages($01 , $A3) = "System Break,OSC,"
pages($01 , $A4) = "System Debugger Break,OSC,"
pages($01 , $A5) = "Application Break,OSC,"
pages($01 , $A6) = "Application Debugger Break,OSC,"
pages($01 , $A7) = "System Speaker Mute,OSC,"
pages($01 , $A8) = "System Hibernate,OSC,"
pages($01 , $B0) = "System Display Invert,OSC,"
pages($01 , $B1) = "System Display Internal,OSC,"
pages($01 , $B2) = "System Display External,OSC,"
pages($01 , $B3) = "System Display Both,OSC,"
pages($01 , $B4) = "System Display Dual,OSC,"
pages($01 , $B5) = "System Display Toggle Int/Ext,OSC,"
pages($01 , $B6) = "System Display Swap Primary/Secondary,OSC,"
pages($01 , $B7) = "System Display LCD Autoscale,OSC,"
pages($01 , $C0) = "Sensor Zone,CL,"
pages($01 , $C1) = "RPM,DV,"
pages($01 , $C2) = "Coolant Level,DV,"
pages($01 , $C3) = "Coolant Critical Level,DV,"
pages($01 , $C4) = "Coolant Pump,US,"
pages($01 , $C5) = "Chassis Enclosure,CL,"
pages($01 , $C6) = "Wireless Radio Button,OOC,"
pages($01 , $C7) = "Wireless Radio LED,OOC,"
pages($01 , $C8) = "Wireless Radio Slider Switch,OOC,"
pages($01 , $C9) = "System Display Rotation Lock Button,OOC,"
pages($01 , $CA) = "System Display Rotation Lock Slider Switch,OOC,"
pages($01 , $CB) = "Control Enable,DF,"

pagenames($02)="Simulation Controls Page,SIM_"
;=========================================================
pages($02 , $00) = "Undefined"
pages($02 , $01) = "Flight Simulation Device,CA,"
pages($02 , $02) = "Automobile Simulation Device,CA,"
pages($02 , $03) = "Tank Simulation Device,CA,"
pages($02 , $04) = "Spaceship Simulation Device,CA,"
pages($02 , $05) = "Submarine Simulation Device,CA,"
pages($02 , $06) = "Sailing Simulation Device,CA,"
pages($02 , $07) = "Motorcycle Simulation Device,CA,"
pages($02 , $08) = "Sports Simulation Device,CA,"
pages($02 , $09) = "Airplane Simulation Device,CA,"
pages($02 , $0A) = "Helicopter Simulation Device,CA,"
pages($02 , $0B) = "Magic Carpet Simulation Device,CA,"
pages($02 , $0C) = "Bicycle Simulation Device,CA,"
pages($02 , $20) = "Flight Control Stick,CA,"
pages($02 , $21) = "Flight Stick,CA,"
pages($02 , $22) = "Cyclic Control,CP,"
pages($02 , $23) = "Cyclic Trim,CP,"
pages($02 , $24) = "Flight Yoke,CA,"
pages($02 , $25) = "Track Control,CP,"
pages($02 , $B0) = "Aileron,DV,"
pages($02 , $B1) = "Aileron Trim,DV,"
pages($02 , $B2) = "Anti-Torque Control,DV,AntiTorqueControl"
pages($02 , $B3) = "Autopilot Enable,OOC,"
pages($02 , $B4) = "Chaff Release,OSC,"
pages($02 , $B5) = "Collective Control,DV,"
pages($02 , $B6) = "Dive Brake,DV,"
pages($02 , $B7) = "Electronic Countermeasures,OOC,"
pages($02 , $B8) = "Elevator,DV,"
pages($02 , $B9) = "Elevator Trim,DV,"
pages($02 , $BA) = "Rudder,DV,"
pages($02 , $BB) = "Throttle,DV,"
pages($02 , $BC) = "Flight Communications,OOC,"
pages($02 , $BD) = "Flare Release,OSC,"
pages($02 , $BE) = "Landing Gear,OOC,"
pages($02 , $BF) = "Toe Brake,DV,"
pages($02 , $C0) = "Trigger,MC,"
pages($02 , $C1) = "Weapons Arm,OOC,"
pages($02 , $C2) = "Weapons Select,OSC,"
pages($02 , $C3) = "Wing Flaps,DV,"
pages($02 , $C4) = "Accelerator,DV,"
pages($02 , $C5) = "Brake,DV,"
pages($02 , $C6) = "Clutch,DV,"
pages($02 , $C7) = "Shifter,DV,"
pages($02 , $C8) = "Steering,DV,"
pages($02 , $C9) = "Turret Direction,DV,"
pages($02 , $CA) = "Barrel Elevation,DV,"
pages($02 , $CB) = "Dive Plane,DV,"
pages($02 , $CC) = "Ballast,DV,"
pages($02 , $CD) = "Bicycle Crank,DV,"
pages($02 , $CE) = "Handle Bars,DV,"
pages($02 , $CF) = "Front Brake,DV,"
pages($02 , $D0) = "Rear Brake,DV,"

pagenames($03)="Virtual Reality Controls Page,VR_"
;=========================================================
pages($03 , $00) = "Unidentified "
pages($03 , $01) = "Belt,CA,"
pages($03 , $02) = "Body Suit,CA,"
pages($03 , $03) = "Flexor,CP,"
pages($03 , $04) = "Glove,CA,"
pages($03 , $05) = "Head Tracker,CP,"
pages($03 , $06) = "Head Mounted Display,CA,"
pages($03 , $07) = "Hand Tracker,CA,"
pages($03 , $08) = "Oculometer,CA,"
pages($03 , $09) = "Vest,CA,"
pages($03 , $0A) = "Animatronic Device,CA,"
pages($03 , $20) = "Stereo Enable,OOC"
pages($03 , $21) = "Display Enable,OOC"

pagenames($04)="Sport Controls Page,SC_"
;=========================================================
pages($04 , $00) = "Unidentified"
pages($04 , $01) = "Baseball Bat,CA,"
pages($04 , $02) = "Golf Club,CA,"
pages($04 , $03) = "Rowing Machine,CA,"
pages($04 , $04) = "Treadmill,CA,"
pages($04 , $30) = "Oar,DV,"
pages($04 , $31) = "Slope,DV,"
pages($04 , $32) = "Rate,DV,"
pages($04 , $33) = "Stick Speed,DV,"
pages($04 , $34) = "Stick Face Angle,DV,"
pages($04 , $35) = "Stick Heel/Toe,DV,"
pages($04 , $36) = "Stick Follow Through,DV,"
pages($04 , $37) = "Stick Tempo,DV,"
pages($04 , $38) = "Stick Type,NAry,"
pages($04 , $39) = "Stick Height,DV,"
pages($04 , $50) = "Putter,Sel,"
pages($04 , $51) = "1 Iron,Sel,Number1Iron"
pages($04 , $52) = "2 Iron,Sel,Number2Iron"
pages($04 , $53) = "3 Iron,Sel,Number3Iron"
pages($04 , $54) = "4 Iron,Sel,Number4Iron"
pages($04 , $55) = "5 Iron,Sel,Number5Iron"
pages($04 , $56) = "6 Iron,Sel,Number6Iron"
pages($04 , $57) = "7 Iron,Sel,Number7Iron"
pages($04 , $58) = "8 Iron,Sel,Number8Iron"
pages($04 , $59) = "9 Iron,Sel,Number9Iron"
pages($04 , $5A) = "10 Iron,Sel,Number10Iron"
pages($04 , $5B) = "11 Iron,Sel,Number11Iron"
pages($04 , $5C) = "Sand Wedge,Sel,"
pages($04 , $5D) = "Loft Wedge,Sel,"
pages($04 , $5E) = "Power Wedge,Sel,"
pages($04 , $5F) = "1 Wood,Sel,Number1Wood"
pages($04 , $60) = "3 Wood,Sel,Number3Wood"
pages($04 , $61) = "5 Wood,Sel,Number5Wood"
pages($04 , $62) = "7 Wood,Sel,Number7Wood"
pages($04 , $63) = "9 Wood,Sel,Number9Wood"

pagenames($05)="Game Controls Page,GC_"
;=========================================================
pages($05 , $00) = "Undefined"
pages($05 , $01) = "3D Game Controller,CA,"
pages($05 , $02) = "Pinball Device,CA,"
pages($05 , $03) = "Gun Device,CA,"
pages($05 , $20) = "Point of View,CP,"
pages($05 , $21) = "Turn Right/Left,DV,"
pages($05 , $22) = "Pitch Forward/Backward,DV,"
pages($05 , $23) = "Roll Right/Left,DV,"
pages($05 , $24) = "Move Right/Left,DV,"
pages($05 , $25) = "Move Forward/Backward,DV,"
pages($05 , $26) = "Move Up/Down,DV,"
pages($05 , $27) = "Lean Right/Left,DV,"
pages($05 , $28) = "Lean Forward/Backward,DV,"
pages($05 , $29) = "Height of POV,DV,"
pages($05 , $2A) = "Flipper,MC,"
pages($05 , $2B) = "Secondary Flipper,MC,"
pages($05 , $2C) = "Bump,MC,"
pages($05 , $2D) = "New Game,OSC,"
pages($05 , $2E) = "Shoot Ball,OSC,"
pages($05 , $2F) = "Player,OSC,"
pages($05 , $30) = "Gun Bolt,OOC,"
pages($05 , $31) = "Gun Clip,OOC,"
pages($05 , $32) = "Gun Selector,NAry,"
pages($05 , $33) = "Gun Single Shot,Sel,"
pages($05 , $34) = "Gun Burst,Sel,"
pages($05 , $35) = "Gun Automatic,Sel,"
pages($05 , $36) = "Gun Safety,OOC,"
pages($05 , $37) = "Gamepad Fire/Jump,CL,"
pages($05 , $39) = "Gamepad Trigger,CL,"
pages($05 , $3A) = "Form-fitting Gamepad,SF,"

pagenames($06)="Generic Device Controls Page,GEN_"
;=========================================================
pages($06 , $00) = "Unidentified "
pages($06 , $01) = "Background Controls,CA"
pages($06 , $20) = "Battery Strength,DV"
pages($06 , $21) = "Wireless Channel,DV"
pages($06 , $22) = "Wireless ID,DV"
pages($06 , $23) = "Discover Wireless Control,OSC"
pages($06 , $24) = "Security Code Character Entered,OSC"
pages($06 , $25) = "Security Code Character Erased,OSC"
pages($06 , $26) = "Security Code Cleared,OSC"
pages($06 , $27) = "Sequence ID,DV"
pages($06 , $28) = "Sequence ID Reset,DF"
pages($06 , $29) = "RF Signal Strength,DV"
pages($06 , $2A) = "Software Version,CL,"
pages($06 , $2B) = "Protocol Version,CL,"
pages($06 , $2C) = "Hardware Version,CL,"
pages($06 , $2D) = "Major,SV,"
pages($06 , $2E) = "Minor,SV,"
pages($06 , $2F) = "Revision,SV,"
pages($06 , $30) = "Handedness,NAry,"
pages($06 , $31) = "Either Hand,Sel,"
pages($06 , $32) = "Left Hand,Sel,"
pages($06 , $33) = "Right Hand,Sel,"
pages($06 , $34) = "Both Hands,Sel,"
pages($06 , $40) = "Grip Pose Offset,CP,"
pages($06 , $41) = "Pointer Pose Offset,CP,"

pagenames($07)="Keyboard/Keypad Page,KB_"
;=========================================================
pages($07 , $00) = "Keyboard No event indicated,Sel"
pages($07 , $01) = "Keyboard ErrorRollOver,Sel"
pages($07 , $02) = "Keyboard POSTFail,Sel"
pages($07 , $03) = "Keyboard ErrorUndefined,Sel"
pages($07 , $04) = "Keyboard a and A,Sel,A"
pages($07 , $05) = "Keyboard b and B,Sel,B"
pages($07 , $06) = "Keyboard c and C,Sel,C"
pages($07 , $07) = "Keyboard d and D,Sel,D"
pages($07 , $08) = "Keyboard e and E,Sel,E"
pages($07 , $09) = "Keyboard f and F,Sel,F"
pages($07 , $0A) = "Keyboard g and G,Sel,G"
pages($07 , $0B) = "Keyboard h and H,Sel,H"
pages($07 , $0C) = "Keyboard i and I,Sel,I"
pages($07 , $0D) = "Keyboard j and J,Sel,J"
pages($07 , $0E) = "Keyboard k and K,Sel,K"
pages($07 , $0F) = "Keyboard l and L,Sel,L"
pages($07 , $10) = "Keyboard m and M,Sel,M"
pages($07 , $11) = "Keyboard n and N,Sel,N"
pages($07 , $12) = "Keyboard o and O,Sel,O"
pages($07 , $13) = "Keyboard p and P,Sel,P"
pages($07 , $14) = "Keyboard q and Q,Sel,Q"
pages($07 , $15) = "Keyboard r and R,Sel,R"
pages($07 , $16) = "Keyboard s and S,Sel,S"
pages($07 , $17) = "Keyboard t and T,Sel,T"
pages($07 , $18) = "Keyboard u and U,Sel,U"
pages($07 , $19) = "Keyboard v and V,Sel,V"
pages($07 , $1A) = "Keyboard w and W,Sel,W"
pages($07 , $1B) = "Keyboard x and X,Sel,X"
pages($07 , $1C) = "Keyboard y and Y,Sel,Y"
pages($07 , $1D) = "Keyboard z and Z,Sel,Z"
pages($07 , $1E) = "Keyboard 1 and !,Sel,Digit1AndExclamationMark"
pages($07 , $1F) = "Keyboard 2 and @,Sel,Digit2AndAtSign"
pages($07 , $20) = "Keyboard 3 and #,Sel,Digit3AndHash"
pages($07 , $21) = "Keyboard 4 and $,Sel,Digit4AndDollar"
pages($07 , $22) = "Keyboard 5 and %,Sel,Digit5AndPercent"
pages($07 , $23) = "Keyboard 6 and ^,Sel,Digit6AndCaret"
pages($07 , $24) = "Keyboard 7 and &,Sel,Digit7AndAmpersand"
pages($07 , $25) = "Keyboard 8 and *,Sel,Digit8AndAsterisk"
pages($07 , $26) = "Keyboard 9 and (,Sel,Digit9AndLeftParenthesis"
pages($07 , $27) = "Keyboard 0 and ),Sel,Digit0AndRightParenthesis"
pages($07 , $28) = "Keyboard Return,Sel"
pages($07 , $29) = "Keyboard Escape,Sel"
pages($07 , $2A) = "Keyboard Delete,Sel"
pages($07 , $2B) = "Keyboard Tab,Sel"
pages($07 , $2C) = "Keyboard Spacebar,Sel"
pages($07 , $2D) = "Keyboard - and _,Sel,HyphenAndUnderscore"
pages($07 , $2E) = "Keyboard = and +,Sel,EqualsAndPlus"
pages($07 , $2F) = "Keyboard [ and {,Sel,LeftSquareBracketAndLeftBrace"
pages($07 , $30) = "Keyboard ] and },Sel,RightSquareBracketAndRightBrace"
pages($07 , $31) = "Keyboard \ and |,Sel,BackslashAndVerticalBar"
pages($07 , $32) = "Keyboard Non-US # and ~,Sel,NonUSHashAndTilde"
pages($07 , $33) = "Keyboard ; and :,Sel,SemicolonAndColon"
pages($07 , $34) = "Keyboard ' and "+Chr(34)+",Sel,ApostropheAndQuotationMark"
pages($07 , $35) = "Keyboard ` and ~,Sel,GraveAndTilde"
pages($07 , $36) = "Keyboard Comma and <,Sel,CommaAndLessThanSign"
pages($07 , $37) = "Keyboard . and >,Sel,PeriodAndGreaterThanSign"
pages($07 , $38) = "Keyboard / and ?,Sel,SlashAndQuestionMark"
pages($07 , $39) = "Keyboard Caps Lock,Sel"
pages($07 , $3A) = "Keyboard F1,Sel"
pages($07 , $3B) = "Keyboard F2,Sel"
pages($07 , $3C) = "Keyboard F3,Sel"
pages($07 , $3D) = "Keyboard F4,Sel"
pages($07 , $3E) = "Keyboard F5,Sel"
pages($07 , $3F) = "Keyboard F6,Sel"
pages($07 , $40) = "Keyboard F7,Sel"
pages($07 , $41) = "Keyboard F8,Sel"
pages($07 , $42) = "Keyboard F9,Sel"
pages($07 , $43) = "Keyboard F10,Sel"
pages($07 , $44) = "Keyboard F11,Sel"
pages($07 , $45) = "Keyboard F12,Sel"
pages($07 , $46) = "Keyboard Print Screen,Sel"
pages($07 , $47) = "Keyboard Scroll Lock,Sel"
pages($07 , $48) = "Keyboard Pause,Sel"
pages($07 , $49) = "Keyboard Insert,Sel"
pages($07 , $4A) = "Keyboard Home,Sel"
pages($07 , $4B) = "Keyboard Page Up,Sel"
pages($07 , $4C) = "Keyboard Delete Forward,Sel"
pages($07 , $4D) = "Keyboard End,Sel"
pages($07 , $4E) = "Keyboard Page Down,Sel"
pages($07 , $4F) = "Keyboard Right Arrow,Sel"
pages($07 , $50) = "Keyboard Left Arrow,Sel"
pages($07 , $51) = "Keyboard Down Arrow,Sel"
pages($07 , $52) = "Keyboard Up Arrow,Sel"
pages($07 , $53) = "Keypad Num Lock and Clear,Sel"
pages($07 , $54) = "Keypad /,Sel,KeypadSlash"
pages($07 , $55) = "Keypad *,Sel,KeypadAsterisk"
pages($07 , $56) = "Keypad Comma,Sel"
pages($07 , $57) = "Keypad +,Sel,KeypadPlus"
pages($07 , $58) = "Keypad Enter,Sel"
pages($07 , $59) = "Keypad 1 and End,Sel,KeypadDigit1AndEnd"
pages($07 , $5A) = "Keypad 2 and Down Arrow,Sel,KeypadDigit2AndDownArrow"
pages($07 , $5B) = "Keypad 3 and PageDn,Sel,KeypadDigit3AndPageDown"
pages($07 , $5C) = "Keypad 4 and Left Arrow,Sel,KeypadDigit4AndLeftArrow"
pages($07 , $5D) = "Keypad 5,Sel,KeypadDigit5"
pages($07 , $5E) = "Keypad 6 and Right Arrow,Sel,KeypadDigit6AndRightArrow"
pages($07 , $5F) = "Keypad 7 and Home,Sel,KeypadDigit7AndHome"
pages($07 , $60) = "Keypad 8 and Up Arrow,Sel,KeypadDigit8AndUpArrow"
pages($07 , $61) = "Keypad 9 and PageUp,Sel,KeypadDigit9AndPageUp"
pages($07 , $62) = "Keypad 0 and Insert,Sel,KeypadDigit0AndInsert"
pages($07 , $63) = "Keypad . and Delete,Sel,KeypadDecimalPointandDelete"
pages($07 , $64) = "Keyboard Non-US \ and |,Sel,NonUSBackslashAndVerticalBar"
pages($07 , $65) = "Keyboard Application,Sel"
pages($07 , $66) = "Keyboard Power,Sel"
pages($07 , $67) = "Keypad =,Sel,KeypadEquals"
pages($07 , $68) = "Keyboard F13,Sel"
pages($07 , $69) = "Keyboard F14,Sel"
pages($07 , $6A) = "Keyboard F15,Sel"
pages($07 , $6B) = "Keyboard F16,Sel"
pages($07 , $6C) = "Keyboard F17,Sel"
pages($07 , $6D) = "Keyboard F18,Sel"
pages($07 , $6E) = "Keyboard F19,Sel"
pages($07 , $6F) = "Keyboard F20,Sel"
pages($07 , $70) = "Keyboard F21,Sel"
pages($07 , $71) = "Keyboard F22,Sel"
pages($07 , $72) = "Keyboard F23,Sel"
pages($07 , $73) = "Keyboard F24,Sel"
pages($07 , $74) = "Keyboard Execute,Sel"
pages($07 , $75) = "Keyboard Help,Sel"
pages($07 , $76) = "Keyboard Menu,Sel"
pages($07 , $77) = "Keyboard Select,Sel"
pages($07 , $78) = "Keyboard Stop,Sel"
pages($07 , $79) = "Keyboard Again,Sel"
pages($07 , $7A) = "Keyboard Undo,Sel"
pages($07 , $7B) = "Keyboard Cut,Sel"
pages($07 , $7C) = "Keyboard Copy,Sel"
pages($07 , $7D) = "Keyboard Paste,Sel"
pages($07 , $7E) = "Keyboard Find,Sel"
pages($07 , $7F) = "Keyboard Mute,Sel"
pages($07 , $80) = "Keyboard Volume Up,Sel"
pages($07 , $81) = "Keyboard Volume Down,Sel"
pages($07 , $82) = "Keyboard Locking Caps Lock,Sel"
pages($07 , $83) = "Keyboard Locking Num Lock,Sel"
pages($07 , $84) = "Keyboard Locking Scroll Lock,Sel"
pages($07 , $85) = "Keypad Comma,Sel"
pages($07 , $86) = "Keypad Equal Sign,Sel"
pages($07 , $87) = "Keyboard International1,Sel"
pages($07 , $88) = "Keyboard International2,Sel"
pages($07 , $89) = "Keyboard International3,Sel"
pages($07 , $8A) = "Keyboard International4,Sel"
pages($07 , $8B) = "Keyboard International5,Sel"
pages($07 , $8C) = "Keyboard International6,Sel"
pages($07 , $8D) = "Keyboard International7,Sel"
pages($07 , $8E) = "Keyboard International8,Sel"
pages($07 , $8F) = "Keyboard International9,Sel"
pages($07 , $90) = "Keyboard LANG1,Sel"
pages($07 , $91) = "Keyboard LANG2,Sel"
pages($07 , $92) = "Keyboard LANG3,Sel"
pages($07 , $93) = "Keyboard LANG4,Sel"
pages($07 , $94) = "Keyboard LANG5,Sel"
pages($07 , $95) = "Keyboard LANG6,Sel"
pages($07 , $96) = "Keyboard LANG7,Sel"
pages($07 , $97) = "Keyboard LANG8,Sel"
pages($07 , $98) = "Keyboard LANG9,Sel"
pages($07 , $99) = "Keyboard Alternate Erase,Sel"
pages($07 , $9A) = "Keyboard SysReq/Attention,Sel"
pages($07 , $9B) = "Keyboard Cancel,Sel"
pages($07 , $9C) = "Keyboard Clear,Sel"
pages($07 , $9D) = "Keyboard Prior,Sel"
pages($07 , $9E) = "Keyboard Return,Sel"
pages($07 , $9F) = "Keyboard Separator,Sel"
pages($07 , $A0) = "Keyboard Out,Sel"
pages($07 , $A1) = "Keyboard Oper,Sel"
pages($07 , $A2) = "Keyboard Clear/Again,Sel"
pages($07 , $A3) = "Keyboard CrSel/Props,Sel"
pages($07 , $A4) = "Keyboard ExSel,Sel"
pages($07 , $B0) = "Keypad 00,Sel"
pages($07 , $B1) = "Keypad 000,Sel"
pages($07 , $B2) = "Thousands Separator,Sel"
pages($07 , $B3) = "Decimal Separator,Sel"
pages($07 , $B4) = "Currency Unit,Sel"
pages($07 , $B5) = "Currency Sub-unit,Sel"
pages($07 , $B6) = "Keypad (,Sel,KeypadLeftParenthesis"
pages($07 , $B7) = "Keypad ),Sel,KeypadRightParenthesis"
pages($07 , $B8) = "Keypad {,Sel,KeypadLeftBrace"
pages($07 , $B9) = "Keypad },Sel,KeypadRightBrace"
pages($07 , $BA) = "Keypad Tab,Sel"
pages($07 , $BB) = "Keypad Backspace,Sel"
pages($07 , $BC) = "Keypad A,Sel,KeypadA"
pages($07 , $BD) = "Keypad B,Sel,KeypadB"
pages($07 , $BE) = "Keypad C,Sel,KeypadC"
pages($07 , $BF) = "Keypad D,Sel,KeypadD"
pages($07 , $C0) = "Keypad E,Sel,KeypadE"
pages($07 , $C1) = "Keypad F,Sel,KeypadF"
pages($07 , $C2) = "Keypad XOR,Sel"
pages($07 , $C3) = "Keypad ^,Sel,KeypadCaret"
pages($07 , $C4) = "Keypad %,Sel,KeypadPercent"
pages($07 , $C5) = "Keypad <,Sel,KeypadLessThanSign"
pages($07 , $C6) = "Keypad >,Sel,KeypadGreaterThanSign"
pages($07 , $C7) = "Keypad &,Sel,KeypadAmpersand"
pages($07 , $C8) = "Keypad &&,Sel,KeypadDoubleAmpersand"
pages($07 , $C9) = "Keypad |,Sel,KeypadVerticalBar"
pages($07 , $CA) = "Keypad ||,Sel,KeypadDoubleVerticalBar"
pages($07 , $CB) = "Keypad :,Sel,KeypadColor"
pages($07 , $CC) = "Keypad #,Sel,KeypadHash"
pages($07 , $CD) = "Keypad Space,Sel"
pages($07 , $CE) = "Keypad @,Sel,KeypadAtSign"
pages($07 , $CF) = "Keypad !,Sel,KeypadExclamationMark"
pages($07 , $D0) = "Keypad Memory Store,Sel"
pages($07 , $D1) = "Keypad Memory Recall,Sel"
pages($07 , $D2) = "Keypad Memory Clear,Sel"
pages($07 , $D3) = "Keypad Memory Add,Sel"
pages($07 , $D4) = "Keypad Memory Subtract,Sel"
pages($07 , $D5) = "Keypad Memory Multiply,Sel"
pages($07 , $D6) = "Keypad Memory Divide,Sel"
pages($07 , $D7) = "Keypad +/-,Sel,KeypadPlusOrMinus"
pages($07 , $D8) = "Keypad Clear,Sel"
pages($07 , $D9) = "Keypad Clear Entry,Sel"
pages($07 , $DA) = "Keypad Binary,Sel"
pages($07 , $DB) = "Keypad Octal,Sel"
pages($07 , $DC) = "Keypad Decimal,Sel"
pages($07 , $DD) = "Keypad Hexadecimal,Sel"
pages($07 , $E0) = "Keyboard Left Control,DV"
pages($07 , $E1) = "Keyboard Left Shift,DV"
pages($07 , $E2) = "Keyboard Left Alt,DV"
pages($07 , $E3) = "Keyboard Left GUI,DV"
pages($07 , $E4) = "Keyboard Right Control,DV"
pages($07 , $E5) = "Keyboard Right Shift,DV"
pages($07 , $E6) = "Keyboard Right Alt,DV"
pages($07 , $E7) = "Keyboard Right GUI,DV"


pagenames($08)="LED Indicator Page,LED_"
;=========================================================
pages($08 , $00) = "Undefined"
pages($08 , $01) = "Num Lock,OOC,"
pages($08 , $02) = "Caps Lock,OOC,"
pages($08 , $03) = "Scroll Lock,OOC,"
pages($08 , $04) = "Compose,OOC,"
pages($08 , $05) = "Kana,OOC,"
pages($08 , $06) = "Power,OOC,"
pages($08 , $07) = "Shift,OOC,"
pages($08 , $08) = "Do Not Disturb,OOC,"
pages($08 , $09) = "Mute,OOC,"
pages($08 , $0A) = "Tone Enable,OOC,"
pages($08 , $0B) = "High Cut Filter,OOC,"
pages($08 , $0C) = "Low Cut Filter,OOC,"
pages($08 , $0D) = "Equalizer Enable,OOC,"
pages($08 , $0E) = "Sound Field On,OOC,"
pages($08 , $0F) = "Surround On,OOC,"
pages($08 , $10) = "Repeat,OOC,"
pages($08 , $11) = "Stereo,OOC,"
pages($08 , $12) = "Sampling Rate Detect,OOC,"
pages($08 , $13) = "Spinning,OOC,"
pages($08 , $14) = "CAV,OOC,"
pages($08 , $15) = "CLV,OOC,"
pages($08 , $16) = "Recording Format Detect,OOC,"
pages($08 , $17) = "Off-Hook,OOC,"
pages($08 , $18) = "Ring,OOC,"
pages($08 , $19) = "Message Waiting,OOC,"
pages($08 , $1A) = "Data Mode,OOC,"
pages($08 , $1B) = "Battery Operation,OOC,"
pages($08 , $1C) = "Battery OK,OOC,"
pages($08 , $1D) = "Battery Low,OOC,"
pages($08 , $1E) = "Speaker,OOC,"
pages($08 , $1F) = "Head Set,OOC,"
pages($08 , $20) = "Hold,OOC,"
pages($08 , $21) = "Microphone,OOC,"
pages($08 , $22) = "Coverage,OOC,"
pages($08 , $23) = "Night Mode,OOC,"
pages($08 , $24) = "Send Calls,OOC,"
pages($08 , $25) = "Call Pickup,OOC,"
pages($08 , $26) = "Conference,OOC,"
pages($08 , $27) = "Stand-by,OOC,"
pages($08 , $28) = "Camera On,OOC,"
pages($08 , $29) = "Camera Off,OOC,"
pages($08 , $2A) = "On-Line,OOC,"
pages($08 , $2B) = "Off-Line,OOC,"
pages($08 , $2C) = "Busy,OOC,"
pages($08 , $2D) = "Ready,OOC,"
pages($08 , $2E) = "Paper-Out,OOC,"
pages($08 , $2F) = "Paper-Jam,OOC,"
pages($08 , $30) = "Remote,OOC,"
pages($08 , $31) = "Forward,OOC,"
pages($08 , $32) = "Reverse,OOC,"
pages($08 , $33) = "Stop,OOC,"
pages($08 , $34) = "Rewind,OOC,"
pages($08 , $35) = "Fast Forward,OOC,"
pages($08 , $36) = "Play,OOC,"
pages($08 , $37) = "Pause,OOC,"
pages($08 , $38) = "Record,OOC,"
pages($08 , $39) = "Error,OOC,"
pages($08 , $3A) = "Usage Selected Indicator,US,"
pages($08 , $3B) = "Usage In Use Indicator,US,"
pages($08 , $3C) = "Usage Multi Mode Indicator,UM,"
pages($08 , $3D) = "Indicator On,Sel,"
pages($08 , $3E) = "Indicator Flash,Sel,"
pages($08 , $3F) = "Indicator Slow Blink,Sel,"
pages($08 , $40) = "Indicator Fast Blink,Sel,"
pages($08 , $41) = "Indicator Off,Sel,"
pages($08 , $42) = "Flash On Time,DV,"
pages($08 , $43) = "Slow Blink On Time,DV,"
pages($08 , $44) = "Slow Blink Off Time,DV,"
pages($08 , $45) = "Fast Blink On Time,DV,"
pages($08 , $46) = "Fast Blink Off Time,DV,"
pages($08 , $47) = "Usage Indicator Color,UM,"
pages($08 , $48) = "Indicator Red,Sel,"
pages($08 , $49) = "Indicator Green,Sel,"
pages($08 , $4A) = "Indicator Amber,Sel,"
pages($08 , $4B) = "Generic Indicator,OOC,"
pages($08 , $4C) = "System Suspend,OOC,"
pages($08 , $4D) = "External Power Connected,OOC,"
pages($08 , $4E) = "Indicator Blue,Sel,"
pages($08 , $4F) = "Indicator Orange,Sel,"
pages($08 , $50) = "Good Status,OOC,"
pages($08 , $51) = "Warning Status,OOC,"
pages($08 , $52) = "RGB LED,CL,"
pages($08 , $53) = "Red LED Channel,DV,"
pages($08 , $54) = "Green LED Channel,DV,"
pages($08 , $55) = "Blue LED Channel,DV,"
pages($08 , $56) = "LED Intensity,DV,"
pages($08 , $60) = "Player Indicator,NAry,"
pages($08 , $61) = "Player 1,Sel,"
pages($08 , $62) = "Player 2,Sel,"
pages($08 , $63) = "Player 3,Sel,"
pages($08 , $64) = "Player 4,Sel,"
pages($08 , $65) = "Player 5,Sel,"
pages($08 , $66) = "Player 6,Sel,"
pages($08 , $67) = "Player 7,Sel,"
pages($08 , $68) = "Player 8,Sel,"

pagenames($09)="Button Page,BTN_"
;=========================================================
pages($09 , $00) = "No button pressed,"
pages($09 , $01) = "Button 1 Primary/trigger,MULTI,Button1"
pages($09 , $02) = "Button 2 Secondary,MULTI,Button2"
pages($09 , $03) = "Button 3 Tertiary,MULTI,Button3"
pages($09 , $04) = "Button 4,MULTI"
pages($09 , $05) = "Button 5,MULTI"
pages($09 , $06) = "Button 6,MULTI"
pages($09 , $07) = "Button 7,MULTI"
pages($09 , $08) = "Button 8,MULTI"
pages($09 , $09) = "Button 9,MULTI"
pages($09 , $0A) = "Button 10,MULTI"
pages($09 , $0B) = "Button 11,MULTI"
pages($09 , $0C) = "Button 12,MULTI"
pages($09 , $0D) = "Button 13,MULTI"
pages($09 , $0E) = "Button 14,MULTI"
pages($09 , $0F) = "Button 15,MULTI"
pages($09 , $10) = "Button 16,MULTI"
pages($09 , $11) = "Button 17,MULTI"
pages($09 , $12) = "Button 18,MULTI"
pages($09 , $13) = "Button 19,MULTI"
pages($09 , $14) = "Button 20,MULTI"
pages($09 , $15) = "Button 21,MULTI"
pages($09 , $16) = "Button 22,MULTI"
pages($09 , $17) = "Button 23,MULTI"
pages($09 , $18) = "Button 24,MULTI"
pages($09 , $19) = "Button 25,MULTI"
pages($09 , $1A) = "Button 26,MULTI"
pages($09 , $1B) = "Button 27,MULTI"
pages($09 , $1C) = "Button 28,MULTI"
pages($09 , $1D) = "Button 29,MULTI"
pages($09 , $1E) = "Button 30,MULTI"
pages($09 , $1F) = "Button 31,MULTI"
pages($09 , $20) = "Button 32,MULTI"
pages($09 , $21) = "Button 33,MULTI"
pages($09 , $22) = "Button 34,MULTI"
pages($09 , $23) = "Button 35,MULTI"
pages($09 , $24) = "Button 36,MULTI"
pages($09 , $25) = "Button 37,MULTI"
pages($09 , $26) = "Button 38,MULTI"
pages($09 , $27) = "Button 39,MULTI"
pages($09 , $28) = "Button 40,MULTI"

pagenames($0A)="Ordinal Page,ORD_"
;=========================================================
pages($0A , $00) = "Reserved "
pages($0A , $01) = "Instance 1,UM,"
pages($0A , $02) = "Instance 2,UM,"
pages($0A , $03) = "Instance 3,UM,"
pages($0A , $04) = "Instance 4,UM,"
pages($0A , $05) = "Instance 5,UM,"
pages($0A , $06) = "Instance 6,UM,"
pages($0A , $07) = "Instance 7,UM,"
pages($0A , $08) = "Instance 8,UM,"
pages($0A , $09) = "Instance 9,UM,"
pages($0A , $0A) = "Instance 10,UM,"
pages($0A , $0B) = "Instance 11,UM,"
pages($0A , $0C) = "Instance 12,UM,"
pages($0A , $0D) = "Instance 13,UM,"
pages($0A , $0E) = "Instance 14,UM,"
pages($0A , $0F) = "Instance 15,UM,"
pages($0A , $10) = "Instance 16,UM,"
pages($0A , $11) = "Instance 17,UM,"
pages($0A , $12) = "Instance 18,UM,"
pages($0A , $13) = "Instance 19,UM,"
pages($0A , $14) = "Instance 20,UM,"
pages($0A , $15) = "Instance 21,UM,"
pages($0A , $16) = "Instance 22,UM,"
pages($0A , $17) = "Instance 23,UM,"
pages($0A , $18) = "Instance 24,UM,"
pages($0A , $19) = "Instance 25,UM,"
pages($0A , $1A) = "Instance 26,UM,"
pages($0A , $1B) = "Instance 27,UM,"
pages($0A , $1C) = "Instance 28,UM,"
pages($0A , $1D) = "Instance 29,UM,"
pages($0A , $1E) = "Instance 30,UM,"


pagenames($0B)="Telephony Device Page,TEL_"
;=========================================================
pages($0B , $00) = "Unassigned"
pages($0B , $01) = "Phone,CA,"
pages($0B , $02) = "Answering Machine,CA,"
pages($0B , $03) = "Message Controls,CL,"
pages($0B , $04) = "Handset,CL,"
pages($0B , $05) = "Headset,CL,"
pages($0B , $06) = "Telephony Key Pad,NAry,"
pages($0B , $07) = "Programmable Button,NAry,"
pages($0B , $20) = "Hook Switch,OOC,"
pages($0B , $21) = "Flash,MC,"
pages($0B , $22) = "Feature,OSC,"
pages($0B , $23) = "Hold,OOC,"
pages($0B , $24) = "Redial,OSC,"
pages($0B , $25) = "Transfer,OSC,"
pages($0B , $26) = "Drop,OSC,"
pages($0B , $27) = "Park,OOC,"
pages($0B , $28) = "Forward Calls,OOC,"
pages($0B , $29) = "Alternate Function,MC,"
pages($0B , $2A) = "Line,OSC-NAry,"
pages($0B , $2B) = "Speaker Phone,OOC,"
pages($0B , $2C) = "Conference,OOC,"
pages($0B , $2D) = "Ring Enable,OOC,"
pages($0B , $2E) = "Ring Select,OSC,"
pages($0B , $2F) = "Phone Mute,OOC,"
pages($0B , $30) = "Caller ID,MC,"
pages($0B , $31) = "Send,OOC,"
pages($0B , $50) = "Speed Dial,OSC,"
pages($0B , $51) = "Store Number,OSC,"
pages($0B , $52) = "Recall Number,OSC,"
pages($0B , $53) = "Phone Directory,OOC,"
pages($0B , $70) = "Voice Mail,OOC,"
pages($0B , $71) = "Screen Calls,OOC,"
pages($0B , $72) = "Do Not Disturb,OOC,"
pages($0B , $73) = "Message,OSC,"
pages($0B , $74) = "Answer On/Off,OOC,"
pages($0B , $90) = "Inside Dial Tone,MC,"
pages($0B , $91) = "Outside Dial Tone,MC,"
pages($0B , $92) = "Inside Ring Tone,MC,"
pages($0B , $93) = "Outside Ring Tone,MC,"
pages($0B , $94) = "Priority Ring Tone,MC,"
pages($0B , $95) = "Inside Ringback,MC,"
pages($0B , $96) = "Priority Ringback,MC,"
pages($0B , $97) = "Line Busy Tone,MC,"
pages($0B , $98) = "Reorder Tone,MC,"
pages($0B , $99) = "Call Waiting Tone,MC,"
pages($0B , $9A) = "Confirmation Tone 1,MC,"
pages($0B , $9B) = "Confirmation Tone 2,MC,"
pages($0B , $9C) = "Tones Off,OOC,"
pages($0B , $9D) = "Outside Ringback,MC,"
pages($0B , $9E) = "Ringer,OOC,"
pages($0B , $B0) = "Phone Key 0,Sel,"
pages($0B , $B1) = "Phone Key 1,Sel,"
pages($0B , $B2) = "Phone Key 2,Sel,"
pages($0B , $B3) = "Phone Key 3,Sel,"
pages($0B , $B4) = "Phone Key 4,Sel,"
pages($0B , $B5) = "Phone Key 5,Sel,"
pages($0B , $B6) = "Phone Key 6,Sel,"
pages($0B , $B7) = "Phone Key 7,Sel,"
pages($0B , $B8) = "Phone Key 8,Sel,"
pages($0B , $B9) = "Phone Key 9,Sel,"
pages($0B , $BA) = "Phone Key *,Sel,"
pages($0B , $BB) = "Phone Key #,Sel,"
pages($0B , $BC) = "Phone Key A,Sel,"
pages($0B , $BD) = "Phone Key B,Sel,"
pages($0B , $BE) = "Phone Key C,Sel,"
pages($0B , $BF) = "Phone Key D,Sel,"
pages($0B , $C0) = "Phone Call History Key,Sel,"
pages($0B , $C1) = "Phone Caller ID Key,Sel,"
pages($0B , $C2) = "Phone Settings Key,Sel,"
pages($0B , $F0) = "Host Control,OOC,"
pages($0B , $F1) = "Host Available,OOC,"
pages($0B , $F2) = "Host Call Active,OOC,"
pages($0B , $F3) = "Activate Handset Audio,OOC,"
pages($0B , $F4) = "Ring Type,NARY,"
pages($0B , $F5) = "Re-dialable Phone Number,OOC,"
pages($0B , $F8) = "Stop Ring Tone,Sel,"
pages($0B , $F9) = "PSTN Ring Tone,Sel,"
pages($0B , $FA) = "Host Ring Tone,Sel,"
pages($0B , $FB) = "Alert Sound Error,Sel,"
pages($0B , $FC) = "Alert Sound Confirm,Sel,"
pages($0B , $FD) = "Alert Sound Notification,Sel,"
pages($0B , $108) = "Email Message Waiting,OOC,"
pages($0B , $109) = "Voicemail Message Waiting,OOC,"
pages($0B , $10A) = "Host Hold,OOC,"
pages($0B , $110) = "Incoming Call History Count,DV,"
pages($0B , $111) = "Outgoing Call History Count,DV,"
pages($0B , $112) = "Incoming Call History,CL,"
pages($0B , $113) = "Outgoing Call History,CL,"
pages($0B , $114) = "Phone Locale,DV,"
pages($0B , $140) = "Phone Time Second,DV,"
pages($0B , $141) = "Phone Time Minute,DV,"
pages($0B , $142) = "Phone Time Hour,DV,"
pages($0B , $143) = "Phone Date Day,DV,"
pages($0B , $144) = "Phone Date Month,DV,"
pages($0B , $145) = "Phone Date Year,DV,"
pages($0B , $146) = "Handset Nickname,DV,"
pages($0B , $147) = "Address Book ID,DV,"
pages($0B , $14A) = "Call Duration,DV,"
pages($0B , $14B) = "Dual Mode Phone,CA,"
Last edited by miso on Sun Dec 21, 2025 6:48 am, edited 2 times in total.
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

Code: Select all

pagenames($0C)="Consumer Device Page,CD_"
;=========================================================

pages($0C , $00) = "Unassigned"
pages($0C , $01) = "Consumer Control,CA,"
pages($0C , $02) = "Numeric Key Pad,NAry,"
pages($0C , $03) = "Programmable Buttons,NAry,"
pages($0C , $04) = "Microphone,CA,"
pages($0C , $05) = "Headphone,CA,"
pages($0C , $06) = "Graphic Equalizer,CA,"
pages($0C , $20) = "+10,OSC,Plus10"
pages($0C , $21) = "+100,OSC,Plus100"
pages($0C , $22) = "AM/PM,OSC,"
pages($0C , $30) = "Power,OOC,"
pages($0C , $31) = "Reset,OSC,"
pages($0C , $32) = "Sleep,OSC,"
pages($0C , $33) = "Sleep After,OSC,"
pages($0C , $34) = "Sleep Mode,RTC,"
pages($0C , $35) = "Illumination,OOC,"
pages($0C , $36) = "Function Buttons,NAry,"
pages($0C , $40) = "Menu,OOC,"
pages($0C , $41) = "Menu Pick,OSC,"
pages($0C , $42) = "Menu Up,OSC,"
pages($0C , $43) = "Menu Down,OSC,"
pages($0C , $44) = "Menu Left,OSC,"
pages($0C , $45) = "Menu Right,OSC,"
pages($0C , $46) = "Menu Escape,OSC,"
pages($0C , $47) = "Menu Value Increase,OSC,"
pages($0C , $48) = "Menu Value Decrease,OSC,"
pages($0C , $60) = "Data On Screen,OOC,"
pages($0C , $61) = "Closed Caption,OOC,"
pages($0C , $62) = "Closed Caption Select,OSC,"
pages($0C , $63) = "VCR/TV,OOC,"
pages($0C , $64) = "Broadcast Mode,OSC,"
pages($0C , $65) = "Snapshot,OSC,"
pages($0C , $66) = "Still,OSC,"
pages($0C , $67) = "Picture-in-Picture Toggle,OSC,"
pages($0C , $68) = "Picture-in-Picture Swap,OSC,"
pages($0C , $69) = "Red Menu Button,MC,"
pages($0C , $6A) = "Green Menu Button,MC,"
pages($0C , $6B) = "Blue Menu Button,MC,"
pages($0C , $6C) = "Yellow Menu Button,MC,"
pages($0C , $6D) = "Aspect,OSC,"
pages($0C , $6E) = "3D Mode Select,OSC,"
pages($0C , $6F) = "Display Brightness Increment,RTC,"
pages($0C , $70) = "Display Brightness Decrement,RTC,"
pages($0C , $71) = "Display Brightness,LC,"
pages($0C , $72) = "Display Backlight Toggle,OOC,"
pages($0C , $73) = "Display Set Brightness to Minimum,OOC,"
pages($0C , $74) = "Display Set Brightness to Maximum,OOC,"
pages($0C , $75) = "Display Set Auto Brightness,OOC,"
pages($0C , $76) = "Camera Access Enabled,OOC,"
pages($0C , $77) = "Camera Access Disabled,OOC,"
pages($0C , $78) = "Camera Access Toggle,OOC,"
pages($0C , $79) = "Keyboard Brightness Increment,OSC,"
pages($0C , $7A) = "Keyboard Brightness Decrement,OSC,"
pages($0C , $7B) = "Keyboard Backlight Set Level,LC,"
pages($0C , $7C) = "Keyboard Backlight OOC,OOC,"
pages($0C , $7D) = "Keyboard Backlight Set Minimum,OSC,"
pages($0C , $7E) = "Keyboard Backlight Set Maximum,OSC,"
pages($0C , $7F) = "Keyboard Backlight Auto,OOC,"
pages($0C , $80) = "Selection,NAry,"
pages($0C , $81) = "Assign Selection,OSC,"
pages($0C , $82) = "Mode Step,OSC,"
pages($0C , $83) = "Recall Last,OSC,"
pages($0C , $84) = "Enter Channel,OSC,"
pages($0C , $85) = "Order Movie,OSC,"
pages($0C , $86) = "Channel,LC,"
pages($0C , $87) = "Media Selection,NAry,"
pages($0C , $88) = "Media Select Computer,Sel,"
pages($0C , $89) = "Media Select TV,Sel,"
pages($0C , $8A) = "Media Select WWW,Sel,"
pages($0C , $8B) = "Media Select DVD,Sel,"
pages($0C , $8C) = "Media Select Telephone,Sel,"
pages($0C , $8D) = "Media Select Program Guide,Sel,"
pages($0C , $8E) = "Media Select Video Phone,Sel,"
pages($0C , $8F) = "Media Select Games,Sel,"
pages($0C , $90) = "Media Select Messages,Sel,"
pages($0C , $91) = "Media Select CD,Sel,"
pages($0C , $92) = "Media Select VCR,Sel,"
pages($0C , $93) = "Media Select Tuner,Sel,"
pages($0C , $94) = "Quit,OSC,"
pages($0C , $95) = "Help,OOC,"
pages($0C , $96) = "Media Select Tape,Sel,"
pages($0C , $97) = "Media Select Cable,Sel,"
pages($0C , $98) = "Media Select Satellite,Sel,"
pages($0C , $99) = "Media Select Security,Sel,"
pages($0C , $9A) = "Media Select Home,Sel,"
pages($0C , $9B) = "Media Select Call,Sel,"
pages($0C , $9C) = "Channel Increment,OSC,"
pages($0C , $9D) = "Channel Decrement,OSC,"
pages($0C , $9E) = "Media Select SAP,Sel,"
pages($0C , $A0) = "VCR Plus,OSC,"
pages($0C , $A1) = "Once,OSC,"
pages($0C , $A2) = "Daily,OSC,"
pages($0C , $A3) = "Weekly,OSC,"
pages($0C , $A4) = "Monthly,OSC,"
pages($0C , $B0) = "Play,OOC,"
pages($0C , $B1) = "Pause,OOC,"
pages($0C , $B2) = "Record,OOC,"
pages($0C , $B3) = "Fast Forward,OOC,"
pages($0C , $B4) = "Rewind,OOC,"
pages($0C , $B5) = "Scan Next Track,OSC,"
pages($0C , $B6) = "Scan Previous Track,OSC,"
pages($0C , $B7) = "Stop,OSC,"
pages($0C , $B8) = "Eject,OSC,"
pages($0C , $B9) = "Random Play,OOC,"
pages($0C , $BA) = "Select Disc,NAry,"
pages($0C , $BB) = "Enter Disc,MC,"
pages($0C , $BC) = "Repeat,OSC,"
pages($0C , $BD) = "Tracking,LC,"
pages($0C , $BE) = "Track Normal,OSC,"
pages($0C , $BF) = "Slow Tracking,LC,"
pages($0C , $C0) = "Frame Forward,RTC,"
pages($0C , $C1) = "Frame Back,RTC,"
pages($0C , $C2) = "Mark,OSC,"
pages($0C , $C3) = "Clear Mark,OSC,"
pages($0C , $C4) = "Repeat From Mark,OOC,"
pages($0C , $C5) = "Return To Mark,OSC,"
pages($0C , $C6) = "Search Mark Forward,OSC,"
pages($0C , $C7) = "Search Mark Backwards,OSC,"
pages($0C , $C8) = "Counter Reset,OSC,"
pages($0C , $C9) = "Show Counter,OSC,"
pages($0C , $CA) = "Tracking Increment,RTC,"
pages($0C , $CB) = "Tracking Decrement,RTC,"
pages($0C , $CC) = "Stop/Eject,OSC,"
pages($0C , $CD) = "Play/Pause,OSC,"
pages($0C , $CE) = "Play/Skip,OSC,"
pages($0C , $CF) = "Voice Command,OSC,"
pages($0C , $D0) = "Invoke Capture Interface,Sel,"
pages($0C , $D1) = "Start or Stop Game Recording,Sel,"
pages($0C , $D2) = "Historical Game Capture,Sel,"
pages($0C , $D3) = "Capture Game Screenshot,Sel,"
pages($0C , $D4) = "Show or Hide Recording Indicator,Sel,"
pages($0C , $D5) = "Start or Stop Microphone Capture,Sel,"
pages($0C , $D6) = "Start or Stop Camera Capture,Sel,"
pages($0C , $D7) = "Start or Stop Game Broadcast,Sel,"
pages($0C , $E0) = "Volume,LC,"
pages($0C , $E1) = "Balance,LC,"
pages($0C , $E2) = "Mute,OOC,"
pages($0C , $E3) = "Bass,LC,"
pages($0C , $E4) = "Treble,LC,"
pages($0C , $E5) = "Bass Boost,OOC,"
pages($0C , $E6) = "Surround Mode,OSC,"
pages($0C , $E7) = "Loudness,OOC,"
pages($0C , $E8) = "MPX,OOC,MPX"
pages($0C , $E9) = "Volume Increment,RTC,"
pages($0C , $EA) = "Volume Decrement,RTC,"
pages($0C , $F0) = "Speed Select,OSC,"
pages($0C , $F1) = "Playback Speed,NAry,"
pages($0C , $F2) = "Standard Play,Sel,"
pages($0C , $F3) = "Long Play,Sel,"
pages($0C , $F4) = "Extended Play,Sel,"
pages($0C , $F5) = "Slow,OSC,"
pages($0C , $100) = "Fan Enable,OOC,"
pages($0C , $101) = "Fan Speed,LC,"
pages($0C , $102) = "Light Enable,OOC,"
pages($0C , $103) = "Light Illumination Level,LC,"
pages($0C , $104) = "Climate Control Enable,OOC,"
pages($0C , $105) = "Room Temperature,LC,"
pages($0C , $106) = "Security Enable,OOC,"
pages($0C , $107) = "Fire Alarm,OSC,"
pages($0C , $108) = "Police Alarm,OSC,"
pages($0C , $109) = "Proximity,LC,"
pages($0C , $10A) = "Motion,OSC,"
pages($0C , $10B) = "Duress Alarm,OSC,"
pages($0C , $10C) = "Holdup Alarm,OSC,"
pages($0C , $10D) = "Medical Alarm,OSC,"
pages($0C , $150) = "Balance Right,RTC,"
pages($0C , $151) = "Balance Left,RTC,"
pages($0C , $152) = "Bass Increment,RTC,"
pages($0C , $153) = "Bass Decrement,RTC,"
pages($0C , $154) = "Treble Increment,RTC,"
pages($0C , $155) = "Treble Decrement,RTC,"
pages($0C , $160) = "Speaker System,CL,"
pages($0C , $161) = "Channel Left,CL,"
pages($0C , $162) = "Channel Right,CL,"
pages($0C , $163) = "Channel Center,CL,"
pages($0C , $164) = "Channel Front,CL,"
pages($0C , $165) = "Channel Center Front,CL,"
pages($0C , $166) = "Channel Side,CL,"
pages($0C , $167) = "Channel Surround,CL,"
pages($0C , $168) = "Channel Low Frequency Enhancement,CL,"
pages($0C , $169) = "Channel Top,CL,"
pages($0C , $16A) = "Channel Unknown,CL,"
pages($0C , $170) = "Sub-channel,LC,"
pages($0C , $171) = "Sub-channel Increment,OSC,"
pages($0C , $172) = "Sub-channel Decrement,OSC,"
pages($0C , $173) = "Alternate Audio Increment,OSC,"
pages($0C , $174) = "Alternate Audio Decrement,OSC,"
pages($0C , $180) = "Application Launch Buttons,NAry,"
pages($0C , $181) = "AL Launch Button Configuration Tool,Sel,"
pages($0C , $182) = "AL Programmable Button Configuration,Sel,"
pages($0C , $183) = "AL Consumer Control Configuration,Sel,"
pages($0C , $184) = "AL Word Processor,Sel,"
pages($0C , $185) = "AL Text Editor,Sel,"
pages($0C , $186) = "AL Spreadsheet,Sel,"
pages($0C , $187) = "AL Graphics Editor,Sel,"
pages($0C , $188) = "AL Presentation App,Sel,"
pages($0C , $189) = "AL Database App,Sel,"
pages($0C , $18A) = "AL Email Reader,Sel,"
pages($0C , $18B) = "AL Newsreader,Sel,"
pages($0C , $18C) = "AL Voicemail,Sel,"
pages($0C , $18D) = "AL Contacts/Address Book,Sel,"
pages($0C , $18E) = "AL Calendar/Schedule,Sel,"
pages($0C , $18F) = "AL Task/Project Manager,Sel,"
pages($0C , $190) = "AL Log/Journal/Timecard,Sel,"
pages($0C , $191) = "AL Checkbook/Finance,Sel,"
pages($0C , $192) = "AL Calculator,Sel,"
pages($0C , $193) = "AL A/V Capture/Playback,Sel,"
pages($0C , $194) = "AL Local Machine Browser,Sel,"
pages($0C , $195) = "AL LAN/WAN Browser,Sel,"
pages($0C , $196) = "AL Internet Browser,Sel,"
pages($0C , $197) = "AL Remote Networking/ISP Connect,Sel,"
pages($0C , $198) = "AL Network Conference,Sel,"
pages($0C , $199) = "AL Network Chat,Sel,"
pages($0C , $19A) = "AL Telephony/Dialer,Sel,"
pages($0C , $19B) = "AL Logon,Sel,"
pages($0C , $19C) = "AL Logoff,Sel,"
pages($0C , $19D) = "AL Logon/Logoff,Sel,"
pages($0C , $19E) = "AL Terminal Lock/Screensaver,Sel,"
pages($0C , $19F) = "AL Control Panel,Sel,"
pages($0C , $1A0) = "AL Command Line Processor/Run,Sel,"
pages($0C , $1A1) = "AL Process/Task Manager,Sel,"
pages($0C , $1A2) = "AL Select Task/Application,Sel,"
pages($0C , $1A3) = "AL Next Task/Application,Sel,"
pages($0C , $1A4) = "AL Previous Task/Application,Sel,"
pages($0C , $1A5) = "AL Preemptive Halt Task/Application,Sel,"
pages($0C , $1A6) = "AL Integrated Help Center,Sel,"
pages($0C , $1A7) = "AL Documents,Sel,"
pages($0C , $1A8) = "AL Thesaurus,Sel,"
pages($0C , $1A9) = "AL Dictionary,Sel,"
pages($0C , $1AA) = "AL Desktop,Sel,"
pages($0C , $1AB) = "AL Spell Check,Sel,"
pages($0C , $1AC) = "AL Grammar Check,Sel,"
pages($0C , $1AD) = "AL Wireless Status,Sel,"
pages($0C , $1AE) = "AL Keyboard Layout,Sel,"
pages($0C , $1AF) = "AL Virus Protection,Sel,"
pages($0C , $1B0) = "AL Encryption,Sel,"
pages($0C , $1B1) = "AL Screen Saver,Sel,"
pages($0C , $1B2) = "AL Alarms,Sel,"
pages($0C , $1B3) = "AL Clock,Sel,"
pages($0C , $1B4) = "AL File Browser,Sel,"
pages($0C , $1B5) = "AL Power Status,Sel,"
pages($0C , $1B6) = "AL Image Browser,Sel,"
pages($0C , $1B7) = "AL Audio Browser,Sel,"
pages($0C , $1B8) = "AL Movie Browser,Sel,"
pages($0C , $1B9) = "AL Digital Rights Manager,Sel,"
pages($0C , $1BA) = "AL Digital Wallet,Sel,"
pages($0C , $1BC) = "AL Instant Messaging,Sel,"
pages($0C , $1BD) = "AL OEM Features/Tips/Tutorial Browser,Sel,"
pages($0C , $1BE) = "AL OEM Help,Sel,"
pages($0C , $1BF) = "AL Online Community,Sel,"
pages($0C , $1C0) = "AL Entertainment Content Browser,Sel,"
pages($0C , $1C1) = "AL Online Shopping Browser,Sel,"
pages($0C , $1C2) = "AL SmartCard Information/Help,Sel,"
pages($0C , $1C3) = "AL Market Monitor/Finance Browser,Sel,"
pages($0C , $1C4) = "AL Customized Corporate News Browser,Sel,"
pages($0C , $1C5) = "AL Online Activity Browser,Sel,"
pages($0C , $1C6) = "AL Research/Search Browser,Sel,"
pages($0C , $1C7) = "AL Audio Player,Sel,"
pages($0C , $1C8) = "AL Message Status,Sel,"
pages($0C , $1C9) = "AL Contact Sync,Sel,"
pages($0C , $1CB) = "AL Context-aware Desktop Assistant,Sel,"
pages($0C , $200) = "Generic GUI Application Controls,NAry,"
pages($0C , $201) = "AC New,Sel,"
pages($0C , $202) = "AC Open,Sel,"
pages($0C , $203) = "AC Close,Sel,"
pages($0C , $204) = "AC Exit,Sel,"
pages($0C , $205) = "AC Maximize,Sel,"
pages($0C , $206) = "AC Minimize,Sel,"
pages($0C , $207) = "AC Save,Sel,"
pages($0C , $208) = "AC Print,Sel,"
pages($0C , $209) = "AC Properties,Sel,"
pages($0C , $21A) = "AC Undo,Sel,"
pages($0C , $21B) = "AC Copy,Sel,"
pages($0C , $21C) = "AC Cut,Sel,"
pages($0C , $21D) = "AC Paste,Sel,"
pages($0C , $21E) = "AC Select All,Sel,"
pages($0C , $21F) = "AC Find,Sel,"
pages($0C , $220) = "AC Find and Replace,Sel,"
pages($0C , $221) = "AC Search,Sel,"
pages($0C , $222) = "AC Go To,Sel,"
pages($0C , $223) = "AC Home,Sel,"
pages($0C , $224) = "AC Back,Sel,"
pages($0C , $225) = "AC Forward,Sel,"
pages($0C , $226) = "AC Stop,Sel,"
pages($0C , $227) = "AC Refresh,Sel,"
pages($0C , $228) = "AC Previous Link,Sel,"
pages($0C , $229) = "AC Next Link,Sel,"
pages($0C , $22A) = "AC Bookmarks,Sel,"
pages($0C , $22B) = "AC History,Sel,"
pages($0C , $22C) = "AC Subscriptions,Sel,"
pages($0C , $22D) = "AC Zoom In,Sel,"
pages($0C , $22E) = "AC Zoom Out,Sel,"
pages($0C , $22F) = "AC Zoom,LC,"
pages($0C , $230) = "AC Full Screen View,Sel,"
pages($0C , $231) = "AC Normal View,Sel,"
pages($0C , $232) = "AC View Toggle,Sel,"
pages($0C , $233) = "AC Scroll Up,Sel,"
pages($0C , $234) = "AC Scroll Down,Sel,"
pages($0C , $235) = "AC Scroll,LC,"
pages($0C , $236) = "AC Pan Left,Sel,"
pages($0C , $237) = "AC Pan Right,Sel,"
pages($0C , $238) = "AC Pan,LC,"
pages($0C , $239) = "AC New Window,Sel,"
pages($0C , $23A) = "AC Tile Horizontally,Sel,"
pages($0C , $23B) = "AC Tile Vertically,Sel,"
pages($0C , $23C) = "AC Format,Sel,"
pages($0C , $23D) = "AC Edit,Sel,"
pages($0C , $23E) = "AC Bold,Sel,"
pages($0C , $23F) = "AC Italics,Sel,"
pages($0C , $240) = "AC Underline,Sel,"
pages($0C , $241) = "AC Strikethrough,Sel,"
pages($0C , $242) = "AC Subscript,Sel,"
pages($0C , $243) = "AC Superscript,Sel,"
pages($0C , $244) = "AC All Caps,Sel,"
pages($0C , $245) = "AC Rotate,Sel,"
pages($0C , $246) = "AC Resize,Sel,"
pages($0C , $247) = "AC Flip horizontal,Sel,"
pages($0C , $248) = "AC Flip Vertical,Sel,"
pages($0C , $249) = "AC Mirror Horizontal,Sel,"
pages($0C , $24A) = "AC Mirror Vertical,Sel,"
pages($0C , $24B) = "AC Font Select,Sel,"
pages($0C , $24C) = "AC Font Color,Sel,"
pages($0C , $24D) = "AC Font Size,Sel,"
pages($0C , $24E) = "AC Justify Left,Sel,"
pages($0C , $24F) = "AC Justify Center H,Sel,"
pages($0C , $250) = "AC Justify Right,Sel,"
pages($0C , $251) = "AC Justify Block H,Sel,"
pages($0C , $252) = "AC Justify Top,Sel,"
pages($0C , $253) = "AC Justify Center V,Sel,"
pages($0C , $254) = "AC Justify Bottom,Sel,"
pages($0C , $255) = "AC Justify Block V,Sel,"

pagenames($0D)="Digitizer Device Page,DIG_"
;=========================================================
pages($0D , $00) = "Undefined"
pages($0D , $01) = "Digitizer,CA,"
pages($0D , $02) = "Pen,CA,"
pages($0D , $03) = "Light Pen,CA,"
pages($0D , $04) = "Touch Screen,CA,"
pages($0D , $05) = "Touch Pad,CA,"
pages($0D , $06) = "White Board,CA,"
pages($0D , $07) = "Coordinate Measuring Machine,CA,"
pages($0D , $08) = "3D Digitizer,CA,Digitizer3D"
pages($0D , $09) = "Stereo Plotter,CA,"
pages($0D , $0A) = "Articulated Arm,CA,"
pages($0D , $0B) = "Armature,CA,"
pages($0D , $0C) = "Multiple Point Digitizer,CA,"
pages($0D , $0D) = "Free Space Wand,CA,"
pages($0D , $0E) = "Device Configuration,CA,"
pages($0D , $0F) = "Capacitive Heat Map Digitizer,CA,"
pages($0D , $20) = "Stylus,CACL,"
pages($0D , $21) = "Puck,CL,"
pages($0D , $22) = "Finger,CL,"
pages($0D , $23) = "Device Settings,CL,"
pages($0D , $30) = "Tip Pressure,DV,"
pages($0D , $31) = "Barrel Pressure,DV,"
pages($0D , $32) = "In Range,MC,"
pages($0D , $33) = "Touch,MC,"
pages($0D , $34) = "Untouch,OSC,"
pages($0D , $35) = "Tap,OSC,"
pages($0D , $36) = "Quality,DV,"
pages($0D , $37) = "Data Valid,MC,"
pages($0D , $38) = "Transducer Index,DV,"
pages($0D , $39) = "Tablet Function Keys,CL,"
pages($0D , $3A) = "Program Change Keys,CL,"
pages($0D , $3B) = "Battery Strength,DV,"
pages($0D , $3C) = "Invert,MC,"
pages($0D , $3D) = "X Tilt,DV,"
pages($0D , $3E) = "Y Tilt,DV,"
pages($0D , $3F) = "Azimuth,DV,"
pages($0D , $40) = "Altitude,DV,"
pages($0D , $41) = "Twist,DV,"
pages($0D , $42) = "Tip Switch,MC,"
pages($0D , $43) = "Secondary Tip Switch,MC,"
pages($0D , $44) = "Barrel Switch,MC,"
pages($0D , $45) = "Eraser,MC,"
pages($0D , $46) = "Tablet Pick,MC,"
pages($0D , $47) = "Confidence,DV,"
pages($0D , $48) = "Width,DV,"
pages($0D , $49) = "Height,DV,"
pages($0D , $51) = "Contact Identifier,DV,"
pages($0D , $52) = "Device Mode,DV,"
pages($0D , $53) = "Device Identifier,DV,"
pages($0D , $54) = "Contact Count,DV,"
pages($0D , $55) = "Contact Count Maximum,SV,"
pages($0D , $56) = "Relative Scan Time,DV,"
pages($0D , $57) = "Surface Switch,DF,"
pages($0D , $58) = "Button Switch,DF,"
pages($0D , $59) = "Pad Type,SF,"
pages($0D , $5A) = "Secondary Barrel Switch,MC,"
pages($0D , $5B) = "Transducer Serial Number,SV,"
pages($0D , $5C) = "Preferred Color,DV,"
pages($0D , $5D) = "Preferred Color is Locked,MC,"
pages($0D , $5E) = "Preferred Line Width,DV,"
pages($0D , $5F) = "Preferred Line Width is Locked,MC,"
pages($0D , $60) = "Latency Mode,DF,"
pages($0D , $61) = "Gesture Character Quality,DV,"
pages($0D , $62) = "Character Gesture Data Length,DV,"
pages($0D , $63) = "Character Gesture Data,DV,"
pages($0D , $64) = "Gesture Character Encoding,NAry,"
pages($0D , $65) = "UTF8 Charactre Gesture Encoding,Sel,"
pages($0D , $66) = "UTF16 Little Endian Character Gesture Encoding,Sel,"
pages($0D , $67) = "UTF16 Big Endian Character Gesture Encoding,Sel,"
pages($0D , $68) = "UTF32 Little Endian Character Gesture Encoding,Sel,"
pages($0D , $69) = "UTF32 Big Endian Character Gesture Encoding,Sel,"
pages($0D , $6A) = "Gesture Character Enable,DF,"
pages($0D , $6A) = "Capacitive Heat Map Protocol Vendor ID,SV,"
pages($0D , $6B) = "Capacitive Heat Map Protocol Version,SV,"
pages($0D , $6C) = "Capacitive Heat Map Frame Data,DV,"
pages($0D , $6D) = "Aspect,OSC,"
pages($0D , $70) = "Preferred Line Style,NAry,"
pages($0D , $71) = "Preferred Line Style is Locked,MC,"
pages($0D , $72) = "Ink,Sel,"
pages($0D , $73) = "Pencil,Sel,"
pages($0D , $74) = "Highlighter,Sel,"
pages($0D , $75) = "Chisel Marker,Sel,"
pages($0D , $76) = "Brush,Sel,"
pages($0D , $77) = "No preference,Sel,"
pages($0D , $80) = "Digitizer Diagnostic,CL,"
pages($0D , $81) = "Digitizer Error,NAry,"
pages($0D , $82) = "Err Normal Status,Sel,"
pages($0D , $83) = "Err Transducers Exceeded,Sel,"
pages($0D , $84) = "Err Full Trans Features Unavail,Sel,"
pages($0D , $85) = "Err Charge Low,Sel,"
pages($0D , $90) = "Transducer Software Info,CL,"
pages($0D , $91) = "Transducer Vendor ID,SV,"
pages($0D , $92) = "Transducer Product ID,SV,"
pages($0D , $93) = "Device Supported Protocols,NAry,"
pages($0D , $94) = "Transducer Supported Protocols,NAry,"
pages($0D , $95) = "No Protocol,Sel,"
pages($0D , $96) = "Wacom AES Protocol,Sel,"
pages($0D , $97) = "USI Protocol,Sel,"
pages($0D , $98) = "Microsoft Pen Protocol,Sel,"
pages($0D , $A0) = "Supported Report Rates,SV,"
pages($0D , $A1) = "Report Rate,DV,"
pages($0D , $A2) = "Transducer Connected,SF,"
pages($0D , $A3) = "Switch Disabled,Sel,"
pages($0D , $A4) = "Switch Unimplemented,Sel,"
pages($0D , $A5) = "Transducer Switches,CL,"

pagenames($0E)="Haptics Page,HAP_"
;=========================================================
pages($0E , $00) = "Undefined"
pages($0E , $01) = "Simple Haptic Controller,CACL,"
pages($0E , $10) = "Waveform List,NAry,"
pages($0E , $11) = "Duration List,NAry,"
pages($0E , $20) = "Auto Trigger,DV,"
pages($0E , $21) = "Manual Trigger,DV,"
pages($0E , $22) = "Auto Trigger Associated Control,SV,"
pages($0E , $23) = "Intensity,DV,"
pages($0E , $24) = "Repeat Count,DV,"
pages($0E , $25) = "Retrigger Period,DV,"
pages($0E , $26) = "Waveform Vendor Page,SV,"
pages($0E , $27) = "Waveform Vendor ID,SV,"
pages($0E , $28) = "Waveform Cutoff Time,SV,"

pagenames($0F)="Physical Interface Device Page,PID_"
;=========================================================
pages($0F , $00) = "Undefined"
pages($0F , $01) = "Physical Interface Device,CA,"
pages($0F , $20) = "Normal,DV,"
pages($0F , $21) = "Set Effect Report,CL,"
pages($0F , $22) = "Effect Block Index,DV,"
pages($0F , $23) = "Parameter Block Offset,DV,"
pages($0F , $24) = "ROM Flag,DF,"
pages($0F , $25) = "Effect Type,NAry,"
pages($0F , $26) = "ET Constant Force,Sel,"
pages($0F , $27) = "ET Ramp,Sel,"
pages($0F , $28) = "ET Custom Force Data,Sel,"
pages($0F , $30) = "ET Square,Sel,"
pages($0F , $31) = "ET Sine,Sel,"
pages($0F , $32) = "ET Triangle,Sel,"
pages($0F , $33) = "ET Sawtooth Up,Sel,"
pages($0F , $34) = "ET Sawtooth Down,Sel,"
pages($0F , $40) = "ET Spring,Sel,"
pages($0F , $41) = "ET Damper,Sel,"
pages($0F , $42) = "ET Inertia,Sel,"
pages($0F , $43) = "ET Friction,Sel,"
pages($0F , $50) = "Duration,DV,"
pages($0F , $51) = "Sample Period,DV,"
pages($0F , $52) = "Gain,DV,"
pages($0F , $53) = "Trigger Button,DV,"
pages($0F , $54) = "Trigger Repeat Interval,DV,"
pages($0F , $55) = "Axes Enable,US,"
pages($0F , $56) = "Direction Enable,DF,"
pages($0F , $57) = "Direction,CL,"
pages($0F , $58) = "Type Specific Block Offset,CL,"
pages($0F , $59) = "Block Type,NAry,"
pages($0F , $5A) = "Set Envelope Report,CL,"
pages($0F , $5B) = "Attack Level,DV,"
pages($0F , $5C) = "Attack Time,DV,"
pages($0F , $5D) = "Fade Level,DV,"
pages($0F , $5E) = "Fade Time,DV,"
pages($0F , $5F) = "Set Condition Report,CL,"
pages($0F , $60) = "CP Offset,DV,"
pages($0F , $61) = "Positive Coefficient,DV,"
pages($0F , $62) = "Negative Coefficient,DV,"
pages($0F , $63) = "Positive Saturation,DV,"
pages($0F , $64) = "Negative Saturation,DV,"
pages($0F , $65) = "Dead Band,DV,"
pages($0F , $66) = "Download Force Sample,CL,"
pages($0F , $67) = "Isoch Custom Force Enable,DF,"
pages($0F , $68) = "Custom Force Data Report,CL,"
pages($0F , $69) = "Custom Force Data,DV,"
pages($0F , $6A) = "Custom Force Vendor Defined Data,DV,"
pages($0F , $6B) = "Set Custom Force Report,CL,"
pages($0F , $6C) = "Custom Force Data Offset,DV,"
pages($0F , $6D) = "Sample Count,DV,"
pages($0F , $6E) = "Set Periodic Report,CL,"
pages($0F , $6F) = "Offset,DV,"
pages($0F , $70) = "Magnitude,DV,"
pages($0F , $71) = "Phase,DV,"
pages($0F , $72) = "Period,DV,"
pages($0F , $73) = "Set Constant Force Report,CL,"
pages($0F , $74) = "Set Ramp Force Report,CL,"
pages($0F , $75) = "Ramp Start,DV,"
pages($0F , $76) = "Ramp End,DV,"
pages($0F , $77) = "Effect Operation Report,CL,"
pages($0F , $78) = "Effect Operation,NAry,"
pages($0F , $79) = "Op Effect Start,Sel,"
pages($0F , $7A) = "Op Effect Start Solo,Sel,"
pages($0F , $7B) = "Op Effect Stop,Sel,"
pages($0F , $7C) = "Loop Count,DV,"
pages($0F , $7D) = "Device Gain Report,CL,"
pages($0F , $7E) = "Device Gain,DV,"
pages($0F , $7F) = "PID Pool Report,CL,"
pages($0F , $80) = "RAM Pool Size,DV,"
pages($0F , $81) = "ROM Pool Size,SV,"
pages($0F , $82) = "ROM Effect Block Count,SV,"
pages($0F , $83) = "Simultaneous Effects Max,SV,"
pages($0F , $84) = "Pool Alignment,SV,"
pages($0F , $85) = "PID Pool Move Report,CL,"
pages($0F , $86) = "Move Source,DV,"
pages($0F , $87) = "Move Destination,DV,"
pages($0F , $88) = "Move Length,DV,"
pages($0F , $89) = "PID Block Load Report,CL,"
pages($0F , $8B) = "Block Load Status,NAry,"
pages($0F , $8C) = "Block Load Success,Sel,"
pages($0F , $8D) = "Block Load Full,Sel,"
pages($0F , $8E) = "Block Load Error,Sel,"
pages($0F , $8F) = "Block Handle"
pages($0F , $90) = "PID Block Free Report,CL,"
pages($0F , $91) = "Type Specific Block Handle,CL,"
pages($0F , $92) = "PID State Report,CL,"
pages($0F , $94) = "Effect Playing,DF,"
pages($0F , $95) = "PID Device Control Report,CL,"
pages($0F , $96) = "PID Device Control,NAry,"
pages($0F , $97) = "DC Enable Actuators,Sel,"
pages($0F , $98) = "DC Disable Actuators,Sel,"
pages($0F , $99) = "DC Stop All Effects,Sel,"
pages($0F , $9A) = "DC Device Reset,Sel,"
pages($0F , $9B) = "DC Device Pause,Sel,"
pages($0F , $9C) = "DC Device Continue,Sel,"
pages($0F , $9F) = "Device Paused,DF,"
pages($0F , $A0) = "Actuators Enabled,DF,"
pages($0F , $A4) = "Safety Switch,DF,"
pages($0F , $A5) = "Actuator Override Switch,DF,"
pages($0F , $A6) = "Actuator Power,DF,"
pages($0F , $A7) = "Start Delay,DV,"
pages($0F , $A8) = "Parameter Block Size,CL,"
pages($0F , $A9) = "Device Managed Pool,SF,"
pages($0F , $AA) = "Shared Parameter Blocks,SF,"
pages($0F , $AB) = "Create New Effect Report,CL,"
pages($0F , $AC) = "RAM Pool Available,DV,"

pagenames($12)="Eye and Head Trackers Page,EYE_"
;=========================================================
pages($12 , $00) = "Undefined"
pages($12 , $01) = "Eye Tracker,CA,"
pages($12 , $02) = "Head Tracker,CA,"
pages($12 , $10) = "Tracking Data,CP,"
pages($12 , $11) = "Capabilities,CL,"
pages($12 , $12) = "Configuration,CL,"
pages($12 , $13) = "Status,CL,"
pages($12 , $14) = "Control,CL,"
pages($12 , $20) = "Sensor Timestamp,DV,"
pages($12 , $21) = "Position X,DV,"
pages($12 , $22) = "Position Y,DV,"
pages($12 , $23) = "Position Z,DV,"
pages($12 , $24) = "Gaze Point,CP,"
pages($12 , $25) = "Left Eye Position,CP,"
pages($12 , $26) = "Right Eye Position,CP,"
pages($12 , $27) = "Head Position,CP,"
pages($12 , $28) = "Head Direction Point,CP,"
pages($12 , $29) = "Rotation about X axis,DV,"
pages($12 , $2A) = "Rotation about Y axis,DV,"
pages($12 , $2B) = "Rotation about Z axis,DV,"
pages($12 , $100) = "Tracker Quality,SV,"
pages($12 , $101) = "Minimum Tracking Distance,SV,"
pages($12 , $102) = "Optimum Tracking Distance,SV,"
pages($12 , $103) = "maximum Tracking Distance,SV,"
pages($12 , $104) = "Maximum Screen Plane Width,SV,"
pages($12 , $105) = "maximum Screen Plane Height,SV,"
pages($12 , $200) = "Display Manufacturer ID,SV,"
pages($12 , $201) = "Display Product ID,SV,"
pages($12 , $202) = "Display Serial Number,SV,"
pages($12 , $203) = "Display Manufacturer Date,SV,"
pages($12 , $204) = "Calibrated Screen Width,SV,"
pages($12 , $205) = "Calibrated Screen Height,SV,"

pagenames($14)="Alphanumeric Display Page,AD_"
;=========================================================
pages($14 , $00) = "Undefined "
pages($14 , $01) = "Alphanumeric Display,CA,"
pages($14 , $02) = "Bit-mapped Display,CA,"
pages($14 , $20) = "Display Attributes Report,CL,"
pages($14 , $21) = "ASCII Character Set,SF,"
pages($14 , $22) = "Data Read Back,SF,"
pages($14 , $23) = "Font Read Back,SF,"
pages($14 , $24) = "Display Control Report,CL,"
pages($14 , $25) = "Clear Display,DF,"
pages($14 , $26) = "Display Enable,DF,"
pages($14 , $27) = "Screen Saver Delay,SVDV,"
pages($14 , $28) = "Screen Saver Enable,DF,"
pages($14 , $29) = "Vertical Scroll,SFDF,"
pages($14 , $2A) = "Horizontal Scroll,SFDF,"
pages($14 , $2B) = "Character Report,CL,"
pages($14 , $2C) = "Display Data,DV,"
pages($14 , $2D) = "Display Status,CL,"
pages($14 , $2E) = "Stat Not Ready,Sel,"
pages($14 , $2F) = "Stat Ready,Sel,"
pages($14 , $30) = "Err Not a loadable character,Sel,"
pages($14 , $31) = "Err Font data cannot be read,Sel,"
pages($14 , $32) = "Cursor Position Report,CL,"
pages($14 , $33) = "Row,DV,"
pages($14 , $34) = "Column,DV,"
pages($14 , $35) = "Rows,SV,"
pages($14 , $36) = "Columns,SV,"
pages($14 , $37) = "Cursor Pixel Positioning,SF,"
pages($14 , $38) = "Cursor Mode,DF,"
pages($14 , $39) = "Cursor Enable,DF,"
pages($14 , $3A) = "Cursor Blink,DF,"
pages($14 , $3B) = "Font Report,CL,"
pages($14 , $3C) = "Font Data,BB,"
pages($14 , $3D) = "Character Width,SV,"
pages($14 , $3E) = "Character Height,SV,"
pages($14 , $3F) = "Character Spacing Horizontal,SV,"
pages($14 , $40) = "Character Spacing Vertical,SV,"
pages($14 , $41) = "Unicode Character Set,SF,"
pages($14 , $42) = "Font 7-Segment,SF,"
pages($14 , $43) = "7-Segment Direct Map,SF,DirectMap7Segment"
pages($14 , $44) = "Font 14-Segment,SF,"
pages($14 , $45) = "14-Segment Direct Map,SF,DirectMap14Segment"
pages($14 , $46) = "Display Brightness,DV,"
pages($14 , $47) = "Display Contrast,DV,"
pages($14 , $48) = "Character Attribute,CL,"
pages($14 , $49) = "Attribute Readback,SF,"
pages($14 , $4A) = "Attribute Data,DV,"
pages($14 , $4B) = "Char Attr Enhance,OOC,"
pages($14 , $4C) = "Char Attr Underline,OOC,"
pages($14 , $4D) = "Char Attr Blink,OOC,"
pages($14 , $80) = "Bitmap Size X,SV,"
pages($14 , $81) = "Bitmap Size Y,SV,"
pages($14 , $83) = "Bit Depth Format,SV,"
pages($14 , $84) = "Display Orientation,DV,"
pages($14 , $85) = "Palette Report,CL,"
pages($14 , $86) = "Palette Data Size,SV,"
pages($14 , $87) = "Palette Data Offset,SV,"
pages($14 , $88) = "Palette Data,BB,"
pages($14 , $8A) = "Blit Report,CL,"
pages($14 , $8B) = "Blit Rectangle X1,SV,"
pages($14 , $8C) = "Blit Rectangle Y1,SV,"
pages($14 , $8D) = "Blit Rectangle X2,SV,"
pages($14 , $8E) = "Blit Rectangle Y2,SV,"
pages($14 , $8F) = "Blit Data,BB,"
pages($14 , $90) = "Soft Button,CL,"
pages($14 , $91) = "Soft Button ID,SV,"
pages($14 , $92) = "Soft Button Side,SV,"
pages($14 , $93) = "Soft Button Offset 1,SV,"
pages($14 , $94) = "Soft Button Offset 2,SV,"
pages($14 , $95) = "Soft Button Report,SV,"
pages($14 , $C2) = "Soft Keys,SV,"
pages($14 , $CC) = "Display Data Extensions,SF,"
pages($14 , $CF) = "Character Mapping,SV,"
pages($14 , $DD) = "Unicode Equivalent,SV,"
pages($14 , $DF) = "Character Page Mapping,SV,"
pages($14 , $FF) = "Request Report,DV,"

pagenames($20)="Sensor Device Page,SNS_"
;=========================================================
pages($20 , $00) = "Undefined"
pages($20 , $01) = "Sensor,CACP,"
pages($20 , $10) = "Biometric,CACP,"
pages($20 , $11) = "Biometric: Human Presence,CACP,"
pages($20 , $12) = "Biometric: Human Proximity,CACP,"
pages($20 , $13) = "Biometric: Human Touch,CACP,"
pages($20 , $14) = "Biometric: Blood Pressure,CACP,"
pages($20 , $15) = "Biometric: Body Temperature,CACP,"
pages($20 , $16) = "Biometric: Heart Rate,CACP,"
pages($20 , $17) = "Biometric: Heart Rate Variability,CACP,"
pages($20 , $18) = "Biometric: Peripheral Oxygen Saturation,CACP,"
pages($20 , $19) = "Biometric: Respiratory Rate,CACP,"
pages($20 , $20) = "Electrical,CACP"
pages($20 , $21) = "Electrical: Capacitance,CACP,"
pages($20 , $22) = "Electrical: Current,CACP,"
pages($20 , $23) = "Electrical: Power,CACP,"
pages($20 , $24) = "Electrical: Inductance,CACP,"
pages($20 , $25) = "Electrical: Resistance,CACP,"
pages($20 , $26) = "Electrical: Voltage,CACP,"
pages($20 , $27) = "Electrical: Potentiometer,CACP,"
pages($20 , $28) = "Electrical: Frequency,CACP,"
pages($20 , $29) = "Electrical: Period,CACP,"
pages($20 , $30) = "Environmental,CACP,"
pages($20 , $31) = "Environmental: Atmospheric Pressure,CACP,"
pages($20 , $32) = "Environmental: Humidity,CACP,"
pages($20 , $33) = "Environmental: Temperature,CACP,"
pages($20 , $34) = "Environmental: Wind Direction,CACP,"
pages($20 , $35) = "Environmental: Wind Speed,CACP,"
pages($20 , $36) = "Environmental: Air Quality,CACP,"
pages($20 , $37) = "Environmental: Heat Index,CACP,"
pages($20 , $38) = "Environmental: Surface Temperature,CACP,"
pages($20 , $39) = "Environmental: Volatile Organic Compounds,CACP,"
pages($20 , $3A) = "Environmental: Object Presence,CACP,"
pages($20 , $3B) = "Environmental: Object Proximity,CACP,"
pages($20 , $40) = "Light,CACP,"
pages($20 , $41) = "Light: Ambient Light,CACP,"
pages($20 , $42) = "Light: Consumer Infrared,CACP,"
pages($20 , $43) = "Light: Infrared Light,CACP,"
pages($20 , $44) = "Light: Visible Light,CACP,"
pages($20 , $45) = "Light: Ultraviolet Light,CACP,"
pages($20 , $50) = "Location,CACP,"
pages($20 , $51) = "Location: Broadcast,CACP,"
pages($20 , $52) = "Location: Dead Reckoning,CACP,"
pages($20 , $53) = "Location: Global Positioning System,CACP,"
pages($20 , $54) = "Location: Lookup,CACP,"
pages($20 , $55) = "Location: Other,CACP,"
pages($20 , $56) = "Location: Static,CACP,"
pages($20 , $57) = "Location: Triangulation,CACP,"
pages($20 , $60) = "Mechanical,CACP,"
pages($20 , $61) = "Mechanical: Boolean Switch,CACP,"
pages($20 , $62) = "Mechanical: Boolean Switch Array,CACP,"
pages($20 , $63) = "Mechanical: Multivalue Switch,CACP,"
pages($20 , $64) = "Mechanical: Force,CACP,"
pages($20 , $65) = "Mechanical: Pressure,CACP,"
pages($20 , $66) = "Mechanical: Strain,CACP,"
pages($20 , $67) = "Mechanical: Weight,CACP,"
pages($20 , $68) = "Mechanical: Haptic Vibrator,CACP,"
pages($20 , $69) = "Mechanical: Hall Effect Switch,CACP,"
pages($20 , $70) = "Motion,CACP,"
pages($20 , $71) = "Motion: Accelerometer 1D,CACP,"
pages($20 , $72) = "Motion: Accelerometer 2D,CACP,"
pages($20 , $73) = "Motion: Accelerometer 3D,CACP,"
pages($20 , $74) = "Motion: Gyrometer 1D,CACP,"
pages($20 , $75) = "Motion: Gyrometer 2D,CACP,"
pages($20 , $76) = "Motion: Gyrometer 3D,CACP,"
pages($20 , $77) = "Motion: Motion Detector,CACP,"
pages($20 , $78) = "Motion: Speedometer,CACP,"
pages($20 , $79) = "Motion: Accelerometer,CACP,"
pages($20 , $7A) = "Motion: Gyrometer,CACP,"
pages($20 , $7B) = "Motion: Gravity Vector,CACP,"
pages($20 , $7C) = "Motion: Linear Accelerometer,CACP,"
pages($20 , $80) = "Orientation,CACP,"
pages($20 , $81) = "Orientation: Compass 1D,CACP,"
pages($20 , $82) = "Orientation: Compass 2D,CACP,"
pages($20 , $83) = "Orientation: Compass 3D,CACP,"
pages($20 , $84) = "Orientation: Inclinometer 1D,CACP,"
pages($20 , $85) = "Orientation: Inclinometer 2D,CACP,"
pages($20 , $86) = "Orientation: Inclinometer 3D,CACP,"
pages($20 , $87) = "Orientation: Distance 1D,CACP,"
pages($20 , $88) = "Orientation: Distance 2D,CACP,"
pages($20 , $89) = "Orientation: Distance 3D,CACP,"
pages($20 , $8A) = "Orientation: Device Orientation,CACP,"
pages($20 , $8B) = "Orientation: Compass,CACP,"
pages($20 , $8C) = "Orientation: Inclinometer,CACP,"
pages($20 , $8D) = "Orientation: Distance,CACP,"
pages($20 , $8E) = "Orientation: Relative Orientation,CACP,"
pages($20 , $8F) = "Orientation: Simple Orientation,CACP,"
pages($20 , $90) = "Scanner,CACP,"
pages($20 , $91) = "Scanner: Barcode,CACP,"
pages($20 , $92) = "Scanner: RFID,CACP,"
pages($20 , $93) = "Scanner: NFC,CACP,"
pages($20 , $A0) = "Time,CACP,"
pages($20 , $A1) = "Time: Alarm Timer,CACP,"
pages($20 , $A2) = "Time: Real Time Clock,CACP,"
pages($20 , $B0) = "Personal Activity,CACP,"
pages($20 , $B1) = "Personal Activity: Activity Detection,CACP,"
pages($20 , $B2) = "Personal Activity: Device Position,CACP,"
pages($20 , $B3) = "Personal Activity: Pedometer,CACP,"
pages($20 , $B4) = "Personal Activity: Step Detection,CACP,"
pages($20 , $C0) = "Orientation Extended,CACP,"
pages($20 , $C1) = "Orientation Extended: Geomagnetic Orientation,CACP,"
pages($20 , $C2) = "Orientation Extended: Magnetometer,CACP,"
pages($20 , $E0) = "Other,CACP,"
pages($20 , $E1) = "Other: Custom,CACP,"
pages($20 , $E2) = "Other: Generic,CACP,"
pages($20 , $E3) = "Other: Generic Enumerator,CACP,"
;This one above is absolutely uncomplete


pagenames($40)="Medical Instrument Page,MED_"
;=========================================================
pages($40 , $00) = "Undefined"
pages($40 , $01) = "Medical Ultrasound,CA,"
pages($40 , $20) = "VCR/Acquisition,OOC,"
pages($40 , $21) = "Freeze/Thaw,OOC,"
pages($40 , $22) = "Clip Store,OSC,"
pages($40 , $23) = "Update,OSC,"
pages($40 , $24) = "Next,OSC,"
pages($40 , $25) = "Save,OSC,"
pages($40 , $26) = "Print,OSC,"
pages($40 , $27) = "Microphone Enable,OSC,"
pages($40 , $40) = "Cine,LC,"
pages($40 , $41) = "Transmit Power,LC,"
pages($40 , $42) = "Volume,LC,"
pages($40 , $43) = "Focus,LC,"
pages($40 , $44) = "Depth,LC,"
pages($40 , $60) = "Soft Step - Primary,LC,"
pages($40 , $61) = "Soft Step - Secondary,LC,"
pages($40 , $70) = "Depth Gain Compensation,LC,"
pages($40 , $80) = "Zoom Select,OSC,"
pages($40 , $81) = "Zoom Adjust,LC,"
pages($40 , $82) = "Spectral Doppler Mode Select,OSC,"
pages($40 , $83) = "Spectral Doppler Adjust,LC,"
pages($40 , $84) = "Color Doppler Mode Select,OSC,"
pages($40 , $85) = "Color Doppler Adjust,LC,"
pages($40 , $86) = "Motion Mode Select,OSC,"
pages($40 , $87) = "Motion Mode Adjust,LC,"
pages($40 , $88) = "2-D Mode Select,OSC,ModeSelect2D"
pages($40 , $89) = "2-D Mode Adjust,LC,ModeAdjust2D"
pages($40 , $A0) = "Soft Control Select,OSC,"
pages($40 , $A1) = "Soft Control Adjust,LC,"

pagenames($59)="Lighting and Illumination Page,LAL_"
;=========================================================
pages($59 , $00) = "Undefined"
pages($59 , $01) = "LampArray,CA,"
pages($59 , $02) = "LampArrayAttributesReport,CL,"
pages($59 , $03) = "LampCount,SVDV,"
pages($59 , $04) = "BoundingBoxWidthInMicrometers,SV,"
pages($59 , $05) = "BoundingBoxHeightInMicrometers,SV,"
pages($59 , $06) = "BoundingBoxDepthInMicrometers,SV,"
pages($59 , $07) = "LampArrayKind,SV,"
pages($59 , $08) = "MinUpdateIntervalInMicroseconds,SV,"
pages($59 , $20) = "LampAttributesRequestReport,CL,"
pages($59 , $21) = "LampId,SVDV,"
pages($59 , $22) = "LampAttributesResponseReport,CL,"
pages($59 , $23) = "PositionXInMicrometers,DV,"
pages($59 , $24) = "PositionYInMicrometers,DV,"
pages($59 , $25) = "PositionZInMicrometers,DV,"
pages($59 , $26) = "LampPurposes,DV,"
pages($59 , $27) = "UpdateLatencyInMicroseconds,DV,"
pages($59 , $28) = "RedLevelCount,DV,"
pages($59 , $29) = "GreenLevelCount,DV,"
pages($59 , $2A) = "BlueLevelCount,DV,"
pages($59 , $2B) = "IntensityLevelCount,DV,"
pages($59 , $2C) = "IsProgrammable,DV,"
pages($59 , $2D) = "InputBinding,DV,"
pages($59 , $50) = "LampMultiUpdateReport,CL,"
pages($59 , $51) = "RedUpdateChannel,DV,"
pages($59 , $52) = "GreenUpdateChannel,DV,"
pages($59 , $53) = "BlueUpdateChannel,DV,"
pages($59 , $54) = "IntensityUpdateChannel,DV,"
pages($59 , $55) = "LampUpdateFlags,DV,"
pages($59 , $60) = "LampRangeUpdateReport,CL,"
pages($59 , $61) = "LampIdStart,DV,"
pages($59 , $62) = "LampIdEnd,DV,"
pages($59 , $70) = "LampArrayControlReport,CL,"
pages($59 , $71) = "AutonomousMode,DV,"

pagenames($80)="Monitor Page,MON_"
;=========================================================
pages($80 , $00) = "Undefined,"
pages($80 , $01) = "Monitor Control"
pages($80 , $02) = "EDID Information"
pages($80 , $03) = "VDIF Information"
pages($80 , $04) = "VESA Version"
Last edited by miso on Sun Dec 21, 2025 6:49 am, edited 2 times in total.
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

Code: Select all

pagenames($81)="Monitor Enumerated Values Page,MEV_"
;=========================================================
pages($81 , $00) = "Undefined,"
pages($81 , $01) = "ENUM_1,"
pages($81 , $02) = "ENUM_2,"
pages($81 , $03) = "ENUM_3,"
pages($81 , $04) = "ENUM_4,"
pages($81 , $05) = "ENUM_5,"
pages($81 , $06) = "ENUM_6,"
pages($81 , $07) = "ENUM_7,"
pages($81 , $08) = "ENUM_8,"
pages($81 , $09) = "ENUM_9,"
pages($81 , $0A) = "ENUM_10,"
pages($81 , $0B) = "ENUM_11,"
pages($81 , $0C) = "ENUM_12,"
pages($81 , $0D) = "ENUM_13,"
pages($81 , $0E) = "ENUM_14,"
pages($81 , $0F) = "ENUM_15,"
pages($81 , $10) = "ENUM_16,"
pages($81 , $11) = "ENUM_17,"
pages($81 , $12) = "ENUM_18,"
pages($81 , $13) = "ENUM_19,"
pages($81 , $14) = "ENUM_20,"
pages($81 , $15) = "ENUM_21,"
pages($81 , $16) = "ENUM_22,"
pages($81 , $17) = "ENUM_23,"
pages($81 , $18) = "ENUM_24,"
pages($81 , $19) = "ENUM_25,"
pages($81 , $1A) = "ENUM_26,"
pages($81 , $1B) = "ENUM_27,"
pages($81 , $1C) = "ENUM_28,"

pagenames($82)="VESA Virtual Controls Page,VES_"
;=========================================================
pages($82 , $00) = "Undefined,"
pages($82 , $01) = "Degauss,"
pages($82 , $10) = "Brightness,"
pages($82 , $12) = "Contrast,"
pages($82 , $16) = "Red Video Gain,"
pages($82 , $18) = "Green Video Gain,"
pages($82 , $1A) = "Blue Video Gain,"
pages($82 , $1C) = "Focus,"
pages($82 , $20) = "Horizontal Position,"
pages($82 , $22) = "Horizontal Size,"
pages($82 , $24) = "Horizontal Pincushion,"
pages($82 , $26) = "Horizontal Pincushion Balance,"
pages($82 , $28) = "Horizontal Misconvergence,"
pages($82 , $2A) = "Horizontal Linearity,"
pages($82 , $2C) = "Horizontal Linearity Balance,"
pages($82 , $30) = "Vertical Position,"
pages($82 , $32) = "Vertical Size,"
pages($82 , $34) = "Vertical Pincushion,"
pages($82 , $36) = "Vertical Pincushion Balance,"
pages($82 , $38) = "Vertical Misconvergence,"
pages($82 , $3A) = "Vertical Linearity,"
pages($82 , $3C) = "Vertical Linearity Balance,"
pages($82 , $40) = "Parallelogram Distortion,"
pages($82 , $42) = "Trapezoidal Distortion,"
pages($82 , $44) = "Tilt,"
pages($82 , $46) = "Top Corner Distortion Control,"
pages($82 , $48) = "Top Corner Distortion Balance,"
pages($82 , $4A) = "Bottom Corner Distortion Control,"
pages($82 , $4C) = "Bottom Corner Distortion Balance,"
pages($82 , $56) = "Horizontal Moiré,"
pages($82 , $58) = "Vertical Moiré,"
pages($82 , $5E) = "Input Level Select,"
pages($82 , $60) = "Input Source Select,"
pages($82 , $6C) = "Red Video Black Level,"
pages($82 , $6E) = "Green Video Black Level,"
pages($82 , $70) = "Blue Video Black Level,"
pages($82 , $A2) = "Auto Size Center,"
pages($82 , $A4) = "Polarity Horizontal Synchronization,"
pages($82 , $A6) = "Polarity Vertical Synchronization,"
pages($82 , $A8) = "Synchronization Type,"
pages($82 , $AA) = "Screen Orientation,"
pages($82 , $AC) = "Horizontal Frequency,"
pages($82 , $AE) = "Vertical Frequency,"
pages($82 , $B0) = "Settings,"
pages($82 , $CA) = "On Screen Display,"
pages($82 , $D4) = "Stereo Mode,"

pagenames($84)="Power Device Page,POW_"
;=========================================================
pages($84 , $00) = "Undefined,"
pages($84 , $01) = "i Name,SV,"
pages($84 , $02) = "Present Status,CL,"
pages($84 , $03) = "Changed Status,CL,"
pages($84 , $04) = "UPS,CA,"
pages($84 , $05) = "Power Supply,CA,"
pages($84 , $06) = "Peripheral Device,CA,"
pages($84 , $10) = "Battery System,CP,"
pages($84 , $11) = "Battery System ID,SV,"
pages($84 , $12) = "Battery,CP,"
pages($84 , $13) = "Battery ID,SV,"
pages($84 , $14) = "Charger,CP,"
pages($84 , $15) = "Charger ID,SV,"
pages($84 , $16) = "Power Converter,CP,"
pages($84 , $17) = "Power Converter ID,SV,"
pages($84 , $18) = "Outlet System,CP"
pages($84 , $19) = "Outlet System ID,SV,"
pages($84 , $1A) = "Input,CP,"
pages($84 , $1B) = "Input ID,SV,"
pages($84 , $1C) = "Output,CP,"
pages($84 , $1D) = "Output ID,SV,"
pages($84 , $1E) = "Flow,CP,"
pages($84 , $1F) = "Flow ID,Item,"
pages($84 , $20) = "Outlet,CP,"
pages($84 , $21) = "Outlet ID,SV,"
pages($84 , $22) = "Gang,CLCP,"
pages($84 , $23) = "Gang ID,SV,"
pages($84 , $24) = "Power Summary,CLCP,"
pages($84 , $30) = "Voltage,DV,"
pages($84 , $31) = "Current,DV,"
pages($84 , $32) = "Frequency,DV,"
pages($84 , $33) = "Apparent Power,DV,"
pages($84 , $34) = "Active Power,DV,"
pages($84 , $35) = "Percent Load,DV,"
pages($84 , $36) = "Temperature,DV,"
pages($84 , $37) = "Humidity,DV,"
pages($84 , $38) = "Bad Count,DV,"
pages($84 , $40) = "Config Voltage,SVDV,"
pages($84 , $41) = "Config Current,SVDV,"
pages($84 , $42) = "Config Frequency,SVDV,"
pages($84 , $43) = "Config Apparent Power,SVDV,"
pages($84 , $44) = "Config Active Power,SVDV,"
pages($84 , $45) = "Config Percent Load,SVDV,"
pages($84 , $46) = "Config Temperature,SVDV,"
pages($84 , $47) = "Config Humidity,SVDV,"
pages($84 , $50) = "Switch On Control,DV,"
pages($84 , $51) = "Switch Off Control,DV,"
pages($84 , $52) = "Toggle Control,DV,"
pages($84 , $53) = "Low Voltage Transfer,DV,"
pages($84 , $54) = "High Voltage Transfer,DV,"
pages($84 , $55) = "Delay Before Reboot,DV,"
pages($84 , $56) = "Delay Before Startup,DV,"
pages($84 , $57) = "Delay Before Shutdown,DV,"
pages($84 , $58) = "Test,DV,"
pages($84 , $59) = "Module Reset,DV,"
pages($84 , $5A) = "Audible Alarm Control,DV,"
pages($84 , $60) = "Present,DF,"
pages($84 , $61) = "Good,DF,"
pages($84 , $62) = "Internal Failure,DF,"
pages($84 , $63) = "Voltage Out Of Range,DF,"
pages($84 , $64) = "Frequency Out Of Range,DF,"
pages($84 , $65) = "Overload,DF,"
pages($84 , $66) = "Over Charged,DF,"
pages($84 , $67) = "Over Temperature,DF,"
pages($84 , $68) = "Shutdown Requested,DF,"
pages($84 , $69) = "Shutdown Imminent,DF,"
pages($84 , $6B) = "Switch On/Off,DF,"
pages($84 , $6C) = "Switchable,DF,"
pages($84 , $6D) = "Used,DF,"
pages($84 , $6E) = "Boost,DF,"
pages($84 , $6F) = "Buck,DF,"
pages($84 , $70) = "Initialized,DF,"
pages($84 , $71) = "Tested,DF,"
pages($84 , $72) = "Awaiting Power,DF,"
pages($84 , $73) = "Communication Lost,DF,"
pages($84 , $FD) = "i Manufacturer,SV,"
pages($84 , $FE) = "i Product,SV,"
pages($84 , $FF) = "i Serial Number,SV,"

pagenames($85)="5 Battery System Page,BAT_"
;=========================================================
pages($85 , $00) = "Undefined "
pages($85 , $01) = "SMB Battery Mode CL,"
pages($85 , $02) = "SMB Battery Status,CL,"
pages($85 , $03) = "SMB Alarm Warning,CL,"
pages($85 , $04) = "SMB Charger Mode,CL,"
pages($85 , $05) = "SMB Charger Status,CL,"
pages($85 , $06) = "SMB Charger Spec Info,CL,"
pages($85 , $07) = "SMB Selector State,CL,"
pages($85 , $08) = "SMB Selector Presets,CL,"
pages($85 , $09) = "SMB Selector Info,CL,"
pages($85 , $10) = "Optional Mfg Function 1,DV,"
pages($85 , $11) = "Optional Mfg Function 2,DV,"
pages($85 , $12) = "Optional Mfg Function 3,DV,"
pages($85 , $13) = "Optional Mfg Function 4,DV,"
pages($85 , $14) = "Optional Mfg Function 5,DV,"
pages($85 , $15) = "Connection To SMBus,DF,"
pages($85 , $16) = "Output Connection,DF,"
pages($85 , $17) = "Charger Connection,DF,"
pages($85 , $18) = "Battery Insertion,DF,"
pages($85 , $19) = "Use Next,DF,"
pages($85 , $1A) = "OK To Use,DF,"
pages($85 , $1B) = "Battery Supported,DF,"
pages($85 , $1C) = "Selector Revision,DF,"
pages($85 , $1D) = "Charging Indicator,DF,"
pages($85 , $28) = "Manufacturer Access,DV,"
pages($85 , $29) = "Remaining Capacity Limit,DV,"
pages($85 , $2A) = "Remaining Time Limit,DV,"
pages($85 , $2B) = "At Rate,DV,"
pages($85 , $2C) = "Capacity Mode,DV,"
pages($85 , $2D) = "Broadcast To Charger,DV,"
pages($85 , $2E) = "Primary Battery,DV,"
pages($85 , $2F) = "Charge Controller,DV,"
pages($85 , $40) = "Terminate Charge,DF,"
pages($85 , $41) = "Terminate Discharge,DF,"
pages($85 , $42) = "Below Remaining Capacity Limit,DF,"
pages($85 , $43) = "Remaining Time Limit Expired,DF,"
pages($85 , $44) = "Charging,DF,"
pages($85 , $45) = "Discharging,DV,"
pages($85 , $46) = "Fully Charged,DF,"
pages($85 , $47) = "Fully Discharged,DV,"
pages($85 , $48) = "Conditioning Flag,DV,"
pages($85 , $49) = "At Rate OK,DV,"
pages($85 , $4A) = "SMB Error Code,DF,"
pages($85 , $4B) = "Need Replacement,DF,"
pages($85 , $60) = "At Rate Time To Full,DV,"
pages($85 , $61) = "At Rate Time To Empty,DV,"
pages($85 , $62) = "Average Current,DV,"
pages($85 , $63) = "Max Error,DV,"
pages($85 , $64) = "Relative State Of Charge,DV,"
pages($85 , $65) = "Absolute State Of Charge,DV,"
pages($85 , $66) = "Remaining Capacity,DV,"
pages($85 , $67) = "Full Charge Capacity,DV,"
pages($85 , $68) = "Run Time To Empty,DV,"
pages($85 , $69) = "Average Time To Empty,DV,"
pages($85 , $6A) = "Average Time To Full,DV,"
pages($85 , $6B) = "Cycle Count,DV,"
pages($85 , $80) = "Batt Pack Model Level,SV,"
pages($85 , $81) = "Internal Charge Controller,SF,"
pages($85 , $82) = "Primary Battery Support,SF,"
pages($85 , $83) = "Design Capacity,SV,"
pages($85 , $84) = "Specification Info,SV,"
pages($85 , $85) = "Manufacturer Date,SV,"
pages($85 , $86) = "Serial Number,SV,"
pages($85 , $87) = "i Manufacturer Name,SV,"
pages($85 , $88) = "i Device Name,SV,"
pages($85 , $89) = "i Device Chemistry,SV,"
pages($85 , $8A) = "Manufacturer Data,SV,"
pages($85 , $8B) = "Rechargable,SV,"
pages($85 , $8C) = "Warning Capacity Limit,SV,"
pages($85 , $8D) = "Capacity Granularity 1,SV,"
pages($85 , $8E) = "Capacity Granularity 2,SV,"
pages($85 , $8F) = "i OEMInformation,SV,"
pages($85 , $C0) = "Inhibit Charge,DF,"
pages($85 , $C1) = "Enable Polling,DF,"
pages($85 , $C2) = "Reset To Zero,DF,"
pages($85 , $D0) = "AC Present,DF,"
pages($85 , $D1) = "Battery Present,DF,"
pages($85 , $D2) = "Power Fail,DF,"
pages($85 , $D3) = "Alarm Inhibited,DF,"
pages($85 , $D4) = "Thermistor Under Range,DF,"
pages($85 , $D5) = "Thermistor Hot,DF,"
pages($85 , $D6) = "Thermistor Cold,DF,"
pages($85 , $D7) = "Thermistor Over Range,DF,"
pages($85 , $D8) = "Voltage Out Of Range,DF,"
pages($85 , $D9) = "Current Out Of Range,DF,"
pages($85 , $DA) = "Current Not Regulated,DF,"
pages($85 , $DB) = "Voltage Not Regulated,DF,"
pages($85 , $DC) = "Master Mode,DF,"
pages($85 , $F0) = "Charger Selector Support,SF,"
pages($85 , $F1) = "Charger Spec,SV,"
pages($85 , $F2) = "Level 2,SF,"
pages($85 , $F3) = "Level 3,SF,"

pagenames($8C)="Bar Code Scanner,BAR_"
;=========================================================
pages($8C , $00) = "Undefined"
pages($8C , $01) = "Bar Code Badge Reader,CA,"
pages($8C , $02) = "Bar Code Scanner,CA,"
pages($8C , $03) = "Dumb Bar Code Scanner,CA,"
pages($8C , $04) = "Cordless Scanner Base,CA,"
pages($8C , $05) = "Bar Code Scanner Cradle,CA,"
pages($8C , $10) = "Attribute Report,CL,"
pages($8C , $11) = "Settings Report,CL,"
pages($8C , $12) = "Scanned Data Report,CL,"
pages($8C , $13) = "Raw Scanned Data Report,CL,"
pages($8C , $14) = "Trigger Report,CL,"
pages($8C , $15) = "Status Report,CL,"
pages($8C , $16) = "UPC/EAN Control Report,CL,"
pages($8C , $17) = "EAN 2/3 Label Control Report,CL,"
pages($8C , $18) = "Code 39 Control Report,CL,"
pages($8C , $19) = "Interleaved 2 of 5 Control Report,CL,"
pages($8C , $1A) = "Standard 2 of 5 Control Report,CL,"
pages($8C , $1B) = "MSI Plessey Control Report,CL,"
pages($8C , $1C) = "Codabar Control Report,CL,"
pages($8C , $1D) = "Code 128 Control Report,CL,"
pages($8C , $1E) = "Misc 1D Control Report,CL,"
pages($8C , $1F) = "2D Control Report,CL,"
pages($8C , $30) = "Aiming/Pointer Mode,SF,"
pages($8C , $31) = "Bar Code Present Sensor,SF,"
pages($8C , $32) = "Class 1A Laser,SF,"
pages($8C , $33) = "Class 2 Laser,SF,"
pages($8C , $34) = "Heater Present,SF,"
pages($8C , $35) = "Contact Scanner,SF,"
pages($8C , $36) = "Electronic Article Surveillance Notification,SF,"
pages($8C , $37) = "Constant Electronic Article Surveillance,SF,"
pages($8C , $38) = "Error Indication,SF,"
pages($8C , $39) = "Fixed Beeper,SF,"
pages($8C , $3A) = "Good Decode Indication,SF,"
pages($8C , $3B) = "Hands Free Scanning,SF,"
pages($8C , $3C) = "Intrinsically Safe,SF,"
pages($8C , $3D) = "Klasse Eins Laser,SF,"
pages($8C , $3E) = "Long Range Scanner,SF,"
pages($8C , $3F) = "Mirror Speed Control,SF,"
pages($8C , $40) = "Not On File Indication,SF,"
pages($8C , $41) = "Programmable Beeper,SF,"
pages($8C , $42) = "Triggerless,SF,"
pages($8C , $43) = "Wand,SF,"
pages($8C , $44) = "Water Resistant,SF,"
pages($8C , $45) = "Multi-Range Scanner,SF,"
pages($8C , $46) = "Proximity Sensor,SF,"
pages($8C , $4D) = "Fragment Decoding,DF,"
pages($8C , $4E) = "Scanner Read Confidence,DV,"
pages($8C , $4F) = "Data Prefix,NAry,"
pages($8C , $50) = "Prefix AIMI,Sel,"
pages($8C , $51) = "Prefix None,Sel,"
pages($8C , $52) = "Prefix Proprietary,Sel,"
pages($8C , $55) = "Active Time,DV,"
pages($8C , $56) = "Aiming Laser Pattern,DF,"
pages($8C , $57) = "Bar Code Present,OOC,"
pages($8C , $58) = "Beeper State,OOC,"
pages($8C , $59) = "Laser On Time,DV,"
pages($8C , $5A) = "Laser State,OOC,"
pages($8C , $5B) = "Lockout Time,DV,"
pages($8C , $5C) = "Motor State,OOC,"
pages($8C , $5D) = "Motor Timeout,DV,"
pages($8C , $5E) = "Power On Reset Scanner,DF,"
pages($8C , $5F) = "Prevent Read of Barcodes,DF,"
pages($8C , $60) = "Initiate Barcode Read,DF,"
pages($8C , $61) = "Trigger State,OOC,"
pages($8C , $62) = "Trigger Mode,NAry,"
pages($8C , $63) = "Trigger Mode Blinking Laser On,Sel,"
pages($8C , $64) = "Trigger Mode Continuous Laser On,Sel,"
pages($8C , $65) = "Trigger Mode Laser on while Pulled,Sel,"
pages($8C , $66) = "Trigger Mode Laser stays on after Trigger release,Sel,"
pages($8C , $6D) = "Commit Parameters to NVM,DF,"
pages($8C , $6E) = "Parameter Scanning,DF,"
pages($8C , $6F) = "Parameters Changed,OOC,"
pages($8C , $70) = "Set parameter default values,DF,"
pages($8C , $75) = "Scanner In Cradle,OOC,"
pages($8C , $76) = "Scanner In Range,OOC,"
pages($8C , $7A) = "Aim Duration,DV,"
pages($8C , $7B) = "Good Read Lamp Duration,DV,"
pages($8C , $7C) = "Good Read Lamp Intensity,DV,"
pages($8C , $7D) = "Good Read LED,DF,"
pages($8C , $7E) = "Good Read Tone Frequency,DV,"
pages($8C , $7F) = "Good Read Tone Length,DV,"
pages($8C , $80) = "Good Read Tone Volume,DV,"
pages($8C , $82) = "No Read Message,DF,"
pages($8C , $83) = "Not on File Volume,DV,"
pages($8C , $84) = "Powerup Beep,DF,"
pages($8C , $85) = "Sound Error Beep,DF,"
pages($8C , $86) = "Sound Good Read Beep,DF,"
pages($8C , $87) = "Sound Not On File Beep,DF,"
pages($8C , $88) = "Good Read When To Indicate,NAry,"
pages($8C , $89) = "GRWTI After Decode,Sel,"
pages($8C , $8A) = "GRWTI Beep/Lamp after transmit,Sel,"
pages($8C , $8B) = "GRWTI No Beep/Lamp use at all,Sel,"
pages($8C , $91) = "Bookland EAN,DF,"
pages($8C , $92) = "Convert EAN 8 to 13 Type,DF,"
pages($8C , $93) = "Convert UPC A to EAN-13,DF,"
pages($8C , $94) = "Convert UPC-E to A,DF,"
pages($8C , $95) = "EAN-13,DF,"
pages($8C , $96) = "EAN-8,DF,"
pages($8C , $97) = "EAN-99 128_Mandatory,DF,"
pages($8C , $98) = "EAN-99 P5/128_Optional,DF,"
pages($8C , $9A) = "UPC/EAN,DF,"
pages($8C , $9B) = "UPC/EAN Coupon Code,DF,"
pages($8C , $9C) = "UPC/EAN Periodicals,DV,"
pages($8C , $9D) = "UPC-A,DF,"
pages($8C , $9E) = "UPC-A with 128 Mandatory,DF,"
pages($8C , $9F) = "UPC-A with 128 Optional,DF,"
pages($8C , $A0) = "UPC-A with P5 Optional,DF,"
pages($8C , $A1) = "UPC-E,DF,"
pages($8C , $A2) = "UPC-E1,DF,"
pages($8C , $A9) = "Periodical,NAry,"
pages($8C , $AA) = "Periodical Auto-Discriminate + 2,Sel,"
pages($8C , $AB) = "Periodical Only Decode with + 2,Sel,"
pages($8C , $AC) = "Periodical Ignore + 2,Sel,"
pages($8C , $AD) = "Periodical Auto-Discriminate + 5,Sel,"
pages($8C , $AE) = "Periodical Only Decode with + 5,Sel,"
pages($8C , $AF) = "Periodical Ignore + 5,Sel,"
pages($8C , $B0) = "Check,NAry,"
pages($8C , $B1) = "Check Disable Price,Sel,"
pages($8C , $B2) = "Check Enable 4 digit Price,Sel,"
pages($8C , $B3) = "Check Enable 5 digit Price,Sel,"
pages($8C , $B4) = "Check Enable European 4 digit Price,Sel,"
pages($8C , $B5) = "Check Enable European 5 digit Price,Sel,"
pages($8C , $B7) = "EAN Two Label,DF,"
pages($8C , $B8) = "EAN Three Label,DF,"
pages($8C , $B9) = "EAN 8 Flag Digit 1,DV,"
pages($8C , $BA) = "EAN 8 Flag Digit 2,DV,"
pages($8C , $BB) = "EAN 8 Flag Digit 3,DV,"
pages($8C , $BC) = "EAN 13 Flag Digit 1,DV,"
pages($8C , $BD) = "EAN 13 Flag Digit 2,DV,"
pages($8C , $BE) = "EAN 13 Flag Digit 3 DV 3.10.2"
pages($8C , $BF) = "Add EAN 2/3 Label Definition,DF,"
pages($8C , $C0) = "Clear all EAN 2/3 Label Definitions,DF,"
pages($8C , $C3) = "Codabar,DF,"
pages($8C , $C4) = "Code 128,DF,"
pages($8C , $C7) = "Code 39,DF,"
pages($8C , $C8) = "Code 93,DF,"
pages($8C , $C9) = "Full ASCII Conversion,DF,"
pages($8C , $CA) = "Interleaved 2 of 5,DF,"
pages($8C , $CB) = "Italian Pharmacy Code,DF,"
pages($8C , $CC) = "MSI/Plessey,DF,"
pages($8C , $CD) = "Standard 2 of 5 IATA,DF,"
pages($8C , $CE) = "Standard 2 of 5,DF,"
pages($8C , $D3) = "Transmit Start/Stop,DF,"
pages($8C , $D4) = "Tri-Optic,DF,"
pages($8C , $D5) = "UCC/EAN-128,DF,"
pages($8C , $D6) = "Check Digit,NAry,"
pages($8C , $D7) = "Check Digit Disable,Sel,"
pages($8C , $D8) = "Check Digit Enable Interleaved 2 of 5 OPCC,Sel,"
pages($8C , $D9) = "Check Digit Enable Interleaved 2 of 5 USS,Sel,"
pages($8C , $DA) = "Check Digit Enable Standard 2 of 5 OPCC,Sel,"
pages($8C , $DB) = "Check Digit Enable Standard 2 of 5 USS,Sel,"
pages($8C , $DC) = "Check Digit Enable One MSI Plessey,Sel,"
pages($8C , $DD) = "Check Digit Enable Two MSI Plessey,Sel,"
pages($8C , $DE) = "Check Digit Codabar Enable,Sel,"
pages($8C , $DF) = "Check Digit Code 39 Enable,Sel,"
pages($8C , $F0) = "Transmit Check Digit,NAry,"
pages($8C , $F1) = "Disable Check Digit Transmit,Sel,"
pages($8C , $F2) = "Enable Check Digit Transmit,Sel,"
pages($8C , $FB) = "Symbology Identifier 1,DV,"
pages($8C , $FC) = "Symbology Identifier 2,DV,"
pages($8C , $FD) = "Symbology Identifier 3,DV,"
pages($8C , $FE) = "Decoded Data,DV,"
pages($8C , $FF) = "Decode Data Continued,DF,"
pages($8C , $100) = "Bar Space Data,DV,"
pages($8C , $101) = "Scanner Data Accuracy,DV,"
pages($8C , $102) = "Raw Data Polarity,NAry,"
pages($8C , $103) = "Polarity Inverted Bar Code,Sel,"
pages($8C , $104) = "Polarity Normal Bar Code,Sel,"
pages($8C , $106) = "Minimum Length to Decode,DV,"
pages($8C , $107) = "Maximum Length to Decode,DV,"
pages($8C , $108) = "First Discrete Length to Decode,DV,"
pages($8C , $109) = "Second Discrete Length to Decode,DV,"
pages($8C , $10A) = "Data Length Method,NAry,"
pages($8C , $10B) = "DL Method Read any,Sel,"
pages($8C , $10C) = "DL Method Check in Range,Sel,"
pages($8C , $10D) = "DL Method Check for Discrete,Sel,"
pages($8C , $110) = "Aztec Code,DF,"
pages($8C , $111) = "BC412,DF,"
pages($8C , $112) = "Channel Code,DF,"
pages($8C , $113) = "Code 16,DF,"
pages($8C , $114) = "Code 32,DF,"
pages($8C , $115) = "Code 49,DF,"
pages($8C , $116) = "Code One,DF,"
pages($8C , $117) = "Colorcode,DF,"
pages($8C , $118) = "Data Matrix,DF,"
pages($8C , $119) = "MaxiCode,DF,"
pages($8C , $11A) = "MicroPDF,DF,"
pages($8C , $11B) = "PDF-417,DF,"
pages($8C , $11C) = "PosiCode,DF,"
pages($8C , $11D) = "QR Code,DF,"
pages($8C , $11E) = "SuperCode,DF,"
pages($8C , $11F) = "UltraCode,DF,"
pages($8C , $120) = "USD-5 (Slug Code),DF,"
pages($8C , $121) = "VeriCode,DF,"

pagenames($8D)="Weighing Devices Page,WD_"
;=========================================================
pages($8D , $00) = "Undefined"
pages($8D , $01) = "Weighing Device,CA,"
pages($8D , $20) = "Scale Device,CL,"
pages($8D , $21) = "Scale Class I Metric,CL,"
pages($8D , $22) = "Scale Class I Metric,Sel,"
pages($8D , $23) = "Scale Class II Metric,Sel,"
pages($8D , $24) = "Scale Class III Metric,Sel,"
pages($8D , $25) = "Scale Class IIIL Metric,Sel,"
pages($8D , $26) = "Scale Class IV Metric,Sel,"
pages($8D , $27) = "Scale Class III English,Sel,"
pages($8D , $28) = "Scale Class IIIL English,Sel,"
pages($8D , $29) = "Scale Class IV English,Sel,"
pages($8D , $2A) = "Scale Class Generic,Sel,"
pages($8D , $30) = "Scale Attribute Report,CL,"
pages($8D , $31) = "Scale Control Report,CL,"
pages($8D , $32) = "Scale Data Report,CL,"
pages($8D , $33) = "Scale Status Report,CL,"
pages($8D , $34) = "Scale Weight Limit Report,CL,"
pages($8D , $35) = "Scale Statistics Report,CL,"
pages($8D , $40) = "Data Weight,DV,"
pages($8D , $41) = "Data Scaling,CV,"
pages($8D , $50) = "Weight Unit,CL,"
pages($8D , $51) = "Weight Unit Milligram,Sel,"
pages($8D , $52) = "Weight Unit Gram,Sel,"
pages($8D , $53) = "Weight Unit Kilogram,Sel,"
pages($8D , $54) = "Weight Unit Carats,Sel,"
pages($8D , $55) = "Weight Unit Taels,Sel,"
pages($8D , $56) = "Weight Unit Grains,Sel,"
pages($8D , $57) = "Weight Unit Pennyweights,Sel,"
pages($8D , $58) = "Weight Unit Metric Ton,Sel,"
pages($8D , $59) = "Weight Unit Avoir Ton,Sel,"
pages($8D , $5A) = "Weight Unit Troy Ounce,Sel,"
pages($8D , $5B) = "Weight Unit Ounce,Sel,"
pages($8D , $5C) = "Weight Unit Pound,Sel,"
pages($8D , $60) = "Calibration Count,DV,"
pages($8D , $61) = "Re-Zero Count,DV,"
pages($8D , $70) = "Scale Status,CL,"
pages($8D , $71) = "Scale Status Fault,Sel,"
pages($8D , $72) = "Scale Status Stable at Center of Zero,Sel,"
pages($8D , $73) = "Scale Status In Motion,Sel,"
pages($8D , $74) = "Scale Status Weight Stable,Sel,"
pages($8D , $75) = "Scale Status Under Zero,Sel,"
pages($8D , $76) = "Scale Status Over Weight Limit,Sel,"
pages($8D , $77) = "Scale Status Requires Calibration,Sel,"
pages($8D , $78) = "Scale Status Requires Re-zeroing,Sel,"
pages($8D , $80) = "Zero Scale,OOC,"
pages($8D , $81) = "Enforced Zero Return,OOC,"

pagenames($8E)="Magnetic Stripe Reader Page,MSR_"
;=========================================================
pages($8E , $00) = "Undefined"
pages($8E , $01) = "MSR Device Read-Only,CA,"
pages($8E , $11) = "Track 1 Length,SFDFSEL, "
pages($8E , $12) = "Track 2 Length,SFDFSEL,"
pages($8E , $13) = "Track 3 Length,SFDFSEL,"
pages($8E , $14) = "Track JIS Length,SFDFSEL,"
pages($8E , $20) = "Track Data,SFDFSEL,"
pages($8E , $21) = "Track 1 Data,SFDFSEL,"
pages($8E , $22) = "Track 2 Data,SFDFSEL,"
pages($8E , $23) = "Track 3 Data,SFDFSEL,"
pages($8E , $24) = "Track JIS Data,SFDFSEL,"

pagenames(90)="Camera Control Page,CAM_"
;=========================================================
pages($90 , $00) = "Undefined "
pages($90 , $20) = "Camera Auto Focus,OSC,"
pages($90 , $21) = "Camera Shutter,OSC,"

pagenames($91)="1 Arcade Page,ARC_"
;=========================================================
pages($91 , $00) = "Undefined "
pages($91 , $01) = "General Purpose IO Card,CA,"
pages($91 , $02) = "Coin Door,CA,"
pages($91 , $03) = "Watchdog Timer,CA,"
pages($91 , $30) = "General Purpose Analog Input State,DV,"
pages($91 , $31) = "General Purpose Digital Input State,DV,"
pages($91 , $32) = "General Purpose Optical Input State,DV,"
pages($91 , $33) = "General Purpose Digital Output State,DV,"
pages($91 , $34) = "Number of Coin Doors,DV,"
pages($91 , $35) = "Coin Drawer Drop Count,DV,"
pages($91 , $36) = "Coin Drawer Start,OOC,"
pages($91 , $37) = "Coin Drawer Service,OOC,"
pages($91 , $38) = "Coin Drawer Tilt,OOC,"
pages($91 , $39) = "Coin Door Test,OOC,"
pages($91 , $40) = "Coin Door Lockout,OOC,"
pages($91 , $41) = "Watchdog Timeout,DV,"
pages($91 , $42) = "Watchdog Action,NAry,"
pages($91 , $43) = "Watchdog Reboot,Sel,"
pages($91 , $44) = "Watchdog Restart,Sel,"
pages($91 , $45) = "Alarm Input,DV,"
pages($91 , $46) = "Coin Door Counter,OOC,"
pages($91 , $47) = "I/O Direction Mapping,DV,"
pages($91 , $48) = "Set I/O Direction,OOC,"
pages($91 , $49) = "Extended Optical Input State,DV,"
pages($91 , $4A) = "Pin Pad Input State,DV,"
pages($91 , $4B) = "Pin Pad Status,DV,"
pages($91 , $4C) = "Pin Pad Output,OOC,"
pages($91 , $4D) = "Pin Pad Command,DV,"


pagenames($FF)="Vendor-defined"
;=========================================================
pages($FF , $00) = "Vendor-defined"


Global Dim bsize(3)
bsize(0) = 0
bsize(1) = 1
bsize(2) = 2
bsize(3) = 4

Global Dim btype.s(3)
btype(0) = "Main"   ;main, real datafields defined here
btype(1) = "Global" ;Scope, full descriptor
btype(2) = "Local"     ;scope, only for the next item
btype(3) = "Reserved"  ;unused, reserved for future uses

Global Dim Items.s(3,15)

;Global Items
items(1,$0) = "Usage Page"
items(1,$1) = "Logical Minimum"
items(1,$2) = "Logical Maximum"
items(1,$3) = "Physical Minimum"
items(1,$4) = "Physical Maximum"
items(1,$5) = "Unit Exponent"
items(1,$6) = "Unit"
items(1,$7) = "Report Size"
items(1,$8) = "Report ID"
items(1,$9) = "Report Count"
items(1,$A) = "Push"
items(1,$B) = "Pop"

;Local Items
items(2,$0) = "Usage"
items(2,$1) = "Usage Minimum"
items(2,$2) = "Usage Maximum"
items(2,$3) = "Designator Index"
items(2,$4) = "Designator Minimum"
items(2,$5) = "Designator Maximum"
items(2,$7) = "String Index"
items(2,$8) = "String Minimum"
items(2,$9) = "String Maximum"
items(2,$A) = "Delimeter"




;Main Items
items(0,$0) = "Usage"
items(0,$8) = "Input"
items(0,$9) = "Output"
items(0,$A) = "Collection"
items(0,$B) = "Feature"
items(0,$C) = "End Collection"




Procedure.s composeflags(byte.a)
  Protected retrn.s
    If byte&%00000001 : retrn.s + "--[Constant]--, ": Else : retrn.s + "Data, ":EndIf
    If byte&%00000010 : retrn.s + "--[Variable]--, ": Else : retrn.s + "Array, "      :EndIf
    If byte&%00000100 : retrn.s + "--[Relative]--, ": Else : retrn.s + "Absolute, "      :EndIf
    If byte&%00001000 : retrn.s + "--[MinMAX Wraps Around]--, ": Else : retrn.s + "No Wrap, "          :EndIf
    If byte&%00010000 : retrn.s + "--[Non Linear]--, ": Else : retrn.s + "Linear, "    :EndIf
    If byte&%00100000 : retrn.s + "--[No Preferred]--, ": Else : retrn.s + "Preferred State, "  :EndIf
    If byte&%01000000 : retrn.s + "--[Null Position]--, ": Else : retrn.s + "No Null Position, "    :EndIf
    If byte&%10000000 : retrn.s + "[Buffered Bytes]. ": EndIf :;Else : retrn.s + "Bitpacked. ":EndIf 
    
    ;This last flag is commonly must be 0 in new reports, and reserved. Very old hardwares uses this (HID 1.0)
    ;, so this last one might be skipped. (USB HID 1.11 does not allow it/deprecated.)
    ProcedureReturn retrn.s
EndProcedure

;====================================================
Procedure.s parseHIDDescriptor2(*buffer,size)
  Protected z.i , x.i , currentbyte.i, in.s ,t.i, bytesize.i, type.i, entry.i, usgpg.i, inp$ 
  Protected b.b, a.a, w.w, u.u, l.l, q.q
  Protected lsign.a, psign.a, v$
  Protected cbs.s
  Protected outs.s = "" : ;output string
  Protected dt.s = "" : ;data string
  Protected indentation = 0
  outs = ""
  For x = 0 To size-1
    currentbyte=PeekA(*buffer+x)
    cbs = "(0x" + RSet(Hex(currentbyte),2,"0")+")" ;current byte as string to display
    
    in.s = ""
    For t = 0 To indentation
      in.s +"    " 
    Next t
    
    bytesize = bsize(currentbyte&%11)
    type.i = (currentbyte>>2)&%11
    entry.i = (currentbyte>>4)&%1111
      
    If currentbyte<>$c0 And currentbyte<>$a4 And currentbyte<>$b4
      dt.s = ""
      For z = bytesize-1 To 0 Step-1
        dt.s = dt.s+RSet(Hex(PeekA(*buffer+x+1+z)),2,"0")
      Next z
      
      
      Select bytesize
        Case 1
          a.a = Val("$"+dt) : v$ = "["+Str(a)+"]"
        Case 2
          u.u = Val("$"+dt) : v$ = "["+Str(u)+"]"
        Case 4
          q.q = Val("$"+dt) : v$ = "["+Str(q)+"]"
      EndSelect
      
      outs = outs+in.s+cbs+", ("+btype(type.i)+") "+items(type,entry)
      If items(type,entry)="Usage Page" And Val("$"+dt)<256
        usgpg = Val("$"+dt)
        outs = outs+ "....................("+ pagenames(Val("$"+dt)) +Chr(13)+Chr(10)
      ElseIf items(type,entry)="Usage" And Val("$"+dt)<256
        outs = outs+ "....................(0x"+dt+") "+ pages(usgpg,Val("$"+dt)) +Chr(13)+Chr(10)
      ElseIf items(type,entry)="Collection" 
        outs = outs+ "....................(0x"+dt+") "+ col(Val("$"+dt)) +Chr(13)+Chr(10)
        indentation+2
      ElseIf items(type,entry)="Input" 
        inp$ = composeflags(Val("$"+dt))
        outs = outs+ "....................(0x"+dt+") "+ inp$ +Chr(13)+Chr(10)
      ElseIf items(type,entry)="Output"
        inp$ = composeflags(Val("$"+dt))
        outs = outs+ "....................(0x"+dt+") "+ inp$ +Chr(13)+Chr(10)
      ElseIf items(type,entry)="Feature" 
        inp$ = composeflags(Val("$"+dt))
        outs = outs+ "....................(0x"+dt+") "+ inp$ +Chr(13)+Chr(10)
      ElseIf items(type,entry)="Logical Minimum" 
        lsign = 0
        Select bytesize
          Case 1
            If Val(dt)<>0 : b.b = Val("$"+dt) : inp$ = "["+Str(b)+"]" : lsign = 1 : Else: inp$="[0]" :EndIf
          Case 2
            If Val(dt)<>0 : w.w = Val("$"+dt) : inp$ = "["+Str(w)+"]" : lsign = 1 : Else: inp$="[0]" :EndIf
          Case 4
            l.l = Val("$"+dt) : inp$ = "["+Str(l)+"]"
        EndSelect
        outs = outs+ "*....................(0x"+dt+").............................."+inp$+ Chr(13)+Chr(10)
        
      ElseIf items(type,entry)="Logical Maximum" 
        Select bytesize
          Case 1
            If lsign<>0 : b.b = Val("$"+dt) : inp$ = "["+Str(b)+"]" : lsign = 1 : Else: a.a = Val("$"+dt) : inp$ = "["+Str(a)+"]" :EndIf
          Case 2
            If lsign<>0 : w.w = Val("$"+dt) : inp$ = "["+Str(w)+"]" : lsign = 1 : Else: u.u = Val("$"+dt) : inp$ = "["+Str(u)+"]" :EndIf
          Case 4
            l.l = Val("$"+dt) : inp$ = "["+Str(l)+"]"
        EndSelect
        outs = outs+ "*....................(0x"+dt+").............................."+inp$+ Chr(13)+Chr(10)
        lsign = 0
        
      ElseIf items(type,entry)="Physical Minimum" 
        psign = 0
        Select bytesize
          Case 1
            If Val(dt)<>0 : b.b = Val("$"+dt) : inp$ = "["+Str(b)+"]" : psign = 1 : Else: inp$="[0]" :EndIf
          Case 2
            If Val(dt)<>0 : w.w = Val("$"+dt) : inp$ = "["+Str(w)+"]" : psign = 1 : Else: inp$="[0]" :EndIf
          Case 4
            l.l = Val("$"+dt) : inp$ = "["+Str(l)+"]"
        EndSelect
        outs = outs+ "*....................(0x"+dt+").............................."+inp$+ Chr(13)+Chr(10)
        
      ElseIf items(type,entry)="Physical Maximum" 
        Select bytesize
          Case 1
            If psign<>0 : b.b = Val("$"+dt) : inp$ = "["+Str(b)+"]" : psign = 1 : Else: a.a = Val("$"+dt) : inp$ = "["+Str(a)+"]" :EndIf
          Case 2
            If psign<>0 : w.w = Val("$"+dt) : inp$ = "["+Str(w)+"]" : psign = 1 : Else: u.u = Val("$"+dt) : inp$ = "["+Str(u)+"]" :EndIf
          Case 4
            l.l = Val("$"+dt) : inp$ = "["+Str(l)+"]"
        EndSelect
        outs = outs+ "*....................(0x"+dt+").............................."+inp$+ Chr(13)+Chr(10)
        psign = 0        
        
      Else  
        outs = outs+ "....................(0x"+dt +").............................."+v$+Chr(13)+Chr(10)
      EndIf
      x=x+bytesize
    EndIf
      
    If currentbyte = $c0 :indentation - 2 :in.s = "":For t = 0 To indentation:in.s +"    " :Next t:outs = outs +in.s+ "End Collection" + Chr(13) + Chr(10) :EndIf
    If currentbyte = $a4 : outs = outs +in.s+ "Push" + Chr(13) + Chr(10) : EndIf
    If currentbyte = $b4 : outs = outs +in.s+ "Pop" + Chr(13) + Chr(10) : EndIf
  Next x
ProcedureReturn outs
EndProcedure


InitSprite()
InitKeyboard():InitMouse()

Global.i lw,mw,e1,ps,p1, d1w, c, eg, ms.s, dscs.i
ExamineDesktops()
OpenWindow(0, 0, 0, DesktopUnscaledX(DesktopWidth(0)),DesktopUnscaledY(DesktopHeight(0)), "[Escape] to quit", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, DesktopWidth(0),DesktopHeight(0) , 0, 0, 0)

InitScreenGadgets()
mw=OpenScreenWindow(#PB_Any, 0, 0, 300, 650, "HID Items")
ps=PanelScreenGadget(#PB_Any,10,30,280,610)
p1=AddScreenGadgetItem(ps,-1,"panel-1")
lw=ListViewScreenGadget(#PB_Any,5,10,268,563)

d1w=OpenScreenWindow(#PB_Any, 310, 0, 1000, 650, "Hid Info")
e1 = EditorScreenGadget(#PB_Any,10,30,980,590)

ExamineHIDs()
While NextHID()
  c+1
  
  OpenHIDPath(c,HIDInfo(#PB_HID_Path))
  If IsHID(c)
    AddScreenGadgetItem(lw,-1,HIDInfo(#PB_HID_Product,c))
  EndIf
  
Wend
Global *dbuff


Repeat
  While WindowEvent() : Wend
  
  ClearScreen(RGB(0,0,0))
  ExamineMouse()
  DesktopMouseX() :;Trixie Wayland fix for mouse, probably.
  ExamineKeyboard()
  
  If ScreenWindowEvent() = #PB_Event_Gadget
      
      eg = EventScreenGadget()
       Select eg
         Case lw
           
           If IsHID(GetScreenGadgetState(lw)+1)
            SetScreenGadgetText(e1,"")
            ms.s = ""
            ms.s = "HID Product: " + HIDInfo(#PB_HID_Product,GetScreenGadgetState(lw)+1)+Chr(13)+Chr(10)
            ms.s + "HID Manufacturer: " + HIDInfo(#PB_HID_Manufacturer,GetScreenGadgetState(lw)+1)+Chr(13)+Chr(10)
            ms.s + "HID Path: " + HIDInfo(#PB_HID_Path,GetScreenGadgetState(lw)+1)+Chr(13)+Chr(10)
            ms.s + "HID VID: " + RSet(Hex(Val(HIDInfo(#PB_HID_VendorId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$
            ms.s + "HID PID: " + RSet(Hex(Val(HIDInfo(#PB_HID_ProductId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$

            ms = ms+Chr(13)+Chr(10)
           
            *dbuff =GetHIDReportDescriptor(GetScreenGadgetState(lw)+1):dscs =MemorySize(*dbuff)
            
            ms = ms+Chr(13)+Chr(10)
            ms = ms+"========== Parsed Version =========="+Chr(13)+Chr(10)
            ms = ms+Chr(13)+Chr(10)
            ms = ms + parsehiddescriptor2(*dbuff,MemorySize(*dbuff)) : FreeMemory(*dbuff)
            ms = ms+Chr(13)+Chr(10)
            ms = ms+Chr(13)+Chr(10)
            
            SetScreenGadgetText(e1,ms)
           EndIf
      EndSelect
  EndIf
  RenderScreenGadgets()
  FlipBuffers()
  Delay(1)
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
A bit bulky that way though.
Last edited by miso on Sun Dec 21, 2025 6:51 am, edited 10 times in total.
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

I already see a couple of typos I made, not relevant in the output of the current version. I will fix them later.

A bitwise & was missing at line 2311

Code: Select all

 TPE = (sv2>>2)&%0011        :;This will be the type
PeDe
Enthusiast
Enthusiast
Posts: 338
Joined: Sun Nov 26, 2017 3:13 pm

Re: HID Descriptor Tool

Post by PeDe »

Thanks for the code. I added it at the end of pagenames()/pages():

Code: Select all

pagenames($FF)="Vendor-defined"
;=========================================================
pages($FF , $00) = "Vendor-defined"
It's not entirely correct; it should be $FF00-$FFFF, but it works with my HID adapter.

Peter
infratec
Always Here
Always Here
Posts: 7771
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: HID Descriptor Tool

Post by infratec »

VID and PID a normally always in hex, so I changed 2 lines:

Code: Select all

ms.s + "HID VID: " + RSet(Hex(Val(HIDInfo(#PB_HID_VendorId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$
ms.s + "HID PID: " + RSet(Hex(Val(HIDInfo(#PB_HID_ProductId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

infratec wrote: Thu Dec 11, 2025 6:56 pm VID and PID a normally always in hex, so I changed 2 lines:

Code: Select all

ms.s + "HID VID: " + RSet(Hex(Val(HIDInfo(#PB_HID_VendorId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$
ms.s + "HID PID: " + RSet(Hex(Val(HIDInfo(#PB_HID_ProductId,GetScreenGadgetState(lw)+1))), 4, "0") + #CRLF$
Thanks, modified the code with your addition.
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

PeDe wrote: Thu Dec 11, 2025 2:36 pm Thanks for the code. I added it at the end of pagenames()/pages():

Code: Select all

pagenames($FF)="Vendor-defined"
;=========================================================
pages($FF , $00) = "Vendor-defined"
It's not entirely correct; it should be $FF00-$FFFF, but it works with my HID adapter.

Peter
Thanks, I added this to the code. About the $FF00-$FFFF range,... I removed those, as only a few rare equipment was there, and I was not sure about making that big of a string array for those. I have a list for the upper parts, If someone suggest that a more complete version with very rare things should be added, I can make a modification, or can provide a list. ( As I collected those too, that was available. )
User avatar
idle
Always Here
Always Here
Posts: 6150
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: HID Descriptor Tool

Post by idle »

this might be useful as a reference
https://github.com/IntergatedCircuits/h ... main/pages
PeDe
Enthusiast
Enthusiast
Posts: 338
Joined: Sun Nov 26, 2017 3:13 pm

Re: HID Descriptor Tool

Post by PeDe »

Hello miso,

the output of 16-bit data is incorrect. The data is normally in little-endian alignment.
Example of logical minimum and maximum: '15 00 26 ff 00'.

That is:
Logical Minimum (0)
Logical Maximum (0x00ff)

But your code outputs:
Logical Minimum (0x00)
Logical Maximum (0xff00)

Peter
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

Maybe, I can't be sure.
This parts reads the data

Code: Select all

dt.s = Mid(hds,x*2+3,(2*bsze))
2 characters*bytesize read in one single step.

If its inverted, then it is inverted in the original string.
Can you check? Sometimes 8 bit data comes on 16 bit (by laziness or template descriptor) but only 1 byte, the higher has meaning.

So I mean 8 bit data on 16 bit

Logical Minimum (0x00)
Logical Maximum (0xFF)
Report Size(0x10)

or

16 bit data on 8 bit
Logical Minimum (0x00)
Logical Maximum (0xFF00)
Report Size(0x08)

In the first case the HIByte is needed, and can drop the LowByte. It must be read as a byte+a dummy byte. (I think, I'm not 100% percent sure, seen a lot of strange things already)

...And yes, it might be big endian, and should be switched manually... I'm just not sure, what is the true thing...

EDIT: @PEDE (Peter) I looked at it, and you are right. It's in big endian. I will reverse it.
PeDe
Enthusiast
Enthusiast
Posts: 338
Joined: Sun Nov 26, 2017 3:13 pm

Re: HID Descriptor Tool

Post by PeDe »

I also noticed that you are misinterpreting the byte specifications.

Code: Select all

      BSZE = sv2&%0011       :;this will be the bytesize
The bits are not completely binary:
00 = 0 byte
01 = 1 byte
10 = 2 byte
11 = 4 byte, not 3


The string from ‘GetHIDReportDescriptor()’ returns the bytes in the order in which they are stored in memory. You must therefore pay attention to the order of the bytes yourself. Accessing memory with Peek... would be easier and correct.

Peter
miso
Enthusiast
Enthusiast
Posts: 630
Joined: Sat Oct 21, 2023 4:06 pm
Location: Hungary

Re: HID Descriptor Tool

Post by miso »

PeDe wrote: Sun Dec 14, 2025 12:20 pm I also noticed that you are misinterpreting the byte specifications.

Code: Select all

      BSZE = sv2&%0011       :;this will be the bytesize
The bits are not completely binary:
00 = 0 byte
01 = 1 byte
10 = 2 byte
11 = 4 byte, not 3


The string from ‘GetHIDReportDescriptor()’ returns the bytes in the order in which they are stored in memory. You must therefore pay attention to the order of the bytes yourself. Accessing memory with Peek... would be easier and correct.

Peter
Thanks Peter, those were major bugs. Fixed both size and endianness in the code. (plus changed the sizes array to 0,1,2,4)

Code: Select all

BSZE = bsize(sv2&%0011)       :;this will be the bytesize

Code: Select all

        dt.s = ""
        For z = bsze-1 To 0 Step-1
          dt.s = dt.s+Mid(hds,x*2+3+z*2,(2))
        Next z
Post Reply