Hello all,
Sorry.The above attached USBDesc have throttle & not Z axis.I have modified few of them but the result are the same.No response.One way around the Buttons should work,but in my case none of it is working.
Hello all,
Sorry.The above attached USBDesc have throttle & not Z axis.I have modified few of them but the result are the same.No response.One way around the Buttons should work,but in my case none of it is working.
hello all,
Ok.We make it simple here.I added Z axis but in the gamepad configurator it shows the Z axis but not working...
Ok , A 4 axis joystick with 12 buttons and a hat switch:
PBP code-----------------------------------------------------
Include "Js_hid_desc.bas" ' Include the HID descriptors
'Include "modedefs.bas" ' Include serial modes
DEFINE OSC 48
DEFINE LOADER_USED 1
DEFINE RESET_ORG 1100h ' For Microchip USB Bootloader
DEFINE INTERRUPT_ORG 1108h ' For Microchip USB Bootloader 'LED var PORTC.0
' Define ADCIN parameters
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 100 ' Set sampling time in uS
USBBufferSizeMax con 10 ' maximum buffer size
USBBufferSizeTX con 10 ' input
USBBufferSizeRX con 10 ' output
' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
temp var byte
' ************************************************** **********
' * Port configuration: *
' * PORTD.0-7 are digital inputs *
' * AN0,AN5 active as analog inputs *
' ************************************************** **********
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0
TRISA = %11111111
TRISB = %11111111
TRISC = %11111111
TRISD = %11111111
TRISE = %11111111
ADCON1 = %00001001
' ************************************************** **********
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************** **********
USBInit ' initialise USB...
ProgramStart:
' gosub DoUSBIn
ADCIN 0,USBBuffer[0]
ADCIN 1,USBBuffer[1]
ADCIN 2,USBBuffer[2]
ADCIN 3,USBBuffer[3]
USBService ' keep connection alive
temp = 255-PORTD
USBBuffer.0(32) = PORTD.0
USBBuffer.0(33) = PORTD.1
USBBuffer.0(34) = PORTD.2
USBBuffer.0(35) = PORTD.3
USBBuffer.0(36) = temp.4
USBBuffer.0(37) = temp.5
USBBuffer.0(38) = temp.6
USBBuffer.0(39) = temp.7
USBService ' keep connection alive
temp = 255-PORTB
USBBuffer.0(40) = temp.0
USBBuffer.0(41) = temp.1
USBBuffer.0(42) = temp.2
USBBuffer.0(43) = temp.3
USBBuffer.0(44) = temp.4
USBBuffer.0(45) = temp.5
USBBuffer.0(46) = temp.6
USBBuffer.0(47) = temp.7
DoUSBOut1:
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut2 ' if bus available, transmit data
DoUSBOut2:
GoTo ProgramStart
DISCRIPTOR code----------------------------------------------------------------
ReportDescriptor1
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x01 ; COLLECTION (Application)
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x00 ; COLLECTION (Physical)
RETLW 0x09
RETLW 0x30 ; USAGE (X)
RETLW 0x09
RETLW 0x31 ; USAGE (Y)
RETLW 0x09
RETLW 0x32 ; USAGE (Z)
RETLW 0x09
RETLW 0x33 ; USAGE (Rx)
RETLW 0x75
RETLW 0x08 ; REPORT_SIZE (8)
RETLW 0x95
RETLW 0x04 ; REPORT_COUNT (4)
RETLW 0x35
RETLW 0x00 ; PHYSICAL_MINIMUM (0)
RETLW 0x46
RETLW 0xff
RETLW 0x00 ; PHYSICAL_MAXIMUM (255)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x26
RETLW 0xff
RETLW 0x00 ; LOGICAL_MAXIMUM (255)
RETLW 0x81
RETLW 0x02 ; INPUT (DataVarAbs)
RETLW 0xc0 ; END_COLLECTION
; ------------ Hat Switches -------------------
RETLW 0x09
RETLW 0x39 ; Usage (Hat Sw)
RETLW 0x15
RETLW 0x00 ; Log Min (0)
RETLW 0x25
RETLW 0x03 ; Log Max (3)
RETLW 0x35
RETLW 0x00 ; Phy Min (0)
RETLW 0x46
RETLW 0x0e
RETLW 0x01 ; Phy Max (270)
RETLW 0x65
RETLW 0x14 ; Unit (Eng Rot : Ang Pos)
RETLW 0x75
RETLW 0x04 ; Report Size (4)
RETLW 0x95
RETLW 0x01 ; Report Count (1)
RETLW 0x81
RETLW 0x02 ; Input (Data, Variable, Absolute)
; ------------ Buttons ------------------------
RETLW 0x05
RETLW 0x09 ; USAGE_PAGE (Button)
RETLW 0x19
RETLW 0x01 ; USAGE_MINIMUM (Button 1)
RETLW 0x29
RETLW 0x0c ; USAGE_MAXIMUM (Button 12)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x25
RETLW 0x01 ; LOGICAL_MAXIMUM (1)
RETLW 0x45
RETLW 0x00 ; PHYSICAL_MAXIMUM (0)
RETLW 0x55
RETLW 0x00 ; UNIT_EXPONENT (0)
RETLW 0x75
RETLW 0x01 ; REPORT_SIZE (1)
RETLW 0x95
RETLW 0x0c ; REPORT_COUNT (12)
RETLW 0x81
RETLW 0x02 ; INPUT (Data Var Abs)
RETLW 0xc0 ; END_COLLECTION
EndReportDescriptor1
Now a 8 axis joystick with 8 buttons:
PBP Code-----------------------------------
Include "Th_hid_desc.bas" ' Include the HID descriptors
'Include "modedefs.bas" ' Include serial modes
DEFINE OSC 48
DEFINE LOADER_USED 1
DEFINE RESET_ORG 1100h ' For Microchip USB Bootloader
DEFINE INTERRUPT_ORG 1108h ' For Microchip USB Bootloader 'LED var PORTC.0
' Define ADCIN parameters
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 100 ' Set sampling time in uS
'Define LCD_DREG PORTB ' LCD data pin port
'Define LCD_DBIT 0 ' LCD data pin bit
'Define LCD_RSREG PORTC ' LCD register select pin port
'Define LCD_RSBIT 6 ' LCD register select pin bit
'Define LCD_EREG PORTC ' LCD enable pin port
'Define LCD_EBIT 7 ' LCD enable pin bit
'Define LCD_BITS 4 ' LCD number of data bits
'Define LCD_LINES 2 ' LCD number of lines
'define HSER_RCSTA 090h
'define HSER_TXSTA 0A4h
'define HSER_BAUD 115200
'define HSER_CLROERR
USBBufferSizeMax con 10 ' maximum buffer size
USBBufferSizeTX con 10 ' input
USBBufferSizeRX con 10 ' output
' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
temp var byte
' ************************************************** **********
' * Port configuration: *
' * PORTD.0-7 are digital inputs *
' * AN0,AN5 active as analog inputs *
' ************************************************** **********
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0
TRISA = %11111111
TRISB = %11111111
TRISC = %11111111
TRISD = %11111111
TRISE = %11111111
ADCON1 = %00001001
' ************************************************** **********
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************** **********
USBInit ' initialise USB...
ProgramStart:
'gosub DoUSBIn
ADCIN 0,USBBuffer[0]
ADCIN 1,USBBuffer[1]
ADCIN 2,USBBuffer[2]
USBService
ADCIN 3,USBBuffer[3]
ADCIN 4,USBBuffer[4]
ADCIN 5,USBBuffer[5]
GoSub DoUSBOut ' keep connection alive
ADCIN 6,USBBuffer[6]
ADCIN 7,USBBuffer[7]
temp = 255-PORTD
USBBuffer.0(64) = temp.4
USBBuffer.0(65) = temp.5
USBBuffer.0(66) = temp.6
USBBuffer.0(67) = temp.7
temp = 255-PORTB
USBBuffer.0(68) = temp.0
USBBuffer.0(69) = temp.1
USBBuffer.0(70) = temp.2
USBBuffer.0(71) = temp.3
USBBuffer.0(72) = temp.4
USBBuffer.0(73) = temp.5
USBBuffer.0(74) = temp.6
USBBuffer.0(75) = temp.7
'GoSub DoUSBOut
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut2 ' if bus available, transmit data
DoUSBOut2:
GoTo ProgramStart
DISCRIPTOR code----------------------------------------------------------------
ReportDescriptor1
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x01 ; COLLECTION (Application)
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x00 ; COLLECTION (Physical)
RETLW 0x09
RETLW 0x30 ; USAGE (X)
RETLW 0x09
RETLW 0x31 ; USAGE (Y)
RETLW 0x09
RETLW 0x32 ; USAGE (Z)
RETLW 0x09
RETLW 0x33 ; USAGE (Rx)
RETLW 0x09
RETLW 0x34 ; USAGE (Ry)
RETLW 0x09
RETLW 0x35 ; USAGE (Rz)
RETLW 0x09
RETLW 0x36 ; USAGE (Ry)
RETLW 0x09
RETLW 0x37 ; USAGE (Rz)
RETLW 0x75
RETLW 0x08 ; REPORT_SIZE (8)
RETLW 0x95
RETLW 0x08 ; REPORT_COUNT (8)
RETLW 0x35
RETLW 0x00 ; PHYSICAL_MINIMUM (0)
RETLW 0x46
RETLW 0xff
RETLW 0x00 ; PHYSICAL_MAXIMUM (255)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x26
RETLW 0xff
RETLW 0x00 ; LOGICAL_MAXIMUM (255)
RETLW 0x81
RETLW 0x02 ; INPUT (DataVarAbs)
RETLW 0xc0 ; END_COLLECTION
RETLW 0x05
RETLW 0x09 ; USAGE_PAGE (Button)
RETLW 0x19
RETLW 0x01 ; USAGE_MINIMUM (Button 1)
RETLW 0x29
RETLW 0x10 ; USAGE_MAXIMUM (Button 16)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x25
RETLW 0x01 ; LOGICAL_MAXIMUM (1)
RETLW 0x45
RETLW 0x00 ; PHYSICAL_MAXIMUM (0)
RETLW 0x75
RETLW 0x01 ; REPORT_SIZE (1)
RETLW 0x95
RETLW 0x10 ; REPORT_COUNT (16)
RETLW 0x81
RETLW 0x02 ; INPUT (Data Var Abs)
RETLW 0xc0 ; END_COLLECTION
EndReportDescriptor1
They both work for FSX and X-Plane.
See http://www.scumari.nl
Have fun!
Last edited by scumari; - 3rd December 2012 at 22:12.
Bookmarks