Board index FlightGear Support Hardware

speedlink black widow driver

Joysticks, pedals, monitors.

speedlink black widow driver

Postby Couchflyer » Sat Mar 31, 2018 4:43 pm

Can anyone direct me to a working driver for the Speedlink Black Widow SL_6640_SBK joystick to use with Flightgear 2017.3.1 on windows 10?
I have used this joystick for quite a while but suddenly it is no longer working, is not recognised by Flightgear, and does not show up in the joystick configuration tool. Flightgear crashes immediately when the joystick is connected via USB socket.
I have found what is supposed to be the correct driver online and placed it into the joysticks folder but this makes no difference.
I do not have the original installation disk for the Black Widow.
The windows game controller tool says that the joystick is functioning normally
Couchflyer
 
Posts: 23
Joined: Sat Jan 27, 2018 11:23 am

Re: speedlink black widow driver

Postby sim » Mon Apr 02, 2018 3:25 pm

Post the code from the black widow.xml you say you do have.
It may need to be re-written if it is causing FG to crash before you get started.
Plug it into your computer USB socket and run js_demo (no need to run FG) to see if it recognises your black widow stick and carefully note the name. If it does so then Right click on your xml and go to edit to ensure you can find something like
<name type="string">Black Widow Joystick</name> within the code and that matches the exact name given by js_demo.
If FG still crashes the xml may be badly written. Good Luck.

Here is code I found in earlier FG Version
inside you'll find (in red) but you can remove all name codes except the correct name js_demo gives
<name type="string">Microsoft-PC-Joysticktreiber</name>-->
<name type="string">Mega World USB Game Controllers</name>
<name type="string">SpeedLink SL-6640 Black Widow Flight Stick</name>
<name type="string">SL-6640 Black Widow Flightstick</name>


If when flying you find any of the pop up tips irritating such as gui.popupTip("Call ground service for plane repair"); Delete 'em :wink:

Code: Select all
<?xml version="1.0"?>
<!--
Joystick Definition for Speed-Link SL-6640 "Black Widow"
http://www.speed-link.com/?p=2&cat=313&pid=1533&paus=1
4-Axis, 8 Buttons, 8-way Coolie-Hat, Force-Feedback-Vibration (not in FG yet)

My definitions:
type   W#   U#   M#   assign
##################################
Axis   0   0   ?   ailerons
Axis   1   1    ?   elevator
Axis   2   2   ?   throttle
Axis   3   3   ?   rudder
Axis   6   4   ?   horizantal view direction
Axis   7   5   ?   vertical view direction
Btn   0   0   ?   Reset View
Btn   1   1   ?   Gear Up/Down
Btn   2   2   ?   Flaps Up
Btn   3   3   ?   Flaps Down
Btn   4   4   ?   Thrust Reverser
Btn   5   5   ?   Speed Brakes
Btn   6   6   ?   Elevator Trim Backward
Btn   7   7   ?   Elevator Trim Forward

Notes, Todo and Addendum:
- Pressing a button will bring up the gui.popupTip for the representing function
- Addionally Buttons 2 and 3 (Flaps Up/Down)  and Buttons 6 and 7 (Elevator Trim Up/Down) returns a value on screen telling the actual chosen settings
- Button- and Axis-assignment respect the use of civil planes. e.g. Button 0 (aka "Fire Trigger" is resetting actual view instead of fiering off a weapon) and Button 1 is reprensenting Gear Up/Down instead of alternate weapon
- Numbering of axes and buttons for Apple mac not verified
- Numbering of Buttons 6 and 7 respect  how Windows Vista x64 (german) sees the Stick. In  Ubuntu (9.04) Buttons 6 and 7 must be renumbered to 4 and 5.
- Created and (mainly) tested in MS Windows Vista Home premium x64 (german)
- Name-entries respect the lack of Vista (german) to present the correct joystick-name as desired for FGFS
- Representing also the jostick-name as provided in Windows-internal registry entry
- Actually only wheel[0] (most times the nose wheel) is checked for pressure / ground contact (=./gear/gear[0]/wow). In this case retraction of gear is not allowed
      So technically on aircraft with multiple axis (e.g. nose wheel plus wing wheels) can retract the gear as soon as the nose wheel is up but wing wheels are still on ground ;)
- Feel free to remove the lines starting with "gui.popupTip..." if you are annoyed by the messages within FG ;)

Brought to you by Mike Nieber (Callsign: D-SKY1) (c) 2009
This file is released under the GPL license v2 or later.
$Id$
-->

<PropertyList>
   <!--<name type="string">Microsoft-PC-Joysticktreiber</name>-->
   <name type="string">Mega World USB Game Controllers</name>
   <name type="string">SpeedLink SL-6640 Black Widow Flight Stick</name>
   <name type="string">SL-6640 Black Widow Flightstick</name>
   <axis>
      <desc type="string">Aileron</desc>
      <number>
         <windows>0</windows>
         <mac>0</mac>
         <unix>0</unix>
      </number>
      <binding>
         <command>property-scale</command>
         <property>/controls/flight/aileron</property>
         <offset type="double">0.0</offset>
         <factor type="double">1.0</factor>
         <dead-band type="double">0.02</dead-band>
      </binding>
   </axis>
   <axis>
      <desc type="string">Elevator</desc>
      <number>
         <windows>1</windows>
         <mac>1</mac>
         <unix>1</unix>
      </number>
      <binding>
         <command>property-scale</command>
         <property>/controls/flight/elevator</property>
         <offset type="double">0.0</offset>
         <factor type="double">-1.0</factor>
         <dead-band type="double">0.02</dead-band>
      </binding>
   </axis>
   <axis>
      <desc type="string">Throttle</desc>
      <number>
         <windows>2</windows>
         <mac>2</mac>
         <unix>2</unix>
      </number>
      <binding>
         <command>nasal</command>
         <script>controls.throttleAxis()</script>
      </binding>
   </axis>
   <axis>
      <desc type="string">Rudder</desc>
      <number>
         <windows>3</windows>
         <mac>3</mac>
         <unix>3</unix>
      </number>
      <binding>
         <command>property-scale</command>
         <property>/controls/flight/rudder</property>
         <offset type="double">0.0</offset>
         <factor type="double">1.0</factor>
         <dead-band type="double">0.02</dead-band>
      </binding>
   </axis>
   <axis>
      <desc type="string">View Direction</desc>
      <number>
         <windows>6</windows>
         <mac>6</mac>
         <unix>6</unix>
      </number>
      <low>
         <repeatable type="bool">true</repeatable>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               view.panViewDir(1);
               ]]>
            </script>
         </binding>
      </low>
      <high>
         <repeatable type="bool">true</repeatable>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               view.panViewDir(-1);
               ]]>
            </script>
         </binding>
      </high>
   </axis>
   <axis>
      <desc type="string">View Elevation</desc>
      <number>
         <windows>7</windows>
         <mac>7</mac>
         <unix>7</unix>
      </number>
      <low>
         <repeatable type="bool">true</repeatable>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               view.panViewPitch(-1);
               ]]>
            </script>
         </binding>
      </low>
      <high>
         <repeatable type="bool">true</repeatable>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               view.panViewPitch(1);
               ]]>
            </script>
         </binding>
      </high>
   </axis>
   <button n="0">
      <desc type="string">Reset View</desc>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            view.resetView();
            gui.popupTip("View Reset!");
            ]]>
         </script>
      </binding>
   </button>
   <button n="1">
      <desc type="string">Gear</desc>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            var wowprop = getprop("/gear/gear[0]/wow");
            var gearprop = getprop("/controls/gear/gear-down");
            if (wowprop) {
               if (gearprop) {
                  gui.popupTip("No service on ground!");
               } else {
                  gui.popupTip("Call ground service for plane repair ;) !");
               }
            } else {
               if (gearprop) {
                  controls.gearDown(-1);
                  gui.popupTip("Gear UP!");
               } else {
                  controls.gearDown(1);
                  gui.popupTip("Gear DOWN!");
               }
            }
            ]]>
         </script>
      </binding>
      <mod-up>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               controls.gearDown(0);
               ]]>
            </script>
         </binding>
      </mod-up>
   </button>
   <button n="2">
      <desc type="string">Flaps Up</desc>
      <repeatable type="bool">false</repeatable>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            controls.flapsDown(-1);
            var flapsprop = getprop("/controls/flight/flaps");
            if ( flapsprop == 1 ) {
               gui.popupTip("Flaps full extracted!");
            } elsif ( flapsprop == 0 ) {
               gui.popupTip("Flaps full up!");
            } else {
               gui.popupTip(sprintf("Flaps at %i degrees", 100 * flapsprop));
            }
            ]]>
         </script>
      </binding>
      <mod-up>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               controls.flapsDown(0);
               ]]>
            </script>
         </binding>
      </mod-up>
   </button>
   <button n="3">
      <desc type="string">Flaps Down</desc>
      <repeatable type="bool">false</repeatable>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            controls.flapsDown(1);
            var flapsprop = getprop("/controls/flight/flaps");
            if ( flapsprop == 1 ) {
               gui.popupTip("Flaps full extracted!");
            } elsif ( flapsprop == 0 ) {
               gui.popupTip("Flaps full up!");
            } else {
               gui.popupTip(sprintf("Flaps at %i degrees", 100 * flapsprop));
            }
            ]]>
         </script>
      </binding>
      <mod-up>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               controls.flapsDown(0);
               ]]>
            </script>
         </binding>
      </mod-up>
   </button>
   <button n="4">
      <desc type="string">Thrust reverse</desc>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            var i = !getprop("/controls/engines/engine[0]/reverser");
            props.setAll("/controls/engines/engine", "reverser", i);
            gui.popupTip("Thrust Reverser " ~ (i ? "ON!" : "OFF!"));
            ]]>
         </script>
      </binding>
   </button>
   <button n="5">
      <desc type="string">Speed Brake</desc>
      <repeatable type="bool">false</repeatable>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            var i = !getprop("/controls/flight/speedbrake");
            setprop("/controls/flight/speedbrake", i);
            gui.popupTip("Speed Brake " ~ (i ? "ON!" : "OFF!"));
            ]]>
         </script>
      </binding>
   </button>
   <button n="6">
      <desc type="string">Elevator Trim Down</desc>
      <repeatable type="bool">true</repeatable>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            var vertrim = getprop("/controls/flight/elevator-trim");
            controls.elevatorTrim(-0.1);
            gui.popupTip(sprintf("Elevator Trim Down: %i", 1000 * vertrim));
            ]]>
         </script>
      </binding>
      <mod-up>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               controls.elevatorTrim(0);
               ]]>
            </script>
         </binding>
      </mod-up>
   </button>
   <button n="7">
      <desc type="string">Elevator Trim Up</desc>
      <repeatable type="bool">true</repeatable>
      <binding>
         <command>nasal</command>
         <script>
            <![CDATA[
            var vertrim = getprop("/controls/flight/elevator-trim");
            controls.elevatorTrim(0.1);
            gui.popupTip(sprintf("Elevator Trim Up: %i", 1000 * vertrim));
            ]]>
         </script>
      </binding>
      <mod-up>
         <binding>
            <command>nasal</command>
            <script>
               <![CDATA[
               controls.elevatorTrim(0);
               ]]>
            </script>
         </binding>
      </mod-up>
   </button>
</PropertyList>
User avatar
sim
 
Posts: 1431
Joined: Tue Jun 30, 2009 3:13 pm
Location: Shropshire England
Callsign: Fly4Fun
Version: 0.9.10 up
OS: 64 Win 10 HD6450


Return to Hardware

Who is online

Users browsing this forum: No registered users and 2 guests