/**
 * \page basics Additional SFB

 Face-related macros and functions:

 - \ref CLOCKWISE_FACE(dir)
 - \ref COUNTERCLOCKWISE_FACE(dir) a.k.a \ref ANTICLOCKWISE_FACE(dir)
 - \ref OPPOSITE_FACE(dir)
 - \ref FACE_NAME(face)
 - \ref FACE_CODE(face)
 - \ref FACE_NUMBER_FROM_CODE(code)
 - \ref IS_FACE_CODE(code)

Bit and number macros:
 - \ref SET_BIT(value,bitnum)
 - \ref CLEAR_BIT(value,bitnum)
 - \ref GET_BIT(value,bitnum)
 - \ref TEST_BIT(value,bitnum)

Time comparisons handling wraparound (these are actually usable for
any u32 counter values, not just #millis() or #micros()):
 - \ref IS_EARLIER(u32a,u32b)
 - \ref IS_EARLIER_OR_EQUAL(u32a,u32b)
 - \ref IS_LATER(u32a,u32b)
 - \ref IS_LATER_OR_EQUAL(u32a,u32b)

u16 comparisons handling wraparound:
 - \ref IS_EARLIER16(u16a,u16b)
 - \ref IS_EARLIER_OR_EQUAL16(u16a,u16b)
 - \ref IS_LATER16(u16a,u16b)
 - \ref IS_LATER_OR_EQUAL16(u16a,u16b)

 Read and write the onboard EEPROM:
 - \ref eepromRead(u32 addr, u8 * dest, u32 length) ;
 - \ref eepromWrite(u32 addr, const u8 * source, u32 length) ;
 - \ref eepromWait(bool busyWait = false) 

 Access and update data from the SFB bootblock:

 - \ref getBootBlockBoardId() ;
 - \ref getBootBlockBootCount() 
 - \ref getBootBlockBootLoaderBurnCount() 
 - \ref getBootBlockBootLoaderChecksum(SFBChecksum cs) 
 - \ref getBootBlockBootLoaderLength() 
 - \ref getBootBlockBootMode() ;   
 - \ref getBootBlockBurnCount() 
 - \ref getBootBlockFlags() ;      
 - \ref getBootBlockMergedChecksum() 
 - \ref getBootBlockOwnerId() ;
 - \ref getBootBlockPowerIn(u8 face) 
 - \ref getBootBlockPowerOnHours() 
 - \ref getBootBlockPowerOut(u8 face) ;
 - \ref getBootBlockVersion() 
 - \ref incrementBootBlockBootCount() 
 - \ref incrementBootBlockBurnCount() 
 - \ref incrementBootBlockPowerOnHours() 
 - \ref setBootBlockBoardId(u32 newBoardId) 
 - \ref setBootBlockBootMode(u32 newBootMode) 
 - \ref setBootBlockFlags(u32 newFlags) 
 - \ref setBootBlockOwnerId(u32 newOwnerId) 
 - \ref setBootBlockPowerIn(u8 face, bool accept) 
 - \ref setBootBlockPowerOut(u8 face, bool provide) 
 - \ref setBootBlockWatchdogResetFlag(bool bootedClean) 

Miscellaneous low-level and hardware-related:

 - \ref facePrintTimestamp(u8 face) 
 - \ref disableInterrupts() 
 - \ref enableInterrupts() 
 - \ref suspendInterrupts(u32var)
 - \ref restoreInterrupts(u32var)
 - \ref reenterBootloader() Drop back to the secondary bootloader if possible
 - \ref reenterBrainstem() Drop back to the tertiary bootloader if possible
 - \ref attachInterrupt(u32 sfbPin, IRQHandler *handlerFunction, u32 mode) 
 - \ref detachInterrupt(u32 sfbPin) 
 - \ref canAttachInterrupt(u32 sfbPin) 
 - \ref hasAttachedInterrupt(u32 sfbPin) 

Interfacing with the watchdog timer:

 - \ref watchdogActive() 
 - \ref watchdogSetInterval(u32 feedIntervalMs) 
 - \ref watchdogGetInterval() 
 - \ref watchdogStart(u32 feedIntervalMs) 
 - \ref watchdogFeed() 
 - \ref watchdogGetTimeoutFlag() 
 - \ref watchdogClearTimeoutFlag() 
 - \ref watchdogSuicide() 
 - \ref watchdogItWasSuicide() 

 */
