diff --git a/EXRAIL2MacroReset.h b/EXRAIL2MacroReset.h index bcac704..980df9f 100644 --- a/EXRAIL2MacroReset.h +++ b/EXRAIL2MacroReset.h @@ -1,5 +1,5 @@ /* - * © 2020-2022 Chris Harlow. All rights reserved. + * © 2020-2025 Chris Harlow. All rights reserved. * © 2022-2023 Colin Murdoch * © 2023 Harald Barth * © 2025 Morten Nielsen @@ -133,9 +133,7 @@ #undef PICKUP_STASH #undef PIN_TURNOUT #undef PRINT -#ifndef DISABLE_PROG #undef POM -#endif #undef POWEROFF #undef POWERON #undef READ_LOCO @@ -203,157 +201,166 @@ #ifndef RMFT2_UNDEF_ONLY /** * @def ACTIVATE(addr,subaddr) - * @brief + * @brief Send DCC Accessory Activate packet (gate on then off) * @param addr * @param subaddr */ #define ACTIVATE(addr,subaddr) /** - * @def ACTIVATEL(addr) - * @brief - * @param addr + * @def ACTIVATEL(longaddr) + * @brief Send DCC Accessory Activate packet (gate on then off) + * @param longaddr */ -#define ACTIVATEL(addr) +#define ACTIVATEL(longaddr) /** * @def AFTER(sensor_id,timer...) - * @brief + * @brief Wait for sensor activated, then decativated for given time * @param sensor_id - * @param timer... + * @param timer... optional wait in mS, default 500 */ #define AFTER(sensor_id,timer...) /** * @def AFTEROVERLOAD(track_id) - * @brief - * @param track_id + * @brief Wait for overload to be resolved + * @param track_id A..H */ #define AFTEROVERLOAD(track_id) /** * @def ALIAS(name,value...) - * @brief + * @brief defines a named numeric value. * @param name - * @param value... + * @param value... if omitted, a large negative value is created automatically */ #define ALIAS(name,value...) /** * @def AMBER(signal_id) - * @brief + * @brief Sets a signal to amber state * @param signal_id */ #define AMBER(signal_id) /** * @def ANOUT(vpin,value,param1,param2) - * @brief - * @param vpin - * @param value - * @param param1 - * @param param2 + * @brief Writes to the HAL analog output interface of a device driver. + * Values and meanings of extra parameters depend on driver. + * @param vpin Virtual pin number of device + * @param value basic analog value + * @param param1 device dependent + * @param param2 device dependent */ #define ANOUT(vpin,value,param1,param2) /** * @def AT(sensor_id) - * @brief - * @param sensor_id + * @brief wait intil a sensor becomes active + * @param sensor_id Use negative value for sensors that are HIGH when activated */ #define AT(sensor_id) /** * @def ASPECT(address,value) - * @brief + * @brief Sends a DCC aspect value to an accessory address. + * May also change status of a signal defined using this aspect. * @param address * @param value */ #define ASPECT(address,value) /** * @def ATGTE(sensor_id,value) - * @brief + * @brief Wait for analog sensor to be greater than given value * @param sensor_id * @param value */ #define ATGTE(sensor_id,value) /** * @def ATLT(sensor_id,value) - * @brief + * @brief Wait for analog sensor value to be less than given value * @param sensor_id * @param value */ #define ATLT(sensor_id,value) /** * @def ATTIMEOUT(sensor_id,timeout_ms) - * @brief + * @brief Wait for sensor active, with timeout. Use IFTIMEOUT to determine whether the AT was satisfied. + * @see IFTIMEOUT * @param sensor_id * @param timeout_ms */ #define ATTIMEOUT(sensor_id,timeout_ms) /** * @def AUTOMATION(id,description) - * @brief - * @param id - * @param description + * @brief Defies starting point of a sequence that will be shown as an Automation by + * the throttles. Automations are started by the throttle handing over a loco id to be driven. + * @param id Unique sequence/route/automation id + * @param description (Quoted text) will be shown on throttle button */ -#define AUTOMATION(id,description) +#define AUTOMATION(id,description) /** * @def AUTOSTART - * @brief + * @brief A new task will be created starting from this point at Command Station startup */ #define AUTOSTART /** * @def BLINK(vpin,onDuty,offDuty) - * @brief + * @brief Starts a blinking process for a vpin (typically a LED) + * Stop blink with SET or RESET. * @param vpin - * @param onDuty - * @param offDuty + * @param onDuty Milliseconds with LED ON + * @param offDuty Milliseconds with LED off */ #define BLINK(vpin,onDuty,offDuty) /** * @def BROADCAST(msg) - * @brief - * @param msg + * @brief Send raw message text to all throttles using the DCC-EX protocol + * @see WITHROTTLE + * @param msg Quoted message */ #define BROADCAST(msg) /** * @def CALL(route) - * @brief - * @param route + * @brief transfer control to another sequence with expectation to return + * @see RETURN + * @param route Sequence id, sequence must terminate of RETURN + * */ #define CALL(route) /** * @def CLEAR_STASH(id) - * @brief - * @param id + * @brief Clears loco stash value + * @param id which stash to clear. */ #define CLEAR_STASH(id) /** * @def CLEAR_ALL_STASH(id) - * @brief + * @brief ??????????????????????????????????????? * @param id */ #define CLEAR_ALL_STASH(id) /** * @def CLOSE(id) - * @brief + * @brief Close turnout by id + * @see THROW * @param id */ #define CLOSE(id) /** * @def CONFIGURE_SERVO(vpin,pos1,pos2,profile) - * @brief - * @param vpin - * @param pos1 - * @param pos2 - * @param profile + * @brief setup servo movement parameters for non-turnout + * @param vpin must refer to a servo capable pin + * @param pos1 SET position of servo + * @param pos2 RESET position of servo + * @param profile Movement profile (????????) */ #define CONFIGURE_SERVO(vpin,pos1,pos2,profile) /** * @def DCC_SIGNAL(id,add,subaddr) - * @brief - * @param id - * @param add - * @param subaddr + * @brief Define a DCC accessory signal with short address + * @param id Signal id used for all signal manipulation commands + * @param add DCC address + * @param subaddr DCC subaddress */ #define DCC_SIGNAL(id,add,subaddr) /** * @def DCCX_SIGNAL(id,redAspect,amberAspect,greenAspect) - * @brief - * @param id + * @brief DEfine advanced DCC accessory signal with aspects + * @param id Signal id used for all signal manipulation commands * @param redAspect * @param amberAspect * @param greenAspect @@ -361,7 +368,7 @@ #define DCCX_SIGNAL(id,redAspect,amberAspect,greenAspect) /** * @def DCC_TURNTABLE(id,home,description...) - * @brief + * @brief ?????????????????????????????????? * @param id * @param home * @param description... @@ -369,80 +376,83 @@ #define DCC_TURNTABLE(id,home,description...) /** * @def DEACTIVATE(addr,subaddr) - * @brief + * @brief Sends DCC Deactivate packet (gate on, gate off) to short address * @param addr * @param subaddr */ #define DEACTIVATE(addr,subaddr) /** * @def DEACTIVATEL(addr) - * @brief + * @brief Sends DCC Deactivate packet (gate on, gate off) to long address * @param addr */ #define DEACTIVATEL(addr) /** * @def DELAY(mindelay) - * @brief - * @param mindelay + * @brief Waits for given milliseconds delay (This is not blocking) + * @param mindelay mS */ #define DELAY(mindelay) /** * @def DELAYMINS(mindelay) - * @brief + * @brief Waits for given minutes delay (This is not blocking) * @param mindelay */ #define DELAYMINS(mindelay) /** * @def DELAYRANDOM(mindelay,maxdelay) - * @brief - * @param mindelay - * @param maxdelay + * @brief Waits for random delay between min and max milliseconds (This is not blocking) + * @param mindelay mS + * @param maxdelay mS */ #define DELAYRANDOM(mindelay,maxdelay) /** * @def DONE - * @brief + * @brief Stops task loco (if any) and terminates current task */ #define DONE /** * @def DRIVE(analogpin) - * @brief + * @brief RESERVED do not use * @param analogpin */ #define DRIVE(analogpin) /** * @def ELSE - * @brief + * @brief introduces alternate processing path after any kind of IF */ #define ELSE /** * @def ENDEXRAIL - * @brief + * @brief Obsolete, has no effect. */ #define ENDEXRAIL /** * @def ENDIF - * @brief + * @brief determines end of IF(any type) block. + * IF something ENDIF, or + * IF something ELSE something ENDIF */ #define ENDIF /** * @def ENDTASK - * @brief + * @brief same as DONE + * @see DONE */ #define ENDTASK /** * @def ESTOP - * @brief + * @brief Performs emergency stop on current task loco */ #define ESTOP /** * @def EXRAIL - * @brief + * @brief OBSOLETE ignored */ #define EXRAIL /** * @def EXTT_TURNTABLE(id,vpin,home,description...) - * @brief + * @brief ?????????????????????? * @param id * @param vpin * @param home @@ -451,235 +461,253 @@ #define EXTT_TURNTABLE(id,vpin,home,description...) /** * @def FADE(pin,value,ms) - * @brief + * @brief Modifies analog value slowly taking a given time * @param pin - * @param value - * @param ms + * @param value new target value + * @param ms time to reach value */ #define FADE(pin,value,ms) /** * @def FOFF(func) - * @brief + * @brief Turns off loco function for current loco + * @see FON * @param func */ #define FOFF(func) /** * @def FOLLOW(route) - * @brief + * @brief Task processing follows given route or sequence (Effectively a GoTo) * @param route */ #define FOLLOW(route) /** * @def FON(func) - * @brief + * @brief Turn on current loc finction + * @see FOFF * @param func */ #define FON(func) /** * @def FORGET - * @brief + * @brief Removes current loco from task and DCC reminders table. */ #define FORGET /** * @def FREE(blockid) - * @brief - * @param blockid + * @brief Frees logical token for given block. + * @see RESERVE + * @param blockid 0..255 */ #define FREE(blockid) /** * @def FTOGGLE(func) - * @brief + * @brief Toggles function for current loco * @param func */ #define FTOGGLE(func) /** * @def FWD(speed) - * @brief - * @param speed + * @brief Instructs current loco to set DCC speed + * @param speed 0..127 (1=ESTOP) */ #define FWD(speed) /** * @def GREEN(signal_id) - * @brief + * @brief Sets signal to green state * @param signal_id */ #define GREEN(signal_id) /** * @def HAL(haltype,params...) - * @brief - * @param haltype - * @param params... + * @brief Defines VPIN mapping for specific hardware drivers + * @param haltype driver name, normally device type + * @param params... depend on driver */ #define HAL(haltype,params...) /** * @def HAL_IGNORE_DEFAULTS - * @brief + * @brief System will ignore default HAL settings */ #define HAL_IGNORE_DEFAULTS /** * @def IF(sensor_id) - * @brief - * @param sensor_id + * @brief Checks sensor state, If false jumps to matching nested ELSE or ENDIF + * @param sensor_id VPIN of sensor. Negative VPIM will invert sensor state. */ #define IF(sensor_id) /** * @def IFAMBER(signal_id) - * @brief + * @brief Checks if signal is in AMBER state. + * @see IF * @param signal_id */ #define IFAMBER(signal_id) /** * @def IFCLOSED(turnout_id) - * @brief + * @brief Checks if given turnout is in close state + * @see IF * @param turnout_id */ #define IFCLOSED(turnout_id) /** * @def IFGREEN(signal_id) - * @brief + * @brief Checks if given signal is in GREEN state + * @see IF * @param signal_id */ #define IFGREEN(signal_id) /** * @def IFGTE(sensor_id,value) - * @brief + * @brief Checks if analog sensor >= value + * @see IF * @param sensor_id * @param value */ #define IFGTE(sensor_id,value) /** * @def IFLOCO(loco_id) - * @brief + * @brief Checks if current task loco = loco_id + * @see IF * @param loco_id */ #define IFLOCO(loco_id) /** * @def IFLT(sensor_id,value) - * @brief + * @brief Checks if analog sensor < value + * @see IF * @param sensor_id * @param value */ #define IFLT(sensor_id,value) /** * @def IFNOT(sensor_id) - * @brief + * @brief Inverse of IF + * @see IF * @param sensor_id */ #define IFNOT(sensor_id) /** * @def IFRANDOM(percent) - * @brief + * @brief randomly satisfield IF at given percent probability + * @see IF * @param percent */ #define IFRANDOM(percent) /** * @def IFRED(signal_id) - * @brief + * @brief Checks if given signal is in RED state + * @see IF * @param signal_id */ #define IFRED(signal_id) /** * @def IFTHROWN(turnout_id) - * @brief + * @brief Checks if given turnout is in THROWN state + * @see IF * @param turnout_id */ #define IFTHROWN(turnout_id) /** * @def IFRESERVE(block) - * @brief + * @brief Agttempts to reserve block token and if satisfiled the block remains reserved. + * @see IF * @param block */ #define IFRESERVE(block) /** * @def IFTIMEOUT - * @brief + * @brief Checks TIMEOUT state after an AT/AFTER request with timeout value. + * @see IF */ #define IFTIMEOUT /** * @def IFTTPOSITION(turntable_id,position) - * @brief + * @brief Checks if GTurntable is in given position + * @see IF * @param turntable_id * @param position */ #define IFTTPOSITION(turntable_id,position) /** * @def IFRE(sensor_id,value) - * @brief + * @brief ???????????????????????????????????????? * @param sensor_id * @param value */ #define IFRE(sensor_id,value) /** * @def INVERT_DIRECTION - * @brief + * @brief Marks current task so that FWD and REV commands are inverted. */ #define INVERT_DIRECTION /** * @def JMRI_SENSOR(vpin,count...) - * @brief + * @brief DEfines multiple JMRI type sensor feedback definitions each with id matching vpin * @param vpin - * @param count... + * @param count... Number of consecutine VPINS for which to create JMRI sensor feedbacks. Default 1. */ #define JMRI_SENSOR(vpin,count...) /** * @def JOIN - * @brief + * @brief Switches PROG track to receive MAIN track DCC packets. (Drive on PROG track) */ #define JOIN /** * @def KILLALL - * @brief + * @brief Tertminates all running EXRAIL tasks */ #define KILLALL /** * @def LATCH(sensor_id) - * @brief - * @param sensor_id + * @brief Make all AT/AFTER/IF see sensor active without checking hardware + * @param sensor_id Must only be for VPINS 0..255 */ #define LATCH(sensor_id) /** * @def LCC(eventid) - * @brief + * @brief Issue event to LCC * @param eventid */ #define LCC(eventid) /** * @def LCCX(senderid,eventid) - * @brief + * @brief Issue LCC event while impersonating another sender * @param senderid * @param eventid */ #define LCCX(senderid,eventid) /** * @def LCD(row,msg) - * @brief + * @brief Write message on row of default configured LCD/OLED + * @see SCREEN * @param row - * @param msg + * @param msg Quoted text */ #define LCD(row,msg) /** * @def SCREEN(display,row,msg) - * @brief - * @param display + * @brief Send message to external display hadlers + * @param display number, 0=local display, others are handled by external + * displays which may have different display numbers on different devices. * @param row - * @param msg + * @param msg Quoted text */ #define SCREEN(display,row,msg) /** * @def LCN(msg) - * @brief + * @brief ?????? * @param msg */ #define LCN(msg) /** * @def MESSAGE(msg) - * @brief - * @param msg + * @brief Send a human readable message to all throttle users + * @param msg Quoted text */ #define MESSAGE(msg) /** * @def MOVETT(id,steps,activity) - * @brief + * @brief ??????????????????? * @param id * @param steps * @param activity @@ -687,252 +715,256 @@ #define MOVETT(id,steps,activity) /** * @def NEOPIXEL(id,r,g,b,count...) - * @brief - * @param id - * @param r - * @param g - * @param b - * @param count... + * @brief Set a NEOPIXEL vpin to a given red/green/blue colour + * @param id VPIN of a pixel + * @param r red component 0-255 + * @param g green component 0-255 + * @param b blue component 0-255 + * @param count... Number of consecutive pixels to set, Default 1. */ #define NEOPIXEL(id,r,g,b,count...) /** * @def NEOPIXEL_SIGNAL(sigid,redcolour,ambercolour,greencolour) - * @brief - * @param sigid - * @param redcolour + * @brief Define a signal that uses a single multi colour pixel + * @param sigid unique signal id + * @param redcolour RGB colour * @param ambercolour * @param greencolour + * Use NeoRGB(red,green,blue) to create values for redcolour etc above. */ #define NEOPIXEL_SIGNAL(sigid,redcolour,ambercolour,greencolour) /** * @def ACON(eventid) - * @brief + * @brief Send MERG CBUS ACON to Adapter * @param eventid */ #define ACON(eventid) /** * @def ACOF(eventid) - * @brief + * @brief Send MERG CBUS ACOF to Adapter * @param eventid */ #define ACOF(eventid) /** * @def ONACON(eventid) - * @brief + * @brief Start task here when ACON for event receied from MERG CBUS * @param eventid */ #define ONACON(eventid) /** * @def ONACOF(eventid) - * @brief + * @brief Start task here when ACOF for event receied from MERG CBUS * @param eventid */ #define ONACOF(eventid) /** * @def ONACTIVATE(addr,subaddr) - * @brief + * @brief Start task here when DCC Activate sent for short address * @param addr * @param subaddr */ #define ONACTIVATE(addr,subaddr) /** * @def ONACTIVATEL(linear) - * @brief + * @brief Start task here when DCC Activate sent for long address * @param linear */ #define ONACTIVATEL(linear) /** * @def ONAMBER(signal_id) - * @brief + * @brief Start task here when signal set to AMBER state * @param signal_id */ #define ONAMBER(signal_id) /** * @def ONTIME(value) - * @brief + * @brief Start task here when fastclock mins in day=value * @param value */ #define ONTIME(value) /** * @def ONCLOCKTIME(hours,mins) - * @brief + * @brief Start task here when fastclock matches time * @param hours * @param mins */ #define ONCLOCKTIME(hours,mins) /** * @def ONCLOCKMINS(mins) - * @brief + * @brief Start task here hourly when fastclock minutes matches * @param mins */ #define ONCLOCKMINS(mins) /** * @def ONOVERLOAD(track_id) - * @brief - * @param track_id + * @brief Start task here when given track goes into overload + * @param track_id A..H */ #define ONOVERLOAD(track_id) /** * @def ONDEACTIVATE(addr,subaddr) - * @brief + * @brief Start task here when DCC deactivate packet sent * @param addr * @param subaddr */ #define ONDEACTIVATE(addr,subaddr) /** * @def ONDEACTIVATEL(linear) - * @brief + * @brief Start task here when DCC deactivate sent to linear address * @param linear */ #define ONDEACTIVATEL(linear) /** * @def ONCLOSE(turnout_id) - * @brief + * @brief Start task here when turnout closed * @param turnout_id */ #define ONCLOSE(turnout_id) /** * @def ONLCC(sender,event) - * @brief + * @brief ?????????????????? * @param sender * @param event */ #define ONLCC(sender,event) /** * @def ONGREEN(signal_id) - * @brief + * @brief Start task here when signal set to GREEN state * @param signal_id */ #define ONGREEN(signal_id) /** * @def ONRED(signal_id) - * @brief + * @brief Start task here when signal set to RED state * @param signal_id */ #define ONRED(signal_id) /** * @def ONROTATE(turntable_id) - * @brief + * @brief Start task here when turntable is rotated * @param turntable_id */ #define ONROTATE(turntable_id) /** * @def ONTHROW(turnout_id) - * @brief + * @brief Start task here when turnout is Thrown * @param turnout_id */ #define ONTHROW(turnout_id) /** * @def ONCHANGE(sensor_id) - * @brief + * @brief ??????????????????? * @param sensor_id */ #define ONCHANGE(sensor_id) /** * @def ONSENSOR(sensor_id) - * @brief + * @brief Start task here when sensor changes state (debounced) * @param sensor_id */ #define ONSENSOR(sensor_id) /** * @def ONBUTTON(sensor_id) - * @brief + * @brief Start task here when sensor changes HIGH to LOW. * @param sensor_id */ #define ONBUTTON(sensor_id) /** * @def PAUSE - * @brief + * @brief Pauses all EXRAIL tasks except the curremnt one. + * Other tasks ESTOP their locos until RESUME issued */ #define PAUSE /** * @def PIN_TURNOUT(id,pin,description...) - * @brief + * @brief Defines a tirnout which operates on a signle pin * @param id * @param pin - * @param description... + * @param description... Quoted text (shown to throttles) or HIDDEN + */ #define PIN_TURNOUT(id,pin,description...) /** * @def PRINT(msg) - * @brief - * @param msg + * @brief prints diagnostic message on USB serial + * @param msg Quoted text */ #define PRINT(msg) /** * @def PARSE(msg) - * @brief - * @param msg + * @brief Executes <> command as if entered from serial + * @param msg Quoted text, preferably including <> */ #define PARSE(msg) /** * @def PICKUP_STASH(id) - * @brief - * @param id + * @brief Loads stashed value into current task loco + * @param id position in stash where a loco id was previously saved. */ #define PICKUP_STASH(id) -#ifndef DISABLE_PROG /** * @def POM(cv,value) - * @brief + * @brief Write value to cv on current tasks loco (Program on Main) * @param cv * @param value */ #define POM(cv,value) -#endif /** * @def POWEROFF - * @brief + * @brief Powers off all tracks */ #define POWEROFF /** * @def POWERON - * @brief + * @brief Powers ON all tracks */ #define POWERON /** * @def READ_LOCO - * @brief + * @brief Reads loco Id from prog traqck and sets currenmt task loco id. */ #define READ_LOCO /** * @def RED(signal_id) - * @brief + * @brief sets signal to RED state * @param signal_id */ #define RED(signal_id) /** * @def RESERVE(blockid) - * @brief + * @brief Waits for token for block. If not available immediately, current task loco is stopped. * @param blockid */ #define RESERVE(blockid) /** * @def RESET(pin,count...) - * @brief + * @brief Sets output puin LOW * @param pin - * @param count... + * @param count... Number of consecutive pins, default 1 */ #define RESET(pin,count...) /** * @def RESUME - * @brief + * @brief Resumes PAUSEd tasks + * @see PAUSE */ #define RESUME /** * @def RETURN - * @brief + * @brief Returns to CALL + * @see CALL */ #define RETURN /** * @def REV(speed) - * @brief - * @param speed + * @brief Issues DCC speed packet for current loco in reverse. + * @see FWD + * @param speed (0..127, 1=ESTOP) */ #define REV(speed) /** * @def ROTATE(turntable_id,position,activity) - * @brief + * @brief ???? * @param turntable_id * @param position * @param activity @@ -940,131 +972,135 @@ #define ROTATE(turntable_id,position,activity) /** * @def ROTATE_DCC(turntable_id,position) - * @brief + * @brief ???? * @param turntable_id * @param position */ #define ROTATE_DCC(turntable_id,position) /** * @def ROSTER(cab,name,funcmap...) - * @brief - * @param cab - * @param name - * @param funcmap... + * @brief Describes a loco roster entry visible to throttles + * @param cab loco DCC address or 0 for default entry + * @param name Quoted text + * @param funcmap... Quoted text, optional list of function names separated by / character with momentary fuinctin names prefixed with an *. + * */ #define ROSTER(cab,name,funcmap...) /** * @def ROUTE(id,description) - * @brief + * @brief DEfines starting point of a sequence that will appear as a route on throttle buttons. * @param id - * @param description + * @param description Quoted text, throttle button capotion. */ #define ROUTE(id,description) /** * @def ROUTE_ACTIVE(id) - * @brief + * @brief Tells throttle to display the route button as active * @param id */ #define ROUTE_ACTIVE(id) /** * @def ROUTE_INACTIVE(id) - * @brief + * @brief Tells throttle to display the route button as inactive * @param id */ #define ROUTE_INACTIVE(id) /** * @def ROUTE_HIDDEN(id) - * @brief + * @brief Tells throttle to hide the route button * @param id */ #define ROUTE_HIDDEN(id) /** * @def ROUTE_DISABLED(id) - * @brief + * @brief Tells throttle to display the route button as disabled * @param id */ #define ROUTE_DISABLED(id) /** * @def ROUTE_CAPTION(id,caption) - * @brief + * @brief Tells throttle to change thr route button caption * @param id * @param caption */ #define ROUTE_CAPTION(id,caption) /** * @def SENDLOCO(cab,route) - * @brief - * @param cab - * @param route + * @brief Start a new task to drive the loco + * @param cab loco to be driven + * @param route id of route/automation or sequence to drive */ #define SENDLOCO(cab,route) /** * @def SEQUENCE(id) - * @brief + * @brief Provides a unique label than can be used to call, follow or start. + * @see CALL + * @see FOLLOW + * @see START * @param id */ #define SEQUENCE(id) /** * @def SERIAL(msg) - * @brief - * @param msg + * @brief Write direct to Serial output + * @param msg Quoted text */ #define SERIAL(msg) /** * @def SERIAL1(msg) - * @brief - * @param msg + * @brief Write direct to Serial1 output + * @param msg Quoted text */ #define SERIAL1(msg) /** * @def SERIAL2(msg) - * @brief - * @param msg + * @brief Write direct to Serial2 output + * @param msg Quoted text */ #define SERIAL2(msg) /** * @def SERIAL3(msg) - * @brief - * @param msg - */ + * @brief Write direct to Serial3 output + * @param msg Quoted text +*/ #define SERIAL3(msg) /** * @def SERIAL4(msg) - * @brief - * @param msg + * @brief Write direct to Serial4 output + * @param msg Quoted text */ #define SERIAL4(msg) /** * @def SERIAL5(msg) - * @brief - * @param msg + * @brief Write direct to Serial5 output + * @param msg Quoted text */ #define SERIAL5(msg) /** * @def SERIAL6(msg) - * @brief - * @param msg + * @brief Write direct to Serial6 output + * @param msg Quoted text */ #define SERIAL6(msg) /** * @def SERVO(id,position,profile) - * @brief - * @param id + * @brief Move servo to given position + * @param id VPIN of servo * @param position - * @param profile + * @param profile ?????????? names ??????????? */ #define SERVO(id,position,profile) /** * @def SERVO2(id,position,duration) - * @brief + * @brief Move servo to given position taking time * @param id * @param position - * @param duration + * @param duration mS */ #define SERVO2(id,position,duration) /** * @def SERVO_SIGNAL(vpin,redpos,amberpos,greenpos) - * @brief + * @brief Dedfine a servo based signal with 3 servo positions * @param vpin * @param redpos * @param amberpos @@ -1073,51 +1109,52 @@ #define SERVO_SIGNAL(vpin,redpos,amberpos,greenpos) /** * @def SERVO_TURNOUT(id,pin,activeAngle,inactiveAngle,profile,description...) - * @brief - * @param id - * @param pin + * @brief Define a servo driven turnout + * @param id used by THROW/CLOSE + * @param pin VPIN for servo * @param activeAngle * @param inactiveAngle - * @param profile - * @param description... + * @param profile ?????? + * @param description... Quoted text shown to throttles or HIDDEN keyword to hide turnout button */ #define SERVO_TURNOUT(id,pin,activeAngle,inactiveAngle,profile,description...) /** * @def SET(pin,count...) - * @brief + * @brief Set VPIN HIGH * @param pin - * @param count... + * @param count... Number of sequential vpins to set. Default 1. */ #define SET(pin,count...) /** * @def SET_TRACK(track,mode) - * @brief - * @param track - * @param mode + * @brief Set output track type + * @param track A..H + * @param mode ???names??? */ #define SET_TRACK(track,mode) /** * @def SET_POWER(track,onoff) - * @brief - * @param track - * @param onoff + * @brief Set track power mode + * @param track A..H + * @param onoff ??? values ??? */ #define SET_POWER(track,onoff) /** * @def SETLOCO(loco) - * @brief + * @brief Sets the loco being handled by the current task * @param loco */ #define SETLOCO(loco) /** * @def SETFREQ(freq) - * @brief - * @param freq + * @brief Sets the DC track PWM frequency + * @param freq ??????????? values ?????? */ #define SETFREQ(freq) /** * @def SIGNAL(redpin,amberpin,greenpin) - * @brief + * @brief Define a Signal with LOW=on leds (is that common annode???) + * @see SIGNALH * @param redpin * @param amberpin * @param greenpin @@ -1125,7 +1162,7 @@ #define SIGNAL(redpin,amberpin,greenpin) /** * @def SIGNALH(redpin,amberpin,greenpin) - * @brief + * @brief define a signal with HIGH=ON leds * @param redpin * @param amberpin * @param greenpin @@ -1133,56 +1170,56 @@ #define SIGNALH(redpin,amberpin,greenpin) /** * @def SPEED(speed) - * @brief - * @param speed + * @brief Changes current tasks loco speed without changing direction + * @param speed 0..127 (1=ESTOP) */ #define SPEED(speed) /** * @def START(route) - * @brief + * @brief Starts a new task at the given route/animation/sequence * @param route */ #define START(route) /** * @def STASH(id) - * @brief + * @brief saves cuttent tasks loco id in the stash array * @param id */ #define STASH(id) /** * @def STEALTH(code...) - * @brief + * @brief Allows for embedding raw C++ code in context of current task. * @param code... */ #define STEALTH(code...) /** * @def STEALTH_GLOBAL(code...) - * @brief + * @brief Allows for embedding raw c++ code out of context. * @param code... */ #define STEALTH_GLOBAL(code...) /** * @def STOP - * @brief + * @brief Same as SPEED(0) */ #define STOP /** * @def THROW(id) - * @brief + * @brief Throws given turnout * @param id */ #define THROW(id) /** * @def TOGGLE_TURNOUT(id) - * @brief + * @brief Toggles given turnout * @param id */ #define TOGGLE_TURNOUT(id) /** * @def TT_ADDPOSITION(turntable_id,position,value,angle,description...) - * @brief + * @brief Defines a turntable track position * @param turntable_id - * @param position + * @param position ?????????? * @param value * @param angle * @param description... @@ -1190,16 +1227,17 @@ #define TT_ADDPOSITION(turntable_id,position,value,angle,description...) /** * @def TURNOUT(id,addr,subaddr,description...) - * @brief + * @brief Defines a DCC accessory turnout with legacy address * @param id * @param addr * @param subaddr - * @param description... + * @param description... Quoted text or HIDDEN, appears on throttle buttons */ #define TURNOUT(id,addr,subaddr,description...) /** * @def TURNOUTL(id,addr,description...) - * @brief + * @brief Defines a DCC accessory turnout with inear address + * @param * @param id * @param addr * @param description... @@ -1207,31 +1245,33 @@ #define TURNOUTL(id,addr,description...) /** * @def UNJOIN - * @brief + * @brief Disconnects PROG track from MAIN + * @see JOIN */ #define UNJOIN /** * @def UNLATCH(sensor_id) - * @brief + * @brief removes latched on flag + * @see LATCH * @param sensor_id */ #define UNLATCH(sensor_id) /** * @def VIRTUAL_SIGNAL(id) - * @brief + * @brief Defines a virtual (no hardware) signal * @param id */ #define VIRTUAL_SIGNAL(id) /** * @def VIRTUAL_TURNOUT(id,description...) - * @brief + * @brief Defines a virtual (no hardware) turnout * @param id * @param description... */ #define VIRTUAL_TURNOUT(id,description...) /** * @def WAITFOR(pin) - * @brief + * @brief ??????????????????? * @param pin */ #define WAITFOR(pin) @@ -1245,43 +1285,43 @@ #endif /** * @def WITHROTTLE(msg) - * @brief + * @brief Broadcasts a string in Withrottle protocol format to all throttles using this protocol. * @param msg */ #define WITHROTTLE(msg) /** * @def XFOFF(cab,func) - * @brief + * @brief Turns function off for given loco * @param cab * @param func */ #define XFOFF(cab,func) /** * @def XFON(cab,func) - * @brief + * @brief Turns function ON for given loco * @param cab * @param func */ #define XFON(cab,func) /** * @def XFTOGGLE(cab,func) - * @brief + * @brief Toggles function state for given loco * @param cab * @param func */ #define XFTOGGLE(cab,func) /** * @def XFWD(cab,speed) - * @brief + * @brief Sends DCC speed to loco in forward direction * @param cab - * @param speed + * @param speed (0..127, 1=ESTOP) */ #define XFWD(cab,speed) /** * @def XREV(cab,speed) - * @brief + * @brief Sends DCC speed to loco in reverse direction * @param cab - * @param speed + * @param speed (0..127, 1=ESTOP) */ #define XREV(cab,speed)