Added new FLAGS_AUTO_FACTORY_DEFAULT flag to enable checking CV 7 & 8 and if value of both is 255 then call notifyCVResetFactoryDefault() if defined

This commit is contained in:
Alex Shepherd
2018-04-18 23:53:01 +12:00
parent 778de8ce74
commit f171dd3894
2 changed files with 11 additions and 3 deletions

View File

@@ -1290,12 +1290,19 @@ void NmraDcc::init( uint8_t ManufacturerId, uint8_t VersionId, uint8_t Flags, ui
// Set the Bits that control Multifunction or Accessory behaviour // Set the Bits that control Multifunction or Accessory behaviour
// and if the Accessory decoder optionally handles Output Addressing // and if the Accessory decoder optionally handles Output Addressing
uint8_t cv29Mask = CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE ; // peal off the top two bits uint8_t cv29Mask = CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE ; // peal off the top two bits
writeCV( CV_29_CONFIG, ( readCV( CV_29_CONFIG ) & ~cv29Mask ) | (Flags & ~FLAGS_MY_ADDRESS_ONLY) ) ; // KGW: Don't write bit 0 to CV. writeCV( CV_29_CONFIG, ( readCV( CV_29_CONFIG ) & ~cv29Mask ) | (Flags & cv29Mask) ) ;
writeCV( 7, VersionId ) ; uint8_t doAutoFactoryDefault = 0;
writeCV( 8, ManufacturerId ) ; if((Flags & FLAGS_AUTO_FACTORY_DEFAULT) && (readCV(CV_VERSION_ID) == 255) && (readCV(CV_MANUFACTURER_ID) == 255))
doAutoFactoryDefault = 1;
writeCV( CV_VERSION_ID, VersionId ) ;
writeCV( CV_MANUFACTURER_ID, ManufacturerId ) ;
clearDccProcState( 0 ); clearDccProcState( 0 );
if(notifyCVResetFactoryDefault && doAutoFactoryDefault)
notifyCVResetFactoryDefault();
} }
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////

View File

@@ -201,6 +201,7 @@ class 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
#define FLAGS_MY_ADDRESS_ONLY 0x01 // Only process DCC Packets with My Address #define FLAGS_MY_ADDRESS_ONLY 0x01 // Only process DCC Packets with My Address
#define FLAGS_AUTO_FACTORY_DEFAULT 0x02 // Call notifyCVResetFactoryDefault() if CV 7 & 8 == 255
#define FLAGS_OUTPUT_ADDRESS_MODE 0x40 // CV 29/541 bit 6 #define FLAGS_OUTPUT_ADDRESS_MODE 0x40 // CV 29/541 bit 6
#define FLAGS_DCC_ACCESSORY_DECODER 0x80 // CV 29/541 bit 7 #define FLAGS_DCC_ACCESSORY_DECODER 0x80 // CV 29/541 bit 7