-
Notifications
You must be signed in to change notification settings - Fork 0
Loco Parser
const message = `<l 10 1 130 43>` // would come from the Command Station
const result = locoParser(message)
console.log(result);
// {
// key: 'l',
// parser: 'locoParser',
// params: {
// cabId: 10,
// register: 1,
// speed: 1, // See parseSpeedAndDirection()
// direction: 1, // See parseSpeedAndDirection()
// functionButtons: { // See parseFunctionButtons()
// '0': {
// value: 1
// },
// '1': {
// value: 1
// },
// '2': {
// value: 0
// },
// '3': {
// value: 1
// },
// '4': {
// value: 0
// },
// '5': {
// value: 1
// },
// '6': {
// value: 0
// },
// '7': {
// value: 0
// },
// '8': {
// value: 0
// },
// '9': {
// value: 0
// },
// '10': {
// value: 0
// },
// '11': {
// value: 0
// },
// '12': {
// value: 0
// },
// '13': {
// value: 0
// },
// '14': {
// value: 0
// },
// '15': {
// value: 0
// },
// '16': {
// value: 0
// },
// '17': {
// value: 0
// },
// '18': {
// value: 0
// },
// '19': {
// value: 0
// },
// '20': {
// value: 0
// },
// '21': {
// value: 0
// },
// '22': {
// value: 0
// },
// '23': {
// value: 0
// },
// '24': {
// value: 0
// },
// '25': {
// value: 0
// },
// '26': {
// value: 0
// },
// '27': {
// value: 0
// },
// '28': {
// value: 0
// }
// }
// },
// status: 'success'
// }
Speed value from the Command Station(130
) includes the direction of travel.
Values 0
-> 127
(inclusive) result in a "Reverse" direction
Values 128
-> 255
(inclusive) result in a "Forward" direction
A normalised speed is calculated by subtracting 128
from the speed value of the Command Station
if the value is greater than or equal to 128
Normalised speed value 0
equates to a stop
.
Normalised speed value 1
equates to an emergency stop
.
In this library emergency stop
is represented by a -1
value
All other speed values are calculated as the normalised speed - 1
There are 29 function buttons.
The value of the function buttons from the Command Station(43
)
is converted into a binary string (101011
) and then the string is reversed (110101
).
This binary representation (in this example) maps to the values for functions '0'
-> '5'
(inclusive).
All other function values are assumed to be 0