Event Script Language

Programming FlexFox transmitters is made virtually foolproof using a scripting language to describe transmitter operation for all ARDF events. Brief script files fully describe an event’s essential timing and operational parameters. For instance: one file is used for Classic 80m, another for Classic 2m, another for Sprint 80m, and another for Fox-O.

An event is added to a transmitter by storing its event file into the ESP8266 flash file system over wifi using an upload web page that the transmitter serves.

The ESP8266 serves up another web page listing all the event types stored in its file system. A user can modify certain event parameters on another web page that the transmitter serves. Editable parameters include those that are likely to change, such as start time, finish time, callsign to be sent, and transmit power levels.

Once an event is configured as desired, the user then needs only to select the type of functionality each transmitter is to exhibit, such as “Fox #1”, “Fox #2”, or “Homing Beacon”. Once an event file has been created and correctly configured, there is no way to misconfigure a transmitter.

The event files can be shared between transmitters over wifi, ensuring that all transmitters are utilizing the same event parameters.

Script Syntax

The scripting language defines one parameter per line using a keyword followed by a comma followed by any required parameter value. An example for setting an event’s user-readable name follows:

EVENT_NAME, “Classic 80m”

The entire event file for a Classic event requires 40 lines to describe the operation of all five fox transmitters, the homing beacon, plus all the event-specific settings such as start time, finish time, and frequencies to use:

EVENT_START
EVENT_NAME, “Classic 80m”
EVENT_BAND, 80
EVENT_CALLSIGN, “DE WB6FOX”
EVENT_CALLSIGN_SPEED, 20
EVENT_START_DATE_TIME, 2018-03-23T18:00:00Z
EVENT_FINISH_DATE_TIME, 2018-03-23T20:00:00Z
EVENT_MODULATION, CW
EVENT_NUMBER_OF_TX_TYPES, 2
TYPE1_TX_COUNT, 5
TYPE1_FREQ, 3510000
TYPE1_POWER_LEVEL, 2000
TYPE1_CODE_SPEED, 8
TYPE1_TX1_PATTERN, “MOE “
TYPE1_TX1_ON_TIME, 60
TYPE1_TX1_OFF_TIME, 240
TYPE1_TX1_DELAY_TIME, 0
TYPE1_TX2_PATTERN, “MOI “
TYPE1_TX2_ON_TIME, 60
TYPE1_TX2_OFF_TIME, 240
TYPE1_TX2_DELAY_TIME, 60
TYPE1_TX3_PATTERN, “MOS “
TYPE1_TX3_ON_TIME, 60
TYPE1_TX3_OFF_TIME, 240
TYPE1_TX3_DELAY_TIME, 120
TYPE1_TX4_PATTERN, “MOH “
TYPE1_TX4_ON_TIME, 60
TYPE1_TX4_OFF_TIME, 240
TYPE1_TX4_DELAY_TIME, 180
TYPE1_TX5_PATTERN, “MO5 “
TYPE1_TX5_ON_TIME, 60
TYPE1_TX5_OFF_TIME, 240
TYPE1_TX5_DELAY_TIME, 240
TYPE2_TX_COUNT, 1
TYPE2_FREQ, 3600000
TYPE2_POWER_LEVEL, 2000
TYPE2_CODE_SPEED, 8
TYPE2_TX1_PATTERN, “MO “
TYPE2_TX1_ON_TIME, 60
TYPE2_TX1_OFF_TIME, 0
TYPE2_TX1_DELAY_TIME, 0
EVENT_END

Here is a list of the available commands for an event with m transmitter types, n transmitters of type 1, and p transmitters of type m:

EVENT_START //Start flag- no parameters
EVENT_NAME, “human-readable-name”
EVENT_BAND, [80 | 2]
EVENT_CALLSIGN, “amateur-radio-callsign”
EVENT_CALLSIGN_SPEED, words-per-minute-PARIS
EVENT_START_DATE_TIME, yyyy-mm-ddThh:mm:ssZ
EVENT_FINISH_DATE_TIME, yyyy-mm-ddThh:mm:ssZ
EVENT_MODULATION, [CW | AM]
EVENT_NUMBER_OF_TX_TYPES, quantity-of-unique-tx-types*
TYPE1_TX_COUNT, quantity-of-transmitters-TxType-1
TYPE1_FREQ, frequency-in-Hz-TxType-1
TYPE1_POWER_LEVEL, power-in-mW-TxType-1
TYPE1_CODE_SPEED, words-per-minute-PARIS-TxType-1
TYPE1_TX1_PATTERN, “alphanumeric-pattern-TxType-1-Tx1″**
TYPE1_TX1_ON_TIME, seconds-on-the-air-TxType-1-Tx1
TYPE1_TX1_OFF_TIME, seconds-off-the-air-TxType-1-Tx1
TYPE1_TX1_DELAY_TIME, seconds-of-delay-before-first-transmission-Type-1-Tx1
.
.
.
TYPE1_TXn_PATTERN, “alphanumeric-pattern-TxType-1-Txn”**
TYPE1_TXn_ON_TIME, seconds-on-the-air-TxType-1-Txn
TYPE1_TXn_OFF_TIME, seconds-off-the-air-TxType-1-Txn
TYPE1_TXn_DELAY_TIME, seconds-of-delay-before-first-transmission-Type-1-Txn
.
.
.
.
.
.
TYPEm_TX_COUNT, quantity-of-transmitters-TxType-m
TYPEm_FREQ, frequency-in-Hz-TxType-m
TYPEm_POWER_LEVEL, power-in-mW-TxType-m
TYPEm_CODE_SPEED, words-per-minute-PARIS-TxType-m
TYPEm_TX1_PATTERN, “alphanumeric-pattern-TxType-m-Tx1″**
TYPEm_TX1_ON_TIME, seconds-on-the-air-TxType-m-Tx1
TYPEm_TX1_OFF_TIME, seconds-off-the-air-TxType-m-Tx1
TYPEm_TX1_DELAY_TIME, seconds-of-delay-before-first-transmission-Type-m-Tx1
.
.
.
TYPEm_TXp_PATTERN, “alphanumeric-pattern-TxType-m-Txp”**
TYPEm_TXp_ON_TIME, seconds-on-the-air-TxType-m-Txp
TYPEm_TXp_OFF_TIME, seconds-off-the-air-TxType-m-Txp
TYPEm_TXp_DELAY_TIME, seconds-of-delay-before-first-transmission-Type-m-Txp
EVENT_END //End flag – no parameters

* Transmitter Type = a group of transmitters that operate on the same frequency, power level, and code speed. They might send different Morse code patterns, and have different transmit time slots. Example Transmitter Types: fox, homing beacon.

** Alphanumeric Pattern = A series of Morse code characters sent by a specific transmitter. Examples: MOE, MOI, MOS

The event scripting language is able to describe complex event concepts, not just those currently used for ARDF. It can theoretically handle dozens of different types of transmitters, with dozens of transmitters of each type. Complex transmit cycle timing can be handled, even for transmitters of a certain type, whereby some remain on the air for seconds and others for minutes. Timing patterns are described with 1-second resolution: any multiple of 1 second can be used to specify transmitter timing parameters.

It also works just fine for a single transmitter sending one minute on and one minute off!