<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://knasmusic.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Knaadmin</id>
	<title>KNAS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://knasmusic.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Knaadmin"/>
	<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=Special:Contributions/Knaadmin"/>
	<updated>2026-04-04T12:31:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1641</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1641"/>
		<updated>2025-09-01T01:18:30Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically change things on the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like [[The Ekdahl FAR - Changing the string#Bridge heights|changing bridge heights]], lowering or raising the [[The Ekdahl FAR - Mute#Adjusting the mute|mutes]] or [[The Ekdahl FAR - Bowing jack#Adjusting the bowing jack|bowing jack]] and changing the [[The Ekdahl FAR - Pickup|pickup height]]. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability, and cost. Standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
Install TyTools as indicated on their website and [https://downgit.github.io/#/home?url=https://github.com/Knaster/EkdahlFar/refs/heads/master/bin/Release/EkdahlFarCB.hex download the latest binary .hex file] and unzip it at your desired location. After installing, start TyCommander, with the Ekdahl FAR plugged into one of the USB ports on your computer you should get a screen similar to this:  &lt;br /&gt;
[[File:TyCommander main.png|center|thumb|905x905px]]&lt;br /&gt;
With the Ekdahl FAR selected, press &amp;quot;upload&amp;quot; and direct the dialog to where you unzipped the .hex-file. Wait a few moments for the upload to complete, the instrument will restart and then you are good to go!    &lt;br /&gt;
&lt;br /&gt;
  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Software tab|The Software tab]]&lt;br /&gt;
|[[The Ekdahl FAR - Command language|Command language]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1640</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1640"/>
		<updated>2025-08-31T23:27:32Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically change things on the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like [[The Ekdahl FAR - Changing the string#Bridge heights|changing bridge heights]], lowering or raising the [[The Ekdahl FAR - Mute#Adjusting the mute|mutes]] or [[The Ekdahl FAR - Bowing jack#Adjusting the bowing jack|bowing jack]] and changing the [[The Ekdahl FAR - Pickup|pickup height]]. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability, and cost. Standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
Install TyTools as indicated on their website and [https://downgit.github.io/#/home?url=https://github.com/Knaster/EkdahlFar/refs/heads/master/bin/Release/EkdahlFarCB.hex download the latest binary .hex file] and unzip it at your desired location. After installing, start TyCommander, with the Ekdahl FAR plugged into one of the USB ports on your computer you should get a screen similar to this:  &lt;br /&gt;
[[File:TyCommander main.png|center|thumb|905x905px]]&lt;br /&gt;
With the Ekdahl FAR selected, press &amp;quot;upload&amp;quot; and direct the dialog to where you unzipped the .hex-file. Wait a few moments for the upload to complete, the instrument will restart and then you are good to go!    &lt;br /&gt;
&lt;br /&gt;
  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Software tab|- The Software tab]]&lt;br /&gt;
|[[The Ekdahl FAR - Command language|Command language]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1639</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1639"/>
		<updated>2025-08-31T23:22:35Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** https://www.knasmusic.com|Knas website&lt;br /&gt;
** https://www.knasmusic.com/forum|Forum&lt;br /&gt;
* The Ekdahl FAR&lt;br /&gt;
** The Ekdahl FAR|- Introduction&lt;br /&gt;
** The_Ekdahl_FAR_-_Getting_started|- Getting started&lt;br /&gt;
** The Ekdahl FAR - The Control box|- The Control box&lt;br /&gt;
** The Ekdahl FAR - Basic MIDI Setup|- Basic MIDI Setup&lt;br /&gt;
** The Ekdahl FAR - Tuning|- Tuning&lt;br /&gt;
** The Ekdahl FAR - Limits|- Limits&lt;br /&gt;
** The Ekdahl FAR - Calibrations|- Calibrations&lt;br /&gt;
** The Ekdahl FAR - Changing the string|- Changing the string&lt;br /&gt;
** The Ekdahl FAR - Bowing wheels|- Bowing wheels&lt;br /&gt;
** The Ekdahl FAR - Bowing jack|- The bowing jack&lt;br /&gt;
** The Ekdahl FAR - Mute|- The mute&lt;br /&gt;
** The Ekdahl FAR - Hammer|- The hammer&lt;br /&gt;
** The Ekdahl FAR - Pickup|- The pickup&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration utility&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Overview|- Overview&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Tuning tab|- The Tuning tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Midi tab|- The MIDI tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - CV tab|- The CV tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Advanced tab|- The Advanced tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Statistics tab|- The Statistics tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Software tab|- The Software tab&lt;br /&gt;
** The Ekdahl FAR - Service|Service &amp;amp; Maintenance&lt;br /&gt;
** The Ekdahl FAR - Command langue|Command language&lt;br /&gt;
** The Ekdahl FAR - Command reference|Command reference&lt;br /&gt;
** The Ekdahl FAR - Specifications|Specifications&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1638</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1638"/>
		<updated>2025-08-31T23:22:12Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** https://www.knasmusic.com|Knas website&lt;br /&gt;
** https://www.knasmusic.com/forum|Forum&lt;br /&gt;
* The Ekdahl FAR&lt;br /&gt;
** The Ekdahl FAR|- Introduction&lt;br /&gt;
** The_Ekdahl_FAR_-_Getting_started|- Getting started&lt;br /&gt;
** The Ekdahl FAR - The Control box|- The Control box&lt;br /&gt;
** The Ekdahl FAR - Basic MIDI Setup|- Basic MIDI Setup&lt;br /&gt;
** The Ekdahl FAR - Tuning|- Tuning&lt;br /&gt;
** The Ekdahl FAR - Limits|- Limits&lt;br /&gt;
** The Ekdahl FAR - Calibrations|- Calibrations&lt;br /&gt;
** The Ekdahl FAR - Changing the string|- Changing the string&lt;br /&gt;
** The Ekdahl FAR - Bowing wheels|- Bowing wheels&lt;br /&gt;
** The Ekdahl FAR - Bowing jack|- The bowing jack&lt;br /&gt;
** The Ekdahl FAR - Mute|- The mute&lt;br /&gt;
** The Ekdahl FAR - Hammer|- The hammer&lt;br /&gt;
** The Ekdahl FAR - Pickup|- The pickup&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration utility&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Overview|- Overview&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Tuning tab|- The Tuning tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Midi tab|- The MIDI tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - CV tab|- The CV tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Advanced tab|- The Advanced tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Statistics tab|- The Statistics tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Software tab|- The Software tab&lt;br /&gt;
** The Ekdahl FAR - Service|Service&lt;br /&gt;
** The Ekdahl FAR - Command langue|Command language&lt;br /&gt;
** The Ekdahl FAR - Command reference|Command reference&lt;br /&gt;
** The Ekdahl FAR - Specifications|Specifications&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1637</id>
		<title>The Ekdahl FAR</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1637"/>
		<updated>2025-08-31T23:17:51Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Ekdahl FAR - Overview.jpg|thumb|Ekdahl FAR Overview]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Ekdahl FAR is a string based electro-acoustic instrument whose main way of generating sound is by utilizing a [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] that rubs against the string and by very precisely controlling the speed of the wheel, emphasizing natural overtones in the string. The [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] is situated on a pivot which pushes the wheel into the string with a controllable [[The Ekdahl FAR - Getting started#pressure|pressure]] in order to affect both volume and harmonic content. To further extend the capabilities of the instrument it also has a [[The Ekdahl FAR - Hammer|hammer]], a variable [[The Ekdahl FAR - Mute|mute]] and a electromagnetic [[The Ekdahl FAR - Pickup|pickup]]. While the audio path on The Ekdahl FAR is entirely analog-acoustic, the internals of the instrument is a highly sophisticated network of sensors, motors and a built-in computer running a complex firmware allowing for precision control and interfacing via USB-MIDI, MIDI, CV and USB-Serial.&lt;br /&gt;
&lt;br /&gt;
Like all Knas instruments, the Ekdahl FAR - while a new and somewhat experimental concept - can be used for any regular musical composition and expression, but also allows for deep explorations of naturally occurring overtones within the realms of digital precision control and repeatability. The instrument is designed to perform excellently whether being in an improvisational setting, or being sequenced. All aspects of The Ekdahl FAR can be mapped to respond to any available &#039;&#039;control mechanisms&#039;&#039; (USB, MIDI, CV etc.) and emphasis has been put on configurability and modification both from a software and a hardware perspective.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The hardware&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - The Control box|The Control box]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Basic MIDI Setup|Basic MIDI Setup]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Tuning|Tuning]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Limits|Limits]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Calibrations|Automatic calibrations]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Changing the string|Changing the string]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing wheels|Bowing wheels and changing them]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing jack|The bowing jack]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Mute|The mute]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Pickup|The pickup]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Configuration utility&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Concept and Installation|Concept and Installation]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Overview|Overview]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Tuning tab|The &#039;&#039;Tuning&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Midi tab|The &#039;&#039;MIDI&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - CV tab|The &#039;&#039;CV&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Advanced tab|The &#039;&#039;Advanced&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Statistics tab|The &#039;&#039;Statistics&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Software tab|The &#039;&#039;Software&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appendix&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
[[The Ekdahl FAR - Service|Service]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
&lt;br /&gt;
{{Docnav&lt;br /&gt;
|&lt;br /&gt;
|[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1636</id>
		<title>The Ekdahl FAR - Command language</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1636"/>
		<updated>2025-08-31T23:17:06Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Command language ==&lt;br /&gt;
The Ekdahl FAR is entirely controlled by &#039;&#039;commands&#039;&#039;, these &#039;&#039;commands&#039;&#039; decide everything that the instrument is doing, whether it is playing a melody or changing an internal parameter. &lt;br /&gt;
&lt;br /&gt;
When a &#039;&#039;MIDI message&#039;&#039; is received or a new CV / knob value is read, the &#039;&#039;commands&#039;&#039; associated with it will be internally sent. This can be things like &amp;quot;engage hammer&amp;quot; or &amp;quot;set the fundamental frequency&amp;quot; etc. &lt;br /&gt;
&lt;br /&gt;
Some of the available &#039;&#039;commands&#039;&#039; are mainly used for calibrating and setting up the instrument and are usually saved into the instruments memory, these will be executed whenever the instrument is turned on. &lt;br /&gt;
&lt;br /&gt;
All &#039;&#039;commands&#039;&#039; can be manually invoked via &#039;&#039;USB-Serial&#039;&#039;, in conjunction with certain software this presents an unprecedented level of control and sequenceability.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; are invoked using a &#039;&#039;plain text approach&#039;&#039;, most commands have both a &#039;&#039;long name&#039;&#039; and a &#039;&#039;short name&#039;&#039; which are interchangeable. A &#039;&#039;command&#039;&#039; may have one or more &#039;&#039;parameters&#039;&#039; associated with it, these &#039;&#039;parameters&#039;&#039; can be of different types; 16-bit numbers (values 0 - 65535 or -32767 - 32767), floating point numbers (values with decimals), booleans (0 for &#039;false&#039;, 1 for &#039;true&#039;) and strings (text). Some commands are &#039;&#039;conditional&#039;&#039;, meaning they will only execute if a parameter equates to &#039;1&#039; (&#039;true&#039;). &lt;br /&gt;
&lt;br /&gt;
The way &#039;&#039;commands&#039;&#039; are written in order to be executed is &#039;&#039;commandname:parameter1:parameter2:parameter3 [etc]&#039;&#039;, several commands be executed in sequence by separating them with a comma (&#039;,&#039;), a bunch of commands strung together is called a &#039;&#039;command string&#039;&#039;. If for instance we would like to start the &#039;&#039;bowing wheel&#039;&#039; and set its frequency to 82.5 Hertz we could send the Ekdahl FAR the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1, bowcontrolfrequecy:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;We could also use the &#039;&#039;short names&#039;&#039; for the commands&amp;lt;pre&amp;gt;bmr:1,bcf:82.5&amp;lt;/pre&amp;gt;Both &#039;&#039;bowmotorrun&#039;&#039; and &#039;&#039;bowcontrolfrequency&#039;&#039; takes one &#039;&#039;parameter&#039;&#039; each, &#039;&#039;bowmotorrun&#039;&#039; is &#039;&#039;conditional&#039;&#039; and unless the first &#039;&#039;parameter&#039;&#039; is equal to &#039;1&#039; the motor will not start. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;bowcontrolfrequency&#039;&#039; sets the frequency of the &#039;&#039;bowing wheel&#039;&#039;, the instrument may not execute a &#039;&#039;command&#039;&#039; if it decides that the given &#039;&#039;parameters&#039;&#039; are outside of the working range or they are missing.&lt;br /&gt;
&lt;br /&gt;
To test out a &#039;&#039;command&#039;&#039; you can send it directly to the Ekdahl FAR using the &#039;&#039;Console&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To read up on existing &#039;&#039;commands&#039;&#039;, their &#039;&#039;parameters&#039;&#039; and a brief description you can check the &#039;&#039;Command reference&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Variables, functions and equations ==&lt;br /&gt;
What makes the &#039;&#039;Command language&#039;&#039; truly powerful is the concept of &#039;&#039;variables, functions&#039;&#039; and &#039;&#039;equations&#039;&#039;. All &#039;&#039;parameters&#039;&#039; that take numerical values can use any combination of &#039;&#039;variables, functions&#039;&#039; or &#039;&#039;equations.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For instance, we can use the previous example and instead write our &#039;&#039;command string&#039;&#039; as follows&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1,bowcontrolfrequency:82.5+note*20&lt;br /&gt;
&amp;lt;/pre&amp;gt;This example requires of course that the &#039;&#039;variable&#039;&#039; &#039;&#039;note&#039;&#039; exists in the current context. &lt;br /&gt;
&lt;br /&gt;
===== Variables =====&lt;br /&gt;
There are two types of &#039;&#039;variables&#039;&#039; in the Ekdahl FAR; &#039;&#039;global variables&#039;&#039; and &#039;&#039;event variables&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Global variables&#039;&#039; are variables that are always available and will exist in any context. The &#039;&#039;global variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* notecount - Contains the number of &#039;&#039;MIDI&#039;&#039; keys that are being held down, i.e. all &#039;&#039;Note on messages&#039;&#039; received that haven&#039;t gotten a paired &#039;&#039;Note off message&#039;&#039; yet&lt;br /&gt;
* uv0 - uv9 - These are &#039;&#039;user variables&#039;&#039; and can be set at any point using the &#039;&#039;globaluservariable command&#039;&#039; with the first &#039;&#039;parameter&#039;&#039; being which variable to set (0-9) and the second &#039;&#039;parameter&#039;&#039; being the value (float).&lt;br /&gt;
* e - Contains the constant &#039;&#039;[[wikipedia:E_(mathematical_constant)|e]]&#039;&#039;&lt;br /&gt;
* pi - Contains the constant &#039;&#039;[[wikipedia:Pi|pi]]&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Event variables&#039;&#039; are variables that are set by certain &#039;&#039;MIDI messages&#039;&#039; or when a new value is read on one of the jacks or knobs on the &#039;&#039;Control box&#039;&#039;. The &#039;&#039;Event variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* channel - Set by the &#039;&#039;Note on, Note off, Continuous Controller, Poly after touch, Pitch bend, Channel after touch&#039;&#039; and &#039;&#039;Program change MIDI messages&#039;&#039;&lt;br /&gt;
* note - Set by the &#039;&#039;Note on, Note off&#039;&#039; and &#039;&#039;Poly after touch MIDI messages&#039;&#039;&lt;br /&gt;
* velocity - Set by the &#039;&#039;Note on&#039;&#039; and &#039;&#039;Note off MIDI messages&#039;&#039;&lt;br /&gt;
* pressure - Set by the &#039;&#039;Poly after touch&#039;&#039; and &#039;&#039;Channel after touch MIDI messages&#039;&#039;&lt;br /&gt;
* value - Set by the &#039;&#039;Continuous Controller MIDI message&#039;&#039; and by the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
* pitch - Set by the &#039;&#039;Pitch bend MIDI message&#039;&#039;&lt;br /&gt;
* program - Set by the &#039;&#039;Program change MIDI message&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Functions =====&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be used to change a numerical value or the result of an &#039;&#039;equation&#039;&#039;, the Ekdahl FAR contains both general &#039;&#039;arithmetic functions&#039;&#039; (courtesy of Lewis Van Winkle and the TINYEXPR engine) and &#039;&#039;specialized functions&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;arithmetic functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* abs(x) - Returns the &#039;&#039;[[wikipedia:Absolute_value|absolute value]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* acos(x), asin(x), atan(x), atan2(x, y) - Returns the [[wikipedia:Inverse_trigonometric_functions|&#039;&#039;arc-cos, -sin, -tan&#039;&#039; and &#039;&#039;-tan2&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* atan2(x,y) - Returns the &#039;&#039;[[wikipedia:Atan2|arctan2]]&#039;&#039; of &#039;&#039;x, y&#039;&#039;&lt;br /&gt;
* floor(x), ceil(x) - Returns the [[wikipedia:Floor_and_ceiling_functions|&#039;&#039;floor&#039;&#039; and &#039;&#039;ceiling&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* exp(x) - Returns the &#039;&#039;[[wikipedia:Exponential_function|exponent]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* fac(x) - Returns the &#039;&#039;[[wikipedia:Factorial|factorial]]&#039;&#039; of x&lt;br /&gt;
* ln(x) - Returns the &#039;&#039;[[wikipedia:Natural_logarithm|natural logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* log10(x), log20(x) - Returns the &#039;&#039;[[wikipedia:Logarithm|logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039; using base 10 and 20 respectively&lt;br /&gt;
* ncr(x,y), npr(x,y) - Functions to calculate &#039;&#039;[[wikipedia:Combination|combinations]]&#039;&#039; and &#039;&#039;[[wikipedia:Permutation|permutations]]&#039;&#039;&lt;br /&gt;
* pow(x,y) - Returns &#039;&#039;x^y&#039;&#039;&lt;br /&gt;
* sqrt(x) - Returns the &#039;&#039;[[wikipedia:Square_root|square root]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cos(x), sin(x), tan(x) - Returns the [[wikipedia:Trigonometric_functions|&#039;&#039;cos, sin&#039;&#039; and &#039;&#039;tan&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cosh(x), sinh(x), tanh(x) - Returns the &#039;&#039;[[wikipedia:Hyperbolic_functions|hyperbolic cos, sin and tan]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
The &#039;&#039;specialized functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* bool(x) - Returns 1 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* ibool(x) - Returns 0 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* deadband(x,y) - Returns &#039;&#039;x + y &#039;&#039; if &#039;&#039;x &amp;lt; y&#039;&#039; or &#039;&#039;x - y&#039;&#039; if &#039;&#039;x &amp;gt; y&#039;&#039;. If neither of these statements is true it returns &#039;&#039;0&#039;&#039; - used to create a [[wikipedia:Deadband|deadband]] of &#039;&#039;x&#039;&#039; with the threshold of &#039;&#039;y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be readily used in a &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bmr:1,bcf:&amp;quot;8.17579875 * pow(2, (1/12 * note))&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;The previous statements starts the &#039;&#039;bowing wheel&#039;&#039; and sets the frequency of the wheel to &#039;&#039;8.17579875 * 2^(1/12 * note)&#039;&#039;. A middle &#039;C&#039; according to &#039;&#039;MIDI&#039;&#039; has a &#039;&#039;note value&#039;&#039; of 36, meaning if we substitute &#039;&#039;note&#039;&#039; with 36 we get the equation &#039;&#039;8.17579875 * 2^(1/12 * 36)&#039;&#039; which comes out to &#039;&#039;~65.4&#039;&#039; Hertz.&lt;br /&gt;
&lt;br /&gt;
Note that the first &#039;&#039;parameter&#039;&#039; for &#039;&#039;bcf&#039;&#039; is put in between double quotes (&amp;quot;). This is because the &#039;&#039;pow&#039;&#039;-function requires the use of a comma (&amp;quot;,&amp;quot;) in order to separate in between its two require inputs &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and we need to make sure that the Ekdahl FAR doesn&#039;t mistake that comma for meaning that a new &#039;&#039;command&#039;&#039; is being sent. Single (&#039;) and double (&amp;quot;) quotes can be used and nested in all &#039;&#039;parameters&#039;&#039; and are &amp;lt;u&amp;gt;required&amp;lt;/u&amp;gt; in a lot of circumstances, improper nesting or not using quotes can lead to the instrument not parsing the &#039;&#039;command string&#039;&#039; correctly.&lt;br /&gt;
&lt;br /&gt;
== Return messages ==&lt;br /&gt;
The Ekdahl FAR when connected via &#039;&#039;USB-Serial&#039;&#039; doesn&#039;t only accept &#039;&#039;commands&#039;&#039; but will also send various &#039;&#039;return messages&#039;&#039;. These are prefixed by their &#039;&#039;category&#039;&#039; denoted in brackets (&amp;quot;[]&amp;quot;), the existing categories as of this writing (2025-01-22) are:&lt;br /&gt;
&lt;br /&gt;
* command / cmd - Acknowledges the reception of a command in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* usb - Acknowledges the reception of a &#039;&#039;MIDI message&#039;&#039; over &#039;&#039;USB&#039;&#039; in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* hardware / hw - Signals that a change has been sent to the Ekdahl FAR hardware, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* undefined / un - The message sent is in the &#039;&#039;undefined&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* priority / pri - The message sent is in the &#039;&#039;priority&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* error / err - Signals that an &#039;&#039;error&#039;&#039; has occurred, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* expressionparser / ep - These messages contains debugging information regarding the internal &#039;&#039;expression parser&#039;&#039; and is used for development&lt;br /&gt;
*debug / dbg - These messages contains various debugging information and is used for development&lt;br /&gt;
*help / hlp - Signals that the message is a response to a &#039;&#039;help&#039;&#039;-command being sent to the Ekdahl FAR. These messages are structured so that a receiver, like the &#039;&#039;Configuration utility&#039;&#039;, can parse information about available &#039;&#039;commands&#039;&#039; in the current &#039;&#039;firmware&#039;&#039; and relay it to a user in a structured way.&lt;br /&gt;
* inforequest / irq - Signals that an &#039;&#039;info request&#039;&#039; has been returned. This is a specialized message that is either sent as a response to an &#039;&#039;rqi&#039;&#039;-command or as a &#039;&#039;interrupt&#039;&#039;-message telling the user or receiving software about different parameters in the Ekdahl FAR. These messages follows the same structure as regular &#039;&#039;command message&#039;&#039;s of &#039;&#039;[irq]commandname:parameter1 [etc]&#039;&#039; so that it can be used by a receiving software to keep track of parameter changes&lt;br /&gt;
&lt;br /&gt;
===== Explicitly requesting information =====&lt;br /&gt;
By using the special command &#039;&#039;requestinfo / rqi&#039;&#039; one can request the information stored by a certain &#039;&#039;command&#039;&#039; or a state of the Ekdahl FAR. The &#039;&#039;rqi&#039;&#039;-command is executed in the convention &#039;&#039;rqi:commandname[:optional parameters]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
To go back to our example of setting the bowing frequency using the &#039;&#039;bowcontrolfrequency&#039;&#039;-command we can ask the Ekdahl FAR what the bowing frequency is set to by writing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:bowcontrolfrequency&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return value would be something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bcf:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;Where &#039;[irq]&#039; denotes that the message returned is in the &#039;&#039;info request-&#039;&#039;category, that it pertains to the command &#039;&#039;bcf&#039;&#039; and has the value &#039;&#039;82.5&#039;&#039;. Note that the returned &#039;&#039;command&#039;&#039; sent by an &#039;&#039;rqi&#039;&#039;-command always uses the &#039;&#039;short name&#039;&#039; in order to preserve bandwidth.&lt;br /&gt;
&lt;br /&gt;
Most commands do not require any &#039;&#039;parameters&#039;&#039; when using the &#039;&#039;rqi&#039;&#039;-command. The &#039;&#039;adcread&#039;&#039;-command is an example of a &#039;&#039;command&#039;&#039; that &amp;lt;u&amp;gt;does&amp;lt;/u&amp;gt; require a &#039;&#039;parameter&#039;&#039; when used with &#039;&#039;rqi&#039;&#039;. The &#039;&#039;adcread&#039;&#039; command returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; in the &#039;&#039;Control box&#039;&#039;, because there are 8 different channels the first &#039;&#039;parameter&#039;&#039; sets which channel to return the data for, hence executing the &#039;&#039;command&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:adcr:3&lt;br /&gt;
&amp;lt;/pre&amp;gt;will return the last data read on &#039;&#039;analog-to-digital convert&#039;&#039; channel 3.&lt;br /&gt;
&lt;br /&gt;
== MIDI mapping ==&lt;br /&gt;
To change how a certain &#039;&#039;MIDI message&#039;&#039; interacts with the Ekdahl FAR we need to change the &#039;&#039;commands&#039;&#039; or &#039;&#039;parameters&#039;&#039; sent when the message is received. The &#039;&#039;command&#039;&#039; responsible for mapping &#039;&#039;command strimgs&#039;&#039; to different &#039;&#039;MIDI messages&#039;&#039; is &#039;&#039;midieventhandler&#039;&#039; or &#039;&#039;mev&#039;&#039; for short. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;mev&#039;&#039; is the type of &#039;&#039;MIDI message&#039;&#039; that we want to remap&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;noteon&#039;&#039; - Note on&lt;br /&gt;
* &#039;&#039;noteoff -&#039;&#039; Note off&lt;br /&gt;
* &#039;&#039;pat -&#039;&#039; Poly after touch&lt;br /&gt;
* &#039;&#039;cat&#039;&#039; - Channel after touch&lt;br /&gt;
* &#039;&#039;pb&#039;&#039; - Pitch bend&lt;br /&gt;
* &#039;&#039;pc&#039;&#039; - Program change&lt;br /&gt;
* &#039;&#039;cc&#039;&#039; - Continuous controller&lt;br /&gt;
&lt;br /&gt;
The second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039; that is to be associated with the &#039;&#039;MIDI Message&#039;&#039; - with the exception of the &#039;&#039;cc&#039;&#039;-type, here the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; (0 - 127) and the &amp;lt;u&amp;gt;third&amp;lt;/u&amp;gt; &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We can of course use the &#039;&#039;rqi&#039;&#039;-command to check the current mapping, below we are asking what the current &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;pitch bend&#039;&#039; &#039;&#039;MIDI message&#039;&#039; is&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:pb&lt;br /&gt;
&amp;lt;/pre&amp;gt;This may return something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bchsh:pitch*4&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return message tells us that the &#039;&#039;pitch bend MIDI message&#039;&#039; is executing a &#039;&#039;bchsh&#039;&#039;-command with the parameter &#039;&#039;pitch*4&#039;&#039;. Looking in the &#039;&#039;command reference&#039;&#039; we can see that &#039;&#039;bchsh&#039;&#039; is the &#039;&#039;short name&#039;&#039; of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command which shifts the frequency of the &#039;&#039;bowing wheel&#039;&#039; from the current frequency, the first (and only) parameter sets how much we want to shift it (depends on the &#039;&#039;bowcontrolharmonicshiftrange command&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
If we look in the list of &#039;&#039;[[The Ekdahl FAR - Command langue#Variables|variables]]&#039;&#039; above we can see that the &#039;&#039;pitch bend MIDI message&#039;&#039; will set the &#039;&#039;pitch variable&#039;&#039; which is indeed used. Now what is the &#039;&#039;&#039;*4&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; all about? Well the &#039;&#039;bchsh&#039;&#039;-command expects a &#039;&#039;16-bit signed&#039;&#039; value, meaning that a full &#039;&#039;harmonic shift&#039;&#039; downwards is equal to -32767, a full &#039;&#039;harmonic shift&#039;&#039; upwards is 32767 and no &#039;&#039;harmonic shift&#039;&#039; is 0. The &#039;&#039;pitch bend MIDI message&#039;&#039; however is only 14-bits, meaning its range is -8192 to 8192, so in order to be able to use the entire range we have to multiply &#039;&#039;pitch&#039;&#039; by 4.&lt;br /&gt;
&lt;br /&gt;
This whole thing about number of bits can seem confusing but in the end it&#039;s all about how fine control you have over things; the more possible values, the more detailed control. In fact, most &#039;&#039;MIDI&#039;&#039; values are only 7-bit (!) meaning a range of 0 - 127. While this may sound like a lot of detail for something like a volume control, it is not even close to enough resolution to for instance set the &#039;&#039;bowing speed&#039;&#039;. Imagine that our lowest possible note frequency is 50 Hz, that means that with a 0-127 range we can only go from 50 Hz to 127 + 50 = 177 Hz - and with no decimals! This meager range and the very coarse steps of only 1 Hz would mean the instrument would never be able to sound in tune and wouldn&#039;t even have two octaves of range. The idea of limiting the Ekdahl FAR to what is possible through &#039;&#039;MIDI&#039;&#039; seemed like a poor choice thus it was decided that &amp;lt;u&amp;gt;most&amp;lt;/u&amp;gt; parameters will instead be 16-bit.&lt;br /&gt;
&lt;br /&gt;
Now lets look at a more complex example, the &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; &#039;&#039;Note On MIDI message&#039;&#039;. On a stock Ekdahl FAR, executing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:noteon&lt;br /&gt;
&amp;lt;/pre&amp;gt;Will return something like&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:note,bmr:1,bpid:1,bpe:1,se:(velocity*512)*(1-notecount),bcsm:0&#039;&amp;lt;/pre&amp;gt;As can be seen, there&#039;s a lot of stuff going on here! First of all, notice that everything after &#039;&#039;mev:noteon:&#039;&#039; is situated in between single quotes (&#039;) - this is &amp;lt;u&amp;gt;absolutely crucial&amp;lt;/u&amp;gt; for the Ekdahl FAR to know that everything within those last two quotes is part of the last &#039;&#039;parameter&#039;&#039; of the &#039;&#039;mev&#039;&#039;-command.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s break down what happens when this &#039;&#039;MIDI message&#039;&#039; is received, i.e. when a &#039;&#039;MIDI&#039;&#039; key is pressed down:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;m:0&#039;&#039; - Sets &#039;&#039;module&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;b:0&#039;&#039; - Sets &#039;&#039;bow&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;bchb:note&#039;&#039; - Invokes the &#039;&#039;bowcontrolharmonicbase-&#039;&#039;command with the first &#039;&#039;parameter&#039;&#039; set to the &#039;&#039;variable note&#039;&#039;. &lt;br /&gt;
# &#039;&#039;bmr:1&#039;&#039; - Sets the &#039;&#039;bowmotorrun&#039;&#039;-command to &#039;1&#039;, starting the &#039;&#039;bow motor&#039;&#039;&lt;br /&gt;
# &#039;&#039;bpid:1&#039;&#039; - Sets the &#039;&#039;bowpid&#039;&#039;-command to &#039;1&#039;, making sure the &#039;&#039;PID&#039;&#039; is used&lt;br /&gt;
# &#039;&#039;bpe:1&#039;&#039; - Sets the &#039;&#039;bowpressureengage&#039;&#039; to &#039;1&#039; which moves the &#039;&#039;bowing jack&#039;&#039; to the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
# &#039;&#039;se:(velocity*512)*(1-notecount)&#039;&#039; - Executes the &#039;&#039;solenoidengage&#039;&#039;-command with the value &#039;&#039;(velocity*512)*(1-notecount)&#039;&#039;&lt;br /&gt;
# &#039;&#039;bcsm:0&#039;&#039; - Sets the &#039;&#039;bowcontrolspeedmode&#039;&#039; to &#039;1&#039; which enables automatic shut down of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
The first two &#039;&#039;commands&#039;&#039; are the &#039;&#039;module&#039;&#039;- and &#039;&#039;bow-&#039;&#039;command. These &#039;&#039;commands&#039;&#039; are is intended for future versions of the Ekdahl FAR that may contain more than one string or more than one bow per string. For now &#039;&#039;0&#039;&#039; is the only valid &#039;&#039;parameter&#039;&#039; value that will be accepted for either &#039;&#039;command&#039;&#039;.&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowcontrolharmonicbase&#039;&#039;-command sets the speed of the &#039;&#039;bowing wheel&#039;&#039; to its corresponding &#039;&#039;harmonic number&#039;&#039; but also takes into account its &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;base&#039;&#039;&#039; which is the &#039;&#039;MIDI key&#039;&#039; that is mapped to &#039;&#039;harmonic number 0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After this the bowing motor is started and the &#039;&#039;PID&#039;&#039; is turned, now the instrument will try and make sure that the &#039;&#039;bowing wheel&#039;&#039; is at the right speed.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowing jack&#039;&#039; is raised to the &#039;&#039;engage position&#039;&#039;, any added &#039;&#039;pressure modifiers&#039;&#039; will also be taken into account - once the &#039;&#039;bowing jack&#039;&#039; has reached its intended position the &#039;&#039;bowing wheel&#039;&#039; should (hopefully) make contact with the string and the Ekdahl FAR will start to produce sounds.&lt;br /&gt;
&lt;br /&gt;
After this we have the &#039;&#039;solenoidengage&#039;&#039;-command &#039;&#039;command&#039;&#039; that engages the &#039;&#039;hammer&#039;&#039; and uses the first and only &#039;&#039;parameter&#039;&#039; as the force used. Like with most &#039;&#039;commands&#039;&#039; the &#039;&#039;se&#039;&#039;-command is 16-bit (0 - 65535) but the &#039;&#039;MIDI velocity variable&#039;&#039; is 7-bit (0 - 127), so to get the &#039;&#039;velocity&#039;&#039; variable to cover the entire range it needs to be multiplied with 512. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;*(1-notecount)&#039;&#039;&#039;-part is a way of making sure that we are using &#039;&#039;legato&#039;&#039; mode, i.e. that the &#039;&#039;hammer&#039;&#039; is not triggered if a key is already held down when a new key is pressed. The &#039;&#039;notecount&#039;&#039;-variable contains the number of &#039;&#039;MIDI&#039;&#039; notes currently held down. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s postulate that the Ekdahl FAR is tuned to a &#039;C&#039; at 65.4Hz and has its &#039;&#039;base&#039;&#039; set to middle &#039;C&#039; (&#039;&#039;MIDI key&#039;&#039; no 36). We are using the equal-temperament 12-tone scale and the Ekdahl FAR is set to respond to &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;MIDI channels&#039;&#039; (omni). Without having previously held any keys we press the middle &#039;C&#039; (&#039;&#039;note&#039;&#039; value 36) as hard as possible (&#039;&#039;velocity&#039;&#039; value &#039;&#039;127&#039;&#039;) on &#039;&#039;MIDI channel&#039;&#039; number 1 (&#039;&#039;channel&#039;&#039; value of 0). The Ekdahl FAR will get a &#039;&#039;note on MIDI message&#039;&#039; sent to it and from our mapping it will create the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:36,bmr:1,bpid:1,bpe:1,se:(127*512)*(1-0),bcsm:0&#039;&amp;lt;/pre&amp;gt;What has happened here is that all &#039;&#039;variables&#039;&#039; have been replaced with the values sent by the &#039;&#039;MIDI message&#039;&#039;. Since those &#039;&#039;commands&#039;&#039; that doesn&#039;t have any &#039;&#039;variables&#039;&#039; with them will execute just as previously, only those &#039;&#039;commands&#039;&#039; whos &#039;&#039;parameters&#039;&#039; have changed will be explained:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 36&#039;&#039; - The &#039;&#039;bowcontrolharmonicbase&#039;&#039; gets a value of &#039;&#039;36&#039;&#039; (middle &#039;C&#039;), because &#039;&#039;harmonic number 0&#039;&#039; is mapped to this key it will set the &#039;&#039;bowing wheel&#039;&#039; frequency to the &#039;&#039;fundamental&#039;&#039;; &#039;&#039;65.4&#039;&#039; Hertz&lt;br /&gt;
# &#039;&#039;se: (127*512)*(1-0)&#039;&#039; - the value of &#039;&#039;127&#039;&#039; comes from the &#039;&#039;velocity&#039;&#039;-variable, &#039;&#039;127 * 512 = 65024&#039;&#039; which is awfully close to a maximum hammer force of 65535. Since no previous notes were held down &#039;&#039;notecount&#039;&#039;  is equal to &#039;&#039;0&#039;&#039; and thus &#039;&#039;65024 * 1 = 65024&#039;&#039;. The hammer is engaged with near maximum force.&lt;br /&gt;
So the result is that we have set the speed of the &#039;&#039;bowing motor&#039;&#039; and we have engaged the &#039;&#039;hammer&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Now imagine that without releasing this key, we press another &#039;C&#039; one octave above but at half the velocity. The Ekdahl FAR creates the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]mev:noteon:&#039;m:0,b:0,bchb:48,bmr:1,bpid:1,bpe:1,se:(63*512)*(1-1),bcsm:0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Now we can see that the &#039;&#039;note&#039;&#039; variable is &#039;&#039;48&#039;&#039; because the &#039;C&#039; one octave up is exactly 12 keys above the first, the &#039;&#039;velocity&#039;&#039; variable has changed to &#039;&#039;63&#039;&#039; since we hit it with a lighter touch - and because we are &amp;lt;u&amp;gt;still holding the first key down&amp;lt;/u&amp;gt; &#039;&#039;notecount&#039;&#039; is equal to &#039;&#039;1&#039;&#039;. Here&#039;s what happens&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 48&#039;&#039; - Due to the &#039;&#039;base&#039;&#039; being set to &#039;&#039;36&#039;&#039; the &#039;&#039;harmonic number&#039;&#039; is set to &#039;&#039;48 - 36 = 12&#039;&#039;. Because we are using a 12-tone scale &#039;&#039;harmonic number 12&#039;&#039; is exactly one octave above the &#039;&#039;fundamental&#039;&#039; thus the speed of the &#039;&#039;bowing wheel&#039;&#039; is set to &#039;&#039;65.4 * 2 = 130.8&#039;&#039; Hertz.&lt;br /&gt;
# &#039;&#039;se: (63*512)*(1-1)&#039;&#039; - So &#039;&#039;63 * 512 = 32256&#039;&#039; and &#039;&#039;1 - 1 = 0&#039;&#039; thus &#039;&#039;32256 * 0 = 0&#039;&#039;. When the &#039;&#039;solenoidengage&#039;&#039;-command gets a &#039;&#039;parameter&#039;&#039; of &#039;&#039;0&#039;&#039; it will not engage the &#039;&#039;hammer&#039;&#039; - so the &#039;&#039;hammer&#039;&#039; doesn&#039;t strike&lt;br /&gt;
So it can be seen that with quite rudimentary math we can accomplish a whole lot of things here. Note also that even though the &#039;&#039;note on MIDI message&#039;&#039; also sets the &#039;&#039;channel&#039;&#039;-variable we never use it in this example - plenty of opportunity to make something weird happen depending on the &#039;&#039;MIDI channel&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
== CV Mapping ==&lt;br /&gt;
&#039;&#039;CV Mapping&#039;&#039; works exactly like the &#039;&#039;MIDI mapping&#039;&#039; with the difference that the command for setting the &#039;&#039;CV mapping&#039;&#039; is different and that &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; events pertaining to this &amp;lt;u&amp;gt;only&amp;lt;/u&amp;gt; change the &#039;&#039;value&#039;&#039;-variable. The &#039;&#039;command&#039;&#039; for changing the &#039;&#039;CV mapping&#039;&#039; is &#039;&#039;adccommandmap&#039;&#039; or &#039;&#039;acm&#039;&#039;, it take two &#039;&#039;parameters&#039;&#039;; &#039;&#039;channel&#039;&#039; and &#039;&#039;command string&#039;&#039;. We retrieve the &#039;&#039;command string&#039;&#039; for channel &#039;&#039;0&#039;&#039; which reads the sum of the &#039;&#039;harm. v/oct&#039;&#039;-jack and the &#039;&#039;harmonic&#039;&#039;-knob by sending a command of&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:acm:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;The &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; response will be something like&lt;br /&gt;
&amp;lt;pre&amp;gt;[irq]acm:0:&#039;bcha:value/1327.716667-20&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Service|Service]]&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1635</id>
		<title>The Ekdahl FAR - Command language</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1635"/>
		<updated>2025-08-31T23:16:47Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Command language ==&lt;br /&gt;
The Ekdahl FAR is entirely controlled by &#039;&#039;commands&#039;&#039;, these &#039;&#039;commands&#039;&#039; decide everything that the instrument is doing, whether it is playing a melody or changing an internal parameter. &lt;br /&gt;
&lt;br /&gt;
When a &#039;&#039;MIDI message&#039;&#039; is received or a new CV / knob value is read, the &#039;&#039;commands&#039;&#039; associated with it will be internally sent. This can be things like &amp;quot;engage hammer&amp;quot; or &amp;quot;set the fundamental frequency&amp;quot; etc. &lt;br /&gt;
&lt;br /&gt;
Some of the available &#039;&#039;commands&#039;&#039; are mainly used for calibrating and setting up the instrument and are usually saved into the instruments memory, these will be executed whenever the instrument is turned on. &lt;br /&gt;
&lt;br /&gt;
All &#039;&#039;commands&#039;&#039; can be manually invoked via &#039;&#039;USB-Serial&#039;&#039;, in conjunction with certain software this presents an unprecedented level of control and sequenceability.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; are invoked using a &#039;&#039;plain text approach&#039;&#039;, most commands have both a &#039;&#039;long name&#039;&#039; and a &#039;&#039;short name&#039;&#039; which are interchangeable. A &#039;&#039;command&#039;&#039; may have one or more &#039;&#039;parameters&#039;&#039; associated with it, these &#039;&#039;parameters&#039;&#039; can be of different types; 16-bit numbers (values 0 - 65535 or -32767 - 32767), floating point numbers (values with decimals), booleans (0 for &#039;false&#039;, 1 for &#039;true&#039;) and strings (text). Some commands are &#039;&#039;conditional&#039;&#039;, meaning they will only execute if a parameter equates to &#039;1&#039; (&#039;true&#039;). &lt;br /&gt;
&lt;br /&gt;
The way &#039;&#039;commands&#039;&#039; are written in order to be executed is &#039;&#039;commandname:parameter1:parameter2:parameter3 [etc]&#039;&#039;, several commands be executed in sequence by separating them with a comma (&#039;,&#039;), a bunch of commands strung together is called a &#039;&#039;command string&#039;&#039;. If for instance we would like to start the &#039;&#039;bowing wheel&#039;&#039; and set its frequency to 82.5 Hertz we could send the Ekdahl FAR the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1, bowcontrolfrequecy:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;We could also use the &#039;&#039;short names&#039;&#039; for the commands&amp;lt;pre&amp;gt;bmr:1,bcf:82.5&amp;lt;/pre&amp;gt;Both &#039;&#039;bowmotorrun&#039;&#039; and &#039;&#039;bowcontrolfrequency&#039;&#039; takes one &#039;&#039;parameter&#039;&#039; each, &#039;&#039;bowmotorrun&#039;&#039; is &#039;&#039;conditional&#039;&#039; and unless the first &#039;&#039;parameter&#039;&#039; is equal to &#039;1&#039; the motor will not start. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;bowcontrolfrequency&#039;&#039; sets the frequency of the &#039;&#039;bowing wheel&#039;&#039;, the instrument may not execute a &#039;&#039;command&#039;&#039; if it decides that the given &#039;&#039;parameters&#039;&#039; are outside of the working range or they are missing.&lt;br /&gt;
&lt;br /&gt;
To test out a &#039;&#039;command&#039;&#039; you can send it directly to the Ekdahl FAR using the &#039;&#039;Console&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To read up on existing &#039;&#039;commands&#039;&#039;, their &#039;&#039;parameters&#039;&#039; and a brief description you can check the &#039;&#039;Command reference&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Variables, functions and equations ==&lt;br /&gt;
What makes the &#039;&#039;Command language&#039;&#039; truly powerful is the concept of &#039;&#039;variables, functions&#039;&#039; and &#039;&#039;equations&#039;&#039;. All &#039;&#039;parameters&#039;&#039; that take numerical values can use any combination of &#039;&#039;variables, functions&#039;&#039; or &#039;&#039;equations.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For instance, we can use the previous example and instead write our &#039;&#039;command string&#039;&#039; as follows&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1,bowcontrolfrequency:82.5+note*20&lt;br /&gt;
&amp;lt;/pre&amp;gt;This example requires of course that the &#039;&#039;variable&#039;&#039; &#039;&#039;note&#039;&#039; exists in the current context. &lt;br /&gt;
&lt;br /&gt;
===== Variables =====&lt;br /&gt;
There are two types of &#039;&#039;variables&#039;&#039; in the Ekdahl FAR; &#039;&#039;global variables&#039;&#039; and &#039;&#039;event variables&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Global variables&#039;&#039; are variables that are always available and will exist in any context. The &#039;&#039;global variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* notecount - Contains the number of &#039;&#039;MIDI&#039;&#039; keys that are being held down, i.e. all &#039;&#039;Note on messages&#039;&#039; received that haven&#039;t gotten a paired &#039;&#039;Note off message&#039;&#039; yet&lt;br /&gt;
* uv0 - uv9 - These are &#039;&#039;user variables&#039;&#039; and can be set at any point using the &#039;&#039;globaluservariable command&#039;&#039; with the first &#039;&#039;parameter&#039;&#039; being which variable to set (0-9) and the second &#039;&#039;parameter&#039;&#039; being the value (float).&lt;br /&gt;
* e - Contains the constant &#039;&#039;[[wikipedia:E_(mathematical_constant)|e]]&#039;&#039;&lt;br /&gt;
* pi - Contains the constant &#039;&#039;[[wikipedia:Pi|pi]]&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Event variables&#039;&#039; are variables that are set by certain &#039;&#039;MIDI messages&#039;&#039; or when a new value is read on one of the jacks or knobs on the &#039;&#039;Control box&#039;&#039;. The &#039;&#039;Event variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* channel - Set by the &#039;&#039;Note on, Note off, Continuous Controller, Poly after touch, Pitch bend, Channel after touch&#039;&#039; and &#039;&#039;Program change MIDI messages&#039;&#039;&lt;br /&gt;
* note - Set by the &#039;&#039;Note on, Note off&#039;&#039; and &#039;&#039;Poly after touch MIDI messages&#039;&#039;&lt;br /&gt;
* velocity - Set by the &#039;&#039;Note on&#039;&#039; and &#039;&#039;Note off MIDI messages&#039;&#039;&lt;br /&gt;
* pressure - Set by the &#039;&#039;Poly after touch&#039;&#039; and &#039;&#039;Channel after touch MIDI messages&#039;&#039;&lt;br /&gt;
* value - Set by the &#039;&#039;Continuous Controller MIDI message&#039;&#039; and by the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
* pitch - Set by the &#039;&#039;Pitch bend MIDI message&#039;&#039;&lt;br /&gt;
* program - Set by the &#039;&#039;Program change MIDI message&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Functions =====&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be used to change a numerical value or the result of an &#039;&#039;equation&#039;&#039;, the Ekdahl FAR contains both general &#039;&#039;arithmetic functions&#039;&#039; (courtesy of Lewis Van Winkle and the TINYEXPR engine) and &#039;&#039;specialized functions&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;arithmetic functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* abs(x) - Returns the &#039;&#039;[[wikipedia:Absolute_value|absolute value]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* acos(x), asin(x), atan(x), atan2(x, y) - Returns the [[wikipedia:Inverse_trigonometric_functions|&#039;&#039;arc-cos, -sin, -tan&#039;&#039; and &#039;&#039;-tan2&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* atan2(x,y) - Returns the &#039;&#039;[[wikipedia:Atan2|arctan2]]&#039;&#039; of &#039;&#039;x, y&#039;&#039;&lt;br /&gt;
* floor(x), ceil(x) - Returns the [[wikipedia:Floor_and_ceiling_functions|&#039;&#039;floor&#039;&#039; and &#039;&#039;ceiling&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* exp(x) - Returns the &#039;&#039;[[wikipedia:Exponential_function|exponent]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* fac(x) - Returns the &#039;&#039;[[wikipedia:Factorial|factorial]]&#039;&#039; of x&lt;br /&gt;
* ln(x) - Returns the &#039;&#039;[[wikipedia:Natural_logarithm|natural logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* log10(x), log20(x) - Returns the &#039;&#039;[[wikipedia:Logarithm|logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039; using base 10 and 20 respectively&lt;br /&gt;
* ncr(x,y), npr(x,y) - Functions to calculate &#039;&#039;[[wikipedia:Combination|combinations]]&#039;&#039; and &#039;&#039;[[wikipedia:Permutation|permutations]]&#039;&#039;&lt;br /&gt;
* pow(x,y) - Returns &#039;&#039;x^y&#039;&#039;&lt;br /&gt;
* sqrt(x) - Returns the &#039;&#039;[[wikipedia:Square_root|square root]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cos(x), sin(x), tan(x) - Returns the [[wikipedia:Trigonometric_functions|&#039;&#039;cos, sin&#039;&#039; and &#039;&#039;tan&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cosh(x), sinh(x), tanh(x) - Returns the &#039;&#039;[[wikipedia:Hyperbolic_functions|hyperbolic cos, sin and tan]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
The &#039;&#039;specialized functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* bool(x) - Returns 1 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* ibool(x) - Returns 0 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* deadband(x,y) - Returns &#039;&#039;x + y &#039;&#039; if &#039;&#039;x &amp;lt; y&#039;&#039; or &#039;&#039;x - y&#039;&#039; if &#039;&#039;x &amp;gt; y&#039;&#039;. If neither of these statements is true it returns &#039;&#039;0&#039;&#039; - used to create a [[wikipedia:Deadband|deadband]] of &#039;&#039;x&#039;&#039; with the threshold of &#039;&#039;y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be readily used in a &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bmr:1,bcf:&amp;quot;8.17579875 * pow(2, (1/12 * note))&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;The previous statements starts the &#039;&#039;bowing wheel&#039;&#039; and sets the frequency of the wheel to &#039;&#039;8.17579875 * 2^(1/12 * note)&#039;&#039;. A middle &#039;C&#039; according to &#039;&#039;MIDI&#039;&#039; has a &#039;&#039;note value&#039;&#039; of 36, meaning if we substitute &#039;&#039;note&#039;&#039; with 36 we get the equation &#039;&#039;8.17579875 * 2^(1/12 * 36)&#039;&#039; which comes out to &#039;&#039;~65.4&#039;&#039; Hertz.&lt;br /&gt;
&lt;br /&gt;
Note that the first &#039;&#039;parameter&#039;&#039; for &#039;&#039;bcf&#039;&#039; is put in between double quotes (&amp;quot;). This is because the &#039;&#039;pow&#039;&#039;-function requires the use of a comma (&amp;quot;,&amp;quot;) in order to separate in between its two require inputs &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and we need to make sure that the Ekdahl FAR doesn&#039;t mistake that comma for meaning that a new &#039;&#039;command&#039;&#039; is being sent. Single (&#039;) and double (&amp;quot;) quotes can be used and nested in all &#039;&#039;parameters&#039;&#039; and are &amp;lt;u&amp;gt;required&amp;lt;/u&amp;gt; in a lot of circumstances, improper nesting or not using quotes can lead to the instrument not parsing the &#039;&#039;command string&#039;&#039; correctly.&lt;br /&gt;
&lt;br /&gt;
== Return messages ==&lt;br /&gt;
The Ekdahl FAR when connected via &#039;&#039;USB-Serial&#039;&#039; doesn&#039;t only accept &#039;&#039;commands&#039;&#039; but will also send various &#039;&#039;return messages&#039;&#039;. These are prefixed by their &#039;&#039;category&#039;&#039; denoted in brackets (&amp;quot;[]&amp;quot;), the existing categories as of this writing (2025-01-22) are:&lt;br /&gt;
&lt;br /&gt;
* command / cmd - Acknowledges the reception of a command in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* usb - Acknowledges the reception of a &#039;&#039;MIDI message&#039;&#039; over &#039;&#039;USB&#039;&#039; in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* hardware / hw - Signals that a change has been sent to the Ekdahl FAR hardware, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* undefined / un - The message sent is in the &#039;&#039;undefined&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* priority / pri - The message sent is in the &#039;&#039;priority&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* error / err - Signals that an &#039;&#039;error&#039;&#039; has occurred, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* expressionparser / ep - These messages contains debugging information regarding the internal &#039;&#039;expression parser&#039;&#039; and is used for development&lt;br /&gt;
*debug / dbg - These messages contains various debugging information and is used for development&lt;br /&gt;
*help / hlp - Signals that the message is a response to a &#039;&#039;help&#039;&#039;-command being sent to the Ekdahl FAR. These messages are structured so that a receiver, like the &#039;&#039;Configuration utility&#039;&#039;, can parse information about available &#039;&#039;commands&#039;&#039; in the current &#039;&#039;firmware&#039;&#039; and relay it to a user in a structured way.&lt;br /&gt;
* inforequest / irq - Signals that an &#039;&#039;info request&#039;&#039; has been returned. This is a specialized message that is either sent as a response to an &#039;&#039;rqi&#039;&#039;-command or as a &#039;&#039;interrupt&#039;&#039;-message telling the user or receiving software about different parameters in the Ekdahl FAR. These messages follows the same structure as regular &#039;&#039;command message&#039;&#039;s of &#039;&#039;[irq]commandname:parameter1 [etc]&#039;&#039; so that it can be used by a receiving software to keep track of parameter changes&lt;br /&gt;
&lt;br /&gt;
===== Explicitly requesting information =====&lt;br /&gt;
By using the special command &#039;&#039;requestinfo / rqi&#039;&#039; one can request the information stored by a certain &#039;&#039;command&#039;&#039; or a state of the Ekdahl FAR. The &#039;&#039;rqi&#039;&#039;-command is executed in the convention &#039;&#039;rqi:commandname[:optional parameters]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
To go back to our example of setting the bowing frequency using the &#039;&#039;bowcontrolfrequency&#039;&#039;-command we can ask the Ekdahl FAR what the bowing frequency is set to by writing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:bowcontrolfrequency&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return value would be something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bcf:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;Where &#039;[irq]&#039; denotes that the message returned is in the &#039;&#039;info request-&#039;&#039;category, that it pertains to the command &#039;&#039;bcf&#039;&#039; and has the value &#039;&#039;82.5&#039;&#039;. Note that the returned &#039;&#039;command&#039;&#039; sent by an &#039;&#039;rqi&#039;&#039;-command always uses the &#039;&#039;short name&#039;&#039; in order to preserve bandwidth.&lt;br /&gt;
&lt;br /&gt;
Most commands do not require any &#039;&#039;parameters&#039;&#039; when using the &#039;&#039;rqi&#039;&#039;-command. The &#039;&#039;adcread&#039;&#039;-command is an example of a &#039;&#039;command&#039;&#039; that &amp;lt;u&amp;gt;does&amp;lt;/u&amp;gt; require a &#039;&#039;parameter&#039;&#039; when used with &#039;&#039;rqi&#039;&#039;. The &#039;&#039;adcread&#039;&#039; command returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; in the &#039;&#039;Control box&#039;&#039;, because there are 8 different channels the first &#039;&#039;parameter&#039;&#039; sets which channel to return the data for, hence executing the &#039;&#039;command&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:adcr:3&lt;br /&gt;
&amp;lt;/pre&amp;gt;will return the last data read on &#039;&#039;analog-to-digital convert&#039;&#039; channel 3.&lt;br /&gt;
&lt;br /&gt;
== MIDI mapping ==&lt;br /&gt;
To change how a certain &#039;&#039;MIDI message&#039;&#039; interacts with the Ekdahl FAR we need to change the &#039;&#039;commands&#039;&#039; or &#039;&#039;parameters&#039;&#039; sent when the message is received. The &#039;&#039;command&#039;&#039; responsible for mapping &#039;&#039;command strimgs&#039;&#039; to different &#039;&#039;MIDI messages&#039;&#039; is &#039;&#039;midieventhandler&#039;&#039; or &#039;&#039;mev&#039;&#039; for short. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;mev&#039;&#039; is the type of &#039;&#039;MIDI message&#039;&#039; that we want to remap&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;noteon&#039;&#039; - Note on&lt;br /&gt;
* &#039;&#039;noteoff -&#039;&#039; Note off&lt;br /&gt;
* &#039;&#039;pat -&#039;&#039; Poly after touch&lt;br /&gt;
* &#039;&#039;cat&#039;&#039; - Channel after touch&lt;br /&gt;
* &#039;&#039;pb&#039;&#039; - Pitch bend&lt;br /&gt;
* &#039;&#039;pc&#039;&#039; - Program change&lt;br /&gt;
* &#039;&#039;cc&#039;&#039; - Continuous controller&lt;br /&gt;
&lt;br /&gt;
The second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039; that is to be associated with the &#039;&#039;MIDI Message&#039;&#039; - with the exception of the &#039;&#039;cc&#039;&#039;-type, here the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; (0 - 127) and the &amp;lt;u&amp;gt;third&amp;lt;/u&amp;gt; &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We can of course use the &#039;&#039;rqi&#039;&#039;-command to check the current mapping, below we are asking what the current &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;pitch bend&#039;&#039; &#039;&#039;MIDI message&#039;&#039; is&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:pb&lt;br /&gt;
&amp;lt;/pre&amp;gt;This may return something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bchsh:pitch*4&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return message tells us that the &#039;&#039;pitch bend MIDI message&#039;&#039; is executing a &#039;&#039;bchsh&#039;&#039;-command with the parameter &#039;&#039;pitch*4&#039;&#039;. Looking in the &#039;&#039;command reference&#039;&#039; we can see that &#039;&#039;bchsh&#039;&#039; is the &#039;&#039;short name&#039;&#039; of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command which shifts the frequency of the &#039;&#039;bowing wheel&#039;&#039; from the current frequency, the first (and only) parameter sets how much we want to shift it (depends on the &#039;&#039;bowcontrolharmonicshiftrange command&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
If we look in the list of &#039;&#039;[[The Ekdahl FAR - Command langue#Variables|variables]]&#039;&#039; above we can see that the &#039;&#039;pitch bend MIDI message&#039;&#039; will set the &#039;&#039;pitch variable&#039;&#039; which is indeed used. Now what is the &#039;&#039;&#039;*4&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; all about? Well the &#039;&#039;bchsh&#039;&#039;-command expects a &#039;&#039;16-bit signed&#039;&#039; value, meaning that a full &#039;&#039;harmonic shift&#039;&#039; downwards is equal to -32767, a full &#039;&#039;harmonic shift&#039;&#039; upwards is 32767 and no &#039;&#039;harmonic shift&#039;&#039; is 0. The &#039;&#039;pitch bend MIDI message&#039;&#039; however is only 14-bits, meaning its range is -8192 to 8192, so in order to be able to use the entire range we have to multiply &#039;&#039;pitch&#039;&#039; by 4.&lt;br /&gt;
&lt;br /&gt;
This whole thing about number of bits can seem confusing but in the end it&#039;s all about how fine control you have over things; the more possible values, the more detailed control. In fact, most &#039;&#039;MIDI&#039;&#039; values are only 7-bit (!) meaning a range of 0 - 127. While this may sound like a lot of detail for something like a volume control, it is not even close to enough resolution to for instance set the &#039;&#039;bowing speed&#039;&#039;. Imagine that our lowest possible note frequency is 50 Hz, that means that with a 0-127 range we can only go from 50 Hz to 127 + 50 = 177 Hz - and with no decimals! This meager range and the very coarse steps of only 1 Hz would mean the instrument would never be able to sound in tune and wouldn&#039;t even have two octaves of range. The idea of limiting the Ekdahl FAR to what is possible through &#039;&#039;MIDI&#039;&#039; seemed like a poor choice thus it was decided that &amp;lt;u&amp;gt;most&amp;lt;/u&amp;gt; parameters will instead be 16-bit.&lt;br /&gt;
&lt;br /&gt;
Now lets look at a more complex example, the &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; &#039;&#039;Note On MIDI message&#039;&#039;. On a stock Ekdahl FAR, executing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:noteon&lt;br /&gt;
&amp;lt;/pre&amp;gt;Will return something like&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:note,bmr:1,bpid:1,bpe:1,se:(velocity*512)*(1-notecount),bcsm:0&#039;&amp;lt;/pre&amp;gt;As can be seen, there&#039;s a lot of stuff going on here! First of all, notice that everything after &#039;&#039;mev:noteon:&#039;&#039; is situated in between single quotes (&#039;) - this is &amp;lt;u&amp;gt;absolutely crucial&amp;lt;/u&amp;gt; for the Ekdahl FAR to know that everything within those last two quotes is part of the last &#039;&#039;parameter&#039;&#039; of the &#039;&#039;mev&#039;&#039;-command.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s break down what happens when this &#039;&#039;MIDI message&#039;&#039; is received, i.e. when a &#039;&#039;MIDI&#039;&#039; key is pressed down:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;m:0&#039;&#039; - Sets &#039;&#039;module&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;b:0&#039;&#039; - Sets &#039;&#039;bow&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;bchb:note&#039;&#039; - Invokes the &#039;&#039;bowcontrolharmonicbase-&#039;&#039;command with the first &#039;&#039;parameter&#039;&#039; set to the &#039;&#039;variable note&#039;&#039;. &lt;br /&gt;
# &#039;&#039;bmr:1&#039;&#039; - Sets the &#039;&#039;bowmotorrun&#039;&#039;-command to &#039;1&#039;, starting the &#039;&#039;bow motor&#039;&#039;&lt;br /&gt;
# &#039;&#039;bpid:1&#039;&#039; - Sets the &#039;&#039;bowpid&#039;&#039;-command to &#039;1&#039;, making sure the &#039;&#039;PID&#039;&#039; is used&lt;br /&gt;
# &#039;&#039;bpe:1&#039;&#039; - Sets the &#039;&#039;bowpressureengage&#039;&#039; to &#039;1&#039; which moves the &#039;&#039;bowing jack&#039;&#039; to the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
# &#039;&#039;se:(velocity*512)*(1-notecount)&#039;&#039; - Executes the &#039;&#039;solenoidengage&#039;&#039;-command with the value &#039;&#039;(velocity*512)*(1-notecount)&#039;&#039;&lt;br /&gt;
# &#039;&#039;bcsm:0&#039;&#039; - Sets the &#039;&#039;bowcontrolspeedmode&#039;&#039; to &#039;1&#039; which enables automatic shut down of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
The first two &#039;&#039;commands&#039;&#039; are the &#039;&#039;module&#039;&#039;- and &#039;&#039;bow-&#039;&#039;command. These &#039;&#039;commands&#039;&#039; are is intended for future versions of the Ekdahl FAR that may contain more than one string or more than one bow per string. For now &#039;&#039;0&#039;&#039; is the only valid &#039;&#039;parameter&#039;&#039; value that will be accepted for either &#039;&#039;command&#039;&#039;.&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowcontrolharmonicbase&#039;&#039;-command sets the speed of the &#039;&#039;bowing wheel&#039;&#039; to its corresponding &#039;&#039;harmonic number&#039;&#039; but also takes into account its &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;base&#039;&#039;&#039; which is the &#039;&#039;MIDI key&#039;&#039; that is mapped to &#039;&#039;harmonic number 0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After this the bowing motor is started and the &#039;&#039;PID&#039;&#039; is turned, now the instrument will try and make sure that the &#039;&#039;bowing wheel&#039;&#039; is at the right speed.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowing jack&#039;&#039; is raised to the &#039;&#039;engage position&#039;&#039;, any added &#039;&#039;pressure modifiers&#039;&#039; will also be taken into account - once the &#039;&#039;bowing jack&#039;&#039; has reached its intended position the &#039;&#039;bowing wheel&#039;&#039; should (hopefully) make contact with the string and the Ekdahl FAR will start to produce sounds.&lt;br /&gt;
&lt;br /&gt;
After this we have the &#039;&#039;solenoidengage&#039;&#039;-command &#039;&#039;command&#039;&#039; that engages the &#039;&#039;hammer&#039;&#039; and uses the first and only &#039;&#039;parameter&#039;&#039; as the force used. Like with most &#039;&#039;commands&#039;&#039; the &#039;&#039;se&#039;&#039;-command is 16-bit (0 - 65535) but the &#039;&#039;MIDI velocity variable&#039;&#039; is 7-bit (0 - 127), so to get the &#039;&#039;velocity&#039;&#039; variable to cover the entire range it needs to be multiplied with 512. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;*(1-notecount)&#039;&#039;&#039;-part is a way of making sure that we are using &#039;&#039;legato&#039;&#039; mode, i.e. that the &#039;&#039;hammer&#039;&#039; is not triggered if a key is already held down when a new key is pressed. The &#039;&#039;notecount&#039;&#039;-variable contains the number of &#039;&#039;MIDI&#039;&#039; notes currently held down. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s postulate that the Ekdahl FAR is tuned to a &#039;C&#039; at 65.4Hz and has its &#039;&#039;base&#039;&#039; set to middle &#039;C&#039; (&#039;&#039;MIDI key&#039;&#039; no 36). We are using the equal-temperament 12-tone scale and the Ekdahl FAR is set to respond to &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;MIDI channels&#039;&#039; (omni). Without having previously held any keys we press the middle &#039;C&#039; (&#039;&#039;note&#039;&#039; value 36) as hard as possible (&#039;&#039;velocity&#039;&#039; value &#039;&#039;127&#039;&#039;) on &#039;&#039;MIDI channel&#039;&#039; number 1 (&#039;&#039;channel&#039;&#039; value of 0). The Ekdahl FAR will get a &#039;&#039;note on MIDI message&#039;&#039; sent to it and from our mapping it will create the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:36,bmr:1,bpid:1,bpe:1,se:(127*512)*(1-0),bcsm:0&#039;&amp;lt;/pre&amp;gt;What has happened here is that all &#039;&#039;variables&#039;&#039; have been replaced with the values sent by the &#039;&#039;MIDI message&#039;&#039;. Since those &#039;&#039;commands&#039;&#039; that doesn&#039;t have any &#039;&#039;variables&#039;&#039; with them will execute just as previously, only those &#039;&#039;commands&#039;&#039; whos &#039;&#039;parameters&#039;&#039; have changed will be explained:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 36&#039;&#039; - The &#039;&#039;bowcontrolharmonicbase&#039;&#039; gets a value of &#039;&#039;36&#039;&#039; (middle &#039;C&#039;), because &#039;&#039;harmonic number 0&#039;&#039; is mapped to this key it will set the &#039;&#039;bowing wheel&#039;&#039; frequency to the &#039;&#039;fundamental&#039;&#039;; &#039;&#039;65.4&#039;&#039; Hertz&lt;br /&gt;
# &#039;&#039;se: (127*512)*(1-0)&#039;&#039; - the value of &#039;&#039;127&#039;&#039; comes from the &#039;&#039;velocity&#039;&#039;-variable, &#039;&#039;127 * 512 = 65024&#039;&#039; which is awfully close to a maximum hammer force of 65535. Since no previous notes were held down &#039;&#039;notecount&#039;&#039;  is equal to &#039;&#039;0&#039;&#039; and thus &#039;&#039;65024 * 1 = 65024&#039;&#039;. The hammer is engaged with near maximum force.&lt;br /&gt;
So the result is that we have set the speed of the &#039;&#039;bowing motor&#039;&#039; and we have engaged the &#039;&#039;hammer&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Now imagine that without releasing this key, we press another &#039;C&#039; one octave above but at half the velocity. The Ekdahl FAR creates the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]mev:noteon:&#039;m:0,b:0,bchb:48,bmr:1,bpid:1,bpe:1,se:(63*512)*(1-1),bcsm:0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Now we can see that the &#039;&#039;note&#039;&#039; variable is &#039;&#039;48&#039;&#039; because the &#039;C&#039; one octave up is exactly 12 keys above the first, the &#039;&#039;velocity&#039;&#039; variable has changed to &#039;&#039;63&#039;&#039; since we hit it with a lighter touch - and because we are &amp;lt;u&amp;gt;still holding the first key down&amp;lt;/u&amp;gt; &#039;&#039;notecount&#039;&#039; is equal to &#039;&#039;1&#039;&#039;. Here&#039;s what happens&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 48&#039;&#039; - Due to the &#039;&#039;base&#039;&#039; being set to &#039;&#039;36&#039;&#039; the &#039;&#039;harmonic number&#039;&#039; is set to &#039;&#039;48 - 36 = 12&#039;&#039;. Because we are using a 12-tone scale &#039;&#039;harmonic number 12&#039;&#039; is exactly one octave above the &#039;&#039;fundamental&#039;&#039; thus the speed of the &#039;&#039;bowing wheel&#039;&#039; is set to &#039;&#039;65.4 * 2 = 130.8&#039;&#039; Hertz.&lt;br /&gt;
# &#039;&#039;se: (63*512)*(1-1)&#039;&#039; - So &#039;&#039;63 * 512 = 32256&#039;&#039; and &#039;&#039;1 - 1 = 0&#039;&#039; thus &#039;&#039;32256 * 0 = 0&#039;&#039;. When the &#039;&#039;solenoidengage&#039;&#039;-command gets a &#039;&#039;parameter&#039;&#039; of &#039;&#039;0&#039;&#039; it will not engage the &#039;&#039;hammer&#039;&#039; - so the &#039;&#039;hammer&#039;&#039; doesn&#039;t strike&lt;br /&gt;
So it can be seen that with quite rudimentary math we can accomplish a whole lot of things here. Note also that even though the &#039;&#039;note on MIDI message&#039;&#039; also sets the &#039;&#039;channel&#039;&#039;-variable we never use it in this example - plenty of opportunity to make something weird happen depending on the &#039;&#039;MIDI channel&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
== CV Mapping ==&lt;br /&gt;
&#039;&#039;CV Mapping&#039;&#039; works exactly like the &#039;&#039;MIDI mapping&#039;&#039; with the difference that the command for setting the &#039;&#039;CV mapping&#039;&#039; is different and that &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; events pertaining to this &amp;lt;u&amp;gt;only&amp;lt;/u&amp;gt; change the &#039;&#039;value&#039;&#039;-variable. The &#039;&#039;command&#039;&#039; for changing the &#039;&#039;CV mapping&#039;&#039; is &#039;&#039;adccommandmap&#039;&#039; or &#039;&#039;acm&#039;&#039;, it take two &#039;&#039;parameters&#039;&#039;; &#039;&#039;channel&#039;&#039; and &#039;&#039;command string&#039;&#039;. We retrieve the &#039;&#039;command string&#039;&#039; for channel &#039;&#039;0&#039;&#039; which reads the sum of the &#039;&#039;harm. v/oct&#039;&#039;-jack and the &#039;&#039;harmonic&#039;&#039;-knob by sending a command of&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:acm:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;The &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; response will be something like&lt;br /&gt;
&amp;lt;pre&amp;gt;[irq]acm:0:&#039;bcha:value/1327.716667-20&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Service|Service]]&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Software_tab&amp;diff=1634</id>
		<title>The Ekdahl FAR - Configuration utility - Software tab</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Software_tab&amp;diff=1634"/>
		<updated>2025-08-31T23:16:08Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Configuration utility software tab.png|Configuration utility - Software tab|thumb]]&lt;br /&gt;
The &#039;&#039;software&#039;&#039;-tab contains things that are not related to the Ekdahl FAR, but rather to the &#039;&#039;Configuration utility&#039;&#039; itself; how it presents information etc.&lt;br /&gt;
&lt;br /&gt;
== Tuning scheme ==&lt;br /&gt;
The &#039;&#039;Tuning scheme&#039;&#039; sets how notes are displayed in the &#039;&#039;Configuration utility&#039;&#039; using different presets.&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Statistics tab|The &#039;&#039;Statistics&#039;&#039; tab]]&lt;br /&gt;
|[[The Ekdahl FAR - Service|Service]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_langue&amp;diff=1633</id>
		<title>The Ekdahl FAR - Command langue</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_langue&amp;diff=1633"/>
		<updated>2025-08-31T23:15:05Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: Knaadmin moved page The Ekdahl FAR - Command langue to The Ekdahl FAR - Command language: Misspelled title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[The Ekdahl FAR - Command language]]&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1632</id>
		<title>The Ekdahl FAR - Command language</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_language&amp;diff=1632"/>
		<updated>2025-08-31T23:15:04Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: Knaadmin moved page The Ekdahl FAR - Command langue to The Ekdahl FAR - Command language: Misspelled title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Command language ==&lt;br /&gt;
The Ekdahl FAR is entirely controlled by &#039;&#039;commands&#039;&#039;, these &#039;&#039;commands&#039;&#039; decide everything that the instrument is doing, whether it is playing a melody or changing an internal parameter. &lt;br /&gt;
&lt;br /&gt;
When a &#039;&#039;MIDI message&#039;&#039; is received or a new CV / knob value is read, the &#039;&#039;commands&#039;&#039; associated with it will be internally sent. This can be things like &amp;quot;engage hammer&amp;quot; or &amp;quot;set the fundamental frequency&amp;quot; etc. &lt;br /&gt;
&lt;br /&gt;
Some of the available &#039;&#039;commands&#039;&#039; are mainly used for calibrating and setting up the instrument and are usually saved into the instruments memory, these will be executed whenever the instrument is turned on. &lt;br /&gt;
&lt;br /&gt;
All &#039;&#039;commands&#039;&#039; can be manually invoked via &#039;&#039;USB-Serial&#039;&#039;, in conjunction with certain software this presents an unprecedented level of control and sequenceability.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; are invoked using a &#039;&#039;plain text approach&#039;&#039;, most commands have both a &#039;&#039;long name&#039;&#039; and a &#039;&#039;short name&#039;&#039; which are interchangeable. A &#039;&#039;command&#039;&#039; may have one or more &#039;&#039;parameters&#039;&#039; associated with it, these &#039;&#039;parameters&#039;&#039; can be of different types; 16-bit numbers (values 0 - 65535 or -32767 - 32767), floating point numbers (values with decimals), booleans (0 for &#039;false&#039;, 1 for &#039;true&#039;) and strings (text). Some commands are &#039;&#039;conditional&#039;&#039;, meaning they will only execute if a parameter equates to &#039;1&#039; (&#039;true&#039;). &lt;br /&gt;
&lt;br /&gt;
The way &#039;&#039;commands&#039;&#039; are written in order to be executed is &#039;&#039;commandname:parameter1:parameter2:parameter3 [etc]&#039;&#039;, several commands be executed in sequence by separating them with a comma (&#039;,&#039;), a bunch of commands strung together is called a &#039;&#039;command string&#039;&#039;. If for instance we would like to start the &#039;&#039;bowing wheel&#039;&#039; and set its frequency to 82.5 Hertz we could send the Ekdahl FAR the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1, bowcontrolfrequecy:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;We could also use the &#039;&#039;short names&#039;&#039; for the commands&amp;lt;pre&amp;gt;bmr:1,bcf:82.5&amp;lt;/pre&amp;gt;Both &#039;&#039;bowmotorrun&#039;&#039; and &#039;&#039;bowcontrolfrequency&#039;&#039; takes one &#039;&#039;parameter&#039;&#039; each, &#039;&#039;bowmotorrun&#039;&#039; is &#039;&#039;conditional&#039;&#039; and unless the first &#039;&#039;parameter&#039;&#039; is equal to &#039;1&#039; the motor will not start. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;bowcontrolfrequency&#039;&#039; sets the frequency of the &#039;&#039;bowing wheel&#039;&#039;, the instrument may not execute a &#039;&#039;command&#039;&#039; if it decides that the given &#039;&#039;parameters&#039;&#039; are outside of the working range or they are missing.&lt;br /&gt;
&lt;br /&gt;
To test out a &#039;&#039;command&#039;&#039; you can send it directly to the Ekdahl FAR using the &#039;&#039;Console&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To read up on existing &#039;&#039;commands&#039;&#039;, their &#039;&#039;parameters&#039;&#039; and a brief description you can check the &#039;&#039;Command reference&#039;&#039; in the &#039;&#039;Configuration utility&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Variables, functions and equations ==&lt;br /&gt;
What makes the &#039;&#039;Command language&#039;&#039; truly powerful is the concept of &#039;&#039;variables, functions&#039;&#039; and &#039;&#039;equations&#039;&#039;. All &#039;&#039;parameters&#039;&#039; that take numerical values can use any combination of &#039;&#039;variables, functions&#039;&#039; or &#039;&#039;equations.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For instance, we can use the previous example and instead write our &#039;&#039;command string&#039;&#039; as follows&amp;lt;pre&amp;gt;&lt;br /&gt;
bowmotorrun:1,bowcontrolfrequency:82.5+note*20&lt;br /&gt;
&amp;lt;/pre&amp;gt;This example requires of course that the &#039;&#039;variable&#039;&#039; &#039;&#039;note&#039;&#039; exists in the current context. &lt;br /&gt;
&lt;br /&gt;
===== Variables =====&lt;br /&gt;
There are two types of &#039;&#039;variables&#039;&#039; in the Ekdahl FAR; &#039;&#039;global variables&#039;&#039; and &#039;&#039;event variables&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Global variables&#039;&#039; are variables that are always available and will exist in any context. The &#039;&#039;global variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* notecount - Contains the number of &#039;&#039;MIDI&#039;&#039; keys that are being held down, i.e. all &#039;&#039;Note on messages&#039;&#039; received that haven&#039;t gotten a paired &#039;&#039;Note off message&#039;&#039; yet&lt;br /&gt;
* uv0 - uv9 - These are &#039;&#039;user variables&#039;&#039; and can be set at any point using the &#039;&#039;globaluservariable command&#039;&#039; with the first &#039;&#039;parameter&#039;&#039; being which variable to set (0-9) and the second &#039;&#039;parameter&#039;&#039; being the value (float).&lt;br /&gt;
* e - Contains the constant &#039;&#039;[[wikipedia:E_(mathematical_constant)|e]]&#039;&#039;&lt;br /&gt;
* pi - Contains the constant &#039;&#039;[[wikipedia:Pi|pi]]&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Event variables&#039;&#039; are variables that are set by certain &#039;&#039;MIDI messages&#039;&#039; or when a new value is read on one of the jacks or knobs on the &#039;&#039;Control box&#039;&#039;. The &#039;&#039;Event variables&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* channel - Set by the &#039;&#039;Note on, Note off, Continuous Controller, Poly after touch, Pitch bend, Channel after touch&#039;&#039; and &#039;&#039;Program change MIDI messages&#039;&#039;&lt;br /&gt;
* note - Set by the &#039;&#039;Note on, Note off&#039;&#039; and &#039;&#039;Poly after touch MIDI messages&#039;&#039;&lt;br /&gt;
* velocity - Set by the &#039;&#039;Note on&#039;&#039; and &#039;&#039;Note off MIDI messages&#039;&#039;&lt;br /&gt;
* pressure - Set by the &#039;&#039;Poly after touch&#039;&#039; and &#039;&#039;Channel after touch MIDI messages&#039;&#039;&lt;br /&gt;
* value - Set by the &#039;&#039;Continuous Controller MIDI message&#039;&#039; and by the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
* pitch - Set by the &#039;&#039;Pitch bend MIDI message&#039;&#039;&lt;br /&gt;
* program - Set by the &#039;&#039;Program change MIDI message&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Functions =====&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be used to change a numerical value or the result of an &#039;&#039;equation&#039;&#039;, the Ekdahl FAR contains both general &#039;&#039;arithmetic functions&#039;&#039; (courtesy of Lewis Van Winkle and the TINYEXPR engine) and &#039;&#039;specialized functions&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;arithmetic functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* abs(x) - Returns the &#039;&#039;[[wikipedia:Absolute_value|absolute value]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* acos(x), asin(x), atan(x), atan2(x, y) - Returns the [[wikipedia:Inverse_trigonometric_functions|&#039;&#039;arc-cos, -sin, -tan&#039;&#039; and &#039;&#039;-tan2&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* atan2(x,y) - Returns the &#039;&#039;[[wikipedia:Atan2|arctan2]]&#039;&#039; of &#039;&#039;x, y&#039;&#039;&lt;br /&gt;
* floor(x), ceil(x) - Returns the [[wikipedia:Floor_and_ceiling_functions|&#039;&#039;floor&#039;&#039; and &#039;&#039;ceiling&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* exp(x) - Returns the &#039;&#039;[[wikipedia:Exponential_function|exponent]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* fac(x) - Returns the &#039;&#039;[[wikipedia:Factorial|factorial]]&#039;&#039; of x&lt;br /&gt;
* ln(x) - Returns the &#039;&#039;[[wikipedia:Natural_logarithm|natural logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* log10(x), log20(x) - Returns the &#039;&#039;[[wikipedia:Logarithm|logarithm]]&#039;&#039; of &#039;&#039;x&#039;&#039; using base 10 and 20 respectively&lt;br /&gt;
* ncr(x,y), npr(x,y) - Functions to calculate &#039;&#039;[[wikipedia:Combination|combinations]]&#039;&#039; and &#039;&#039;[[wikipedia:Permutation|permutations]]&#039;&#039;&lt;br /&gt;
* pow(x,y) - Returns &#039;&#039;x^y&#039;&#039;&lt;br /&gt;
* sqrt(x) - Returns the &#039;&#039;[[wikipedia:Square_root|square root]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cos(x), sin(x), tan(x) - Returns the [[wikipedia:Trigonometric_functions|&#039;&#039;cos, sin&#039;&#039; and &#039;&#039;tan&#039;&#039;]] of &#039;&#039;x&#039;&#039;&lt;br /&gt;
* cosh(x), sinh(x), tanh(x) - Returns the &#039;&#039;[[wikipedia:Hyperbolic_functions|hyperbolic cos, sin and tan]]&#039;&#039; of &#039;&#039;x&#039;&#039;&lt;br /&gt;
The &#039;&#039;specialized functions&#039;&#039; that are incorporated in the &#039;&#039;firmware&#039;&#039; as of this writing (2025-01-21) are:&lt;br /&gt;
&lt;br /&gt;
* bool(x) - Returns 1 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* ibool(x) - Returns 0 if &#039;&#039;x&#039;&#039; is more than 0&lt;br /&gt;
* deadband(x,y) - Returns &#039;&#039;x + y &#039;&#039; if &#039;&#039;x &amp;lt; y&#039;&#039; or &#039;&#039;x - y&#039;&#039; if &#039;&#039;x &amp;gt; y&#039;&#039;. If neither of these statements is true it returns &#039;&#039;0&#039;&#039; - used to create a [[wikipedia:Deadband|deadband]] of &#039;&#039;x&#039;&#039; with the threshold of &#039;&#039;y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Functions&#039;&#039; can be readily used in a &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
bmr:1,bcf:&amp;quot;8.17579875 * pow(2, (1/12 * note))&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;The previous statements starts the &#039;&#039;bowing wheel&#039;&#039; and sets the frequency of the wheel to &#039;&#039;8.17579875 * 2^(1/12 * note)&#039;&#039;. A middle &#039;C&#039; according to &#039;&#039;MIDI&#039;&#039; has a &#039;&#039;note value&#039;&#039; of 36, meaning if we substitute &#039;&#039;note&#039;&#039; with 36 we get the equation &#039;&#039;8.17579875 * 2^(1/12 * 36)&#039;&#039; which comes out to &#039;&#039;~65.4&#039;&#039; Hertz.&lt;br /&gt;
&lt;br /&gt;
Note that the first &#039;&#039;parameter&#039;&#039; for &#039;&#039;bcf&#039;&#039; is put in between double quotes (&amp;quot;). This is because the &#039;&#039;pow&#039;&#039;-function requires the use of a comma (&amp;quot;,&amp;quot;) in order to separate in between its two require inputs &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and we need to make sure that the Ekdahl FAR doesn&#039;t mistake that comma for meaning that a new &#039;&#039;command&#039;&#039; is being sent. Single (&#039;) and double (&amp;quot;) quotes can be used and nested in all &#039;&#039;parameters&#039;&#039; and are &amp;lt;u&amp;gt;required&amp;lt;/u&amp;gt; in a lot of circumstances, improper nesting or not using quotes can lead to the instrument not parsing the &#039;&#039;command string&#039;&#039; correctly.&lt;br /&gt;
&lt;br /&gt;
== Return messages ==&lt;br /&gt;
The Ekdahl FAR when connected via &#039;&#039;USB-Serial&#039;&#039; doesn&#039;t only accept &#039;&#039;commands&#039;&#039; but will also send various &#039;&#039;return messages&#039;&#039;. These are prefixed by their &#039;&#039;category&#039;&#039; denoted in brackets (&amp;quot;[]&amp;quot;), the existing categories as of this writing (2025-01-22) are:&lt;br /&gt;
&lt;br /&gt;
* command / cmd - Acknowledges the reception of a command in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* usb - Acknowledges the reception of a &#039;&#039;MIDI message&#039;&#039; over &#039;&#039;USB&#039;&#039; in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* hardware / hw - Signals that a change has been sent to the Ekdahl FAR hardware, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* undefined / un - The message sent is in the &#039;&#039;undefined&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* priority / pri - The message sent is in the &#039;&#039;priority&#039;&#039; category, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* error / err - Signals that an &#039;&#039;error&#039;&#039; has occurred, sent in &#039;&#039;plain text&#039;&#039;&lt;br /&gt;
* expressionparser / ep - These messages contains debugging information regarding the internal &#039;&#039;expression parser&#039;&#039; and is used for development&lt;br /&gt;
*debug / dbg - These messages contains various debugging information and is used for development&lt;br /&gt;
*help / hlp - Signals that the message is a response to a &#039;&#039;help&#039;&#039;-command being sent to the Ekdahl FAR. These messages are structured so that a receiver, like the &#039;&#039;Configuration utility&#039;&#039;, can parse information about available &#039;&#039;commands&#039;&#039; in the current &#039;&#039;firmware&#039;&#039; and relay it to a user in a structured way.&lt;br /&gt;
* inforequest / irq - Signals that an &#039;&#039;info request&#039;&#039; has been returned. This is a specialized message that is either sent as a response to an &#039;&#039;rqi&#039;&#039;-command or as a &#039;&#039;interrupt&#039;&#039;-message telling the user or receiving software about different parameters in the Ekdahl FAR. These messages follows the same structure as regular &#039;&#039;command message&#039;&#039;s of &#039;&#039;[irq]commandname:parameter1 [etc]&#039;&#039; so that it can be used by a receiving software to keep track of parameter changes&lt;br /&gt;
&lt;br /&gt;
===== Explicitly requesting information =====&lt;br /&gt;
By using the special command &#039;&#039;requestinfo / rqi&#039;&#039; one can request the information stored by a certain &#039;&#039;command&#039;&#039; or a state of the Ekdahl FAR. The &#039;&#039;rqi&#039;&#039;-command is executed in the convention &#039;&#039;rqi:commandname[:optional parameters]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
To go back to our example of setting the bowing frequency using the &#039;&#039;bowcontrolfrequency&#039;&#039;-command we can ask the Ekdahl FAR what the bowing frequency is set to by writing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:bowcontrolfrequency&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return value would be something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bcf:82.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;Where &#039;[irq]&#039; denotes that the message returned is in the &#039;&#039;info request-&#039;&#039;category, that it pertains to the command &#039;&#039;bcf&#039;&#039; and has the value &#039;&#039;82.5&#039;&#039;. Note that the returned &#039;&#039;command&#039;&#039; sent by an &#039;&#039;rqi&#039;&#039;-command always uses the &#039;&#039;short name&#039;&#039; in order to preserve bandwidth.&lt;br /&gt;
&lt;br /&gt;
Most commands do not require any &#039;&#039;parameters&#039;&#039; when using the &#039;&#039;rqi&#039;&#039;-command. The &#039;&#039;adcread&#039;&#039;-command is an example of a &#039;&#039;command&#039;&#039; that &amp;lt;u&amp;gt;does&amp;lt;/u&amp;gt; require a &#039;&#039;parameter&#039;&#039; when used with &#039;&#039;rqi&#039;&#039;. The &#039;&#039;adcread&#039;&#039; command returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; in the &#039;&#039;Control box&#039;&#039;, because there are 8 different channels the first &#039;&#039;parameter&#039;&#039; sets which channel to return the data for, hence executing the &#039;&#039;command&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:adcr:3&lt;br /&gt;
&amp;lt;/pre&amp;gt;will return the last data read on &#039;&#039;analog-to-digital convert&#039;&#039; channel 3.&lt;br /&gt;
&lt;br /&gt;
== MIDI mapping ==&lt;br /&gt;
To change how a certain &#039;&#039;MIDI message&#039;&#039; interacts with the Ekdahl FAR we need to change the &#039;&#039;commands&#039;&#039; or &#039;&#039;parameters&#039;&#039; sent when the message is received. The &#039;&#039;command&#039;&#039; responsible for mapping &#039;&#039;command strimgs&#039;&#039; to different &#039;&#039;MIDI messages&#039;&#039; is &#039;&#039;midieventhandler&#039;&#039; or &#039;&#039;mev&#039;&#039; for short. The first &#039;&#039;parameter&#039;&#039; of &#039;&#039;mev&#039;&#039; is the type of &#039;&#039;MIDI message&#039;&#039; that we want to remap&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;noteon&#039;&#039; - Note on&lt;br /&gt;
* &#039;&#039;noteoff -&#039;&#039; Note off&lt;br /&gt;
* &#039;&#039;pat -&#039;&#039; Poly after touch&lt;br /&gt;
* &#039;&#039;cat&#039;&#039; - Channel after touch&lt;br /&gt;
* &#039;&#039;pb&#039;&#039; - Pitch bend&lt;br /&gt;
* &#039;&#039;pc&#039;&#039; - Program change&lt;br /&gt;
* &#039;&#039;cc&#039;&#039; - Continuous controller&lt;br /&gt;
&lt;br /&gt;
The second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039; that is to be associated with the &#039;&#039;MIDI Message&#039;&#039; - with the exception of the &#039;&#039;cc&#039;&#039;-type, here the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; (0 - 127) and the &amp;lt;u&amp;gt;third&amp;lt;/u&amp;gt; &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We can of course use the &#039;&#039;rqi&#039;&#039;-command to check the current mapping, below we are asking what the current &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;pitch bend&#039;&#039; &#039;&#039;MIDI message&#039;&#039; is&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:pb&lt;br /&gt;
&amp;lt;/pre&amp;gt;This may return something like&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]bchsh:pitch*4&lt;br /&gt;
&amp;lt;/pre&amp;gt;The return message tells us that the &#039;&#039;pitch bend MIDI message&#039;&#039; is executing a &#039;&#039;bchsh&#039;&#039;-command with the parameter &#039;&#039;pitch*4&#039;&#039;. Looking in the &#039;&#039;command reference&#039;&#039; we can see that &#039;&#039;bchsh&#039;&#039; is the &#039;&#039;short name&#039;&#039; of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command which shifts the frequency of the &#039;&#039;bowing wheel&#039;&#039; from the current frequency, the first (and only) parameter sets how much we want to shift it (depends on the &#039;&#039;bowcontrolharmonicshiftrange command&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
If we look in the list of &#039;&#039;[[The Ekdahl FAR - Command langue#Variables|variables]]&#039;&#039; above we can see that the &#039;&#039;pitch bend MIDI message&#039;&#039; will set the &#039;&#039;pitch variable&#039;&#039; which is indeed used. Now what is the &#039;&#039;&#039;*4&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; all about? Well the &#039;&#039;bchsh&#039;&#039;-command expects a &#039;&#039;16-bit signed&#039;&#039; value, meaning that a full &#039;&#039;harmonic shift&#039;&#039; downwards is equal to -32767, a full &#039;&#039;harmonic shift&#039;&#039; upwards is 32767 and no &#039;&#039;harmonic shift&#039;&#039; is 0. The &#039;&#039;pitch bend MIDI message&#039;&#039; however is only 14-bits, meaning its range is -8192 to 8192, so in order to be able to use the entire range we have to multiply &#039;&#039;pitch&#039;&#039; by 4.&lt;br /&gt;
&lt;br /&gt;
This whole thing about number of bits can seem confusing but in the end it&#039;s all about how fine control you have over things; the more possible values, the more detailed control. In fact, most &#039;&#039;MIDI&#039;&#039; values are only 7-bit (!) meaning a range of 0 - 127. While this may sound like a lot of detail for something like a volume control, it is not even close to enough resolution to for instance set the &#039;&#039;bowing speed&#039;&#039;. Imagine that our lowest possible note frequency is 50 Hz, that means that with a 0-127 range we can only go from 50 Hz to 127 + 50 = 177 Hz - and with no decimals! This meager range and the very coarse steps of only 1 Hz would mean the instrument would never be able to sound in tune and wouldn&#039;t even have two octaves of range. The idea of limiting the Ekdahl FAR to what is possible through &#039;&#039;MIDI&#039;&#039; seemed like a poor choice thus it was decided that &amp;lt;u&amp;gt;most&amp;lt;/u&amp;gt; parameters will instead be 16-bit.&lt;br /&gt;
&lt;br /&gt;
Now lets look at a more complex example, the &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; &#039;&#039;Note On MIDI message&#039;&#039;. On a stock Ekdahl FAR, executing&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:mev:noteon&lt;br /&gt;
&amp;lt;/pre&amp;gt;Will return something like&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:note,bmr:1,bpid:1,bpe:1,se:(velocity*512)*(1-notecount),bcsm:0&#039;&amp;lt;/pre&amp;gt;As can be seen, there&#039;s a lot of stuff going on here! First of all, notice that everything after &#039;&#039;mev:noteon:&#039;&#039; is situated in between single quotes (&#039;) - this is &amp;lt;u&amp;gt;absolutely crucial&amp;lt;/u&amp;gt; for the Ekdahl FAR to know that everything within those last two quotes is part of the last &#039;&#039;parameter&#039;&#039; of the &#039;&#039;mev&#039;&#039;-command.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s break down what happens when this &#039;&#039;MIDI message&#039;&#039; is received, i.e. when a &#039;&#039;MIDI&#039;&#039; key is pressed down:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;m:0&#039;&#039; - Sets &#039;&#039;module&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;b:0&#039;&#039; - Sets &#039;&#039;bow&#039;&#039; to 0&lt;br /&gt;
# &#039;&#039;bchb:note&#039;&#039; - Invokes the &#039;&#039;bowcontrolharmonicbase-&#039;&#039;command with the first &#039;&#039;parameter&#039;&#039; set to the &#039;&#039;variable note&#039;&#039;. &lt;br /&gt;
# &#039;&#039;bmr:1&#039;&#039; - Sets the &#039;&#039;bowmotorrun&#039;&#039;-command to &#039;1&#039;, starting the &#039;&#039;bow motor&#039;&#039;&lt;br /&gt;
# &#039;&#039;bpid:1&#039;&#039; - Sets the &#039;&#039;bowpid&#039;&#039;-command to &#039;1&#039;, making sure the &#039;&#039;PID&#039;&#039; is used&lt;br /&gt;
# &#039;&#039;bpe:1&#039;&#039; - Sets the &#039;&#039;bowpressureengage&#039;&#039; to &#039;1&#039; which moves the &#039;&#039;bowing jack&#039;&#039; to the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
# &#039;&#039;se:(velocity*512)*(1-notecount)&#039;&#039; - Executes the &#039;&#039;solenoidengage&#039;&#039;-command with the value &#039;&#039;(velocity*512)*(1-notecount)&#039;&#039;&lt;br /&gt;
# &#039;&#039;bcsm:0&#039;&#039; - Sets the &#039;&#039;bowcontrolspeedmode&#039;&#039; to &#039;1&#039; which enables automatic shut down of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
The first two &#039;&#039;commands&#039;&#039; are the &#039;&#039;module&#039;&#039;- and &#039;&#039;bow-&#039;&#039;command. These &#039;&#039;commands&#039;&#039; are is intended for future versions of the Ekdahl FAR that may contain more than one string or more than one bow per string. For now &#039;&#039;0&#039;&#039; is the only valid &#039;&#039;parameter&#039;&#039; value that will be accepted for either &#039;&#039;command&#039;&#039;.&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowcontrolharmonicbase&#039;&#039;-command sets the speed of the &#039;&#039;bowing wheel&#039;&#039; to its corresponding &#039;&#039;harmonic number&#039;&#039; but also takes into account its &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;base&#039;&#039;&#039; which is the &#039;&#039;MIDI key&#039;&#039; that is mapped to &#039;&#039;harmonic number 0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After this the bowing motor is started and the &#039;&#039;PID&#039;&#039; is turned, now the instrument will try and make sure that the &#039;&#039;bowing wheel&#039;&#039; is at the right speed.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;bowing jack&#039;&#039; is raised to the &#039;&#039;engage position&#039;&#039;, any added &#039;&#039;pressure modifiers&#039;&#039; will also be taken into account - once the &#039;&#039;bowing jack&#039;&#039; has reached its intended position the &#039;&#039;bowing wheel&#039;&#039; should (hopefully) make contact with the string and the Ekdahl FAR will start to produce sounds.&lt;br /&gt;
&lt;br /&gt;
After this we have the &#039;&#039;solenoidengage&#039;&#039;-command &#039;&#039;command&#039;&#039; that engages the &#039;&#039;hammer&#039;&#039; and uses the first and only &#039;&#039;parameter&#039;&#039; as the force used. Like with most &#039;&#039;commands&#039;&#039; the &#039;&#039;se&#039;&#039;-command is 16-bit (0 - 65535) but the &#039;&#039;MIDI velocity variable&#039;&#039; is 7-bit (0 - 127), so to get the &#039;&#039;velocity&#039;&#039; variable to cover the entire range it needs to be multiplied with 512. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;*(1-notecount)&#039;&#039;&#039;-part is a way of making sure that we are using &#039;&#039;legato&#039;&#039; mode, i.e. that the &#039;&#039;hammer&#039;&#039; is not triggered if a key is already held down when a new key is pressed. The &#039;&#039;notecount&#039;&#039;-variable contains the number of &#039;&#039;MIDI&#039;&#039; notes currently held down. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s postulate that the Ekdahl FAR is tuned to a &#039;C&#039; at 65.4Hz and has its &#039;&#039;base&#039;&#039; set to middle &#039;C&#039; (&#039;&#039;MIDI key&#039;&#039; no 36). We are using the equal-temperament 12-tone scale and the Ekdahl FAR is set to respond to &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;MIDI channels&#039;&#039; (omni). Without having previously held any keys we press the middle &#039;C&#039; (&#039;&#039;note&#039;&#039; value 36) as hard as possible (&#039;&#039;velocity&#039;&#039; value &#039;&#039;127&#039;&#039;) on &#039;&#039;MIDI channel&#039;&#039; number 1 (&#039;&#039;channel&#039;&#039; value of 0). The Ekdahl FAR will get a &#039;&#039;note on MIDI message&#039;&#039; sent to it and from our mapping it will create the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;[irq]mev:noteon:&#039;m:0,b:0,bchb:36,bmr:1,bpid:1,bpe:1,se:(127*512)*(1-0),bcsm:0&#039;&amp;lt;/pre&amp;gt;What has happened here is that all &#039;&#039;variables&#039;&#039; have been replaced with the values sent by the &#039;&#039;MIDI message&#039;&#039;. Since those &#039;&#039;commands&#039;&#039; that doesn&#039;t have any &#039;&#039;variables&#039;&#039; with them will execute just as previously, only those &#039;&#039;commands&#039;&#039; whos &#039;&#039;parameters&#039;&#039; have changed will be explained:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 36&#039;&#039; - The &#039;&#039;bowcontrolharmonicbase&#039;&#039; gets a value of &#039;&#039;36&#039;&#039; (middle &#039;C&#039;), because &#039;&#039;harmonic number 0&#039;&#039; is mapped to this key it will set the &#039;&#039;bowing wheel&#039;&#039; frequency to the &#039;&#039;fundamental&#039;&#039;; &#039;&#039;65.4&#039;&#039; Hertz&lt;br /&gt;
# &#039;&#039;se: (127*512)*(1-0)&#039;&#039; - the value of &#039;&#039;127&#039;&#039; comes from the &#039;&#039;velocity&#039;&#039;-variable, &#039;&#039;127 * 512 = 65024&#039;&#039; which is awfully close to a maximum hammer force of 65535. Since no previous notes were held down &#039;&#039;notecount&#039;&#039;  is equal to &#039;&#039;0&#039;&#039; and thus &#039;&#039;65024 * 1 = 65024&#039;&#039;. The hammer is engaged with near maximum force.&lt;br /&gt;
So the result is that we have set the speed of the &#039;&#039;bowing motor&#039;&#039; and we have engaged the &#039;&#039;hammer&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Now imagine that without releasing this key, we press another &#039;C&#039; one octave above but at half the velocity. The Ekdahl FAR creates the following &#039;&#039;command string&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
[irq]mev:noteon:&#039;m:0,b:0,bchb:48,bmr:1,bpid:1,bpe:1,se:(63*512)*(1-1),bcsm:0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Now we can see that the &#039;&#039;note&#039;&#039; variable is &#039;&#039;48&#039;&#039; because the &#039;C&#039; one octave up is exactly 12 keys above the first, the &#039;&#039;velocity&#039;&#039; variable has changed to &#039;&#039;63&#039;&#039; since we hit it with a lighter touch - and because we are &amp;lt;u&amp;gt;still holding the first key down&amp;lt;/u&amp;gt; &#039;&#039;notecount&#039;&#039; is equal to &#039;&#039;1&#039;&#039;. Here&#039;s what happens&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;bchb: 48&#039;&#039; - Due to the &#039;&#039;base&#039;&#039; being set to &#039;&#039;36&#039;&#039; the &#039;&#039;harmonic number&#039;&#039; is set to &#039;&#039;48 - 36 = 12&#039;&#039;. Because we are using a 12-tone scale &#039;&#039;harmonic number 12&#039;&#039; is exactly one octave above the &#039;&#039;fundamental&#039;&#039; thus the speed of the &#039;&#039;bowing wheel&#039;&#039; is set to &#039;&#039;65.4 * 2 = 130.8&#039;&#039; Hertz.&lt;br /&gt;
# &#039;&#039;se: (63*512)*(1-1)&#039;&#039; - So &#039;&#039;63 * 512 = 32256&#039;&#039; and &#039;&#039;1 - 1 = 0&#039;&#039; thus &#039;&#039;32256 * 0 = 0&#039;&#039;. When the &#039;&#039;solenoidengage&#039;&#039;-command gets a &#039;&#039;parameter&#039;&#039; of &#039;&#039;0&#039;&#039; it will not engage the &#039;&#039;hammer&#039;&#039; - so the &#039;&#039;hammer&#039;&#039; doesn&#039;t strike&lt;br /&gt;
So it can be seen that with quite rudimentary math we can accomplish a whole lot of things here. Note also that even though the &#039;&#039;note on MIDI message&#039;&#039; also sets the &#039;&#039;channel&#039;&#039;-variable we never use it in this example - plenty of opportunity to make something weird happen depending on the &#039;&#039;MIDI channel&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
== CV Mapping ==&lt;br /&gt;
&#039;&#039;CV Mapping&#039;&#039; works exactly like the &#039;&#039;MIDI mapping&#039;&#039; with the difference that the command for setting the &#039;&#039;CV mapping&#039;&#039; is different and that &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; events pertaining to this &amp;lt;u&amp;gt;only&amp;lt;/u&amp;gt; change the &#039;&#039;value&#039;&#039;-variable. The &#039;&#039;command&#039;&#039; for changing the &#039;&#039;CV mapping&#039;&#039; is &#039;&#039;adccommandmap&#039;&#039; or &#039;&#039;acm&#039;&#039;, it take two &#039;&#039;parameters&#039;&#039;; &#039;&#039;channel&#039;&#039; and &#039;&#039;command string&#039;&#039;. We retrieve the &#039;&#039;command string&#039;&#039; for channel &#039;&#039;0&#039;&#039; which reads the sum of the &#039;&#039;harm. v/oct&#039;&#039;-jack and the &#039;&#039;harmonic&#039;&#039;-knob by sending a command of&amp;lt;pre&amp;gt;&lt;br /&gt;
rqi:acm:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;The &amp;lt;u&amp;gt;default&amp;lt;/u&amp;gt; response will be something like&lt;br /&gt;
&amp;lt;pre&amp;gt;[irq]acm:0:&#039;bcha:value/1327.716667-20&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Software tab|The &#039;&#039;Software&#039;&#039; tab]]&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1631</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1631"/>
		<updated>2025-08-31T23:13:52Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically change things on the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability, and cost. Standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
Install TyTools as indicated on their website and [https://downgit.github.io/#/home?url=https://github.com/Knaster/EkdahlFar/refs/heads/master/bin/Release/EkdahlFarCB.hex download the latest binary .hex file] and unzip it at your desired location. After installing, start TyCommander, with the Ekdahl FAR plugged into one of the USB ports on your computer you should get a screen similar to this:  &lt;br /&gt;
[[File:TyCommander main.png|center|thumb|905x905px]]&lt;br /&gt;
With the Ekdahl FAR selected, press &amp;quot;upload&amp;quot; and direct the dialog to where you unzipped the .hex-file. Wait a few moments for the upload to complete, the instrument will restart and then you are good to go!    &lt;br /&gt;
&lt;br /&gt;
  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Software tab|- The Software tab]]&lt;br /&gt;
|[[The Ekdahl FAR - Command language|Command language]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1630</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1630"/>
		<updated>2025-08-31T16:10:45Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically change things on the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability, and cost. Standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
Install TyTools as indicated on their website and [https://downgit.github.io/#/home?url=https://github.com/Knaster/EkdahlFar/refs/heads/master/bin/Release/EkdahlFarCB.hex download the latest binary .hex file] and unzip it at your desired location. After installing, start TyCommander, with the Ekdahl FAR plugged into one of the USB ports on your computer you should get a screen similar to this:  &lt;br /&gt;
[[File:TyCommander main.png|center|thumb|905x905px]]&lt;br /&gt;
With the Ekdahl FAR selected, press &amp;quot;upload&amp;quot; and direct the dialog to where you unzipped the .hex-file. Wait a few moments for the upload to complete, the instrument will restart and then you are good to go!    &lt;br /&gt;
&lt;br /&gt;
  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=File:TyCommander_main.png&amp;diff=1629</id>
		<title>File:TyCommander main.png</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=File:TyCommander_main.png&amp;diff=1629"/>
		<updated>2025-08-31T16:07:04Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TyCommander main screen&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1628</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1628"/>
		<updated>2025-08-31T15:38:17Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically change things on the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability, and cost. Standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
Install TyTools as indicated on their website and [https://downgit.github.io/#/home?url=https://github.com/Knaster/EkdahlFar/refs/heads/master/bin/Release/EkdahlFarCB.hex download the latest binary .hex file]. After installing, start TyCommander, with the Ekdahl FAR plugged into one of the USB ports on your computer you should get a screen similar to this:  &lt;br /&gt;
&lt;br /&gt;
  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1627</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1627"/>
		<updated>2025-06-23T17:29:11Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically open up the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features therefore it may be recommended to update the firmware at certain times. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability and cost and standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. &lt;br /&gt;
&lt;br /&gt;
=== Updating the firmware ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to update the firmware is by installing [https://koromix.dev/tytools TyTools] and upload a [https://github.com/Knaster/EkdahlFar/tree/master/bin/Release binary] of the firmware using Teensy Commander. &lt;br /&gt;
&lt;br /&gt;
After installing,  {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1626</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1626"/>
		<updated>2025-06-23T17:15:22Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the [[The Ekdahl FAR - Calibrations|firmware can to some degree compensate]] for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically open up the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like [[The Ekdahl FAR - Bowing wheels|changing the bowing wheel]] and [[The Ekdahl FAR - Changing the string|changing strings]] are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
=== Less frequent maintenance and repairs ===&lt;br /&gt;
The [https://github.com/Knaster/EkdahlFar firmware] inside the Ekdahl FAR is periodically updated, new versions may include bug fixes or added features. New features in the instrument may necessitate an updated version of the [[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration Utility]] in order to take advantage of them.&lt;br /&gt;
&lt;br /&gt;
Because the Ekdahl FAR is electro-mechanical, things will eventually break or get worn out. An effort has been made to find a middle ground in between durability, component availability and cost and standard parts have been used as much as possible inside the instrument. All 3D printed parts can be downloaded and printed using a regular SLA printer.  Most hardware can easily be bought online and any specialty components can be gotten from Knas. {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1625</id>
		<title>The Ekdahl FAR - Service</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Service&amp;diff=1625"/>
		<updated>2025-06-23T15:16:22Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: Created page with &amp;quot;== General service &amp;amp; maintenance == The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the firmware can to some degree compensate for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically open up the instrument.  === Periodic maintenance === Things like changing the bowing wheel and changing strings are...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General service &amp;amp; maintenance ==&lt;br /&gt;
The Ekdahl FAR requires periodic maintenance just like any acoustic instrument. One key difference from traditional instruments is that the firmware can to some degree compensate for changes and variability in the hardware, meaning one can sometimes simply change a few software parameters instead of having to physically open up the instrument.&lt;br /&gt;
&lt;br /&gt;
=== Periodic maintenance ===&lt;br /&gt;
Things like changing the bowing wheel and changing strings are very commonplace and aren&#039;t really considered maintenance. However, changing either of these may necessitate things like changing bridge heights, lowering or raising the mutes or bowing jack and changing the pickup height. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1624</id>
		<title>The Ekdahl FAR - Configuration utility - Concept and Installation</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1624"/>
		<updated>2025-06-10T22:27:36Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The concept of the Configuration Utility ==&lt;br /&gt;
[[File:The Configuration utility.png|thumb|The Configuration utility]]&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is a software that will connect to the Ekdahl FAR and reconfigure its internal parameters. It&#039;s important to realize that the &#039;&#039;configuration utility&#039;&#039; itself does not have any features that aren&#039;t already built in to the Ekdahl FAR, but rather it is just an interface for easily controlling its built-in parameters and commands. The reason that this needs to be pointed out is because everything that can be done with the &#039;&#039;configuration utility&#039;&#039; can be done either by manually sending the Ekdahl FAR various commands or invoking them through MIDI or CV mapping. For instance, in order to change the fundamental tuning of the Ekdahl FAR you don&#039;t &#039;&#039;&#039;have&#039;&#039;&#039; to use the &#039;&#039;configuration utility&#039;&#039;, but you could map a slider on a MIDI Controller to send the appropriate commands. This means that a custom interface for the Ekdahl FAR, whether hardware or software, can be made and configured very quickly and easily. When settings are saved in the &#039;&#039;configuration utility&#039;&#039;, these are saved into the instrument itself, thus the next time the Ekdahl FAR is powered on the same settings will be recalled whether it is connected to a computer or not.&lt;br /&gt;
&lt;br /&gt;
== Software design choices ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is not considered a primary part of the Ekdahl FAR since it isn&#039;t strictly needed, but being able to easily change parameters in the instrument is clearly beneficial. The software is &#039;&#039;open source&#039;&#039; and has been written with portability in mind, having a single software that can run on multiple different systems (Linux, MacOS, Windows etc.) is key both in terms of user access and due to the fact that Knas has no possibility of maintaining several different software variations for different systems. Since even maintaining a single software can be challenging for a single individual, and because capitalism is the greatest of evils, the choice was made to make the software &#039;&#039;open source&#039;&#039; so anyone with the skills required can help make it better. For these reasons the software is written in Python using QT as the graphical interface, this means that any system wanting to run the software &amp;lt;u&amp;gt;has&amp;lt;/u&amp;gt; to be able to install these frameworks of the appropriate versions.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is currently considered to be in beta development stage (2025-01-20) and will be so until Knas has gotten enough satisfiable user feedback. For this reason no binary releases of the software has yet to be made and the user will have to invoke the install scripts appropriate for their system manually.&lt;br /&gt;
&lt;br /&gt;
The first step in the installation process is to download the software from its GitHub page &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
https://github.com/Knaster/EkdahlFarConfig&lt;br /&gt;
&lt;br /&gt;
On the page there&#039;s a green button with the caption &amp;quot;code&amp;quot;, pressing this will reveal a drop-down menu with the option &amp;quot;Download ZIP&amp;quot; at the bottom. Download and extract the .ZIP file into any directory.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;All systems&amp;lt;/u&amp;gt; will need to have Python v3.10 or later and Qt6 / PySide6 installed, some of the below scripts will try to attempt to find out if these are installed and may launch an installer if not. It is recommended that these be installed before attempting to install the &#039;&#039;Configuration utility&#039;&#039; however.&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/&lt;br /&gt;
&lt;br /&gt;
https://www.qt.io/download-qt-installer-oss&lt;br /&gt;
&lt;br /&gt;
Furthermore the following python packages are required&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pyside6, pyserial, mido, sympy, pyqt6-charts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Linux ==&lt;br /&gt;
Open a Terminal in the folder where you extracted the .zip file to and install Python&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
apt install python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure that apt is installing Python version 3.10 or later.&lt;br /&gt;
&lt;br /&gt;
It is suggested that the dependencies are installed in a specific python environment&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -m venv ./venv&lt;br /&gt;
./venv/bin/pip3 install pyside6 pyserial mido sympy pyqt6-charts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
To run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./run_linux.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Windows ==&lt;br /&gt;
{{mbox|text=Windows 11 will by default block the running of the setup file, in order to unblock it left-click on &#039;setup_win.bat&#039; in the directory where the files have been extracted, then right-click on it and choose &#039;properties&#039;. On the bottom right check the &#039;unblock&#039; box and press OK. }}&lt;br /&gt;
&lt;br /&gt;
Right-click on &#039;setup_win.bat&#039; and choose &#039;run as administrator&#039; and click &#039;yes&#039;. &lt;br /&gt;
&lt;br /&gt;
If Python is not installed, this will launch the Python installer and exit and you have to run it again&lt;br /&gt;
&lt;br /&gt;
The batch script will first install all python depencies and then it will copy the program files to &lt;br /&gt;
&#039;C:\Program Files\Ekdahl FAR Configuration Utility&#039; and create an icon in the start menu.&lt;br /&gt;
&lt;br /&gt;
== Installing on MacOS ==&lt;br /&gt;
&lt;br /&gt;
{{mbox|text=As of this writing (2025-01-20) the software has only been successfully installed on MacOS Ventura (13) and Sequoia (15)}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS 12 requires XCode to be installed, the latest version that works on MacOS 12 is XCode 14.2 which can be downloaded from https://archive.org/details/xcode-14.2. By downloading this, extracting it and dragging it into the Applications folder, the Configuration utility has been successfully installed. If the installer still complains you may have to start a terminal, go to the folder where the Configuration utility has been downloaded and run &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; sudo xcode-select -s /Applications/Xcode.app/Contents/Developer&lt;br /&gt;
./setup_mac.command&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS Sequoia (15) will give you the warning &amp;quot;&#039;setup_mac.command&#039; was not opened&amp;quot; and some crap about malware. This is due to apples forever gatekeeping against independent and not-for-profit software development. To circumvent this, if you have tried to run the file once you can go to the apple menu at the top left and choose &amp;quot;system settings&amp;quot;, here scroll down to &amp;quot;privacy &amp;amp; security&amp;quot; and it will say &amp;quot;&#039;setup_mac.command&#039; was blocked to protect your mac&#039; - press &amp;quot;Open Anyway&amp;quot; to continue the installation }}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
run &#039;setup_mac.command&#039; from finder&lt;br /&gt;
&lt;br /&gt;
The script will install Handbrake (if not present) which in turn will install Python 3.10 or later and the required python dependencies.&lt;br /&gt;
It will also copy the program files to &#039;/Applications/Ekdahl FAR Configuration Utility&#039; and create a launcher icon&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Overview|Configuration utility - Overview]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1623</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1623"/>
		<updated>2025-02-03T21:11:20Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MIDI commands&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ADC / Control box commands&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MIDI commands&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands setting parameters relating to the bow PID&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands relating to bow frequency control&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling harmonic series&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesdata&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, requires [series] and returns &#039;&#039;name&#039;&#039; and &#039;&#039;ratios&#039;&#039; of the &#039;&#039;harmonic series&#039;&#039; given&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[series]:[name]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands relating to the bowing motor&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling bow pressure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for solenoid control&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling the mute&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for bow actuators&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatoradd&amp;lt;/s&amp;gt;&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorset&amp;lt;/s&amp;gt;&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorload&amp;lt;/s&amp;gt;&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorid&amp;lt;/s&amp;gt;&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1622</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1622"/>
		<updated>2025-02-03T21:06:45Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MIDI commands&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ADC / Control box commands&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MIDI commands&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling harmonic series&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesdata&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, requires [series] and returns &#039;&#039;name&#039;&#039; and &#039;&#039;ratios&#039;&#039; of the &#039;&#039;harmonic series&#039;&#039; given&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[series]:[name]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Various&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands relating to the bowing motor&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling bow pressure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for solenoid control&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for controlling the mute&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands for bow actuators&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatoradd&amp;lt;/s&amp;gt;&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorset&amp;lt;/s&amp;gt;&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorload&amp;lt;/s&amp;gt;&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorid&amp;lt;/s&amp;gt;&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1621</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1621"/>
		<updated>2025-02-03T20:57:36Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesdata&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, requires [series] and returns &#039;&#039;name&#039;&#039; and &#039;&#039;ratios&#039;&#039; of the &#039;&#039;harmonic series&#039;&#039; given&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[series]:[name]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatoradd&amp;lt;/s&amp;gt;&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorset&amp;lt;/s&amp;gt;&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorload&amp;lt;/s&amp;gt;&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;bowactuatorid&amp;lt;/s&amp;gt;&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1620</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1620"/>
		<updated>2025-02-03T19:12:53Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesdata&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, requires [series] and returns &#039;&#039;name&#039;&#039; and &#039;&#039;ratios&#039;&#039; of the &#039;&#039;harmonic series&#039;&#039; given&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[series]:[name]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatoradd&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorset&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorload&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorid&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1619</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1619"/>
		<updated>2025-02-03T19:12:10Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesdata&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, requires [series] and returns &#039;&#039;name&#039;&#039; and &#039;&#039;ratios&#039;&#039; of the &#039;&#039;harmonic series&#039;&#039; given&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatoradd&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorset&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorload&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorid&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1618</id>
		<title>The Ekdahl FAR</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1618"/>
		<updated>2025-01-27T02:16:56Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Ekdahl FAR - Overview.jpg|thumb|Ekdahl FAR Overview]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Ekdahl FAR is a string based electro-acoustic instrument whose main way of generating sound is by utilizing a [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] that rubs against the string and by very precisely controlling the speed of the wheel, emphasizing natural overtones in the string. The [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] is situated on a pivot which pushes the wheel into the string with a controllable [[The Ekdahl FAR - Getting started#pressure|pressure]] in order to affect both volume and harmonic content. To further extend the capabilities of the instrument it also has a [[The Ekdahl FAR - Hammer|hammer]], a variable [[The Ekdahl FAR - Mute|mute]] and a electromagnetic [[The Ekdahl FAR - Pickup|pickup]]. While the audio path on The Ekdahl FAR is entirely analog-acoustic, the internals of the instrument is a highly sophisticated network of sensors, motors and a built-in computer running a complex firmware allowing for precision control and interfacing via USB-MIDI, MIDI, CV and USB-Serial.&lt;br /&gt;
&lt;br /&gt;
Like all Knas instruments, the Ekdahl FAR - while a new and somewhat experimental concept - can be used for any regular musical composition and expression, but also allows for deep explorations of naturally occurring overtones within the realms of digital precision control and repeatability. The instrument is designed to perform excellently whether being in an improvisational setting, or being sequenced. All aspects of The Ekdahl FAR can be mapped to respond to any available &#039;&#039;control mechanisms&#039;&#039; (USB, MIDI, CV etc.) and emphasis has been put on configurability and modification both from a software and a hardware perspective.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The hardware&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - The Control box|The Control box]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Basic MIDI Setup|Basic MIDI Setup]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Tuning|Tuning]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Limits|Limits]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Calibrations|Automatic calibrations]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Changing the string|Changing the string]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing wheels|Bowing wheels and changing them]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing jack|The bowing jack]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Mute|The mute]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Pickup|The pickup]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Configuration utility&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Concept and Installation|Concept and Installation]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Overview|Overview]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Tuning tab|The &#039;&#039;Tuning&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Midi tab|The &#039;&#039;MIDI&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - CV tab|The &#039;&#039;CV&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Advanced tab|The &#039;&#039;Advanced&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Statistics tab|The &#039;&#039;Statistics&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Software tab|The &#039;&#039;Software&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appendix&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
&lt;br /&gt;
{{Docnav&lt;br /&gt;
|&lt;br /&gt;
|[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1617</id>
		<title>The Ekdahl FAR</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR&amp;diff=1617"/>
		<updated>2025-01-27T02:15:50Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Ekdahl FAR - Overview.jpg|thumb|Ekdahl FAR Overview]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Ekdahl FAR is a string based electro-acoustic instrument whose main way of generating sound is by utilizing a [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] that rubs against the string and by very precisely controlling the speed of the wheel, emphasizing natural overtones in the string. The [[The Ekdahl FAR - Getting started#bowing wheel|bowing wheel]] is situated on a pivot which pushes the wheel into the string with a controllable [[The Ekdahl FAR - Getting started#pressure|pressure]] in order to affect both volume and harmonic content. To further extend the capabilities of the instrument it also has a [[The Ekdahl FAR - Hammer|hammer]], a variable [[The Ekdahl FAR - Mute|mute]] and a electromagnetic [[The Ekdahl FAR - Pickup|pickup]]. While the audio path on The Ekdahl FAR is entirely analog-acoustic, the internals of the instrument is a highly sophisticated network of sensors, motors and a built-in computer running a complex firmware allowing for precision control and interfacing via USB-MIDI, MIDI, CV and USB-Serial.&lt;br /&gt;
&lt;br /&gt;
Like all Knas instruments, the Ekdahl FAR - while a new and somewhat experimental concept - can be used for any regular musical composition and expression, but also allows for deep explorations of naturally occurring overtones within the realms of digital precision control and repeatability. The instrument is designed to perform excellently whether being in an improvisational setting, or being sequenced. All aspects of The Ekdahl FAR can be mapped to respond to any available &#039;&#039;control mechanisms&#039;&#039; (USB, MIDI, CV etc.) and emphasis has been put on configurability and modification both from a software and a hardware perspective.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - The Control box|The Control box]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Basic MIDI Setup|Basic MIDI Setup]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Tuning|Tuning]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Limits|Limits]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Calibrations|Automatic calibrations]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Changing the string|Changing the string]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing wheels|Bowing wheels and changing them]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Bowing jack|The bowing jack]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Mute|The mute]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Pickup|The pickup]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Configuration utility&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Concept and Installation|Concept and Installation]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Overview|Overview]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Tuning tab|The &#039;&#039;Tuning&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Midi tab|The &#039;&#039;MIDI&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - CV tab|The &#039;&#039;CV&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Advanced tab|The &#039;&#039;Advanced&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Statistics tab|The &#039;&#039;Statistics&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Configuration utility - Software tab|The &#039;&#039;Software&#039;&#039; tab]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appendix&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
&lt;br /&gt;
[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
&lt;br /&gt;
{{Docnav&lt;br /&gt;
|&lt;br /&gt;
|[[The Ekdahl FAR - Getting started|Getting started]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1616</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1616"/>
		<updated>2025-01-27T00:16:49Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatoradd&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorset&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorload&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorid&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
Please note that &#039;&#039;commands&#039;&#039; may be added or subtracted from this list as the Ekdahl FAR &#039;&#039;firmware&#039;&#039; development progresses, the most sincere attempts will be made to keep this list up to date but no guarantees will be made.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1615</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1615"/>
		<updated>2025-01-27T00:12:47Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatoradd&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorset&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorload&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[id]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator id&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorid&lt;br /&gt;
|bai&lt;br /&gt;
|id&lt;br /&gt;
|Sets the &#039;&#039;id&#039;&#039; of the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|nooperation&lt;br /&gt;
|nop&lt;br /&gt;
|none&lt;br /&gt;
|Do absolutely, positively, nothing&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1614</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1614"/>
		<updated>2025-01-27T00:06:30Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurehold&lt;br /&gt;
|bph&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets &#039;&#039;bow hold&#039;&#039; off or on. If &#039;&#039;bow hold&#039;&#039; is on, any &#039;&#039;bowpressurerest&#039;&#039;-command will be ignored until &#039;&#039;bowpressurehold&#039;&#039; is set to off. Analog to the concept of &#039;&#039;infinite sustain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoid&lt;br /&gt;
|so&lt;br /&gt;
|[(&#039;0&#039;)]&lt;br /&gt;
|Sets the &#039;&#039;current solenoid&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;solenoid&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengage&lt;br /&gt;
|se&lt;br /&gt;
|[force (0 - 65535)]&lt;br /&gt;
|Engages the &#039;&#039;current solenoid&#039;&#039; with the &#039;&#039;force&#039;&#039; given, the &#039;&#039;force&#039;&#039; is mutiplied by the &#039;&#039;force multiplier&#039;&#039; as set by &#039;&#039;solenoidforcemultiplier&#039;&#039;. The &#039;&#039;force&#039;&#039; is scaled according to the &#039;&#039;solenoidmaxforce&#039;&#039; and &#039;&#039;solenoidminforce&#039;&#039; parameters, a &#039;&#039;force&#039;&#039; of &#039;&#039;0&#039;&#039; always means to not engage. Also see &#039;&#039;solenoidengageduration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoiddisengage&lt;br /&gt;
|sd&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Disengages the &#039;&#039;solenoid&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidmaxforce&lt;br /&gt;
|sxf&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidminforce&lt;br /&gt;
|sif&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the minimum hardware force used&lt;br /&gt;
|-&lt;br /&gt;
|solenoidforcemultiplier&lt;br /&gt;
|sfm&lt;br /&gt;
|[value (0 - 1)]&lt;br /&gt;
|Sets the value of the &#039;&#039;force multiplier&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|solenoidengageduration&lt;br /&gt;
|sed&lt;br /&gt;
|[duration (0 - 65535)]&lt;br /&gt;
|Sets the duration of the &#039;&#039;solenoid engagement&#039;&#039; in ɥS. if a value of &#039;&#039;0&#039;&#039; is set the &#039;&#039;solenoid&#039;&#039; will not disengage until a &#039;&#039;solenoiddisengage-&#039;&#039;command has been given. This latter behavior is &amp;lt;u&amp;gt;not encouraged&amp;lt;/u&amp;gt; as it &amp;lt;u&amp;gt;&#039;&#039;&#039;can ruin the instrument if improperly used&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|mutesetposition&lt;br /&gt;
|msp&lt;br /&gt;
|[position (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute position&#039;&#039;, scaled by the &#039;&#039;mutefullmuteposition&#039;&#039; and &#039;&#039;muterestposition&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmute&lt;br /&gt;
|mfm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;full mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmute&lt;br /&gt;
|mhm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;half mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterest&lt;br /&gt;
|mr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute&#039;&#039; in the &#039;&#039;mute rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavefull&lt;br /&gt;
|msf&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesavehalf&lt;br /&gt;
|msh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesaverest&lt;br /&gt;
|msr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to be equal to the current &#039;&#039;mute position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutefullmuteposition&lt;br /&gt;
|mfmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;full mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehalfmuteposition&lt;br /&gt;
|mhmp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;half mute position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|muterestposition&lt;br /&gt;
|mrp&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute rest position&#039;&#039; to &#039;&#039;value&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutesustain&lt;br /&gt;
|ms&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;mute sustain&#039;&#039; to &#039;&#039;off&#039;&#039; or &#039;&#039;on&#039;&#039;. When &#039;&#039;mute sustain&#039;&#039; is &#039;&#039;on&#039;&#039;, any &#039;&#039;mutefullmute-&#039;&#039;commands sent will be ignored until &#039;&#039;mute sustain&#039;&#039; is set to &#039;&#039;off&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutebackoff&lt;br /&gt;
|mbo&lt;br /&gt;
|[backoff (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;mute backoff&#039;&#039; to &#039;&#039;backoff&#039;&#039;, given in mS. The &#039;&#039;mute backoff&#039;&#039; sets the time that the &#039;&#039;mute&#039;&#039; stays in the &#039;&#039;mutefullmute&#039;&#039; position before automatically going to the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|mutehome&lt;br /&gt;
|mh&lt;br /&gt;
|none&lt;br /&gt;
|Homing the &#039;&#039;mute&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|mutecalibrate&lt;br /&gt;
|mca&lt;br /&gt;
|none&lt;br /&gt;
|Runs the &#039;&#039;mute calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatoradd&lt;br /&gt;
|baa&lt;br /&gt;
|none&lt;br /&gt;
|Add new bow &#039;&#039;actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowacutatorremove&lt;br /&gt;
|bar&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Removes the &#039;&#039;actuator&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorset&lt;br /&gt;
|bas&lt;br /&gt;
|[actuator]&lt;br /&gt;
|Sets the &#039;&#039;current actuator&#039;&#039; to the number given in the &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorload&lt;br /&gt;
|bal&lt;br /&gt;
|none&lt;br /&gt;
|Loads data from the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorsave&lt;br /&gt;
|bas&lt;br /&gt;
|none&lt;br /&gt;
|Saves the &#039;&#039;bow pressure position rest, bow pressure position engage&#039;&#039; and &#039;&#039;bow pressure position max&#039;&#039; into the &#039;&#039;current actuator&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatordata&lt;br /&gt;
|bad&lt;br /&gt;
|[actuator]:[engage]:[max]:[rest]:[name]&lt;br /&gt;
|Sets the &#039;&#039;bow pressure position engage, bow pressure position max, bow pressure position rest&#039;&#039; and &#039;&#039;actuator name&#039;&#039; of the &#039;&#039;actuator&#039;&#039; given by the first &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowactuatorcount&lt;br /&gt;
|bac&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of saved &#039;&#039;actuators&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1613</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1613"/>
		<updated>2025-01-26T22:50:18Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|bpb&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure baseline&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodifier&lt;br /&gt;
|bpm&lt;br /&gt;
|[pressure (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;pressure modifier&#039;&#039; value, scaled by the &#039;&#039;bowpressurepositionengage&#039;&#039; and &#039;&#039;bowpressurepositionmax&#039;&#039; parameters. The &#039;&#039;pressure baseline&#039;&#039; and &#039;&#039;pressure modifier&#039;&#039; forms the total &#039;&#039;pressure position&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurerest&lt;br /&gt;
|bpr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;rest position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengage&lt;br /&gt;
|bpe&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Puts the bow pressure in the &#039;&#039;engage position&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionmax&lt;br /&gt;
|bppx&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the maximum &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionengage&lt;br /&gt;
|bppe&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;engage&#039;&#039; &#039;&#039;position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurepositionrest&lt;br /&gt;
|bppr&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;rest position&#039;&#039; &amp;lt;u&amp;gt;hardware&amp;lt;/u&amp;gt; position of the &#039;&#039;bowing jack&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressureengagespeed&lt;br /&gt;
|bpes&lt;br /&gt;
|[speed (0 - 100)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when going from &#039;&#039;rest&#039;&#039; to &#039;&#039;engage&#039;&#039; or vice versa. Setting this value too high will result in the &#039;&#039;pressure motor&#039;&#039; loosing track and the instrument malfunctioning as a result. Setting this value too low will result in the instrument getting increased &#039;&#039;latency&#039;&#039; and feeling sluggish.&lt;br /&gt;
|-&lt;br /&gt;
|bowpressuremodulationspeed&lt;br /&gt;
|bpms&lt;br /&gt;
|[speed (0.1 - &#039;&#039;bpes&#039;&#039;)]&lt;br /&gt;
|Sets the speed of the &#039;&#039;pressure motor&#039;&#039; in RPM when at &#039;&#039;engage&#039;&#039; and modulating the pressure. The main purpose of this setting is to avoid the &#039;&#039;bowing motor&#039;&#039; slowing down too much when modulating the &#039;&#039;pressure&#039;&#039;, resulting in audible artifacts&lt;br /&gt;
|-&lt;br /&gt;
|sad&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1612</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1612"/>
		<updated>2025-01-26T21:38:42Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorrun&lt;br /&gt;
|bmr&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[(0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; to off or on &lt;br /&gt;
|-&lt;br /&gt;
|bowmotordirectpwm&lt;br /&gt;
|bmdp&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; power in 16-bit PWM values, requires that the &#039;&#039;PID&#039;&#039; is turned off&lt;br /&gt;
|-&lt;br /&gt;
|bowmotortimeout&lt;br /&gt;
|bmt&lt;br /&gt;
|[ms (0 - 65535)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; shutdown timeout after bow having been put into the rest position, given in milli-seconds&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmax&lt;br /&gt;
|bmsx&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; maximum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorspeedmin&lt;br /&gt;
|bmsi&lt;br /&gt;
|[pwm (0 - 65535)]&lt;br /&gt;
|Sets &#039;&#039;bow motor&#039;&#039; minimum speed in 16-bit PWM&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorvoltage&lt;br /&gt;
|bmv&lt;br /&gt;
|[voltage (1.2 - 9)]&lt;br /&gt;
|Sets the &#039;&#039;bow motor&#039;&#039; voltage&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfrequency&lt;br /&gt;
|bmf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read &#039;&#039;bow motor frequency&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrent&lt;br /&gt;
|bmc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last read current usage of the &#039;&#039;bowing motor&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorcurrentlimit&lt;br /&gt;
|bmcl&lt;br /&gt;
|[current]&lt;br /&gt;
|Sets the current limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;amperes&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorpowerlimit&lt;br /&gt;
|bmpl&lt;br /&gt;
|[power]&lt;br /&gt;
|Sets the power limit of the &#039;&#039;bowing motor&#039;&#039; in &#039;&#039;watts&#039;&#039;, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotorfaultcommands&lt;br /&gt;
|bmfc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when a motor fault is tripped, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowmotoroverpowercommands&lt;br /&gt;
|bmopc&lt;br /&gt;
|[command string]&lt;br /&gt;
|Sets the &#039;&#039;commands&#039;&#039; to execute when the &#039;&#039;bowing motor&#039;&#039; is over the power limit, &amp;lt;u&amp;gt;used to safeguard the motor, &#039;&#039;&#039;can ruin the instrument if improperly set&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bowpressurebaseline&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1611</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1611"/>
		<updated>2025-01-26T21:16:39Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[(set  only) series]:[(set only) name]:[ratios]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;series&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number. On return, only returns &#039;&#039;ratios&#039;&#039; of the &#039;&#039;current harmonic list&#039;&#039; (takes no &#039;&#039;parameters&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratio&lt;br /&gt;
|bhsr&lt;br /&gt;
|[harmonic]:[ratio]&lt;br /&gt;
|Sets the &#039;&#039;ratio&#039;&#039; of the given &#039;&#039;harmonic number&#039;&#039; in the &#039;&#039;current harmonic series&#039;&#039;. Will increase the number of ratios in the series if needed&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesratioremove&lt;br /&gt;
|bhsrr&lt;br /&gt;
|[ratio]&lt;br /&gt;
|Removes the &#039;&#039;ratio&#039;&#039; given, will move all &#039;&#039;ratios&#039;&#039; with a higher &#039;&#039;harmonic number&#039;&#039; in the series. Cannot remove all &#039;&#039;ratios&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriescount&lt;br /&gt;
|bhsc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;harmonic series&#039;&#039; and their &#039;&#039;names&#039;&#039; in the format &#039;&#039;ratios:name1:name2 [etc]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriessave&lt;br /&gt;
|bhss&lt;br /&gt;
|[name]:[series]&lt;br /&gt;
|Saves the current &#039;&#039;harmonic series&#039;&#039; into the slot given by the second &#039;&#039;parameter&#039;&#039; with the name give in the first &#039;&#039;parameter&#039;&#039;. Note that this &#039;&#039;command&#039;&#039; does &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; save it into flash memory&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseriesremove&lt;br /&gt;
|bhsrm&lt;br /&gt;
|[series]&lt;br /&gt;
|Removes the &#039;&#039;harmonic series&#039;&#039; given in the &#039;&#039;parameter&#039;&#039;. Shifts all &#039;&#039;series&#039;&#039;&#039; with a higher &#039;&#039;series&#039;&#039; number&lt;br /&gt;
|-&lt;br /&gt;
|bowstatus&lt;br /&gt;
|bs&lt;br /&gt;
|none&lt;br /&gt;
|Outputs debugging data. Deprecated&lt;br /&gt;
|-&lt;br /&gt;
|pickupstringfrequency&lt;br /&gt;
|psf&lt;br /&gt;
|none&lt;br /&gt;
|Returns the fundamental frequency calculated from the current audio signal if, applicable&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiopeak&lt;br /&gt;
|pap&lt;br /&gt;
|none&lt;br /&gt;
|Returns the peak amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|pickupaudiorms&lt;br /&gt;
|par&lt;br /&gt;
|none&lt;br /&gt;
|Returns the [[wikipedia:Root_mean_square|RMS]] amplitude of the current audio signal&lt;br /&gt;
|-&lt;br /&gt;
|bowdebugmeasuretimetotarget&lt;br /&gt;
|bdmtt&lt;br /&gt;
|[frequency]&lt;br /&gt;
|Measure the time it takes to change from the current frequency to the target frequency, used to debug the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowhome&lt;br /&gt;
|bh&lt;br /&gt;
|none&lt;br /&gt;
|Homing bow, used at startup and in case of the bow loosing position&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibrateall&lt;br /&gt;
|bca&lt;br /&gt;
|none&lt;br /&gt;
|Performs all calibration routines for a single bow available in the given firmware&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratespeed&lt;br /&gt;
|bcf&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;bowing speed calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratepressure&lt;br /&gt;
|bcp&lt;br /&gt;
|none&lt;br /&gt;
|Performs a &#039;&#039;pressure calibration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcalibratestablethreshold&lt;br /&gt;
|bcst&lt;br /&gt;
|none&lt;br /&gt;
|Sets the &#039;&#039;stable threshold&#039;&#039; value used &lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1610</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1610"/>
		<updated>2025-01-26T20:07:30Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicseries&lt;br /&gt;
|bhs&lt;br /&gt;
|[series]&lt;br /&gt;
|Sets the &#039;&#039;current harmonic series&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowharmonicserieslist&lt;br /&gt;
|bhsl&lt;br /&gt;
|[slot:name:ratio1:ratio2[:etc]]&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;ratios&#039;&#039; and the &#039;&#039;name&#039;&#039; of the &#039;&#039;harmonic list&#039;&#039; in the given &#039;&#039;slot&#039;&#039;. There can be any number of &#039;&#039;ratio&#039;&#039;-parameters and this effectively sets the number of &#039;&#039;harmonics&#039;&#039; per octave. If required, empty &#039;&#039;harmonic lists&#039;&#039; will be added until &#039;&#039;slot&#039;&#039; is a valid number.&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1609</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1609"/>
		<updated>2025-01-26T19:42:59Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number (0)]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;local&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|bow&lt;br /&gt;
|bow&lt;br /&gt;
|[bow (0)]&lt;br /&gt;
|Sets the &#039;&#039;current bow.&#039;&#039; This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;bow&#039;&#039; per &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpid&lt;br /&gt;
|bpid&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets whether the [[wikipedia:Proportional–integral–derivative_controller|Proprtional-Integral-Deriviate controller]] is on or off. For all normal operation, the &#039;&#039;PID&#039;&#039; should be turned on. If it is turned off the instrument will not be able to play specific frequencies, but will only respond to &#039;&#039;bowmotordirectpwm&#039;&#039;-commands&lt;br /&gt;
|-&lt;br /&gt;
|bowpidki&lt;br /&gt;
|bpki&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;ki&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkp&lt;br /&gt;
|bpkp&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kp-&#039;&#039;value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidkd&lt;br /&gt;
|bpkd&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;kd&#039;&#039;-value of the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidintegratorerror&lt;br /&gt;
|bpie&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the minimum &#039;&#039;error value&#039;&#039; required in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039; for the integrator part of the &#039;&#039;PID&#039;&#039; to initiate correction&lt;br /&gt;
|-&lt;br /&gt;
|bowpidmaxerror&lt;br /&gt;
|bpme&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the maximum error correction attempted in each call to the &#039;&#039;PID loop&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidr&lt;br /&gt;
|bpir&lt;br /&gt;
|none&lt;br /&gt;
|Resets all data stored by the &#039;&#039;PID&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowpidpeakerror&lt;br /&gt;
|bpperr&lt;br /&gt;
|none&lt;br /&gt;
|Returns the last &#039;&#039;error value&#039;&#039; measured in between the &#039;&#039;set point&#039;&#039; and the &#039;&#039;process variable&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfrequecy&lt;br /&gt;
|bcf&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the frequency (in Hertz) that the &#039;&#039;bowing motor&#039;&#039; should attempt to run at&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolfundamental&lt;br /&gt;
|bcu&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;fundamental frequency&#039;&#039; that all &#039;&#039;harmonics&#039;&#039; are using as its base for calculations&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonic&lt;br /&gt;
|bch&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039;. See &#039;&#039;bowcontrolharmonicadd&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicadd&lt;br /&gt;
|bcha&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the number of &#039;&#039;harmonic numbers&#039;&#039; to add or remove to the value given in &#039;&#039;bowcontrolharmonic&#039;&#039; and &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Can be negative values&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbase&lt;br /&gt;
|bchb&lt;br /&gt;
|[float]&lt;br /&gt;
|Sets the &#039;&#039;harmonic number&#039;&#039; to use to calculate the &#039;&#039;motor speed&#039;&#039; but uses the value set by &#039;&#039;bowcontrolharmonicbasenote&#039;&#039; as its base. Includes any value set by &#039;&#039;bowcontrolharmonicadd&#039;&#039; and overwrites any value set by &#039;&#039;bowcontrolharmonic&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicbasenote&lt;br /&gt;
|bchbn&lt;br /&gt;
|[midi key (0-127)]&lt;br /&gt;
|Sets the &#039;&#039;MIDI&#039;&#039; key to use as the base for &#039;&#039;bowcontrolharmonicbase&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift&lt;br /&gt;
|bchsh&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. The &#039;&#039;harmonic shift&#039;&#039; is dependent on the range set by &#039;&#039;bowcontrolharmonicshiftrange&#039;&#039;. Also see &#039;&#039;bowcontrolharmonicshift5&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshiftrange&lt;br /&gt;
|bchsr&lt;br /&gt;
|[harmonics (0-36)]&lt;br /&gt;
|Sets the range of the &#039;&#039;bowcontrolharmonicshift&#039;&#039;-command. The &#039;&#039;parameter&#039;&#039; given denotes how many &#039;&#039;harmonic numbers&#039;&#039; to shift from the current &#039;&#039;harmonic number&#039;&#039; when the maximum &#039;&#039;harmonic shift&#039;&#039; has been set.&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolharmonicshift5&lt;br /&gt;
|bchs5&lt;br /&gt;
|[value (-32767 - 32767)]&lt;br /&gt;
|Sets how much to shift the &#039;&#039;motor speed&#039;&#039; away from the &#039;&#039;harmonic number&#039;&#039; set by &#039;&#039;bowcontrolharmonic&#039;&#039; or &#039;&#039;bowcontrolharmonicbase&#039;&#039;. Unlike &#039;&#039;bowcontrolharmonicshift&#039;&#039; this value is &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; calculated on a range of 5 octaves, meaning a maximum &#039;&#039;harmonic shift&#039;&#039; will equal 5 times the amount of &#039;&#039;harmonic ratios&#039;&#039; in the current &#039;&#039;harmonic table&#039;&#039;. This value is added to the &#039;&#039;harmonic shift&#039;&#039; set by &#039;&#039;bowcontrolharmonicshift&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bowcontrolspeedmode&lt;br /&gt;
|bcsm&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[mode (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Sets the &#039;&#039;speed mode&#039;&#039; where &#039;&#039;0 = Automatic&#039;&#039; and &#039;&#039;1 = Manual&#039;&#039;. The only difference in between these two modes is that &#039;&#039;Automatic&#039;&#039; will automatically turn off the motor when the bow has been set in its &#039;&#039;rest position&#039;&#039; and no frequency changing &#039;&#039;commands&#039;&#039; have been sent within the time period given by &#039;&#039;bowmotortimeout&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
a{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1608</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1608"/>
		<updated>2025-01-26T19:03:49Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|-&lt;br /&gt;
|midiconfiguration&lt;br /&gt;
|mcf&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Sets or returns the &#039;&#039;current MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationadd&lt;br /&gt;
|mcfa&lt;br /&gt;
|none&lt;br /&gt;
|Adds a new &#039;&#039;MIDI configuration&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationremove&lt;br /&gt;
|mcfr&lt;br /&gt;
|[config (0-9)]&lt;br /&gt;
|Removes the &#039;&#039;MIDI configuration&#039;&#039; denoted by the &#039;&#039;parameter&#039;&#039; passed. If there are &#039;&#039;MIDI configurations&#039;&#039; with a higher number, these are moved down the list. The &#039;&#039;current configuration&#039;&#039; may be changed during the execution of this &#039;&#039;command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationcount&lt;br /&gt;
|mcfc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;MIDI configurations&#039;&#039; available&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationname&lt;br /&gt;
|mcfn&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[config|name]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|When used as a &#039;set&#039;-command, the first &#039;&#039;parameter&#039;&#039; sets the name of the &#039;&#039;current MIDI configuration&#039;&#039;. When used to retrieve information, the first &#039;&#039;parameter&#039;&#039; sets &amp;lt;u&amp;gt;which&amp;lt;/u&amp;gt; &#039;&#039;MIDI configuration&#039;&#039; to return the name for&lt;br /&gt;
|-&lt;br /&gt;
|midieventhandler&lt;br /&gt;
|mev&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[noteon|noteoff|pat|cc[:0-127]|cat|pb|pc]:[command string]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to set the &#039;&#039;command string&#039;&#039; executed when a certain &#039;&#039;MIDI event&#039;&#039; occurs. The first &#039;&#039;parameter&#039;&#039; is the type of &#039;&#039;MIDI event.&#039;&#039; With exception for the &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039; MIDI event&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;. For &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;cc&#039;&#039;&#039; the second &#039;&#039;parameter&#039;&#039; is the &#039;&#039;controller number&#039;&#039; and the third &#039;&#039;parameter&#039;&#039; is the &#039;&#039;command string&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midiconfigurationdefaults&lt;br /&gt;
|mcfd&lt;br /&gt;
|none&lt;br /&gt;
|Reverts all settings of the &#039;&#039;current MIDI configuration&#039;&#039; to default values and remove any added &#039;&#039;continuous controllers&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|midireceivechannel&lt;br /&gt;
|mrc&lt;br /&gt;
|[channel (0-16)]&lt;br /&gt;
|Sets which &#039;&#039;MIDI channel&#039;&#039; the instrument will respond to. 1-16 sets the &#039;&#039;MIDI channel&#039;&#039; while &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; other values sets the instrument to &#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;Omni&#039;&#039;&#039; (the instrument responding to all channels)&lt;br /&gt;
|-&lt;br /&gt;
|midiallnotesoff&lt;br /&gt;
|mano&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[conditional (0|1)]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Clears the entire &#039;&#039;MIDI&#039;&#039; buffer of notes held and turns off any bowing&lt;br /&gt;
|-&lt;br /&gt;
|adccommandmap&lt;br /&gt;
|acm&lt;br /&gt;
|[channel]:[command string]&lt;br /&gt;
|Sets the &#039;&#039;command string&#039;&#039; associated with the &#039;&#039;analog-to-digital converter channel&#039;&#039; of the &#039;&#039;Control box&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|adcdefaults&lt;br /&gt;
|acd&lt;br /&gt;
|none&lt;br /&gt;
|Sets &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;command strings&#039;&#039; associated with &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; &#039;&#039;analog-to-digital converter channels&#039;&#039; to their default values&lt;br /&gt;
|-&lt;br /&gt;
|adcread&lt;br /&gt;
|adcr&lt;br /&gt;
|[channel]:[return only: value]&lt;br /&gt;
|Returns the last value read by the &#039;&#039;analog-to-digital converter&#039;&#039; of the &#039;&#039;Command box&#039;&#039; on the &#039;&#039;channel&#039;&#039; given. This value is sent automatically any time a change in data is read&lt;br /&gt;
|-&lt;br /&gt;
|adcsettings&lt;br /&gt;
|adcs&lt;br /&gt;
|[channel]:[averages]:[interrupterrorthreshold]:[continuouserrorthreshold]:[continuoustimeout]&lt;br /&gt;
|Sets the settings for the &#039;&#039;averager&#039;&#039; used for the given &#039;&#039;Control box analog-to-digital channel&#039;&#039;. &#039;&#039;Averages&#039;&#039; denote number of values read and averaged, &#039;&#039;interrupterrorthreshold&#039;&#039; sets the value change required for the &#039;&#039;Control box&#039;&#039; to report a new value. The &#039;&#039;continuouserrorthreshold&#039;&#039; and &#039;&#039;continuoustimeout&#039;&#039; are used to allow for &#039;&#039;continuous&#039;&#039; changes. See the &#039;&#039;firmware&#039;&#039; for more information&lt;br /&gt;
|-&lt;br /&gt;
|expressionparserevaluate&lt;br /&gt;
|epev&lt;br /&gt;
|[expression]&lt;br /&gt;
|Evaluates the given &#039;&#039;expression&#039;&#039; and returns the calculated value. Used for debugging&lt;br /&gt;
|-&lt;br /&gt;
|testadclatency&lt;br /&gt;
|tal&lt;br /&gt;
|[value (0 - 65535)]&lt;br /&gt;
|Debugging command to test ADC latency&lt;br /&gt;
|-&lt;br /&gt;
|testadclatencyreturn&lt;br /&gt;
|talr&lt;br /&gt;
|none&lt;br /&gt;
|Stops ADC latency testing started with &#039;&#039;tal&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|testadcminmac&lt;br /&gt;
|tamm&lt;br /&gt;
|[channel]&lt;br /&gt;
|Debugging command to test the min/max value for a given &#039;&#039;channel&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
beep{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1607</id>
		<title>The Ekdahl FAR - Command reference</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Command_reference&amp;diff=1607"/>
		<updated>2025-01-26T17:57:09Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The &#039;&#039;commands&#039;&#039; in the Ekdahl FAR are using a certain &#039;&#039;naming convention&#039;&#039; to make it more clear which parts of the instrument a certain &#039;&#039;command&#039;&#039; is dealing with. Furthermore commands can be global or local, global commands change settings that will affect the entire instrument, local commands change settings depending on previously set commands. The idea of local commands is a future-proofing of the Ekdahl FAR firmware and can generally be ignored for the time being. The first part of many &#039;&#039;command&#039;&#039;-names are a prefix that denotes category, the &#039;&#039;global&#039;&#039; categories as of this writing (2025-01-26) are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;global*&#039;&#039; - commands that have a global reach&lt;br /&gt;
* &#039;&#039;midi*&#039;&#039; - commands that deal with &#039;&#039;MIDI&#039;&#039;&lt;br /&gt;
* &#039;&#039;adc*&#039;&#039; - commands that deal with the &#039;&#039;Control box&#039;&#039; and its &#039;&#039;analog-to-digital converter&#039;&#039;&lt;br /&gt;
* &#039;&#039;expressionparser&#039;&#039; - commands that deal with how &#039;&#039;commands&#039;&#039; are interpreted and parsed, mainly used for debugging&lt;br /&gt;
* &#039;&#039;test&#039;&#039;* - commands made for testing and debugging&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;global&#039;&#039; commands as of this writing (2025-01-26) are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Long name&lt;br /&gt;
!Short name&lt;br /&gt;
!Parameters&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|requestinfo&lt;br /&gt;
|rqi&lt;br /&gt;
|[command]:[optional parameters]&lt;br /&gt;
|Uses a &#039;&#039;command&#039;&#039;-name to retrieve rather than set information associated with it, some commands have no information associated and will return nothing. Some commands require the use of optional &#039;&#039;parameters&#039;&#039; to specify which information that is to be retrieved.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|m&lt;br /&gt;
|[module number]&lt;br /&gt;
|Sets the current &#039;&#039;module&#039;&#039;. This command is intended for future versions of the Ekdahl FAR that may have more than one &#039;&#039;string module.&#039;&#039; Currently &#039;0&#039; is the only valid &#039;&#039;parameter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|modulecount&lt;br /&gt;
|mc&lt;br /&gt;
|none&lt;br /&gt;
|Returns the number of &#039;&#039;modules&#039;&#039; in the Ekdahl FAR. Currently always returns &#039;1&#039;&lt;br /&gt;
|-&lt;br /&gt;
|debugprint&lt;br /&gt;
|dp&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;[command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug]:[0|1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Used to turn on or off whether the instrument will return certain information over &#039;&#039;USB-Serial&#039;&#039;. The first &#039;&#039;parameter&#039;&#039; is the category, the second &#039;&#039;parameter&#039;&#039; is a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|ver&lt;br /&gt;
|none&lt;br /&gt;
|Returns the current &#039;&#039;firmware&#039;&#039; version&lt;br /&gt;
|-&lt;br /&gt;
|globalsaveallparameters&lt;br /&gt;
|gsap&lt;br /&gt;
|none&lt;br /&gt;
|Saves all current data into the internal flash memory&lt;br /&gt;
|-&lt;br /&gt;
|globalloadallparameters&lt;br /&gt;
|glap&lt;br /&gt;
|none&lt;br /&gt;
|Loads all data saved into flash, effectively overwriting any changed parameters included in the last save&lt;br /&gt;
|-&lt;br /&gt;
|globalresetparameters&lt;br /&gt;
|grap&lt;br /&gt;
|none&lt;br /&gt;
|Resets all saved data in the flash memory, requires a immediate reset to be enacted&lt;br /&gt;
|-&lt;br /&gt;
|globaluservariable&lt;br /&gt;
|guv&lt;br /&gt;
|[variable number (0-9)]:[value (float)]&lt;br /&gt;
|Sets or returns the user variable defined in the first &#039;&#039;parameter,&#039;&#039; if used to set the variable, the second &#039;&#039;parameter&#039;&#039; is the value.&lt;br /&gt;
|}&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command langue|Command language]]&lt;br /&gt;
|[[The Ekdahl FAR - Specifications|Specifications]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1606</id>
		<title>The Ekdahl FAR - Configuration utility - Concept and Installation</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1606"/>
		<updated>2025-01-26T17:09:29Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The concept of the Configuration Utility ==&lt;br /&gt;
[[File:The Configuration utility.png|thumb|The Configuration utility]]&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is a software that will connect to the Ekdahl FAR and reconfigure its internal parameters. It&#039;s important to realize that the &#039;&#039;configuration utility&#039;&#039; itself does not have any features that aren&#039;t already built in to the Ekdahl FAR, but rather it is just an interface for easily controlling its built-in parameters and commands. The reason that this needs to be pointed out is because everything that can be done with the &#039;&#039;configuration utility&#039;&#039; can be done either by manually sending the Ekdahl FAR various commands or invoking them through MIDI or CV mapping. For instance, in order to change the fundamental tuning of the Ekdahl FAR you don&#039;t &#039;&#039;&#039;have&#039;&#039;&#039; to use the &#039;&#039;configuration utility&#039;&#039;, but you could map a slider on a MIDI Controller to send the appropriate commands. This means that a custom interface for the Ekdahl FAR, whether hardware or software, can be made and configured very quickly and easily. When settings are saved in the &#039;&#039;configuration utility&#039;&#039;, these are saved into the instrument itself, thus the next time the Ekdahl FAR is powered on the same settings will be recalled whether it is connected to a computer or not.&lt;br /&gt;
&lt;br /&gt;
== Software design choices ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is not considered a primary part of the Ekdahl FAR since it isn&#039;t strictly needed, but being able to easily change parameters in the instrument is clearly beneficial. The software is &#039;&#039;open source&#039;&#039; and has been written with portability in mind, having a single software that can run on multiple different systems (Linux, MacOS, Windows etc.) is key both in terms of user access and due to the fact that Knas has no possibility of maintaining several different software variations for different systems. Since even maintaining a single software can be challenging for a single individual, and because capitalism is the greatest of evils, the choice was made to make the software &#039;&#039;open source&#039;&#039; so anyone with the skills required can help make it better. For these reasons the software is written in Python using QT as the graphical interface, this means that any system wanting to run the software &amp;lt;u&amp;gt;has&amp;lt;/u&amp;gt; to be able to install these frameworks of the appropriate versions.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is currently considered to be in beta development stage (2025-01-20) and will be so until Knas has gotten enough satisfiable user feedback. For this reason no binary releases of the software has yet to be made and the user will have to invoke the install scripts appropriate for their system manually.&lt;br /&gt;
&lt;br /&gt;
The first step in the installation process is to download the software from its GitHub page &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
https://github.com/Knaster/EkdahlFarConfig&lt;br /&gt;
&lt;br /&gt;
On the page there&#039;s a green button with the caption &amp;quot;code&amp;quot;, pressing this will reveal a drop-down menu with the option &amp;quot;Download ZIP&amp;quot; at the bottom. Download and extract the .ZIP file into any directory.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;All systems&amp;lt;/u&amp;gt; will need to have Python v3.10 or later and Qt6 / PySide6 installed, some of the below scripts will try to attempt to find out if these are installed and may launch an installer if not. It is recommended that these be installed before attempting to install the &#039;&#039;Configuration utility&#039;&#039; however.&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/&lt;br /&gt;
&lt;br /&gt;
https://www.qt.io/download-qt-installer-oss&lt;br /&gt;
&lt;br /&gt;
Furthermore the following python packages are required&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pyside6, pyserial, mido, python-rtmidi, sympy, pyqt6-charts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Linux ==&lt;br /&gt;
Open a Terminal in the folder where you extracted the .zip file to and install Python&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
apt install python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure that apt is installing Python version 3.10 or later.&lt;br /&gt;
&lt;br /&gt;
It is suggested that the dependencies are installed in a specific python environment&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -m venv ./venv&lt;br /&gt;
./venv/bin/pip3 install pyside6 pyserial mido python-rtmidi sympy pyqt6-charts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
To run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./run_linux.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Windows ==&lt;br /&gt;
{{mbox|text=Windows 11 will by default block the running of the setup file, in order to unblock it left-click on &#039;setup_win.bat&#039; in the directory where the files have been extracted, then right-click on it and choose &#039;properties&#039;. On the bottom right check the &#039;unblock&#039; box and press OK. }}&lt;br /&gt;
&lt;br /&gt;
Right-click on &#039;setup_win.bat&#039; and choose &#039;run as administrator&#039; and click &#039;yes&#039;. &lt;br /&gt;
&lt;br /&gt;
If Python is not installed, this will launch the Python installer and exit and you have to run it again&lt;br /&gt;
&lt;br /&gt;
The batch script will first install all python depencies and then it will copy the program files to &lt;br /&gt;
&#039;C:\Program Files\Ekdahl FAR Configuration Utility&#039; and create an icon in the start menu.&lt;br /&gt;
&lt;br /&gt;
== Installing on MacOS ==&lt;br /&gt;
&lt;br /&gt;
{{mbox|text=As of this writing (2025-01-20) the software has only been successfully installed on MacOS Ventura (13) and Sequoia (15)}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS 12 requires XCode to be installed, the latest version that works on MacOS 12 is XCode 14.2 which can be downloaded from https://archive.org/details/xcode-14.2. By downloading this, extracting it and dragging it into the Applications folder, the Configuration utility has been successfully installed. If the installer still complains you may have to start a terminal, go to the folder where the Configuration utility has been downloaded and run &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; sudo xcode-select -s /Applications/Xcode.app/Contents/Developer&lt;br /&gt;
./setup_mac.command&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS Sequoia (15) will give you the warning &amp;quot;&#039;setup_mac.command&#039; was not opened&amp;quot; and some crap about malware. This is due to apples forever gatekeeping against independent and not-for-profit software development. To circumvent this, if you have tried to run the file once you can go to the apple menu at the top left and choose &amp;quot;system settings&amp;quot;, here scroll down to &amp;quot;privacy &amp;amp; security&amp;quot; and it will say &amp;quot;&#039;setup_mac.command&#039; was blocked to protect your mac&#039; - press &amp;quot;Open Anyway&amp;quot; to continue the installation }}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
run &#039;setup_mac.command&#039; from finder&lt;br /&gt;
&lt;br /&gt;
The script will install Handbrake (if not present) which in turn will install Python 3.10 or later and the required python dependencies.&lt;br /&gt;
It will also copy the program files to &#039;/Applications/Ekdahl FAR Configuration Utility&#039; and create a launcher icon&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Overview|Configuration utility - Overview]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1605</id>
		<title>The Ekdahl FAR - Configuration utility - Concept and Installation</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Configuration_utility_-_Concept_and_Installation&amp;diff=1605"/>
		<updated>2025-01-26T17:06:55Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The concept of the Configuration Utility ==&lt;br /&gt;
[[File:The Configuration utility.png|thumb|The Configuration utility]]&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is a software that will connect to the Ekdahl FAR and reconfigure its internal parameters. It&#039;s important to realize that the &#039;&#039;configuration utility&#039;&#039; itself does not have any features that aren&#039;t already built in to the Ekdahl FAR, but rather it is just an interface for easily controlling its built-in parameters and commands. The reason that this needs to be pointed out is because everything that can be done with the &#039;&#039;configuration utility&#039;&#039; can be done either by manually sending the Ekdahl FAR various commands or invoking them through MIDI or CV mapping. For instance, in order to change the fundamental tuning of the Ekdahl FAR you don&#039;t &#039;&#039;&#039;have&#039;&#039;&#039; to use the &#039;&#039;configuration utility&#039;&#039;, but you could map a slider on a MIDI Controller to send the appropriate commands. This means that a custom interface for the Ekdahl FAR, whether hardware or software, can be made and configured very quickly and easily. When settings are saved in the &#039;&#039;configuration utility&#039;&#039;, these are saved into the instrument itself, thus the next time the Ekdahl FAR is powered on the same settings will be recalled whether it is connected to a computer or not.&lt;br /&gt;
&lt;br /&gt;
== Software design choices ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is not considered a primary part of the Ekdahl FAR since it isn&#039;t strictly needed, but being able to easily change parameters in the instrument is clearly beneficial. The software is &#039;&#039;open source&#039;&#039; and has been written with portability in mind, having a single software that can run on multiple different systems (Linux, MacOS, Windows etc.) is key both in terms of user access and due to the fact that Knas has no possibility of maintaining several different software variations for different systems. Since even maintaining a single software can be challenging for a single individual, and because capitalism is the greatest of evils, the choice was made to make the software &#039;&#039;open source&#039;&#039; so anyone with the skills required can help make it better. For these reasons the software is written in Python using QT as the graphical interface, this means that any system wanting to run the software &amp;lt;u&amp;gt;has&amp;lt;/u&amp;gt; to be able to install these frameworks of the appropriate versions.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The &#039;&#039;configuration utility&#039;&#039; is currently considered to be in beta development stage (2025-01-20) and will be so until Knas has gotten enough satisfiable user feedback. For this reason no binary releases of the software has yet to be made and the user will have to invoke the install scripts appropriate for their system manually.&lt;br /&gt;
&lt;br /&gt;
The first step in the installation process is to download the software from its GitHub page &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
https://github.com/Knaster/EkdahlFarConfig&lt;br /&gt;
&lt;br /&gt;
On the page there&#039;s a green button with the caption &amp;quot;code&amp;quot;, pressing this will reveal a drop-down menu with the option &amp;quot;Download ZIP&amp;quot; at the bottom. Download and extract the .ZIP file into any directory.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;All systems&amp;lt;/u&amp;gt; will need to have Python v3.10 or later and Qt6 / PySide6 installed, some of the below scripts will try to attempt to find out if these are installed and may launch an installer if not. It is recommended that these be installed before attempting to install the &#039;&#039;Configuration utility&#039;&#039; however.&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/&lt;br /&gt;
&lt;br /&gt;
https://www.qt.io/download-qt-installer-oss&lt;br /&gt;
&lt;br /&gt;
Furthermore the following python packages are required&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pyside6, pyserial, mido, python-rtmidi, sympy, pyqt6-charts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Linux ==&lt;br /&gt;
Open a Terminal in the folder where you extracted the .zip file to and install Python&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
apt install python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure that apt is installing Python version 3.10 or later.&lt;br /&gt;
&lt;br /&gt;
It is suggested that the dependencies are installed in a specific python environment&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -m venv ./venv&lt;br /&gt;
./venv/bin/pip3 install pyside6 pyserial mido python-rtmidi sympy pyqt6-charts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
To run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./run_linux.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Windows ==&lt;br /&gt;
{{mbox|text=Windows 11 will by default block the running of the setup file, in order to unblock it left-click on &#039;setup_win.bat&#039; in the directory where the files have been extracted, then right-click on it and choose &#039;properties&#039;. On the bottom right check the &#039;unblock&#039; box and press OK. }}&lt;br /&gt;
&lt;br /&gt;
Right-click on &#039;setup_win.bat&#039; and choose &#039;run as administrator&#039; and click &#039;yes&#039;. &lt;br /&gt;
&lt;br /&gt;
If Python is not installed, this will launch the Python installer and exit and you have to run it again&lt;br /&gt;
&lt;br /&gt;
The batch script will first install all python depencies and then it will copy the program files to &lt;br /&gt;
&#039;C:\Program Files\Ekdahl FAR Configuration Utility&#039; and create an icon in the start menu.&lt;br /&gt;
&lt;br /&gt;
== Installing on MacOS ==&lt;br /&gt;
&lt;br /&gt;
{{mbox|text=As of this writing (2025-01-20) the software has only been successfully installed on MacOS Ventura (13) and Sequoia (15)}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS 12 requires XCode to be installed, the latest version that works on MacOS 12 is XCode 14.2 which can be downloaded from the Internet Archive. By downloading this, extracting it and draggin it into the Applications folder, the Configuration utility has been successfully installed. If the installer still complains you may have to start a terminal, go to the folder where the Configuration utility has been downloaded and run &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; &lt;br /&gt;
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer&lt;br /&gt;
./setup_mac.command&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{mbox|text=MacOS Sequoia (15) will give you the warning &amp;quot;&#039;setup_mac.command&#039; was not opened&amp;quot; and some crap about malware. This is due to apples forever gatekeeping against independent and not-for-profit software development. To circumvent this, if you have tried to run the file once you can go to the apple menu at the top left and choose &amp;quot;system settings&amp;quot;, here scroll down to &amp;quot;privacy &amp;amp; security&amp;quot; and it will say &amp;quot;&#039;setup_mac.command&#039; was blocked to protect your mac&#039; - press &amp;quot;Open Anyway&amp;quot; to continue the installation }}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
run &#039;setup_mac.command&#039; from finder&lt;br /&gt;
&lt;br /&gt;
The script will install Handbrake (if not present) which in turn will install Python 3.10 or later and the required python dependencies.&lt;br /&gt;
It will also copy the program files to &#039;/Applications/Ekdahl FAR Configuration Utility&#039; and create a launcher icon&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Overview|Configuration utility - Overview]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1604</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=1604"/>
		<updated>2025-01-25T01:56:21Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** https://www.knasmusic.com|Knas website&lt;br /&gt;
** https://www.knasmusic.com/forum|Forum&lt;br /&gt;
* The Ekdahl FAR&lt;br /&gt;
** The Ekdahl FAR|- Introduction&lt;br /&gt;
** The_Ekdahl_FAR_-_Getting_started|- Getting started&lt;br /&gt;
** The Ekdahl FAR - The Control box|- The Control box&lt;br /&gt;
** The Ekdahl FAR - Basic MIDI Setup|- Basic MIDI Setup&lt;br /&gt;
** The Ekdahl FAR - Tuning|- Tuning&lt;br /&gt;
** The Ekdahl FAR - Limits|- Limits&lt;br /&gt;
** The Ekdahl FAR - Calibrations|- Calibrations&lt;br /&gt;
** The Ekdahl FAR - Changing the string|- Changing the string&lt;br /&gt;
** The Ekdahl FAR - Bowing wheels|- Bowing wheels&lt;br /&gt;
** The Ekdahl FAR - Bowing jack|- The bowing jack&lt;br /&gt;
** The Ekdahl FAR - Mute|- The mute&lt;br /&gt;
** The Ekdahl FAR - Hammer|- The hammer&lt;br /&gt;
** The Ekdahl FAR - Pickup|- The pickup&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration utility&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Overview|- Overview&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Tuning tab|- The Tuning tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Midi tab|- The MIDI tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - CV tab|- The CV tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Advanced tab|- The Advanced tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Statistics tab|- The Statistics tab&lt;br /&gt;
** The Ekdahl FAR - Configuration utility - Software tab|- The Software tab&lt;br /&gt;
** The Ekdahl FAR - Command langue|Command language&lt;br /&gt;
** The Ekdahl FAR - Command reference|Command reference&lt;br /&gt;
** The Ekdahl FAR - Specifications|Specifications&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Pickup&amp;diff=1603</id>
		<title>The Ekdahl FAR - Pickup</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Pickup&amp;diff=1603"/>
		<updated>2025-01-24T23:58:14Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Pickup ==&lt;br /&gt;
[[File:Pickup.png|thumb|Pickup details]]&lt;br /&gt;
The &#039;&#039;pickup&#039;&#039; in the Ekdahl FAR is an &#039;&#039;[[wikipedia:Pickup_(music_technology)#Active_and_passive_pickups|active electromagnetic pickup]]&#039;&#039;, it works on the principle of a steel object (the string in this case) inducing a signal into a coil (the &#039;&#039;pickup&#039;&#039;). For this reason the Ekdahl FAR will &amp;lt;u&amp;gt;only&amp;lt;/u&amp;gt; work with strings that are made of steel and other [[wikipedia:Ferromagnetism|ferromagnetic]] materials.&lt;br /&gt;
&lt;br /&gt;
All &#039;&#039;electromagnetic pickups&#039;&#039; are sensitive to [[wikipedia:Electromagnetic_interference|electromagnetic interference]], the Ekdahl FAR tries to minimize this issue by incorporating a &#039;&#039;shield&#039;&#039; that blocks out [[wikipedia:Electromagnetic_interference|EMI]] and directing sound pickup straight upwards. The &#039;&#039;pickup housing&#039;&#039; also contains an &#039;&#039;active amplifier&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In order to minimize noise, the pickup needs to be as close to the string as possible without touching it when struck with the &#039;&#039;hammer&#039;&#039; or starting to resonate.&lt;br /&gt;
&lt;br /&gt;
To move the the pickup use a 3mm [[wikipedia:Hex_key|hex key]] to loosen the &#039;&#039;pickup screw&#039;&#039;, this can be done even when the case is on. The &#039;&#039;pickup housing&#039;&#039; may stick a little bit to the holding plate, you can press lightly with your thumb to loosen it up. If you don&#039;t remove the [[wikipedia:Hex_key|hex key]] from the screw head you can use it to push the &#039;&#039;pickup&#039;&#039; into position and then fasten it. Do not over-tighten .&lt;br /&gt;
&lt;br /&gt;
The pickup screw has a &#039;&#039;grounding wire&#039;&#039; connected to the &#039;&#039;pickup&#039;&#039; amplifier, if the &#039;&#039;pickup&#039;&#039; is &amp;quot;buzzing&amp;quot; after having moved it, is possible that the &#039;&#039;pickup screw&#039;&#039; isn&#039;t making proper contact with the holding plate. Just loosen the pickup screw and re-fasten.{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
|[[The Ekdahl FAR - Configuration utility - Concept and Installation|Configuration utility]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=File:Pickup.png&amp;diff=1602</id>
		<title>File:Pickup.png</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=File:Pickup.png&amp;diff=1602"/>
		<updated>2025-01-24T22:50:30Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pickup details&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1601</id>
		<title>The Ekdahl FAR - Specifications</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1601"/>
		<updated>2025-01-24T20:44:03Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Main unit ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 117mm x 57mm x 158mm / 46&amp;quot; x 2¼&amp;quot; x 6¼&amp;quot; (max)&lt;br /&gt;
* Weight: 3.6Kg / 8lb&lt;br /&gt;
* Power supply: 12V DC, 2A center positive barrel plug&lt;br /&gt;
* Audio output: 1Vpp max&lt;br /&gt;
* USB: Micro-B connector @ USB 2, presents a USB-SERIAL and USB-MIDI device&lt;br /&gt;
* MIDI: TRS 3.5mm Type A, MIDI In only&lt;br /&gt;
* Bowing range / Motor frequency range: ~30 Hz - 650 Hz&amp;lt;ref name=&amp;quot;specs&amp;quot;&amp;gt;This is an &amp;lt;u&amp;gt;approximate&amp;lt;/u&amp;gt; range for the first generation of &#039;&#039;bowing motor&#039;&#039;s&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Max string length: &lt;br /&gt;
&lt;br /&gt;
== Control box ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 136 x 153 x 42mm / 5⅜&amp;quot; x 6&amp;quot; x 1⅝&amp;quot; stand alone (max), 22HP  x 25mm deep when mounted as euro rack&lt;br /&gt;
* Weight: 500g / 8oz&lt;br /&gt;
* Max CV/Gate voltage in recommended: 12V&lt;br /&gt;
* Voltage range for each CV input:&lt;br /&gt;
** Harmonic V/Oct (A0) - 0 - 4V / 4 octaves (1327.716/V) (&#039;&#039;Harmonic&#039;&#039; knob turned to &#039;&#039;0&#039;&#039;)&lt;br /&gt;
** Harmonic shift (A1) - +/-2.425 (No attenuation) &lt;br /&gt;
** Pressure (A3), Hammer (A4) &amp;amp; Mute (A7) - 0 - 3.6V (No attenuation)&lt;br /&gt;
** Gate (A5) - 0 - 3.3V&lt;br /&gt;
* ADC resolution: A0 - A3 @ 16-bits, A4 - A7 @ 12-bits&lt;br /&gt;
* Input configuration: A4 and A5 configured as &#039;&#039;trigger&#039;&#039;-inputs which reads new data &amp;lt;u&amp;gt;once&amp;lt;/u&amp;gt; when the input voltage has passed  a certain &#039;&#039;threshold&#039;&#039;, all voltages under the &#039;&#039;threshold&#039;&#039; are recorded as &#039;&#039;0&#039;&#039;. All other inputs are configured as regular inputs that are continuously read and their values recorded.&lt;br /&gt;
* CV input ring voltage/current for expression pedals: 5V @ 5mA / jack&lt;br /&gt;
* Audio output: 10Vpp (+/-5V)&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1600</id>
		<title>The Ekdahl FAR - Specifications</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1600"/>
		<updated>2025-01-24T20:35:50Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Main unit ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 117mm x 57mm x 158mm / 46&amp;quot; x 2¼&amp;quot; x 6¼&amp;quot; (max)&lt;br /&gt;
* Weight: 3.6Kg / 8lb&lt;br /&gt;
* Power supply: 12V DC, 2A center positive barrel plug&lt;br /&gt;
* Audio output: 1Vpp max&lt;br /&gt;
* USB: Micro-B connector @ USB 2, presents a USB-SERIAL and USB-MIDI device&lt;br /&gt;
* MIDI: TRS 3.5mm Type A, MIDI In only&lt;br /&gt;
* Bowing range / Motor frequency range: ~30 Hz - 650 Hz&amp;lt;ref name=&amp;quot;specs&amp;quot;&amp;gt;This is an &amp;lt;u&amp;gt;approximate&amp;lt;/u&amp;gt; range for the first generation of &#039;&#039;bowing motor&#039;&#039;s&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Max string length: &lt;br /&gt;
&lt;br /&gt;
== Control box ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 136 x 153 x 42mm / 5⅜&amp;quot; x 6&amp;quot; x 1⅝&amp;quot; stand alone (max), 22HP  x 25mm deep when mounted as euro rack&lt;br /&gt;
* Weight: 500g / 8oz&lt;br /&gt;
* Max CV/Gate voltage in recommended: 12V&lt;br /&gt;
* Voltage range for each CV input:&lt;br /&gt;
** Harmonic V/Oct (A0) - 0 - 4.9V / 49 Notes / ~5 octaves / 1327.716/V (&#039;&#039;Harmonic&#039;&#039; knob turned to &#039;&#039;0&#039;&#039;)&lt;br /&gt;
** Harmonic shift (A1) - +/-2.425 (No attenuation) &lt;br /&gt;
** Pressure (A3), Hammer (A4) &amp;amp; Mute (A7) - 0 - 3.6V (No attenuation)&lt;br /&gt;
** Gate (A5) - 0 - 3.3V&lt;br /&gt;
* ADC resolution: A0 - A3 @ 16-bits, A4 - A7 @ 12-bits&lt;br /&gt;
* Input configuration: A4 and A5 configured as &#039;&#039;trigger&#039;&#039;-inputs which reads new data &amp;lt;u&amp;gt;once&amp;lt;/u&amp;gt; when the input voltage has passed  a certain &#039;&#039;threshold&#039;&#039;, all voltages under the &#039;&#039;threshold&#039;&#039; are recorded as &#039;&#039;0&#039;&#039;. All other inputs are configured as regular inputs that are continuously read and their values recorded.&lt;br /&gt;
* CV input ring voltage/current for expression pedals: 5V @ 5mA / jack&lt;br /&gt;
* Audio output: 10Vpp (+/-5V)&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1599</id>
		<title>The Ekdahl FAR - Specifications</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1599"/>
		<updated>2025-01-24T20:35:29Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Main unit ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 117mm x 57mm x 158mm / 46&amp;quot; x 2¼&amp;quot; x 6¼&amp;quot; (max)&lt;br /&gt;
* Weight: 3.6Kg / 8lb&lt;br /&gt;
* Power supply: 12V DC, 2A center positive barrel plug&lt;br /&gt;
* Audio output: 1Vpp max&lt;br /&gt;
* USB: Micro-B connector @ USB 2, presents a USB-SERIAL and USB-MIDI device&lt;br /&gt;
* MIDI: TRS 3.5mm Type A, MIDI In only&lt;br /&gt;
* Bowing range / Motor frequency range: ~30 Hz - 650 Hz&amp;lt;ref name=&amp;quot;specs&amp;quot;&amp;gt;This is an &amp;lt;u&amp;gt;approximate&amp;lt;/u&amp;gt; range for the first generation of &#039;&#039;bowing motor&#039;&#039;s&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Max string length: &lt;br /&gt;
&lt;br /&gt;
== Control box ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 136 x 153 x 42mm / 5⅜&amp;quot; x 6&amp;quot; x 1⅝&amp;quot; stand alone (max), 22HP mounted as euro rack x 25mm deep&lt;br /&gt;
* Weight: 500g / 8oz&lt;br /&gt;
* Max CV/Gate voltage in recommended: 12V&lt;br /&gt;
* Voltage range for each CV input:&lt;br /&gt;
** Harmonic V/Oct (A0) - 0 - 4.9V / 49 Notes / ~5 octaves / 1327.716/V (&#039;&#039;Harmonic&#039;&#039; knob turned to &#039;&#039;0&#039;&#039;)&lt;br /&gt;
** Harmonic shift (A1) - +/-2.425 (No attenuation) &lt;br /&gt;
** Pressure (A3), Hammer (A4) &amp;amp; Mute (A7) - 0 - 3.6V (No attenuation)&lt;br /&gt;
** Gate (A5) - 0 - 3.3V&lt;br /&gt;
* ADC resolution: A0 - A3 @ 16-bits, A4 - A7 @ 12-bits&lt;br /&gt;
* Input configuration: A4 and A5 configured as &#039;&#039;trigger&#039;&#039;-inputs which reads new data &amp;lt;u&amp;gt;once&amp;lt;/u&amp;gt; when the input voltage has passed  a certain &#039;&#039;threshold&#039;&#039;, all voltages under the &#039;&#039;threshold&#039;&#039; are recorded as &#039;&#039;0&#039;&#039;. All other inputs are configured as regular inputs that are continuously read and their values recorded.&lt;br /&gt;
* CV input ring voltage/current for expression pedals: 5V @ 5mA / jack&lt;br /&gt;
* Audio output: 10Vpp (+/-5V)&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1598</id>
		<title>The Ekdahl FAR - Specifications</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1598"/>
		<updated>2025-01-24T20:34:21Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Main unit ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 117mm x 57mm x 158mm / 46&amp;quot; x 2¼&amp;quot; x 6¼&amp;quot; (max)&lt;br /&gt;
* Weight: 3.6Kg / 8lb&lt;br /&gt;
* Power supply: 12V DC, 2A center positive barrel plug&lt;br /&gt;
* Audio output: 1Vpp max&lt;br /&gt;
* USB: Micro-B connector @ USB 2, presents a USB-SERIAL and USB-MIDI device&lt;br /&gt;
* MIDI: TRS 3.5mm Type A, MIDI In only&lt;br /&gt;
* Bowing range / Motor frequency range: ~30 Hz - 650 Hz&amp;lt;ref name=&amp;quot;specs&amp;quot;&amp;gt;This is an &amp;lt;u&amp;gt;approximate&amp;lt;/u&amp;gt; range for the first generation of &#039;&#039;bowing motor&#039;&#039;s&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Max string length: &lt;br /&gt;
&lt;br /&gt;
== Control box ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 136 x 153 x 42mm / 5⅜&amp;quot; x 6&amp;quot; x 1⅝&amp;quot; stand alone (max), 22HP mounted as euro rack x 25mm deep&lt;br /&gt;
* Weight: 500g / 8oz&lt;br /&gt;
* Max CV/Gate voltage in recommended: 12V&lt;br /&gt;
* Voltage range for each CV input:&lt;br /&gt;
** Harmonic V/Oct (ADC0) - 0 - 4.9V / 49 Notes / ~5 octaves / 1327.716/V (&#039;&#039;Harmonic&#039;&#039; knob turned to &#039;&#039;0&#039;&#039;)&lt;br /&gt;
** Harmonic shift (ADC1) - +/-2.425 (No attenuation) &lt;br /&gt;
** Pressure (ADC3), Hammer (ADC4) &amp;amp; Mute (ADC7) - 0 - 3.6V (No attenuation)&lt;br /&gt;
** Gate (ADC5) - 0 - 3.3V&lt;br /&gt;
* ADC resolution: A0 - A3 @ 16-bits, A4 - A7 @ 12-bits&lt;br /&gt;
* Input configuration: A4 and A5 configured as &#039;&#039;trigger&#039;&#039;-inputs which reads new data &amp;lt;u&amp;gt;once&amp;lt;/u&amp;gt; when the input voltage has passed  a certain &#039;&#039;threshold&#039;&#039;, all voltages under the &#039;&#039;threshold&#039;&#039; are recorded as &#039;&#039;0&#039;&#039;. All other inputs are configured as regular inputs that are continuously read and their values recorded.&lt;br /&gt;
* CV input ring voltage/current for expression pedals: 5V @ 5mA / jack&lt;br /&gt;
* Audio output: 10Vpp (+/-5V)&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1597</id>
		<title>The Ekdahl FAR - Specifications</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Specifications&amp;diff=1597"/>
		<updated>2025-01-24T20:32:43Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Main unit ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 117mm x 57mm x 158mm / 46&amp;quot; x 2¼&amp;quot; x 6¼&amp;quot; (max)&lt;br /&gt;
* Weight: 3.6Kg / 8lb&lt;br /&gt;
* Power supply: 12V DC, 2A center positive barrel plug&lt;br /&gt;
* Audio output: 1Vpp max&lt;br /&gt;
* USB: Micro-B connector @ USB 2, presents a USB-SERIAL and USB-MIDI device&lt;br /&gt;
* MIDI: TRS 3.5mm Type A, MIDI In only&lt;br /&gt;
* Bowing range / Motor frequency range: ~30 Hz - 650 Hz&amp;lt;ref name=&amp;quot;specs&amp;quot;&amp;gt;This is an &amp;lt;u&amp;gt;approximate&amp;lt;/u&amp;gt; range for the first generation of &#039;&#039;bowing motor&#039;&#039;s&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Max string length: &lt;br /&gt;
&lt;br /&gt;
== Control box ==&lt;br /&gt;
&lt;br /&gt;
* Dimensions: 136 x 153 x 42mm / 5⅜&amp;quot; x 6&amp;quot; x 1⅝&amp;quot; stand alone (max), 22HP mounted as euro rack x 25mm deep&lt;br /&gt;
* Weight: 500g / 8oz&lt;br /&gt;
* Max CV/Gate voltage in recommended: 12V&lt;br /&gt;
* Voltage range for each CV input:&lt;br /&gt;
** Harmonic V/Oct (ADC0) - 0-4.9V (&#039;&#039;Harmonic&#039;&#039; knob turned to &#039;&#039;0&#039;&#039;) / 49 Notes / ~5 octaves / 1327.716/V&lt;br /&gt;
** Harmonic shift (ADC1) - +/-2.425 (No attenuation) &lt;br /&gt;
** Pressure (ADC3), Hammer (ADC4) &amp;amp; Mute (ADC7) - 0-3.6V (No attenuation)&lt;br /&gt;
** Gate (ADC5) - 0 - 3.3V&lt;br /&gt;
* ADC resolution: A0-A3 @ 16-bits, A4-A7 @ 12-bits&lt;br /&gt;
* Input configuration: A4 and A5 configured as &#039;&#039;trigger&#039;&#039;-inputs which reads new data &amp;lt;u&amp;gt;once&amp;lt;/u&amp;gt; when the input voltage has passed  a certain &#039;&#039;threshold&#039;&#039;, all voltages under the &#039;&#039;threshold&#039;&#039; are recorded as &#039;&#039;0&#039;&#039;. All other inputs are configured as regular inputs that are continuously read and their values recorded.&lt;br /&gt;
* CV input ring voltage/current for expression pedals: 5V @ 5mA / jack&lt;br /&gt;
* Audio output: 10Vpp (+/-5V)&lt;br /&gt;
&lt;br /&gt;
{{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Command reference|Command reference]]&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Mute&amp;diff=1596</id>
		<title>The Ekdahl FAR - Mute</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Mute&amp;diff=1596"/>
		<updated>2025-01-24T18:47:48Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mute technical.png|thumb|Mute technical details]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The mute consists of two parts, the &#039;&#039;upper mute&#039;&#039; and the &#039;&#039;lower mute&#039;&#039;. For the string to be completely muted, the string needs to be clamped in between these two mutes. By lowering the &#039;&#039;lower mute&#039;&#039; to a position where the string is not entirely muted through clamping, various other effects can be obtained. Placing it just below the string can for instance inhibit the string from doing wide swings, in general the &#039;&#039;fundamental&#039;&#039; has the widest swings and thus the fundamental can be suppressed while not affecting the higher harmonics. It can also be used to do pinch harmonics and other things.&lt;br /&gt;
&lt;br /&gt;
The mute may have to be adjusted at times, especially when changing into a string of a different size.&lt;br /&gt;
&lt;br /&gt;
Mechanically the &#039;&#039;lower mute&#039;&#039; works much the same as the [[The Ekdahl FAR - Bowing jack|bowing jack]].&lt;br /&gt;
&lt;br /&gt;
== Adjusting the mute ==&lt;br /&gt;
To adjust the &#039;&#039;upper mute&#039;&#039;, take a 2.7mm [[wikipedia:Hex_key|hex key]] and loosen the &#039;&#039;upper mute screw&#039;&#039;. Move the &#039;&#039;upper mute&#039;&#039; so that it&#039;s ~1mm above the string. This measurement is very approximate and depends on the maximum swing of the string, if the &#039;&#039;upper mute&#039;&#039; is too close to the string it may accidentally mute the string at full resonance. If the &#039;&#039;upper mute&#039;&#039; is too far away the &#039;&#039;lower mute&#039;&#039; may not be able to clamp the string hard enough against the &#039;&#039;upper mute&#039;&#039;, and if the string bends too much when muting an audible change in pitch may occur. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;lower mute&#039;&#039; uses the same concept of &#039;&#039;carriage screws&#039;&#039; as the bowing jack and is adjusted in the same way, remember that the same precautions &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; be taken. The distance in between the &#039;&#039;lower mute&#039;&#039; and the string follows the same rules as those for the &#039;&#039;upper mute&#039;&#039;. {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Bowing jack|The bowing jack]]&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Mute&amp;diff=1595</id>
		<title>The Ekdahl FAR - Mute</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Mute&amp;diff=1595"/>
		<updated>2025-01-24T18:47:07Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mute technical.png|thumb|Mute technical details]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The mute consists of two parts, the &#039;&#039;upper mute&#039;&#039; and the &#039;&#039;lower mute&#039;&#039;. For the string to be completely muted, the string needs to be clamped in between these two mutes. By lowering the &#039;&#039;lower mute&#039;&#039; to a position where the string is not entirely muted through clamping, various other effects can be obtained. Placing it just below the string can for instance inhibit the string from doing wide swings, in general the &#039;&#039;fundamental&#039;&#039; has the widest swings and thus the fundamental can be suppressed while not affecting the higher harmonics. It can also be used to do pinch harmonics and other things.&lt;br /&gt;
&lt;br /&gt;
The mute may have to be adjusted at times, especially when changing into a string of a different size.&lt;br /&gt;
&lt;br /&gt;
Mechanically the &#039;&#039;lower mute&#039;&#039; works much the same as the [[The Ekdahl FAR - Bowing jack|bowing jack]].&lt;br /&gt;
&lt;br /&gt;
== Adjusting the mute ==&lt;br /&gt;
To adjust the &#039;&#039;upper mute&#039;&#039;, take a 2.7mm [[wikipedia:Hex_key|hex key]] and loosen the &#039;&#039;upper mute screw&#039;&#039;. Move the &#039;&#039;upper mute&#039;&#039; so that it&#039;s ~1mm above the string. This measurement is very approximate and depends on the maximum swing of the string, if the &#039;&#039;upper mute&#039;&#039; is too close to the string it may accidentally mute the string at full resonance. If the &#039;&#039;upper mute&#039;&#039; is too far away the &#039;&#039;lower mute&#039;&#039; may not be able to clamp the string hard enough against the &#039;&#039;upper mute&#039;&#039;, and if the string bends too much an audible change in pitch may occur. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;lower mute&#039;&#039; uses the same concept of &#039;&#039;carriage screws&#039;&#039; as the bowing jack and is adjusted in the same way, remember that the same precautions &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; be taken. The distance in between the &#039;&#039;lower mute&#039;&#039; and the string follows the same rules as those for the &#039;&#039;upper mute&#039;&#039;. {{docnav&lt;br /&gt;
|[[The Ekdahl FAR - Bowing jack|The bowing jack]]&lt;br /&gt;
|[[The Ekdahl FAR - Hammer|The hammer]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Hammer&amp;diff=1594</id>
		<title>The Ekdahl FAR - Hammer</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Hammer&amp;diff=1594"/>
		<updated>2025-01-24T18:13:57Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Technical details ==&lt;br /&gt;
[[File:The Ekdahl FAR - Hammer.png|thumb|Hammer technical details]]&lt;br /&gt;
The hammer on the Ekdahl FAR generally doesn&#039;t need adjustment and the mechanism is quite straight forward, however for completion and to be thorough this information is included.&lt;br /&gt;
&lt;br /&gt;
The hammer on the Ekdahl FAR is actuated through the use of a [[wikipedia:Solenoid_(engineering)|solenoid]]. The &#039;&#039;solenoid&#039;&#039; being an electromagnetic device, it is encased in a &#039;&#039;shield&#039;&#039; in order to avoid [[wikipedia:Electromagnetic_interference|electromagnetic interference]] traveling into the [[The Ekdahl FAR - Pickup|pickup]] creating audible clicks and pops.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;solenoid&#039;&#039; and &#039;&#039;shield&#039;&#039; can be moved sideways by loosening two screws, this sets the amount of travel that the &#039;&#039;hammer&#039;&#039; has from its resting position until it touches the string. Increasing the travel of the &#039;&#039;hammer&#039;&#039; increases the force of the hammer hit against the string as the hammer has more time to accelerate, however it also increases the time from &#039;&#039;solenoid&#039;&#039; activation to the &#039;&#039;hammer&#039;&#039; hitting the string, effectively increasing &#039;&#039;mechanical latency&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Most musicians that have dealt with digital recording recognize the concept of &#039;&#039;latency&#039;&#039; as being a &amp;quot;lag&amp;quot; when for instance playing a &#039;&#039;MIDI&#039;&#039; keyboard with a software synth; at times there can be a noticeable delay in between key press and sound.&lt;br /&gt;
&lt;br /&gt;
The concept of &#039;&#039;mechanical latency&#039;&#039; is that when for instance playing a key on a piano, it will indeed take a moment from key press to the hammer hitting the string. Even tho this makes physical sense, the concept of &#039;&#039;mechanical latency&#039;&#039; came as a bit of a surprise in being an issue with the Ekdahl FAR. To make matters worse, the &#039;&#039;mechanical latency&#039;&#039; of the &#039;&#039;hammer&#039;&#039; is dependent on the force of the hammer hit - higher force means faster speed of the &#039;&#039;hammer&#039;&#039; resulting in the delay in between the &#039;&#039;solenoid&#039;&#039; activation and sound produced being reduced. For this reason, quieter &#039;&#039;hammer&#039;&#039; hits always have higher &#039;&#039;mechanical latency&#039;&#039; than louder ones. This may sound like a bad thing but in reality this would be the case for any acoustic piano as well (for instance).&lt;br /&gt;
&lt;br /&gt;
In order for the user to be able to change both the velocity and &#039;&#039;latency&#039;&#039; of the &#039;&#039;hammer&#039;&#039;, the &#039;&#039;hammer&#039;&#039; is adjustable. Certain strings, namely thinner ones, can produce heavy distortion if hit too hard.&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Hammer&amp;diff=1593</id>
		<title>The Ekdahl FAR - Hammer</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=The_Ekdahl_FAR_-_Hammer&amp;diff=1593"/>
		<updated>2025-01-24T17:08:05Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Technical details ==&lt;br /&gt;
[[File:The Ekdahl FAR - Hammer.png|thumb|Hammer technical details]]&lt;br /&gt;
The hammer on the Ekdahl FAR generally doesn&#039;t need adjustment and the mechanism is quite straight forward, however for completion and to be thorough this information is included.&lt;br /&gt;
&lt;br /&gt;
The hammer on the Ekdahl FAR is actuated through the use of a [[wikipedia:Solenoid_(engineering)|solenoid]]. The &#039;&#039;solenoid&#039;&#039; being an electromagnetic device, it is encased in a &#039;&#039;shield&#039;&#039; in order to avoid [[wikipedia:Electromagnetic_interference|electromagnetic interference]] traveling into the [[The Ekdahl FAR - Pickup|pickup]] creating audible clicks and pops.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;solenoid&#039;&#039; and &#039;&#039;shield&#039;&#039; can be moved sideways by loosening two screws, this sets the amount of travel that the &#039;&#039;hammer&#039;&#039; has from its resting position until it touches the string. Increasing the travel of the &#039;&#039;hammer&#039;&#039; increases the force of the hammer hit against the string as the hammer has more time to accelerate, however it also increases the time from &#039;&#039;solenoid&#039;&#039; activation to the &#039;&#039;hammer&#039;&#039; hitting the string, effectively increasing &#039;&#039;mechanical latency&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Most musicians that have dealt with digital recording recognize the concept of &#039;&#039;latency&#039;&#039; as being a &amp;quot;lag&amp;quot; when for instance playing a &#039;&#039;MIDI&#039;&#039; keyboard with a software synth; at times there can be a noticeable delay in between key press and sound.&lt;br /&gt;
&lt;br /&gt;
The concept of &#039;&#039;mechanical latency&#039;&#039; is that when for instance playing a key on a piano, it will indeed take a moment from key press to the hammer hitting the string. Even tho this makes physical sense, the concept of &#039;&#039;mechanical latency&#039;&#039; came as a bit of a surprise in being an issue with the Ekdahl FAR. To make matters worse, the &#039;&#039;mechanical latency&#039;&#039; of the &#039;&#039;hammer&#039;&#039; is dependent on the force of the hammer hit - higher force means faster speed of the &#039;&#039;hammer&#039;&#039; resulting in the delay in between the &#039;&#039;solenoid&#039;&#039; activation and sound produced being reduced. For this reason, quieter &#039;&#039;hammer&#039;&#039; hits always have higher &#039;&#039;mechanical latency&#039;&#039; than louder ones. This may sound like a bad thing but in reality this would be the case for any acoustic piano as well (for instance).&lt;br /&gt;
&lt;br /&gt;
In order for the user to be able to change both the velocity and &#039;&#039;latency&#039;&#039; of the &#039;&#039;hammer&#039;&#039;, the &#039;&#039;hammer&#039;&#039; was made adjustable. Certain strings, namely thinner ones, can produce heavy distortion if hit too hard.&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
	<entry>
		<id>http://knasmusic.com/wiki/index.php?title=File:The_Ekdahl_FAR_-_Hammer.png&amp;diff=1592</id>
		<title>File:The Ekdahl FAR - Hammer.png</title>
		<link rel="alternate" type="text/html" href="http://knasmusic.com/wiki/index.php?title=File:The_Ekdahl_FAR_-_Hammer.png&amp;diff=1592"/>
		<updated>2025-01-24T16:07:31Z</updated>

		<summary type="html">&lt;p&gt;Knaadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hammer technical details&lt;/div&gt;</summary>
		<author><name>Knaadmin</name></author>
	</entry>
</feed>