I finally managed to get it working
ID 1
HID 1
ID 1
x 10 bits in pointer window
y 10 bits in pointer window
z 10 bits Top
Rx 8 bits 2d
Ry 8 bits 3d
Rz 8 bits 4th
10 buttons of which one can send a string of characters
ID 2
Slider 10 bits 5th
Wheel 8 bits 6th
I cancelled the mouse action on HID 2
keeping
HID 2
to send the keyboard characters sequence
I fault-found my mistakes with Device Monitoring Studio( cheapest version )
Diverse errors of writing places
So that confirm that windows can detect 8 axis and use them correctly
You got to be very careful with the writing into the buffers( and modify-test ONE instruction at a time )
I though this precision would be welcome
Thank you for your interest, if ,see below
And thanks Ian for this forum
The HID report descriptor for the 8 axes
============================
HidReportdescriptor1:
dw 0x05,0x01 ; Usage_Page (Generic Desktop)
dw 0x09,0x04 ; Usage (Joystick)
dw 0xA1,0x01 ; Collection (Application)
DW 0X85,1 ; Report ID 1
dw 0x09,0x04 ; Usage Joystick
dw 0xA1,0x00 ; Collection (Physical)
dw 0x35,00 ; Physical min 0
dw 0x46,0xFF,03 ; Physical max 1023
dw 0x16,00,0xFE ; Logical Minimum (-511)
dw 0x26,0xFF,0x01 ; Logical Maximum ( 511)
dw 0x09,0x30 ; Usage (X) #1
dw 0x09,0x31 ; Usage (Y) #2
dw 0x09,0x32 ; Osage (Z) #3
dw 0x75,0x10 ; Report_Size (16) using 16 to avoid padding
dw 0x95,0x03 ; Report_Count 3 count 3 * 2 = 6 + 1 rep ID = 7
dw 0x81,0x02 ; Input (Data, Var, Abs)
dw 0x35,00 ; Physical min 0
dw 0x46,0xFF,00 ; Physical max 255
dw 0x15,0x81 ; Logical min -127
dw 0x25,0x7F ; Logical max 127
dw 0x09,0x33 ; rX #4 8
dw 0x09,0x34 ; rY #5 9
dw 0x09,0x35 ; rZ #6 Count = 10
dw 0x75,0x08 ; Report_Size 8
dw 0x95,0x03 ; Report_Count 3
dw 0x81,0x02 ; Input (Data, Var, Abs)
dw 05,09 ; USAGE_PAGE (Button)
dw 19h,1 ; USAGE_MINIMUM (Button 1)
dw 29h,10 ; USAGE_MAXIMUM (Button 10)
dw 15h,0 ; LOGICAL_MINIMUM (0)
dw 25h,1 ; LOGICAL_MAXIMUM 1
dw 75h,1 ; REPORT_SIZE 1
dw 95h,10 ; REPORT_COUNT (10)
dw 81h,2 ; INPUT (Data,Var,Abs) 10 Bits + padding =2 bytes
dw 0x75,1 ; For
dw 0x95,6 ; 6 bits
dw 0x81,3 ; Padding
; Total nb of bytes in ID1 = 12
;********* REPORT ID 2 ***********
DW 0X85,2 ; REP ID 2
dw 0x05,0x01 ;Usage_Page (Generic Desktop)
; For the RUDDER reading(combined HALVES)
dw 0x09,0x36 ; Usage Slider
dw 0x35,00 ; Phys min 0
dw 0x46,0xFF,03 ; Phys max 1023
dw 0x16,00,0xfe ; Logical Minimum (-511)
dw 0x26,0xff,0x01 ; Logical Maximum ( 511)
dw 0x75,0x10 ;Report_Size (16) Using 16 to avoid padding
dw 0x95,0x01 ;Report_Count 1
dw 0x81,0x02 ;Input (Data, Var, Abs) 2 bytes
;addition of 1 channel
dw 0x09,0x37 ; Dial
dw 0x46,0xFF,00 ; phys max 255
dw 0x15,0x81 ; log min -127
dw 0x25,0x7F ; log max 127
dw 0x75,0x08 ;Report_Size 8
dw 0x95,0x01 ;Report_Count 1
dw 0x81,0x02 ;Input (Data, Var, Abs)
dw 0xC0 ; End_Collection.
; Total nb of bytes in ID2 = 4
endof1:
Double1 equ Endof1 - HidReportdescriptor1
LenOFdescr1 equ Double1/2