reformatted the NmraDcc.h & NmraDcc.cpp files using the astyle rules in the new file: .astyle as per the PR from David Zuhn (davidzuhn)

This commit is contained in:
Alex Shepherd
2021-05-09 16:56:08 +12:00
parent ad5ce96253
commit 0a72fc610b
2 changed files with 2518 additions and 2465 deletions

File diff suppressed because it is too large Load Diff

443
NmraDcc.h
View File

@@ -49,9 +49,9 @@
//#define NMRA_DCC_ENABLE_14_SPEED_STEP_MODE //#define NMRA_DCC_ENABLE_14_SPEED_STEP_MODE
#if defined(ARDUINO) && ARDUINO >= 100 #if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h" #include "Arduino.h"
#else #else
#include "WProgram.h" #include "WProgram.h"
#endif #endif
#ifndef NMRADCC_IS_IN #ifndef NMRADCC_IS_IN
@@ -65,9 +65,9 @@
typedef struct typedef struct
{ {
uint8_t Size ; uint8_t Size ;
uint8_t PreambleBits ; uint8_t PreambleBits ;
uint8_t Data[MAX_DCC_MESSAGE_LEN] ; uint8_t Data[MAX_DCC_MESSAGE_LEN] ;
} DCC_MSG ; } DCC_MSG ;
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@@ -114,63 +114,67 @@ typedef struct
#define CV_29_CONFIG 29 #define CV_29_CONFIG 29
#if defined(ESP32) #if defined(ESP32)
#include <esp_spi_flash.h> #include <esp_spi_flash.h>
#define MAXCV SPI_FLASH_SEC_SIZE #define MAXCV SPI_FLASH_SEC_SIZE
#elif defined(ESP8266) #elif defined(ESP8266)
#include <spi_flash.h> #include <spi_flash.h>
#define MAXCV SPI_FLASH_SEC_SIZE #define MAXCV SPI_FLASH_SEC_SIZE
#elif defined( __STM32F1__) #elif defined( __STM32F1__)
#define MAXCV (EEPROM_PAGE_SIZE/4 - 1) // number of storage places (CV address could be larger #define MAXCV (EEPROM_PAGE_SIZE/4 - 1) // number of storage places (CV address could be larger
// because STM32 uses virtual adresses) // because STM32 uses virtual adresses)
#undef ALLOW_NESTED_IRQ // This is done with NVIC on STM32 #undef ALLOW_NESTED_IRQ // This is done with NVIC on STM32
#define PRIO_DCC_IRQ 9 #define PRIO_DCC_IRQ 9
#define PRIO_SYSTIC 8 // MUST be higher priority than DCC Irq #define PRIO_SYSTIC 8 // MUST be higher priority than DCC Irq
#elif defined(ARDUINO_ARCH_RP2040) #elif defined(ARDUINO_ARCH_RP2040)
#define MAXCV 256 // todo: maybe somebody knows a good define for it #define MAXCV 256 // todo: maybe somebody knows a good define for it
#else #else
#define MAXCV E2END // the upper limit of the CV value currently defined to max memory. #define MAXCV E2END // the upper limit of the CV value currently defined to max memory.
#endif #endif
typedef enum { typedef enum
{
CV29_LOCO_DIR = 0b00000001, /** bit 0: Locomotive Direction: "0" = normal, "1" = reversed */ CV29_LOCO_DIR = 0b00000001, /** bit 0: Locomotive Direction: "0" = normal, "1" = reversed */
CV29_F0_LOCATION = 0b00000010, /** bit 1: F0 location: "0" = bit 4 in Speed and Direction instructions, "1" = bit 4 in function group one instruction */ CV29_F0_LOCATION = 0b00000010, /** bit 1: F0 location: "0" = bit 4 in Speed and Direction instructions, "1" = bit 4 in function group one instruction */
CV29_APS = 0b00000100, /** bit 2: Alternate Power Source (APS) "0" = NMRA Digital only, "1" = Alternate power source set by CV12 */ CV29_APS = 0b00000100, /** bit 2: Alternate Power Source (APS) "0" = NMRA Digital only, "1" = Alternate power source set by CV12 */
CV29_RAILCOM_ENABLE = 0b00001000, /** bit 3: BiDi ( RailCom ) is active */ CV29_RAILCOM_ENABLE = 0b00001000, /** bit 3: BiDi ( RailCom ) is active */
CV29_SPEED_TABLE_ENABLE = 0b00010000, /** bit 4: STE, Speed Table Enable, "0" = values in CVs 2, 4 and 6, "1" = Custom table selected by CV 25 */ CV29_SPEED_TABLE_ENABLE = 0b00010000, /** bit 4: STE, Speed Table Enable, "0" = values in CVs 2, 4 and 6, "1" = Custom table selected by CV 25 */
CV29_EXT_ADDRESSING = 0b00100000, /** bit 5: "0" = one byte addressing, "1" = two byte addressing */ CV29_EXT_ADDRESSING = 0b00100000, /** bit 5: "0" = one byte addressing, "1" = two byte addressing */
CV29_OUTPUT_ADDRESS_MODE = 0b01000000, /** bit 6: "0" = Decoder Address Mode "1" = Output Address Mode */ CV29_OUTPUT_ADDRESS_MODE = 0b01000000, /** bit 6: "0" = Decoder Address Mode "1" = Output Address Mode */
CV29_ACCESSORY_DECODER = 0b10000000, /** bit 7: "0" = Multi-Function Decoder Mode "1" = Accessory Decoder Mode */ CV29_ACCESSORY_DECODER = 0b10000000, /** bit 7: "0" = Multi-Function Decoder Mode "1" = Accessory Decoder Mode */
} CV_29_BITS; } CV_29_BITS;
typedef enum { typedef enum
#ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE {
#ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE
SPEED_STEP_14 = 15, /**< ESTOP=0, 1 to 15 */ SPEED_STEP_14 = 15, /**< ESTOP=0, 1 to 15 */
#endif #endif
SPEED_STEP_28 = 29, /**< ESTOP=0, 1 to 29 */ SPEED_STEP_28 = 29, /**< ESTOP=0, 1 to 29 */
SPEED_STEP_128 = 127 /**< ESTOP=0, 1 to 127 */ SPEED_STEP_128 = 127 /**< ESTOP=0, 1 to 127 */
} DCC_SPEED_STEPS; } DCC_SPEED_STEPS;
typedef enum { typedef enum
{
DCC_DIR_REV = 0, /** The locomotive to go in the reverse direction */ DCC_DIR_REV = 0, /** The locomotive to go in the reverse direction */
DCC_DIR_FWD = 1, /** The locomotive should move in the forward direction */ DCC_DIR_FWD = 1, /** The locomotive should move in the forward direction */
} DCC_DIRECTION; } DCC_DIRECTION;
typedef enum { typedef enum
{
DCC_ADDR_SHORT, /** Short address is used. The range is 0 to 127. */ DCC_ADDR_SHORT, /** Short address is used. The range is 0 to 127. */
DCC_ADDR_LONG, /** Long Address is used. The range is 1 to 10239 */ DCC_ADDR_LONG, /** Long Address is used. The range is 1 to 10239 */
} DCC_ADDR_TYPE; } DCC_ADDR_TYPE;
typedef enum typedef enum
{ {
FN_0_4 = 1, FN_0_4 = 1,
FN_5_8, FN_5_8,
FN_9_12, FN_9_12,
FN_13_20, FN_13_20,
FN_21_28, FN_21_28,
#ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE #ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE
FN_0 /** function light is controlled by base line package (14 speed steps) */ FN_0 /** function light is controlled by base line package (14 speed steps) */
#endif #endif
} FN_GROUP; } FN_GROUP;
#define FN_BIT_00 0x10 #define FN_BIT_00 0x10
@@ -209,20 +213,21 @@ typedef enum
//#define DCC_DBGVAR //#define DCC_DBGVAR
#ifdef DCC_DBGVAR #ifdef DCC_DBGVAR
typedef struct countOf_t { typedef struct countOf_t
{
unsigned long Tel; unsigned long Tel;
unsigned long Err; unsigned long Err;
}countOf_t ; } countOf_t ;
extern struct countOf_t countOf; extern struct countOf_t countOf;
#endif #endif
class NmraDcc class NmraDcc
{ {
private: private:
DCC_MSG Msg ; DCC_MSG Msg ;
public: public:
NmraDcc(); NmraDcc();
// Flag values to be logically ORed together and passed into the init() method // Flag values to be logically ORed together and passed into the init() method
@@ -236,180 +241,180 @@ class NmraDcc
#define FLAGS_CV29_BITS (FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER) #define FLAGS_CV29_BITS (FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER)
/*+ /*+
* pin() is called from setup() and sets up the pin used to receive DCC packets. * pin() is called from setup() and sets up the pin used to receive DCC packets.
* *
* Inputs: * Inputs:
* ExtIntNum - Interrupt number of the pin. Use digitalPinToInterrupt(ExtIntPinNum). * ExtIntNum - Interrupt number of the pin. Use digitalPinToInterrupt(ExtIntPinNum).
* ExtIntPinNum - Input pin number. * ExtIntPinNum - Input pin number.
* EnablePullup - Set true to enable the pins pullup resistor. * EnablePullup - Set true to enable the pins pullup resistor.
* *
* Returns: * Returns:
* None. * None.
*/ */
void pin( uint8_t ExtIntNum, uint8_t ExtIntPinNum, uint8_t EnablePullup); void pin (uint8_t ExtIntNum, uint8_t ExtIntPinNum, uint8_t EnablePullup);
/*+ /*+
* pin() is called from setup() and sets up the pin used to receive DCC packets. * pin() is called from setup() and sets up the pin used to receive DCC packets.
* This relies on the internal function: digitalPinToInterrupt() to map the input pin number to the right interrupt * This relies on the internal function: digitalPinToInterrupt() to map the input pin number to the right interrupt
* *
* Inputs: * Inputs:
* ExtIntPinNum - Input pin number. * ExtIntPinNum - Input pin number.
* EnablePullup - Set true to enable the pins pullup resistor. * EnablePullup - Set true to enable the pins pullup resistor.
* *
* Returns: * Returns:
* None. * None.
*/ */
#ifdef digitalPinToInterrupt #ifdef digitalPinToInterrupt
void pin( uint8_t ExtIntPinNum, uint8_t EnablePullup); void pin (uint8_t ExtIntPinNum, uint8_t EnablePullup);
#endif #endif
/*+ /*+
* init() is called from setup() after the pin() command is called. * init() is called from setup() after the pin() command is called.
* It initializes the NmDcc object and makes it ready to process packets. * It initializes the NmDcc object and makes it ready to process packets.
* *
* Inputs: * Inputs:
* ManufacturerId - Manufacturer ID returned in CV 8. * ManufacturerId - Manufacturer ID returned in CV 8.
* Commonly MAN_ID_DIY. * Commonly MAN_ID_DIY.
* VersionId - Version ID returned in CV 7. * VersionId - Version ID returned in CV 7.
* Flags - ORed flags beginning with FLAGS_... * Flags - ORed flags beginning with FLAGS_...
* FLAGS_MY_ADDRESS_ONLY - Only process packets with My Address. * FLAGS_MY_ADDRESS_ONLY - Only process packets with My Address.
* FLAGS_DCC_ACCESSORY_DECODER - Decoder is an accessory decoder. * FLAGS_DCC_ACCESSORY_DECODER - Decoder is an accessory decoder.
* FLAGS_OUTPUT_ADDRESS_MODE - This flag applies to accessory decoders only. * FLAGS_OUTPUT_ADDRESS_MODE - This flag applies to accessory decoders only.
* Accessory decoders normally have 4 paired outputs * Accessory decoders normally have 4 paired outputs
* and a single address refers to all 4 outputs. * and a single address refers to all 4 outputs.
* Setting FLAGS_OUTPUT_ADDRESS_MODE causes each * Setting FLAGS_OUTPUT_ADDRESS_MODE causes each
* address to refer to a single output. * address to refer to a single output.
* OpsModeAddressBaseCV - Ops Mode base address. Set it to 0? * OpsModeAddressBaseCV - Ops Mode base address. Set it to 0?
* *
* Returns: * Returns:
* None. * None.
*/ */
void init( uint8_t ManufacturerId, uint8_t VersionId, uint8_t Flags, uint8_t OpsModeAddressBaseCV ); void init (uint8_t ManufacturerId, uint8_t VersionId, uint8_t Flags, uint8_t OpsModeAddressBaseCV);
/*+ /*+
* initAccessoryDecoder() is called from setup() for accessory decoders. * initAccessoryDecoder() is called from setup() for accessory decoders.
* It calls init() with FLAGS_DCC_ACCESSORY_DECODER ORed into Flags. * It calls init() with FLAGS_DCC_ACCESSORY_DECODER ORed into Flags.
* *
* Inputs: * Inputs:
* ManufacturerId - Manufacturer ID returned in CV 8. * ManufacturerId - Manufacturer ID returned in CV 8.
* Commonly MAN_ID_DIY. * Commonly MAN_ID_DIY.
* VersionId - Version ID returned in CV 7. * VersionId - Version ID returned in CV 7.
* Flags - ORed flags beginning with FLAGS_... * Flags - ORed flags beginning with FLAGS_...
* FLAGS_DCC_ACCESSORY_DECODER will be set for init() call. * FLAGS_DCC_ACCESSORY_DECODER will be set for init() call.
* OpsModeAddressBaseCV - Ops Mode base address. Set it to 0? * OpsModeAddressBaseCV - Ops Mode base address. Set it to 0?
* *
* Returns: * Returns:
* None. * None.
*/ */
void initAccessoryDecoder( uint8_t ManufacturerId, uint8_t VersionId, uint8_t Flags, uint8_t OpsModeAddressBaseCV ); void initAccessoryDecoder (uint8_t ManufacturerId, uint8_t VersionId, uint8_t Flags, uint8_t OpsModeAddressBaseCV);
/*+ /*+
* process() is called from loop() to process DCC packets. * process() is called from loop() to process DCC packets.
* It must be called very frequently to keep up with the packets. * It must be called very frequently to keep up with the packets.
* *
* Inputs: * Inputs:
* None. * None.
* *
* Returns: * Returns:
* 1 - Packet succesfully parsed on this call to process(). * 1 - Packet succesfully parsed on this call to process().
* 0 - Packet not ready or received packet had an error. * 0 - Packet not ready or received packet had an error.
*/ */
uint8_t process(); uint8_t process();
/*+ /*+
* getCV() returns the selected CV value. * getCV() returns the selected CV value.
* *
* Inputs: * Inputs:
* CV - CV number. It must point to a valid CV. * CV - CV number. It must point to a valid CV.
* *
* Returns: * Returns:
* Value - CV value. Invalid CV numbers will return an undefined result * Value - CV value. Invalid CV numbers will return an undefined result
* since nothing will have been set in that EEPROM position. * since nothing will have been set in that EEPROM position.
* Calls notifyCVRead() if it is defined. * Calls notifyCVRead() if it is defined.
*/ */
uint8_t getCV( uint16_t CV ); uint8_t getCV (uint16_t CV);
/*+ /*+
* setCV() sets the value of a CV. * setCV() sets the value of a CV.
* *
* Inputs: * Inputs:
* CV - CV number. It must point to a valid CV. * CV - CV number. It must point to a valid CV.
* Value - CV value. * Value - CV value.
* *
* Returns: * Returns:
* Value - CV value set by this call. * Value - CV value set by this call.
* since nothing will have been set in that EEPROM position. * since nothing will have been set in that EEPROM position.
* Calls notifyCVWrite() if it is defined. * Calls notifyCVWrite() if it is defined.
* Calls notifyCVChange() if the value is changed by this call. * Calls notifyCVChange() if the value is changed by this call.
*/ */
uint8_t setCV( uint16_t CV, uint8_t Value); uint8_t setCV (uint16_t CV, uint8_t Value);
/*+ /*+
* setAccDecDCCAddrNextReceived() enables/disables the setting of the board address from the next received turnout command * setAccDecDCCAddrNextReceived() enables/disables the setting of the board address from the next received turnout command
* *
* Inputs: * Inputs:
* enable- boolean to enable or disable the mode * enable- boolean to enable or disable the mode
* *
* Returns: * Returns:
*/ */
void setAccDecDCCAddrNextReceived(uint8_t enable); void setAccDecDCCAddrNextReceived (uint8_t enable);
/*+ /*+
* isSetCVReady() returns 1 if EEPROM is ready to write. * isSetCVReady() returns 1 if EEPROM is ready to write.
* *
* Inputs: * Inputs:
* CV - CV number. It must point to a valid CV. * CV - CV number. It must point to a valid CV.
* Value - CV value. * Value - CV value.
* *
* Returns: * Returns:
* ready - 1 if ready to write, 0 otherwise. AVR processor will block * ready - 1 if ready to write, 0 otherwise. AVR processor will block
* for several ms. for each write cycle so you should check this to avoid blocks. * for several ms. for each write cycle so you should check this to avoid blocks.
* Note: It returns the value returned by notifyIsSetCVReady() if it is defined. * Note: It returns the value returned by notifyIsSetCVReady() if it is defined.
* Calls notifyIsSetCVReady() if it is defined. * Calls notifyIsSetCVReady() if it is defined.
*/ */
uint8_t isSetCVReady( void ); uint8_t isSetCVReady (void);
/*+ /*+
* getAddr() return the currently active decoder address. * getAddr() return the currently active decoder address.
* based on decoder type and current address size. * based on decoder type and current address size.
* *
* Inputs: * Inputs:
* None. * None.
* *
* Returns: * Returns:
* Adr - The current decoder address based on decoder type(Multifunction, Accessory) * Adr - The current decoder address based on decoder type(Multifunction, Accessory)
* and short or long address selection for Multifunction decoders. * and short or long address selection for Multifunction decoders.
*/ */
uint16_t getAddr(void); uint16_t getAddr (void);
/*+ /*+
* getX() return debugging data if DCC_DEBUG is defined. * getX() return debugging data if DCC_DEBUG is defined.
* You would really need to be modifying the library to need them. * You would really need to be modifying the library to need them.
* *
* Inputs: * Inputs:
* None. * None.
* *
* Returns: * Returns:
* getIntCount - Init to 0 and apparently never incremented? * getIntCount - Init to 0 and apparently never incremented?
* getTickCount - Init to 0 and incremented each time interrupt handler * getTickCount - Init to 0 and incremented each time interrupt handler
* completes without an error. * completes without an error.
* getBitCount - Bit count of valid packet, 0 otherwise. Only valid until * getBitCount - Bit count of valid packet, 0 otherwise. Only valid until
* start of the next packet. * start of the next packet.
* getState - Current WAIT_... state as defined by DccRxWaitState in NmraDcc.cpp. * getState - Current WAIT_... state as defined by DccRxWaitState in NmraDcc.cpp.
* getNestedIrqCount - Init to 0 and incremented each time the interrupt handler * getNestedIrqCount - Init to 0 and incremented each time the interrupt handler
* is called before the previous interrupt was complete. * is called before the previous interrupt was complete.
* This is an error indication and may indicate the system * This is an error indication and may indicate the system
* is not handling packets fast enough or some other error is occurring. * is not handling packets fast enough or some other error is occurring.
*/ */
// #define DCC_DEBUG // #define DCC_DEBUG
#ifdef DCC_DEBUG #ifdef DCC_DEBUG
uint8_t getIntCount(void); uint8_t getIntCount (void);
uint8_t getTickCount(void); uint8_t getTickCount (void);
uint8_t getBitCount(void); uint8_t getBitCount (void);
uint8_t getState(void); uint8_t getState (void);
uint8_t getNestedIrqCount(void); uint8_t getNestedIrqCount (void);
#endif #endif
}; };
@@ -418,7 +423,7 @@ void pin( uint8_t ExtIntPinNum, uint8_t EnablePullup);
************************************************************************************/ ************************************************************************************/
#if defined (__cplusplus) #if defined (__cplusplus)
extern "C" { extern "C" {
#endif #endif
/*+ /*+
@@ -431,7 +436,7 @@ void pin( uint8_t ExtIntPinNum, uint8_t EnablePullup);
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccReset(uint8_t hardReset ) __attribute__ ((weak)); extern void notifyDccReset (uint8_t hardReset) __attribute__ ( (weak));
/*+ /*+
* notifyDccIdle() Callback for a DCC idle command. * notifyDccIdle() Callback for a DCC idle command.
@@ -442,7 +447,7 @@ extern void notifyDccReset(uint8_t hardReset ) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccIdle(void) __attribute__ ((weak)); extern void notifyDccIdle (void) __attribute__ ( (weak));
/*+ /*+
@@ -463,7 +468,7 @@ extern void notifyDccIdle(void) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccSpeed( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DIRECTION Dir, DCC_SPEED_STEPS SpeedSteps ) __attribute__ ((weak)); extern void notifyDccSpeed (uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DIRECTION Dir, DCC_SPEED_STEPS SpeedSteps) __attribute__ ( (weak));
/*+ /*+
* notifyDccSpeedRaw() Callback for a multifunction decoder speed command. * notifyDccSpeedRaw() Callback for a multifunction decoder speed command.
@@ -477,7 +482,7 @@ extern void notifyDccSpeed( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Sp
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccSpeedRaw( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Raw) __attribute__ ((weak)); extern void notifyDccSpeedRaw (uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Raw) __attribute__ ( (weak));
/*+ /*+
* notifyDccFunc() Callback for a multifunction decoder function command. * notifyDccFunc() Callback for a multifunction decoder function command.
@@ -499,7 +504,7 @@ extern void notifyDccSpeedRaw( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccFunc( uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint8_t FuncState) __attribute__ ((weak)); extern void notifyDccFunc (uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint8_t FuncState) __attribute__ ( (weak));
/*+ /*+
* notifyDccAccTurnoutBoard() Board oriented callback for a turnout accessory decoder. * notifyDccAccTurnoutBoard() Board oriented callback for a turnout accessory decoder.
@@ -521,7 +526,7 @@ extern void notifyDccFunc( uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP Fu
* None * None
*/ */
extern void notifyDccAccTurnoutBoard( uint16_t BoardAddr, uint8_t OutputPair, uint8_t Direction, uint8_t OutputPower ) __attribute__ ((weak)); extern void notifyDccAccTurnoutBoard (uint16_t BoardAddr, uint8_t OutputPair, uint8_t Direction, uint8_t OutputPower) __attribute__ ( (weak));
/*+ /*+
* notifyDccAccTurnoutOutput() Output oriented callback for a turnout accessory decoder. * notifyDccAccTurnoutOutput() Output oriented callback for a turnout accessory decoder.
* Most useful when CV29_OUTPUT_ADDRESS_MODE IS set. * Most useful when CV29_OUTPUT_ADDRESS_MODE IS set.
@@ -539,7 +544,7 @@ extern void notifyDccAccTurnoutBoard( uint16_t BoardAddr, uint8_t OutputPair,
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccAccTurnoutOutput( uint16_t Addr, uint8_t Direction, uint8_t OutputPower ) __attribute__ ((weak)); extern void notifyDccAccTurnoutOutput (uint16_t Addr, uint8_t Direction, uint8_t OutputPower) __attribute__ ( (weak));
/*+ /*+
* notifyDccAccBoardAddrSet() Board oriented callback for a turnout accessory decoder. * notifyDccAccBoardAddrSet() Board oriented callback for a turnout accessory decoder.
@@ -555,7 +560,7 @@ extern void notifyDccAccTurnoutOutput( uint16_t Addr, uint8_t Direction, uint
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccAccBoardAddrSet( uint16_t BoardAddr) __attribute__ ((weak)); extern void notifyDccAccBoardAddrSet (uint16_t BoardAddr) __attribute__ ( (weak));
/*+ /*+
* notifyDccAccOutputAddrSet() Output oriented callback for a turnout accessory decoder. * notifyDccAccOutputAddrSet() Output oriented callback for a turnout accessory decoder.
@@ -571,7 +576,7 @@ extern void notifyDccAccBoardAddrSet( uint16_t BoardAddr) __attribute__ ((wea
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccAccOutputAddrSet( uint16_t Addr) __attribute__ ((weak)); extern void notifyDccAccOutputAddrSet (uint16_t Addr) __attribute__ ( (weak));
/*+ /*+
* notifyDccSigOutputState() Callback for a signal aspect accessory decoder. * notifyDccSigOutputState() Callback for a signal aspect accessory decoder.
@@ -584,7 +589,7 @@ extern void notifyDccAccOutputAddrSet( uint16_t Addr) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccSigOutputState( uint16_t Addr, uint8_t State) __attribute__ ((weak)); extern void notifyDccSigOutputState (uint16_t Addr, uint8_t State) __attribute__ ( (weak));
/*+ /*+
* notifyDccMsg() Raw DCC packet callback. * notifyDccMsg() Raw DCC packet callback.
@@ -599,7 +604,7 @@ extern void notifyDccSigOutputState( uint16_t Addr, uint8_t State) __attribut
* Returns: * Returns:
* None * None
*/ */
extern void notifyDccMsg( DCC_MSG * Msg ) __attribute__ ((weak)); extern void notifyDccMsg (DCC_MSG * Msg) __attribute__ ( (weak));
/*+ /*+
* notifyCVValid() Callback to determine if a given CV is valid. * notifyCVValid() Callback to determine if a given CV is valid.
@@ -617,7 +622,7 @@ extern void notifyDccMsg( DCC_MSG * Msg ) __attribute__ ((weak));
* 1 - CV is valid. * 1 - CV is valid.
* 0 - CV is not valid. * 0 - CV is not valid.
*/ */
extern uint8_t notifyCVValid( uint16_t CV, uint8_t Writable ) __attribute__ ((weak)); extern uint8_t notifyCVValid (uint16_t CV, uint8_t Writable) __attribute__ ( (weak));
/*+ /*+
* notifyCVRead() Callback to read a CV. * notifyCVRead() Callback to read a CV.
@@ -633,7 +638,7 @@ extern uint8_t notifyCVValid( uint16_t CV, uint8_t Writable ) __attribute__ ((we
* Returns: * Returns:
* Value - Value of the CV. * Value - Value of the CV.
*/ */
extern uint8_t notifyCVRead( uint16_t CV) __attribute__ ((weak)); extern uint8_t notifyCVRead (uint16_t CV) __attribute__ ( (weak));
/*+ /*+
* notifyCVWrite() Callback to write a value to a CV. * notifyCVWrite() Callback to write a value to a CV.
@@ -650,7 +655,7 @@ extern uint8_t notifyCVRead( uint16_t CV) __attribute__ ((weak));
* Returns: * Returns:
* Value - Value of the CV. * Value - Value of the CV.
*/ */
extern uint8_t notifyCVWrite( uint16_t CV, uint8_t Value) __attribute__ ((weak)); extern uint8_t notifyCVWrite (uint16_t CV, uint8_t Value) __attribute__ ( (weak));
/*+ /*+
* notifyIsSetCVReady() Callback to to determine if CVs can be written. * notifyIsSetCVReady() Callback to to determine if CVs can be written.
@@ -670,7 +675,7 @@ extern uint8_t notifyCVWrite( uint16_t CV, uint8_t Value) __attribute__ ((weak))
* 1 - CV is ready to be written. * 1 - CV is ready to be written.
* 0 - CV is not ready to be written. * 0 - CV is not ready to be written.
*/ */
extern uint8_t notifyIsSetCVReady(void) __attribute__ ((weak)); extern uint8_t notifyIsSetCVReady (void) __attribute__ ( (weak));
/*+ /*+
* notifyCVChange() Called when a CV value is changed. * notifyCVChange() Called when a CV value is changed.
@@ -688,8 +693,8 @@ extern uint8_t notifyIsSetCVReady(void) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyCVChange( uint16_t CV, uint8_t Value) __attribute__ ((weak)); extern void notifyCVChange (uint16_t CV, uint8_t Value) __attribute__ ( (weak));
extern void notifyDccCVChange( uint16_t CV, uint8_t Value) __attribute__ ((weak)); extern void notifyDccCVChange (uint16_t CV, uint8_t Value) __attribute__ ( (weak));
/*+ /*+
* notifyCVResetFactoryDefault() Called when CVs must be reset. * notifyCVResetFactoryDefault() Called when CVs must be reset.
@@ -706,7 +711,7 @@ extern void notifyDccCVChange( uint16_t CV, uint8_t Value) __attribute__ ((we
* Returns: * Returns:
* None * None
*/ */
extern void notifyCVResetFactoryDefault(void) __attribute__ ((weak)); extern void notifyCVResetFactoryDefault (void) __attribute__ ( (weak));
/*+ /*+
* notifyCVAck() Called when a CV write must be acknowledged. * notifyCVAck() Called when a CV write must be acknowledged.
@@ -719,7 +724,7 @@ extern void notifyCVResetFactoryDefault(void) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyCVAck(void) __attribute__ ((weak)); extern void notifyCVAck (void) __attribute__ ( (weak));
/*+ /*+
* notifyAdvancedCVAck() Called when a CV write must be acknowledged via Advanced Acknowledgement. * notifyAdvancedCVAck() Called when a CV write must be acknowledged via Advanced Acknowledgement.
* This callback must send the Advanced Acknowledgement via RailComm. * This callback must send the Advanced Acknowledgement via RailComm.
@@ -730,7 +735,7 @@ extern void notifyCVAck(void) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyAdvancedCVAck(void) __attribute__ ((weak)); extern void notifyAdvancedCVAck (void) __attribute__ ( (weak));
/*+ /*+
* notifyServiceMode(bool) Called when state of 'inServiceMode' changes * notifyServiceMode(bool) Called when state of 'inServiceMode' changes
* *
@@ -740,12 +745,12 @@ extern void notifyAdvancedCVAck(void) __attribute__ ((weak));
* Returns: * Returns:
* None * None
*/ */
extern void notifyServiceMode(bool) __attribute__ ((weak)); extern void notifyServiceMode (bool) __attribute__ ( (weak));
// Deprecated, only for backward compatibility with version 1.4.2. // Deprecated, only for backward compatibility with version 1.4.2.
// Don't use in new designs. These functions may be dropped in future versions // Don't use in new designs. These functions may be dropped in future versions
extern void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State ) __attribute__ ((weak)); extern void notifyDccAccState (uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State) __attribute__ ( (weak));
extern void notifyDccSigState( uint16_t Addr, uint8_t OutputIndex, uint8_t State) __attribute__ ((weak)); extern void notifyDccSigState (uint16_t Addr, uint8_t OutputIndex, uint8_t State) __attribute__ ( (weak));
#if defined (__cplusplus) #if defined (__cplusplus)
} }