Share My Creation Control a RC plane with a joystick

Discussion in 'Share Your Creations' started by freedom2000, May 3, 2014.

  1. freedom2000

    freedom2000 Well-Known Member Licensed User

    blade.jpg

    Here is something I did for a copter pilot who wanted to "feel" RC copters and planes as if he were flying.

    So he asked me to do an interface between a joystick and his RC radio.

    I built this simple usb board which can connect any USB host device and which is seen as a HID device.
    The board outputs ppm signal which is a standard interface to RC radio.
    carte_connectique.jpg

    Now the tricky android part :
    - my board is connected to the USB host plug
    - the joystick is also connected to this Android usb host

    The App connects to the two usb devices, reads the joystick, decommutates the values, feeds them to my board. And that's it

    JoystickAndroid2ppm.jpg

    [edit Xmas 2015] : Thanks to @wonder wonder(ful) generic gamepad my App should be able to read almost any joystick.

    You can test it with your own joystick. If the "left" part of the screen moves, then the app should work for you too (tell me your joystick model).
    The buttons can be different from one joystick to another...

    The Apk is attached to this thread

    Here is a video :

     

    Attached Files:

    Last edited: Dec 27, 2015
    wonder, santossg, shashkiranr and 5 others like this.
  2. Beja

    Beja Expert Licensed User

    Hi freedom2000,
    Thanks for sharing this, but sorry I am not getting it!. will this app replace the joystick so one can control the plane without using the joystick?
     
    Peter Simpson likes this.
  3. freedom2000

    freedom2000 Well-Known Member Licensed User

    No it's exactly the contrary ! (have a look to the video)
    This App is there to enable the replacement of of RC radio by a Joystick.

    Flying with the RC sticks is not "that" easy when you are not used to it. On the contrary pilots (real pilots) prefer flying with joysticks which is for them more immersive than the radio IF.

    By the way it would be really easy to replace the joystick by a "touch UI" on the android. But flying with it is not easy (try the parot to be convinced)
     
  4. john mad doe

    john mad doe Member Licensed User

    Bonjour freedom2000

    C'est tres interessant et étant amateur de RC j'aimerais bien essayer votre systeme.

    mais ou trouver la carte usb qui est utilisée pour connecter la radiocommande ?

    John
     
  5. freedom2000

    freedom2000 Well-Known Member Licensed User

    Bonjour et merci !

    I go on in english if you don't mind.
    I can send you an example of the board or if you prefer you could do it yourself (it's open hardware)

    However you should first try your joystick with the provided apk to check if it is recognized.
    If it is a Microsoft forcefeedback Pro2 or a logitech gamepad it shouldn't be a problem.
    If it is another brand then you must test it and tell me the result... Most probably it won't be recognized and I will have to do modifications to my Apk to handle this new profile. We could do it together and will speak french for it

    Don't hesitate to contact me by mail

    Cheers
    JP
     
  6. john mad doe

    john mad doe Member Licensed User

    Hello freedom2000

    Thank you for your proposition.
    Well , first I have to purchase a usb hub to connect my Joystick ( Saiteck AV8R) to my Nexus 10'' and I will come back to tell you how it goes.

    John

    PS : where can I find your mail ?
     
  7. freedom2000

    freedom2000 Well-Known Member Licensed User

    Hi John,

    You can test your joystick without the hub. Just plug it into your USB host plug. As you don't have my board, only one USB slave will be connected to the bus --> the hub is not needed.

    Try to connect the joystick, launch the App and tell me if you see something moving on the left part of the screen

    My mail : freedom2000 at free.fr

    JP
     
  8. adrianstanescu85

    adrianstanescu85 Active Member Licensed User

    Hello

    I do have a question: can I use a USB joystick connected to my Android phone and build a very very simple app that tells me that I moved the joystick left or right or pushed one button or another?

    Thank you!
    Adrian
     
  9. freedom2000

    freedom2000 Well-Known Member Licensed User

    Hi Adrian,
    Yes of course you can do that.

    But there is no library to handle HID usb joystick. You will have to decommutate the descriptor of your joystick...
     
  10. adrianstanescu85

    adrianstanescu85 Active Member Licensed User

    Hello

    What do you mean by that? I'm not that familiar with the decommutating the descriptor term.

    Thank you!
    Adrian
     
  11. freedom2000

    freedom2000 Well-Known Member Licensed User

  12. adrianstanescu85

    adrianstanescu85 Active Member Licensed User

    Hi,

    Yes, that was useful. I was thinking basically to use a Logitech Extreme 3D Pro joystick just to move a few sliders inside an app. Do you think that would be compatible too like toe ForcefeedbackPro 2?

    Adrian
     
  13. freedom2000

    freedom2000 Well-Known Member Licensed User

    Probably not...

    To check it, just download my Apk install it and connect the joystick. If the left part of the GUI "moves" then it would be easy to update the soft. If not... noway but re code everything !
     
  14. Jipy

    Jipy New Member Licensed User

    Hi,

    I don't see any reply to the previous comment, but, FYI, I have tried the app using the Extrem 3D Pro (Logitech) and unfortunately... it doesn't work. I'm amateur flyer and have great interrest for such application. I would have a question about the "decommutating" what do you mean exactly ? Should i investigate what is the information going trough the usb xmit, anylyse and build he approriate software on the Android side ? Or Is there any easier way to gather information about perhaps (to begin) generic HID ?

    I'm sdorry if my questions have well known answer :( But, yeah, I just begin :)
    Thx
    Jipy
     
  15. freedom2000

    freedom2000 Well-Known Member Licensed User

    Hi,

    Yes you will have to find the descriptor of your HID joystick.
    They are not "public" and thus you will have to get it with a PC software like USBlyzer
    After that, you can twick my code to adapt it to this descriptor
     
  16. Jipy

    Jipy New Member Licensed User

    Hi :)

    Great informatin, thx u, i'm not used to work in depth with USB but USBlyzer "sounds" good :) to me and i will try this. I have not yet take a look to your code but i'll do asap.
    So, next question: HW, it seems u use a standard controller, is it someting similar to the well known "Arduino" family circuits (i have already this my pocket:) ?

    Thx
    Jipy
     
  17. freedom2000

    freedom2000 Well-Known Member Licensed User

    Hi again,

    Yes I use a Microchip's PIC microcontroller.
    Similar to Arduino but definitively not the same environment...
     
  18. Jipy

    Jipy New Member Licensed User

    Thank you for the info,

    I have found this "www.b4x.com/android/forum/threads/arduino-adk-introduction.27510/" very interresting as on my side i will need such kind of microcontroller connected to multiple sensors. You mentionned that i could "twick" your code, do you mean modify the "source code" (Unfortunately, i'm not sure of the translation of "twick" !) and adapt it to my particular joystick ?

    If you provided the source code, could you please provide me the link ? This would be very very helpfull and i would spare a lot of time :)

    Jipy
     
  19. freedom2000

    freedom2000 Well-Known Member Licensed User

    Hi

    Here is the source code (Android side only)

    Code:
    #Region Module Attributes
        
    #FullScreen: False
        
    #IncludeTitle: True
        
    #ApplicationLabel: Joystick2ppm
        
    #VersionCode: 1
        
    #VersionName: 0.00
        
    #SupportedOrientations: Landscape
        
    #CanInstallToExternalStorage: False
    #End Region

    Sub Process_Globals
      
    Dim manager As UsbManager
      
    Dim HIDstreams As UsbDeviceConnection
      
    Dim JPHIDstreams As UsbDeviceConnection
      
    Dim outEndpoint, inEndpoint As UsbEndpoint
      
    Dim JPoutEndpoint, JPinEndpoint As UsbEndpoint
      
    Dim device As UsbDevice
      
    Dim JPdevice As UsbDevice
      
    Dim interface As UsbInterface
      
    Dim JPinterface As UsbInterface
      
    Dim JoystickConnected As Boolean = False
      
    Dim JPConnected As Boolean = False
      
    Dim VID As Int : VID = 0x4D9
      
    Dim PID As Int : PID = 0x3F
      
    Dim JoyVID As Int
      
    Dim JoyPID As Int
      
    Dim RxPlcBuffer(64As Byte
      
    Dim TxPlcBuffer(64As Byte
      
    Dim Channel(8As Int
      
    Dim Reverse(8As Boolean
      
    Dim Input(20As Int
      
    Dim Output(8As Int

      
    Dim Timer1 As Timer
    End Sub
    Sub Globals


        
    Dim Bt1 As Button
        
    Dim PbX As ProgressBar
        
    Dim PbY As ProgressBar
        
    Dim PbZ As ProgressBar
        
    Dim PbR As ProgressBar
        
    Dim Ck1 As CheckBox
        
    Dim Ck2 As CheckBox
        
    Dim Ck3 As CheckBox
        
    Dim Ck4 As CheckBox
        
    Dim Ck5 As CheckBox
        
    Dim Ck6 As CheckBox
        
    Dim Ck7 As CheckBox
        
    Dim Ck8 As CheckBox
        
    Dim Img1 As ImageView
        
    Dim Ed1 As EditText

    End Sub
    Sub Activity_Create(FirstTime As Boolean)
        Timer1.Initialize(
    "Timer1"20' 1000 = 1 second
        Timer1.Enabled = True
        
        
    If FirstTime Then
            manager.Initialize
        
    End If
           
    Activity.LoadLayout("1")

      
      
           
    'Load the previous state
        If StateManager.RestoreState(Activity"Main"60) = False Then
            
    'set the default values

        
    End If
      

        
    For Each V As View In Activity
            
    If V Is Spinner Then
                
    If V.Tag <>"" Then
                    
    Dim Sp As Spinner
                    Sp = V
                    Sp.Add(
    "X")
                    Sp.Add(
    "Y")
                    Sp.Add(
    "Z")
                    Sp.Add(
    "Rx")
                    Sp.Add(
    "Hat")
                    Sp.Add(
    "B1")
                    Sp.Add(
    "B2")
                    Sp.Add(
    "B3")
                    Sp.Add(
    "B4")
                    Sp.Add(
    "B5")
                    Sp.Add(
    "B6")
                    Sp.Add(
    "B7")
                    Sp.Add(
    "B8")
                
    End If
            
    End If
        
    Next


    End Sub
    Sub Activity_Pause(UserClosed As Boolean)
        
    If UserClosed Then
            
    'StateManager.ResetState("Main")
            Timer1.Enabled = False
        
    Else
            
    'StateManager.SaveState(Activity, "Main")
        End If
        StateManager.SaveState(
    Activity"Main")
        StateManager.SaveSettings
      
    End Sub


    Sub Bt1_Click
    Dim NbWrite As Int
      
    If JPHIDstreams.IsInitialized Then
        
          TxPlcBuffer(
    0)= 0x83
        NbWrite = JPHIDstreams.BulkTransfer(JPoutEndpoint,TxPlcBuffer,JPoutEndpoint.MaxPacketSize,
    500)
        
    'If NbWrite = -1 Then JPConnected = False
       
      
    End If
    End Sub


    Sub Timer1_Tick

    Dim NbRead As Int
    Dim i As Int
    Dim j As Int
    Dim MyStr As String = ""

       
    If JoystickConnected = False Then ConnectJoystick
       
    If JPConnected = False Then ConnectJP
     
        
    If ( HIDstreams.IsInitialized = True ) Then
       
            NbRead = HIDstreams.BulkTransfer(inEndpoint,RxPlcBuffer,inEndpoint.MaxPacketSize,
    500)
            
    If NbRead = -1 Then
                JoystickConnected = 
    False
                JPConnected = 
    False
                Bt1.Enabled = 
    False
            
    End If
            
    For i = 0 To NbRead -1
                j = ConvertSignedByteToUnsigned(RxPlcBuffer(i))
                
    'j = (RxPlcBuffer(i))
                MyStr = MyStr & NumberFormat(j,00) & " "
                
    'Ed1.Visible = True
                'Ed1.text = MyStr
            Next
            
    Select (JoyVID* 0x10000 + JoyPID)    'use VID and PID as a primary key
            Case (0x45E * 0x10000 + 0x001B)        'MicrosoftForceFeedback
                DecomMicrosoftForceFeedback
            
    Case (0x46D * 0x10000 + 0xC216)        'LogitecDualAction
                DecomLogitecDualAction
            
    Case Else
                
    ToastMessageShow ("unsupported joystick"True)
            
    End Select
          
            PerformMixing                        
    'Apply mixing strategy

            OutputPPM                            
    'Send PPM command to JP Board and then to Radio
          
        
    End If

    End Sub
    Sub DecomMicrosoftForceFeedback
    Dim j As Int
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    1)) + Bit.AND(ConvertSignedByteToUnsigned(RxPlcBuffer(2)), 0x3)*256 +512
            j= 
    Bit.AND(j , 1023)
            PbX.Progress = j*
    100/1023
            Input(
    0) = j * 64
          
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    3)) + Bit.AND(ConvertSignedByteToUnsigned(RxPlcBuffer(4)), 0x3)*256 +512
            j= 
    Bit.AND(j , 1023)
            PbY.Progress =j*
    100/1023
            Input(
    1) = j * 64
          
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    5))+32
            j= 
    Bit.AND(j , 63)
            PbZ.Progress =j*
    100/63
            Input(
    2) = j * 1024
          
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    6))
            j= 
    Bit.AND(j , 127)
            PbR.Progress =j*
    100/127
            Input(
    3) = j * 512
          
            
    Select Case Bit.AND(RxPlcBuffer(7), 0x0F)
            
    Case 0
                Img1.Bitmap = (
    LoadBitmap(File.DirAssets, "90.jpg"))
                Input(
    4) = 7280
            
    Case 1
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "45.jpg"))
                Input(
    4) = 14560
            
    Case 2
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "0.jpg"))
                Input(
    4) = 21840
            
    Case 3
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "315.jpg"))
                Input(
    4) = 29120
            
    Case 4
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "270.jpg"))
                Input(
    4) = 36400
            
    Case 5
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "225.jpg"))
                Input(
    4) = 43680
            
    Case 6
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "180.jpg"))
                Input(
    4) = 50960
            
    Case 7
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "135.jpg"))
                Input(
    4) = 65535
            
    Case Else
                Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "c.jpg"))
                Input(
    4) = 0
            
    End Select  
          
            
    If Bit.AND(RxPlcBuffer(8), 0x1) > 0 Then
                Ck1.checked = 
    True
                Input(
    5) = 0xFFFF
            
    Else
                Ck1.Checked = 
    False
                Input(
    5) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x2) > 0 Then
                Ck2.Checked = 
    True
                Input(
    6) = 0xFFFF
            
    Else
                Ck2.Checked = 
    False
                Input(
    6) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x4) > 0 Then
                Ck3.Checked = 
    True
                Input(
    7) = 0xFFFF
            
    Else
                Ck3.Checked = 
    False
                Input(
    7) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x8) > 0 Then
                Ck4.Checked = 
    True
                Input(
    8) = 0xFFFF
            
    Else
                Ck4.Checked = 
    False
                Input(
    8) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x10) > 0 Then
                Ck5.Checked = 
    True
                Input(
    9) = 0xFFFF
            
    Else
                Ck5.Checked = 
    False
                Input(
    9) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x20) > 0 Then
                Ck6.Checked = 
    True
                Input(
    10) = 0xFFFF
            
    Else
                Ck6.Checked = 
    False
                Input(
    10) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x40) > 0 Then
                Ck7.Checked = 
    True
                Input(
    11) = 0xFFFF
            
    Else
                Ck7.Checked = 
    False
                Input(
    11) = 0
            
    End If
            
    If Bit.AND(RxPlcBuffer(8), 0x80) > 0 Then
                Ck8.Checked = 
    True
                Input(
    12) = 0xFFFF
            
    Else
                Ck8.Checked = 
    False
                Input(
    12) = 0
            
    End If
          

    End Sub

    Sub DecomLogitecDualAction
    Dim j As Int
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    0))
            PbX.Progress =j*
    100/255
          
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    1))
            PbY.Progress =j*
    100/255
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    2))
            PbZ.Progress =j*
    100/255
            j = ConvertSignedByteToUnsigned(RxPlcBuffer(
    3))
            PbR.Progress =j*
    100/255
          
            
    If Bit.AND(RxPlcBuffer(4), 0x10) > 0 Then Ck1.checked = True Else Ck1.Checked = False
            
    If Bit.AND(RxPlcBuffer(4), 0x20) > 0 Then Ck2.Checked = True Else Ck2.Checked = False
            
    If Bit.AND(RxPlcBuffer(4), 0x40) > 0 Then Ck3.Checked = True Else Ck3.Checked = False
            
    If Bit.AND(RxPlcBuffer(4), 0x80) > 0 Then Ck4.Checked = True Else Ck4.Checked = False
            
    If Bit.AND(RxPlcBuffer(5), 0x1) > 0 Then Ck5.Checked = True Else Ck5.Checked = False
            
    If Bit.AND(RxPlcBuffer(5), 0x2) > 0 Then Ck6.Checked = True Else Ck6.Checked = False
            
    If Bit.AND(RxPlcBuffer(5), 0x4) > 0 Then Ck7.Checked = True Else Ck7.Checked = False
            
    If Bit.AND(RxPlcBuffer(5), 0x8) > 0 Then Ck8.Checked = True Else Ck8.Checked = False
              
    Select Case Bit.AND(RxPlcBuffer(4), 0x0F)
                    
    Case 0
                        Img1.Bitmap = (
    LoadBitmap(File.DirAssets, "90.jpg"))

                    
    Case 1
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "45.jpg"))

                    
    Case 2
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "0.jpg"))

                    
    Case 3
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "315.jpg"))
                      
                    
    Case 4
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "270.jpg"))

                    
    Case 5
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "225.jpg"))
                      
                    
    Case 6
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "180.jpg"))
                      
                    
    Case 7
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "135.jpg"))
                
                    
    Case Else
                        Img1.Bitmap =(
    LoadBitmap(File.DirAssets, "c.jpg"))
                
    End Select
    End Sub
    Sub PerformMixing
            
    Try                                    'process mixing & reverse
            For Each V As View In Activity
                
    If V Is Spinner Then
                    
    Dim Sp As Spinner
                    Sp = V
                    
    If Sp.Tag <> "" Then
                        Channel(Sp.Tag) = Sp.SelectedIndex    
    'mixing
                    End If
                
    End If
                
    If V Is CheckBox Then
                    
    Dim Ck As CheckBox
                    Ck = V
                    
    If Ck.Tag <> "" Then
                        Reverse(Ck.Tag) = Ck.Checked        
    'reverse mode
                    End If
                
    End If
            
    Next
            
    Catch
            
    End Try
          
            
    Try
            
    For Each V As View In Activity
                
    If V Is ProgressBar Then
                    
    Dim Pb As ProgressBar
                    Pb = V
                    
    If Pb.Tag <> "" Then
                         
    If Channel(Pb.Tag) < 4 Then 'joystick axis
                            If Reverse(Pb.Tag) Then
                                Output(Pb.Tag) = (
    0x10000 - Input(Channel(Pb.Tag)))  
                            
    Else
                                Output(Pb.Tag) = Input(Channel(Pb.Tag))
                            
    End If
       
                        
    End If
                        
    If Channel(Pb.Tag) = 4 Then 'hat
                            If Reverse(Pb.Tag) Then
                                Output(Pb.Tag) = (
    0x10000 - Input(Channel(Pb.Tag)))  
                            
    Else
                                Output(Pb.Tag) = Input(Channel(Pb.Tag))  
                            
    End If
                       
                        
    End If
                        
    If Channel(Pb.Tag) > 4 AND Channel(Pb.Tag) > 4 Then 'button
                            If Reverse(Pb.Tag) Then
                                Output(Pb.Tag) = (
    0x10000 - Input(Channel(Pb.Tag)))  
                            
    Else
                                Output(Pb.Tag) =  Input(Channel(Pb.Tag))
                            
    End If
                        
    End If
                        Pb.Progress = Output(Pb.Tag) *
    100/0x10000
                    
    End If
                
    End If
            
    Next
            
    Catch
            
    End Try
    End Sub
    Sub OutputPPM

    Dim NbWrite As Int
      
    If JPHIDstreams.IsInitialized Then

        
    For i = 0 To 7
            Output(i) = Output(i) * 
    3000 / 65535    'met à l'échelle pour le PIC 65535 => 1ms = 3000 ticks Timer0
            If (Output(i) > 65535Then Output(i) = 65535
            
    If (Output(i) <0Then Output(i) = 0
        
    Next

      
          TxPlcBuffer(
    0)= 0x80 '//0x80 est la commande d'envoi des paramètres au firmware

        TxPlcBuffer(
    1) = Floor(Output(0) / 256)
        TxPlcBuffer(
    2) = Output(0) - 256 * TxPlcBuffer(1)

        TxPlcBuffer(
    3) = Floor(Output(1) / 256)
        TxPlcBuffer(
    4) = Output(1) - 256 * TxPlcBuffer(3)

        TxPlcBuffer(
    5) = Floor(Output(2) / 256)
        TxPlcBuffer(
    6) = Output(2) - 256 * TxPlcBuffer(5)

        TxPlcBuffer(
    7) = Floor(Output(3) / 256)
        TxPlcBuffer(
    8) = Output(3) - 256 * TxPlcBuffer(7)

        TxPlcBuffer(
    9) = Floor(Output(4) / 256)
        TxPlcBuffer(
    10) = Output(4) - 256 * TxPlcBuffer(9)

        TxPlcBuffer(
    11) = Floor(Output(5) / 256)
        TxPlcBuffer(
    12) = Output(5) - 256 * TxPlcBuffer(11)

        TxPlcBuffer(
    13) = Floor(Output(6) / 256)
        TxPlcBuffer(
    14) = Output(6) - 256 * TxPlcBuffer(13)

        TxPlcBuffer(
    15) = Floor(Output(7) / 256)
        TxPlcBuffer(
    16) = Output(7) - 256 * TxPlcBuffer(15)
          
        NbWrite = JPHIDstreams.BulkTransfer(JPoutEndpoint,TxPlcBuffer,JPoutEndpoint.MaxPacketSize,
    500)
        
    'If NbWrite = -1 Then JPConnected = False
       
      
    End If

    End Sub
    Sub ConvertSignedByteToUnsigned(b As Byte) As Int
       
    Return Bit.AND(b, 0xFF)
    End Sub
    Sub ConnectJP
        
    Dim usbdevices() As UsbDevice
      usbdevices = manager.GetDevices

      
    'Iterate over devices and find the correct one
      For i = 0 To usbdevices.Length - 1

          
    Dim ud As UsbDevice
          ud = usbdevices(i)
          
    Log(ud)
          
    Log(ud.InterfaceCount)
          
    'Iterate over interfaces
          For a = 0 To ud.InterfaceCount - 1
            
    Dim inter As UsbInterface
            inter = ud.GetInterface(a) 
         
            
    If ud.VendorId = VID AND ud.ProductId = PID Then
                
    'found our device and interface
                JPdevice = ud
                JPinterface = inter
               
                
    'Find correct endpoints
                For b = 0 To JPinterface.EndpointCount - 1
                  
    Dim endpoint As UsbEndpoint
                 
    Log (JPinterface.EndpointCount)
                  endpoint = JPinterface.GetEndpoint(b)
                  
    ' And claim it
                  If endpoint.Type = manager.USB_ENDPOINT_XFER_INT Then
                      
    If endpoint.Direction = manager.USB_DIR_IN Then
                        JPinEndpoint = endpoint
                        
    Log(JPinEndpoint.MaxPacketSize)
                      
    Else If endpoint.Direction = manager.USB_DIR_OUT Then
                        JPoutEndpoint = endpoint
                        
    Log(JPoutEndpoint.MaxPacketSize)
                      
    End If
                  
    End If
                
    Next
            
    End If
          
    Next
        
    Next
     
        
    Try
        manager.RequestPermission(JPdevice)
        
    If manager.HasPermission(JPdevice) Then
           
            JPHIDstreams = manager.OpenDevice(JPdevice, JPinterface, 
    True)
            
    Log("Connected")
            JPConnected = 
    True
            Bt1.Enabled = 
    True
        
    End If
        
    Catch
            JPConnected = 
    False
            Bt1.Enabled = 
    False
        
    End Try
    End Sub
    Sub ConnectJoystick
      
    Dim usbdevices() As UsbDevice
      usbdevices = manager.GetDevices

      
    'Iterate over devices and find the correct one
      For i = 0 To usbdevices.Length - 1

          
    Dim ud As UsbDevice
          ud = usbdevices(i)
          
    Log(ud)
          
    Log(ud.InterfaceCount)
          
    'Iterate over interfaces
          For a = 0 To ud.InterfaceCount - 1
            
    Dim inter As UsbInterface
            inter = ud.GetInterface(a)

            
    If inter.InterfaceClass = 3 AND inter.InterfaceSubclass = 0 AND ud.VendorId <> VID AND ud.ProductId <> PID Then 'HID interface
            'found our device and interface
                device = ud
                interface = inter
                JoyVID = ud.VendorId
                JoyPID = ud.ProductId
              
                
    'Find correct endpoints
                For b = 0 To interface.EndpointCount - 1
                  
    Dim endpoint As UsbEndpoint
                 
    Log (interface.EndpointCount)
                  endpoint = interface.GetEndpoint(b)
                  
    ' And claim it
                  If endpoint.Type = manager.USB_ENDPOINT_XFER_INT Then
                      
    If endpoint.Direction = manager.USB_DIR_IN Then
                        inEndpoint = endpoint
                        
    Log(inEndpoint.MaxPacketSize)
                      
    Else If endpoint.Direction = manager.USB_DIR_OUT Then
                        outEndpoint = endpoint
                        
    Log(outEndpoint.MaxPacketSize)
                      
    End If
                  
    End If
                
    Next
            
    End If
          
    Next
        
    Next
        
    Try
        manager.RequestPermission(device)
        
    If manager.HasPermission(device) Then  
          
            HIDstreams = manager.OpenDevice(device, interface, 
    True)
            JoystickConnected = 
    True
            
    Log("Connected")      
        
    End If
        
    Catch
            JoystickConnected = 
    False
        
    End Try
    End Sub
     
  20. Jipy

    Jipy New Member Licensed User

    Many, many Thanks,

    This will be a Great help, i have already downloaded & installed the USBlizer software, so i can begin to take a look at your code; i will keep u aware about my findings with the Extreme 3D pro joystick.

    Thanks again

    Jipy
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice