Straight is designed to ease converting deviationTx model.ini files
from one transmitter to another. You can get usage information with
Switches and Sources
The configuration file is another
.ini file. Each options name is
an input switch or source name. The option value can also be a switch
or source name.
In this case, a "switch" is just the name of a switch as used in the
transmitter configuration - something like
AIL DR or
FMODE. Note that it does not have a position indicator. Either name
or value can negated if you wish to invert the sense of the switch, so that
HOLD=!RUD DR would cause
RUD DR0 to act as a hold when
normally, and would also be handled properly in toggle icons and the
[safety] section, but not as a trim switch, as that behavior is not
set in the model config file.
A "source" is a switch name with a position indicator, like
Switches, not Sources
For the most part, you should use switches instead of sources. That
will cause all references to a switch in the model file to be
converted. Using a just a source - for instance,
RUD DR1=HOLD0 to
convert a switch will occurrences of the switch in a toggle icon or as
a trim switch to be missed, as well as any occurrences of
RUD DR0 or
You can use switches to override some mappings. For instance,
DR=!HOLD would cause
RUD DR1 to become
!HOLD1, and if you could
RUD DR1=HOLD0 so
RUD DR1 becomes
HOLD0 if you preferred
More usefully, you can use sources to handle mapping 3-way switches to
multiple 2-way switches, or vice versa. For instance, to map the three
modes from some other transmitter to the 7e, you could just use
FMODE2=HOLD1. That would leave
FMODE1 alone, but let
you trigger whatever was on
FMODE2 via the
HOLD1 switch. This is
not recommened - you should have a real hold on all aircraft!
Or for the 6, you could map
GEAR=MIX along with
ELE DR1=MIX2 so
MIX1 are used in place of the
You can also use variables for the option name or value, along with any negation required. When a switch in the model file is mapped to a variable, the variable will be looked up and that will be used.
Using variables as function names will allow you to assign switches to the functions you want, then specify which switches provide those functions when you convert a model file.
The following variables will be added based on the input model file. They will be overridden by values in your config.
rud dr- the switches used to change those channels rates.
stunt- the switch used to change the throttle curve. This is typically used to put collective pitch helicopters into "stunt" mode.
hold- the throttle safety switch.
timer- the first timer reset switch.
In additions, the protocol will be checked, and the following variables will be assigned to switches if they are used.
fmode- If the protocol is unrecognized then channel five, which is used to set flight modes by a number of flight control boards and hobby-grade quads, will be checked.
light- Turn the lights on/off. Possibly an analog source that controls intensity or blink rate.
flip- Enable flip mode.
still- Take a still picture on transition.
video- Start/stop video playback on transition.
headless- Enable headless mode.
The default file
The idea is to set up a config file (the
--help flag will tell you
where it should be on your OS) that describes how you use your
transmitter(s). If you only have one transmitter, don't use any
[section] lines, as the unnamed section will be used by default. If
you have more than one transmitter, you can use that section for the
most common one, or for shared options. You would then use either the
--section option to use a different section, or
--extra to use
other sections to add or override values in the default section.
The values in the file should use variables naming the function you want to convert. Given a model file and the description of what the switches do, add command line mappings to convert those switches to the appropriate variables in your config file.
For instance, my default config is for my Devo 6, and uses:
hold=GEAR timer=MIX2 rate=DR
Then, to convert a model file using my standard Devo 10 setup, I'd do:
straight devo10.ini devo6.ini "AIL DR=rate" "!RUD DR=hold" "ELE DR1=timer"
No default file
-d option turns skips loading the default
file. This can be used if a model is mostly right, but you want to
make one change. For instance, I use
RUD DR0 as a hold switch,
RUD DR1 initializes multirotor flight controllers. Some
people would prefer that the other way around, so they can do:
straight mwm.ini fixed.ini "RUD DR=!RUD DR"
to invert the switch usage.
Don't. If you have a Windows box or a Mac, just download the binary builds. If you have a Unix or Linux system, it's actually easier to set up a VirtualBox VM to run the windows binary on.
If you really have to build it, go through the following steps:
Install the fossil dscm. This is probably in your systems package system, so use that if possible. If not - fossil is easy to build from source.
clone & open the repository:
$ fossil clone https://chiselapp.com/user/mwm/repository/straight straight.fossil $ mkdir straight $ cd straight $ fossil open ../straight.fossil
Download the stack build tool and copy it to your path. This is probably not in your systems package system.
Build & install the straight binary. This should tell you where it put the binary.
$ stack build --copy-bins
This uses the tool shelltest tool to run shell tests. It can be
installed by doing
stack install shelltestrunner. You can then run
the all the tests in the test directory with:
$ cd tests $ shelltest .
You can run the tests using a version built with the stack exec command like so:
$ stack exec shelltest .