USB HID Joystick for Dummies


Closed Thread
Results 1 to 22 of 22

Hybrid View

  1. #1
    scumari's Avatar
    scumari Guest

    Default Make a joystick

    Found a work arround.
    Copy the hid_desc.bas file and all associated files to your working directory.
    Copy the text made by DT.exe and changed by the ways of the Dummy Manual, into the 'ReportDescriptor1' part, overwriting existing code.

    This should do the trick.
    By this way I created a 6 axis,16 button pedestal.

    Have fun

    More MCU and other projects:
    http://www.scumari.nl/www/mcu
    Last edited by scumari; - 3rd November 2010 at 09:18.

  2. #2
    Join Date
    Sep 2009
    Posts
    755

    Default

    Can you upload project or pbp code and descriptor file?

  3. #3
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818

    Default

    Quote Originally Posted by scumari View Post
    Found a work arround.
    Copy the hid_desc.bas file and all associated files to your working directory.
    Copy the text made by DT.exe and changed by the ways of the Dummy Manual, into the 'ReportDescriptor1' part, overwriting existing code.

    This should do the trick.
    By this way I created a 6 axis,16 button pedestal.

    Have fun

    More MCU and other projects:
    http://www.scumari.nl/www/mcu
    A better way is to "INCLUDE" the file like so . . .
    Code:
    INCLUDE "hid_desc.bas"
    The file MUST be in the same directory as the program you are writing.
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  4. #4
    Join Date
    Feb 2005
    Location
    Holmfirth England
    Posts
    116

    Default Re: USB HID Joystick for Dummies

    Hi,

    I have got my usb joystick working, but my axis starts in the centre moves to the right, to the left side then back to the centre as i increase the pot.

    I am doing a simple "adcin, 0, USBBuffer[0]" as in your example.
    I tried shifting the result 4 bits to the left but this just mixes it up onto 2 axes.
    What am I doing wrong?

    Doh, all i had to do is add 128 to the result, boy do i feel foolish :-)

    Regards
    Bob...
    Last edited by BobEdge; - 21st April 2011 at 16:23.

  5. #5
    Join Date
    Jun 2005
    Location
    Penang
    Posts
    40

    Default Re: USB HID Joystick for Dummies

    Hello all,

    I am trying to convert my old joystick to USB Joystick.Since i am kinda new to USB,i plan to take this advantage to learn how USB works.I have tried CDC before & now HID.As a starting point,i searched for a example code & bumped to a site (www.starlino.com),an accelerometer based joystick.I downloaded the codes (which is in PBP) & researched the codes.After going through the USBDesc & tried the code (which worked very well) & i plan to expand it from original (2 Axis & 6 Buttons) to 3 Axis,Throttle & 8 buttons.I have modified the USBDesc & added some lines in source.To my suprise it connects to the computer (ting tong) & showed the axis,throttle & buttons in the gamepad configuration but it freeze in there.Whenever i press any of the buttons,i didn't work..i mean nothing happened.I have tried few methods but didn't work.Can anyone help me??.Attached codes together.

    *PS - The attached code is only for x,y,z axis & buttons.

    You help is kindly appreciated
    Attached Files Attached Files

  6. #6
    Join Date
    Jun 2005
    Location
    Penang
    Posts
    40

    Default Re: USB HID Joystick for Dummies

    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.

  7. #7
    Join Date
    Jun 2005
    Location
    Penang
    Posts
    40

    Default Re: USB HID Joystick for Dummies

    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...

  8. #8
    scumari's Avatar
    scumari Guest

    Default Re: USB HID Joystick for Dummies

    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.

Similar Threads

  1. USB hid maker help please.
    By BobEdge in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 3rd April 2013, 14:49
  2. Simple USB Comms Problem
    By awmt102 in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 6th January 2010, 20:17
  3. USB MSD with HID code ?
    By Chris Barron in forum USB
    Replies: 1
    Last Post: - 11th November 2009, 17:33
  4. i cant get 18f2550 work as HID
    By Ahmadabuomar in forum mel PIC BASIC Pro
    Replies: 19
    Last Post: - 13th October 2009, 16:39
  5. Replies: 0
    Last Post: - 6th March 2009, 07:52

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts