This code holds the complete demo set for the sx1280: PingPong, PER and Ranging Outdoor demo application. >>>>> This code MUST run on the mbed library release 127 or everything will be painfully slow.

Dependencies:   mbed SX1280Lib DmTftLibrary

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Eeprom.cpp Source File

Eeprom.cpp

00001 /*
00002   ______                              _
00003  / _____)             _              | |
00004 ( (____  _____ ____ _| |_ _____  ____| |__
00005  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
00006  _____) ) ____| | | || |_| ____( (___| | | |
00007 (______/|_____)_|_|_| \__)_____)\____)_| |_|
00008     (C)2016 Semtech
00009 
00010 Description: EEPROM routines
00011 
00012 Maintainer: Gregory Cristian & Gilbert Menth
00013 */
00014 
00015 #include "mbed.h"
00016 #include "string.h"
00017 #include "Eeprom.h"
00018 #include "Menu.h"
00019 #include "DemoApplication.h"
00020 #include "sx1280.h"
00021 #if defined( TARGET_NUCLEO_L476RG )
00022 #include "stm32l4xx_hal_flash.h"
00023 #elif defined( TARGET_NUCLEO_L152RE )
00024 #include "stm32l1xx_hal_flash.h"
00025 #else
00026 #error "Please define include file"
00027 #endif
00028 #include "DisplayDriver.h"
00029 
00030 
00031 /*!
00032  * \brief Define address of Emulated EEPROM (in fact region of Flash)
00033  */
00034 #if defined( TARGET_NUCLEO_L476RG )
00035 #define DATA_EEPROM_BASE    ( ( uint32_t )0x0807F800U )
00036 #define DATA_EEPROM_END     ( ( uint32_t )DATA_EEPROM_BASE + 2048 )
00037 #elif defined( TARGET_NUCLEO_L152RE )
00038 #define DATA_EEPROM_BASE    ( ( uint32_t )0x08080000U ) 
00039 #define DATA_EEPROM_END     ( ( uint32_t )0x080807FFU )
00040 #else
00041 #error "Please define EEPROM base address and size for your board "
00042 #endif
00043 
00044 
00045 /*!
00046  * \brief CRC of EEPROM buffer and its valid status
00047  */
00048 typedef struct
00049 {
00050     uint16_t Value;
00051     bool Valid;
00052 }MemTestStruct_t;
00053 
00054 /*!
00055  * \brief Local copy of Eeprom.
00056  */
00057 Eeprom_t Eeprom;
00058 
00059 
00060 // Check CRC of local copy of Eeprom (Buffer). This update Valid & Value
00061 static MemTestStruct_t EepromDataCheckSum( void );
00062 uint8_t EepromMcuWriteBuffer( uint16_t addr, uint8_t *buffer, uint16_t size );
00063 
00064 void EepromInit( void )
00065 {
00066     MemTestStruct_t memTestStruct;
00067 
00068     EepromMcuReadBuffer( 0, Eeprom.Buffer, EEPROM_BUFFER_SIZE );
00069     EepromLoadGeneralSettings( );
00070 
00071     memTestStruct = EepromDataCheckSum( );
00072     if( !( memTestStruct.Valid ) )
00073     {
00074 #ifdef PRINT_DEBUG
00075         printf("EepromDataCheckSum failed\n\r");
00076 #endif
00077         EepromSetDefaultSettings( );
00078     }
00079     EepromLoadSettings( ( RadioPacketTypes_t ) Eeprom.EepromData.DemoSettings.ModulationType );
00080 }
00081 
00082 void EepromSaveSettings( EepromDataSet_t dataSet)
00083 {
00084     MemTestStruct_t memTestStruct;
00085 
00086     switch( dataSet )
00087     {
00088         case RADIO_LORA_PARAMS:
00089             Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor = ( RadioLoRaSpreadingFactors_t )  Eeprom.EepromData.DemoSettings.ModulationParam1;
00090             Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth       = ( RadioLoRaBandwidths_t )        Eeprom.EepromData.DemoSettings.ModulationParam2;
00091             Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate      = ( RadioLoRaCodingRates_t )       Eeprom.EepromData.DemoSettings.ModulationParam3;
00092             Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength      =                                  Eeprom.EepromData.DemoSettings.PacketParam1;
00093             Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType          = ( RadioLoRaPacketLengthsModes_t )Eeprom.EepromData.DemoSettings.PacketParam2;
00094             Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength       =                                  Eeprom.EepromData.DemoSettings.PacketParam3;
00095             Eeprom.EepromData.PacketParams.Params.LoRa.Crc                 = ( RadioLoRaCrcModes_t )          Eeprom.EepromData.DemoSettings.PacketParam4;
00096             Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ            = ( RadioLoRaIQModes_t )           Eeprom.EepromData.DemoSettings.PacketParam5;
00097 
00098             memcpy( Eeprom.Buffer + MOD_LOR_SPREADF_EEPROM_ADDR,      &( Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor ), 1 );
00099             memcpy( Eeprom.Buffer + MOD_LOR_BW_EEPROM_ADDR,           &( Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth ),       1 );
00100             memcpy( Eeprom.Buffer + MOD_LOR_CODERATE_EEPROM_ADDR,     &( Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate ),      1 );
00101             memcpy( Eeprom.Buffer + PAK_LOR_PREAMBLE_LEN_EEPROM_ADDR, &( Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength ),      1 );
00102             memcpy( Eeprom.Buffer + PAK_LOR_HEADERTYPE_EEPROM_ADDR,   &( Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType ),          1 );
00103             memcpy( Eeprom.Buffer + PAK_LOR_PL_LEN_EEPROM_ADDR,       &( Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength ),       1 );
00104             memcpy( Eeprom.Buffer + PAK_LOR_CRC_MODE_EEPROM_ADDR,     &( Eeprom.EepromData.PacketParams.Params.LoRa.Crc ),                 1 );
00105             memcpy( Eeprom.Buffer + PAK_LOR_IQ_INV_EEPROM_ADDR,       &( Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ ),            1 );
00106 #ifdef PRINT_DEBUG
00107             printf("Saved RADIO_LORA_PARAMS\n\r");
00108 #endif
00109             break;
00110 
00111         case RADIO_RANGING_PARAMS:
00112             memcpy( Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR,      &( Eeprom.EepromData.DemoSettings.ModulationParam1 ), 1 );
00113             memcpy( Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR,           &( Eeprom.EepromData.DemoSettings.ModulationParam2 ), 1 );
00114             memcpy( Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR,     &( Eeprom.EepromData.DemoSettings.ModulationParam3 ), 1 );
00115             memcpy( Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, &( Eeprom.EepromData.DemoSettings.PacketParam1 ),     1 );
00116             memcpy( Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR,   &( Eeprom.EepromData.DemoSettings.PacketParam2 ),     1 );
00117             memcpy( Eeprom.Buffer + PAK_RNG_PL_LEN_EEPROM_ADDR,       &( Eeprom.EepromData.DemoSettings.PacketParam3 ),     1 );
00118             memcpy( Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR,     &( Eeprom.EepromData.DemoSettings.PacketParam4 ),     1 );
00119             memcpy( Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR,       &( Eeprom.EepromData.DemoSettings.PacketParam5 ),     1 );
00120 
00121             memcpy( Eeprom.Buffer + APP_RNG_REQ_COUNT_EEPROM_ADDR, &( Eeprom.EepromData.DemoSettings.RngRequestCount ), 1 );
00122             memcpy( Eeprom.Buffer + APP_RNG_FULLSCALE_EEPROM_ADDR, &( Eeprom.EepromData.DemoSettings.RngFullScale ),    2 );
00123             memcpy( Eeprom.Buffer + APP_RNG_ADDR_EEPROM_ADDR,      &( Eeprom.EepromData.DemoSettings.RngAddress ),      4 );
00124             memcpy( Eeprom.Buffer + APP_RNG_ANT_EEPROM_ADDR,       &( Eeprom.EepromData.DemoSettings.RngAntenna ),      1 );
00125             memcpy( Eeprom.Buffer + APP_RNG_UNIT_EEPROM_ADDR,      &( Eeprom.EepromData.DemoSettings.RngUnit ),         1 );
00126 #ifdef PRINT_DEBUG
00127             printf("Saved RADIO_RANGING_PARAMS\n\r");
00128 #endif
00129             break;
00130 
00131         case RADIO_FLRC_PARAMS:
00132             Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth  = ( RadioFlrcBitrates_t )       Eeprom.EepromData.DemoSettings.ModulationParam1;
00133             Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate        = ( RadioFlrcCodingRates_t )    Eeprom.EepromData.DemoSettings.ModulationParam2;
00134             Eeprom.EepromData.ModulationParams.Params.Flrc.ModulationShaping = ( RadioModShapings_t )        Eeprom.EepromData.DemoSettings.ModulationParam3;
00135             Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength        = ( RadioPreambleLengths_t )    Eeprom.EepromData.DemoSettings.PacketParam1;
00136             Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordLength        = ( RadioFlrcSyncWordLengths_t )Eeprom.EepromData.DemoSettings.PacketParam2;
00137             Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordMatch         = ( RadioSyncWordRxMatchs_t )   Eeprom.EepromData.DemoSettings.PacketParam3;
00138             Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType            = ( RadioPacketLengthModes_t )  Eeprom.EepromData.DemoSettings.PacketParam4;
00139             Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength         =                               Eeprom.EepromData.DemoSettings.PacketParam5;
00140             Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength             = ( RadioCrcTypes_t )           Eeprom.EepromData.DemoSettings.PacketParam6;
00141             Eeprom.EepromData.PacketParams.Params.Flrc.Whitening             = ( RadioWhiteningModes_t )     Eeprom.EepromData.DemoSettings.PacketParam7;
00142 
00143             memcpy( Eeprom.Buffer + MOD_FLR_BRBW_EEPROM_ADDR,         &( Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth ),  1 );
00144             memcpy( Eeprom.Buffer + MOD_FLR_CODERATE_EEPROM_ADDR,     &( Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate ),        1 );
00145             memcpy( Eeprom.Buffer + MOD_FLR_MOD_SHAP_EEPROM_ADDR,     &( Eeprom.EepromData.ModulationParams.Params.Flrc.ModulationShaping ), 1 );
00146             memcpy( Eeprom.Buffer + PAK_FLR_PREAMBLE_LEN_EEPROM_ADDR, &( Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength ),        1 );
00147             memcpy( Eeprom.Buffer + PAK_FLR_SYNC_LEN_EEPROM_ADDR,     &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordLength ),        1 );
00148             memcpy( Eeprom.Buffer + PAK_FLR_SYNC_MATCH_EEPROM_ADDR,   &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordMatch ),         1 );
00149             memcpy( Eeprom.Buffer + PAK_FLR_HEADERTYPE_EEPROM_ADDR,   &( Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType ),            1 );
00150             memcpy( Eeprom.Buffer + PAK_FLR_PL_LEN_EEPROM_ADDR,       &( Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength ),         1 );
00151             memcpy( Eeprom.Buffer + PAK_FLR_CRC_LEN_EEPROM_ADDR,      &( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength ),             1 );
00152             memcpy( Eeprom.Buffer + PAK_FLR_WHITENING_EEPROM_ADDR,    &( Eeprom.EepromData.PacketParams.Params.Flrc.Whitening ),             1 );
00153 #ifdef PRINT_DEBUG
00154             printf("Saved RADIO_FLRC_PARAMS\n\r");
00155 #endif
00156             break;
00157 
00158         case RADIO_GFSK_PARAMS:
00159             Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth  = ( RadioGfskBleBitrates_t )  Eeprom.EepromData.DemoSettings.ModulationParam1;
00160             Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationIndex   = ( RadioGfskBleModIndexes_t )Eeprom.EepromData.DemoSettings.ModulationParam2;
00161             Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationShaping = ( RadioModShapings_t )      Eeprom.EepromData.DemoSettings.ModulationParam3;
00162             Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength        = ( RadioPreambleLengths_t )  Eeprom.EepromData.DemoSettings.PacketParam1;
00163             Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength        = ( RadioSyncWordLengths_t )  Eeprom.EepromData.DemoSettings.PacketParam2;
00164             Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordMatch         = ( RadioSyncWordRxMatchs_t ) Eeprom.EepromData.DemoSettings.PacketParam3;
00165             Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType            = ( RadioPacketLengthModes_t )Eeprom.EepromData.DemoSettings.PacketParam4;
00166             Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength         =                             Eeprom.EepromData.DemoSettings.PacketParam5;
00167             Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength             = ( RadioCrcTypes_t )         Eeprom.EepromData.DemoSettings.PacketParam6;
00168             Eeprom.EepromData.PacketParams.Params.Gfsk.Whitening             = ( RadioWhiteningModes_t )   Eeprom.EepromData.DemoSettings.PacketParam7;
00169 
00170             memcpy( Eeprom.Buffer + MOD_GFS_BRBW_EEPROM_ADDR,         &( Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth ),  1 );
00171             memcpy( Eeprom.Buffer + MOD_GFS_MOD_IND_EEPROM_ADDR,      &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationIndex ),   1 );
00172             memcpy( Eeprom.Buffer + MOD_GFS_MOD_SHAP_EEPROM_ADDR,     &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationShaping ), 1 );
00173             memcpy( Eeprom.Buffer + PAK_GFS_PREAMBLE_LEN_EEPROM_ADDR, &( Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength ),        1 );
00174             memcpy( Eeprom.Buffer + PAK_GFS_SYNC_LEN_EEPROM_ADDR,     &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength ),        1 );
00175             memcpy( Eeprom.Buffer + PAK_GFS_SYNC_MATCH_EEPROM_ADDR,   &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordMatch ),         1 );
00176             memcpy( Eeprom.Buffer + PAK_GFS_HEADERTYPE_EEPROM_ADDR,   &( Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType ),            1 );
00177             memcpy( Eeprom.Buffer + PAK_GFS_PL_LEN_EEPROM_ADDR,       &( Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength ),         1 );
00178             memcpy( Eeprom.Buffer + PAK_GFS_CRC_LEN_EEPROM_ADDR,      &( Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength ),             1 );
00179             memcpy( Eeprom.Buffer + PAK_GFS_WHITENING_EEPROM_ADDR,    &( Eeprom.EepromData.PacketParams.Params.Gfsk.Whitening ),             1 );
00180 #ifdef PRINT_DEBUG
00181             printf("Saved RADIO_GFSK_PARAMS\n\r");
00182 #endif
00183             break;
00184 
00185         case DEMO_SETTINGS:
00186             memcpy( Eeprom.Buffer + APP_ENTITY_EEPROM_ADDR,           &( Eeprom.EepromData.DemoSettings.Entity ),           1 );
00187             memcpy( Eeprom.Buffer + APP_ANT_SW_EEPROM_ADDR,           &( Eeprom.EepromData.DemoSettings.AntennaSwitch ),    1 );
00188             memcpy( Eeprom.Buffer + APP_FREQ_EEPROM_ADDR,             &( Eeprom.EepromData.DemoSettings.Frequency ),        4 );
00189             memcpy( Eeprom.Buffer + APP_TXPWR_EEPROM_ADDR,            &( Eeprom.EepromData.DemoSettings.TxPower ),          1 );
00190             memcpy( Eeprom.Buffer + APP_MOD_TYPE_EEPROM_ADDR,         &( Eeprom.EepromData.DemoSettings.ModulationType ),   1 );
00191             memcpy( Eeprom.Buffer + APP_PER_NPAK_MAX_EEPROM_ADDR,     &( Eeprom.EepromData.DemoSettings.MaxNumPacket ),     4 );
00192             memcpy( Eeprom.Buffer + APP_RADIO_POWER_MODE_EEPROM_ADDR, &( Eeprom.EepromData.DemoSettings.RadioPowerMode ),   1 );
00193             memcpy( Eeprom.Buffer + MOD_PAK_TYPE_EEPROM_ADDR,         &( Eeprom.EepromData.DemoSettings.ModulationType ),   1 );
00194             memcpy( Eeprom.Buffer + PAK_PAK_TYPE_EEPROM_ADDR,         &( Eeprom.EepromData.DemoSettings.ModulationType ),   1 );
00195 #ifdef PRINT_DEBUG
00196             printf("Saved DEMO_SETTINGS\n\r");
00197 #endif
00198             break;
00199 
00200         case SCREEN_DATA:
00201             memcpy( Eeprom.Buffer + SCR_CAL_FLAG_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.ScreenCalibrated ), 1 );
00202             memcpy( Eeprom.Buffer + SCR_CAL_POSA_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.a ),    4 );
00203             memcpy( Eeprom.Buffer + SCR_CAL_POSB_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.b ),    4 );
00204             memcpy( Eeprom.Buffer + SCR_CAL_POSC_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.c ),    4 );
00205             memcpy( Eeprom.Buffer + SCR_CAL_POSD_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.d ),    4 );
00206             memcpy( Eeprom.Buffer + SCR_CAL_POSE_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.e ),    4 );
00207             memcpy( Eeprom.Buffer + SCR_CAL_POSF_EEPROM_ADDR, &( Eeprom.EepromData.MenuSettings.Calibration.f ),    4 );
00208             break;
00209 
00210         default:
00211 #ifdef PRINT_DEBUG
00212             printf("data not saved\n\r");
00213 #endif
00214             break;
00215     }
00216 
00217     memTestStruct = EepromDataCheckSum( );
00218     memcpy( Eeprom.Buffer + EEPROM_CRC_EEPROM_ADDR, &( memTestStruct.Value ), 2 );
00219 
00220     EepromMcuWriteBuffer( 0, Eeprom.Buffer, EEPROM_BUFFER_SIZE );
00221 }
00222 
00223 void EepromLoadGeneralSettings( void )
00224 {
00225     printf("Load General Settings\n\r");
00226     memcpy( &( Eeprom.EepromData.MenuSettings.ScreenCalibrated ), Eeprom.Buffer + SCR_CAL_FLAG_EEPROM_ADDR, 1 );
00227     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.a ),    Eeprom.Buffer + SCR_CAL_POSA_EEPROM_ADDR, 4 );
00228     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.b ),    Eeprom.Buffer + SCR_CAL_POSB_EEPROM_ADDR, 4 );
00229     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.c ),    Eeprom.Buffer + SCR_CAL_POSC_EEPROM_ADDR, 4 );
00230     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.d ),    Eeprom.Buffer + SCR_CAL_POSD_EEPROM_ADDR, 4 );
00231     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.e ),    Eeprom.Buffer + SCR_CAL_POSE_EEPROM_ADDR, 4 );
00232     memcpy( &( Eeprom.EepromData.MenuSettings.Calibration.f ),    Eeprom.Buffer + SCR_CAL_POSF_EEPROM_ADDR, 4 );
00233 
00234     memcpy( &( Eeprom.EepromData.DemoSettings.Entity ),         Eeprom.Buffer + APP_ENTITY_EEPROM_ADDR,           1 );
00235     memcpy( &( Eeprom.EepromData.DemoSettings.AntennaSwitch ),  Eeprom.Buffer + APP_ANT_SW_EEPROM_ADDR,           1 );
00236     memcpy( &( Eeprom.EepromData.DemoSettings.Frequency ),      Eeprom.Buffer + APP_FREQ_EEPROM_ADDR,             4 );
00237     memcpy( &( Eeprom.EepromData.DemoSettings.RadioPowerMode ), Eeprom.Buffer + APP_RADIO_POWER_MODE_EEPROM_ADDR, 1 );
00238     memcpy( &( Eeprom.EepromData.DemoSettings.TxPower ),        Eeprom.Buffer + APP_TXPWR_EEPROM_ADDR,            1 );
00239     memcpy( &( Eeprom.EepromData.DemoSettings.ModulationType ), Eeprom.Buffer + APP_MOD_TYPE_EEPROM_ADDR,         1 );
00240     memcpy( &( Eeprom.EepromData.DemoSettings.MaxNumPacket ),   Eeprom.Buffer + APP_PER_NPAK_MAX_EEPROM_ADDR,     4 );
00241 
00242     memcpy( &( Eeprom.EepromData.ModulationParams.PacketType ),                    Eeprom.Buffer + MOD_PAK_TYPE_EEPROM_ADDR,     1 );
00243     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth ),  Eeprom.Buffer + MOD_GFS_BRBW_EEPROM_ADDR,     1 );
00244     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationIndex ),   Eeprom.Buffer + MOD_GFS_MOD_IND_EEPROM_ADDR,  1 );
00245     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationShaping ), Eeprom.Buffer + MOD_GFS_MOD_SHAP_EEPROM_ADDR, 1 );
00246     memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor ),   Eeprom.Buffer + MOD_LOR_SPREADF_EEPROM_ADDR,  1 );
00247     memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth ),         Eeprom.Buffer + MOD_LOR_BW_EEPROM_ADDR,       1 );
00248     memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate ),        Eeprom.Buffer + MOD_LOR_CODERATE_EEPROM_ADDR, 1 );
00249     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth ),  Eeprom.Buffer + MOD_FLR_BRBW_EEPROM_ADDR,     1 );
00250     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate ),        Eeprom.Buffer + MOD_FLR_CODERATE_EEPROM_ADDR, 1 );
00251     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.ModulationShaping ), Eeprom.Buffer + MOD_FLR_MOD_SHAP_EEPROM_ADDR, 1 );
00252     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Ble.BitrateBandwidth ),   Eeprom.Buffer + MOD_BLE_BRBW_EEPROM_ADDR,     1 );
00253     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Ble.ModulationIndex ),    Eeprom.Buffer + MOD_BLE_MOD_IND_EEPROM_ADDR,  1 );
00254     memcpy( &( Eeprom.EepromData.ModulationParams.Params.Ble.ModulationShaping ),  Eeprom.Buffer + MOD_BLE_MOD_SHAP_EEPROM_ADDR, 1 );
00255 
00256     memcpy( &( Eeprom.EepromData.PacketParams.PacketType ),                 Eeprom.Buffer + PAK_PAK_TYPE_EEPROM_ADDR,         1 );
00257     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength ), Eeprom.Buffer + PAK_GFS_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00258     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength ), Eeprom.Buffer + PAK_GFS_SYNC_LEN_EEPROM_ADDR,     1 );
00259     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordMatch ),  Eeprom.Buffer + PAK_GFS_SYNC_MATCH_EEPROM_ADDR,   1 );
00260     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType ),     Eeprom.Buffer + PAK_GFS_HEADERTYPE_EEPROM_ADDR,   1 );
00261     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength ),  Eeprom.Buffer + PAK_GFS_PL_LEN_EEPROM_ADDR,       1 );
00262     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength ),      Eeprom.Buffer + PAK_GFS_CRC_LEN_EEPROM_ADDR,      1 );
00263     memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.Whitening ),      Eeprom.Buffer + PAK_GFS_WHITENING_EEPROM_ADDR,    1 );
00264     memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength ), Eeprom.Buffer + PAK_LOR_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00265     memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType ),     Eeprom.Buffer + PAK_LOR_HEADERTYPE_EEPROM_ADDR,   1 );
00266     memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength ),  Eeprom.Buffer + PAK_LOR_PL_LEN_EEPROM_ADDR,       1 );
00267     memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.Crc ),            Eeprom.Buffer + PAK_LOR_CRC_MODE_EEPROM_ADDR,     1 );
00268     memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ ),       Eeprom.Buffer + PAK_LOR_IQ_INV_EEPROM_ADDR,       1 );
00269     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength ), Eeprom.Buffer + PAK_FLR_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00270     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordLength ), Eeprom.Buffer + PAK_FLR_SYNC_LEN_EEPROM_ADDR,     1 );
00271     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordMatch ),  Eeprom.Buffer + PAK_FLR_SYNC_MATCH_EEPROM_ADDR,   1 );
00272     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType ),     Eeprom.Buffer + PAK_FLR_HEADERTYPE_EEPROM_ADDR,   1 );
00273     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength ),  Eeprom.Buffer + PAK_FLR_PL_LEN_EEPROM_ADDR,       1 );
00274     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength ),      Eeprom.Buffer + PAK_FLR_CRC_LEN_EEPROM_ADDR,      1 );
00275     memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.Whitening ),      Eeprom.Buffer + PAK_FLR_WHITENING_EEPROM_ADDR,    1 );
00276     memcpy( &( Eeprom.EepromData.PacketParams.Params.Ble.BleTestPayload ),  Eeprom.Buffer + PAK_BLE_PAK_TYPE_EEPROM_ADDR,     1 );
00277     memcpy( &( Eeprom.EepromData.PacketParams.Params.Ble.ConnectionState ), Eeprom.Buffer + PAK_BLE_CON_STATE_EEPROM_ADDR,    1 );
00278     memcpy( &( Eeprom.EepromData.PacketParams.Params.Ble.CrcLength ),       Eeprom.Buffer + PAK_BLE_CRC_FIELD_EEPROM_ADDR,    1 );
00279     memcpy( &( Eeprom.EepromData.PacketParams.Params.Ble.Whitening ),       Eeprom.Buffer + PAK_BLE_WHITENING_EEPROM_ADDR,    1 );
00280 
00281     memcpy( &( Eeprom.EepromData.DemoSettings.RngRequestCount ), Eeprom.Buffer + APP_RNG_REQ_COUNT_EEPROM_ADDR, 1 );
00282     memcpy( &( Eeprom.EepromData.DemoSettings.RngFullScale ),    Eeprom.Buffer + APP_RNG_FULLSCALE_EEPROM_ADDR, 2 );
00283     memcpy( &( Eeprom.EepromData.DemoSettings.RngAddress ),      Eeprom.Buffer + APP_RNG_ADDR_EEPROM_ADDR,      4 );
00284     memcpy( &( Eeprom.EepromData.DemoSettings.RngAntenna ),      Eeprom.Buffer + APP_RNG_ANT_EEPROM_ADDR,       1 );
00285     memcpy( &( Eeprom.EepromData.DemoSettings.RngUnit ),         Eeprom.Buffer + APP_RNG_UNIT_EEPROM_ADDR,      1 );
00286 }
00287 
00288 void EepromLoadSettings( RadioPacketTypes_t modulation )
00289 {
00290     if( modulation == PACKET_TYPE_LORA )
00291     {
00292 #ifdef PRINT_DEBUG
00293         printf("Load Settings PACKET_TYPE_LORA\n\r");
00294 #endif
00295         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_LOR_SPREADF_EEPROM_ADDR,      1 );
00296         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth ),       Eeprom.Buffer + MOD_LOR_BW_EEPROM_ADDR,           1 );
00297         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate ),      Eeprom.Buffer + MOD_LOR_CODERATE_EEPROM_ADDR,     1 );
00298         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength ),      Eeprom.Buffer + PAK_LOR_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00299         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType ),          Eeprom.Buffer + PAK_LOR_HEADERTYPE_EEPROM_ADDR,   1 );
00300         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength ),       Eeprom.Buffer + PAK_LOR_PL_LEN_EEPROM_ADDR,       1 );
00301         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.Crc ),             Eeprom.Buffer + PAK_LOR_CRC_MODE_EEPROM_ADDR,     1 );
00302         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ ),            Eeprom.Buffer + PAK_LOR_IQ_INV_EEPROM_ADDR,       1 );
00303 
00304         Eeprom.EepromData.ModulationParams.PacketType   = PACKET_TYPE_LORA;
00305         Eeprom.EepromData.PacketParams.PacketType       = PACKET_TYPE_LORA;
00306         Eeprom.EepromData.DemoSettings.ModulationParam1 = Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor;
00307         Eeprom.EepromData.DemoSettings.ModulationParam2 = Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth;
00308         Eeprom.EepromData.DemoSettings.ModulationParam3 = Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate;
00309 
00310         Eeprom.EepromData.DemoSettings.PacketParam1 = Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength;
00311         Eeprom.EepromData.DemoSettings.PacketParam2 = Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType;
00312         Eeprom.EepromData.DemoSettings.PacketParam3 = Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength;
00313         Eeprom.EepromData.DemoSettings.PacketParam4 = Eeprom.EepromData.PacketParams.Params.LoRa.Crc;
00314         Eeprom.EepromData.DemoSettings.PacketParam5 = Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ;
00315         Eeprom.EepromData.DemoSettings.PacketParam6 = 0x00;
00316         Eeprom.EepromData.DemoSettings.PacketParam7 = 0x00;
00317     }
00318     else if( modulation == PACKET_TYPE_RANGING )
00319     {
00320 #ifdef PRINT_DEBUG
00321         printf("Load Settings PACKET_TYPE_RANGING\n\r");
00322 #endif
00323         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR,      1 );
00324         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth ),       Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR,           1 );
00325         memcpy( &( Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate ),      Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR,     1 );
00326         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength ),      Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00327         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType ),          Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR,   1 );
00328         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength ),       Eeprom.Buffer + PAK_RNG_PL_LEN_EEPROM_ADDR,       1 );
00329         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.Crc ),                 Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR,     1 );
00330         memcpy( &( Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ ),            Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR,       1 );
00331         memcpy( &( Eeprom.EepromData.DemoSettings.RngRequestCount ),                 Eeprom.Buffer + APP_RNG_REQ_COUNT_EEPROM_ADDR,    1 );
00332         memcpy( &( Eeprom.EepromData.DemoSettings.RngFullScale ),                    Eeprom.Buffer + APP_RNG_FULLSCALE_EEPROM_ADDR,    2 );
00333         memcpy( &( Eeprom.EepromData.DemoSettings.RngAddress ),                      Eeprom.Buffer + APP_RNG_ADDR_EEPROM_ADDR,         4 );
00334         memcpy( &( Eeprom.EepromData.DemoSettings.RngAntenna ),                      Eeprom.Buffer + APP_RNG_ANT_EEPROM_ADDR,          1 );
00335         memcpy( &( Eeprom.EepromData.DemoSettings.RngUnit ),                         Eeprom.Buffer + APP_RNG_UNIT_EEPROM_ADDR,         1 );
00336 
00337         Eeprom.EepromData.ModulationParams.PacketType   = PACKET_TYPE_RANGING;
00338         Eeprom.EepromData.PacketParams.PacketType       = PACKET_TYPE_RANGING;
00339         Eeprom.EepromData.DemoSettings.ModulationParam1 = Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor;
00340         Eeprom.EepromData.DemoSettings.ModulationParam2 = Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth;
00341         Eeprom.EepromData.DemoSettings.ModulationParam3 = Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate;
00342 
00343         Eeprom.EepromData.DemoSettings.PacketParam1 = Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength;
00344         Eeprom.EepromData.DemoSettings.PacketParam2 = Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType;
00345         Eeprom.EepromData.DemoSettings.PacketParam3 = Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength;
00346         Eeprom.EepromData.DemoSettings.PacketParam4 = Eeprom.EepromData.PacketParams.Params.LoRa.Crc;
00347         Eeprom.EepromData.DemoSettings.PacketParam5 = Eeprom.EepromData.PacketParams.Params.LoRa.InvertIQ;
00348         Eeprom.EepromData.DemoSettings.PacketParam6 = 0x00;
00349         Eeprom.EepromData.DemoSettings.PacketParam7 = 0x00;
00350     }
00351     else if( modulation == PACKET_TYPE_FLRC )
00352     {
00353 #ifdef PRINT_DEBUG
00354         printf("Load Settings PACKET_TYPE_FLRC\n\r");
00355 #endif
00356         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth ),  Eeprom.Buffer + MOD_FLR_BRBW_EEPROM_ADDR,         1 );
00357         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate ),        Eeprom.Buffer + MOD_FLR_CODERATE_EEPROM_ADDR,     1 );
00358         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Flrc.ModulationShaping ), Eeprom.Buffer + MOD_FLR_MOD_SHAP_EEPROM_ADDR,     1 );
00359         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength ),        Eeprom.Buffer + PAK_FLR_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00360         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordLength ),        Eeprom.Buffer + PAK_FLR_SYNC_LEN_EEPROM_ADDR,     1 );
00361         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordMatch ),         Eeprom.Buffer + PAK_FLR_SYNC_MATCH_EEPROM_ADDR,   1 );
00362         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType ),            Eeprom.Buffer + PAK_FLR_HEADERTYPE_EEPROM_ADDR,   1 );
00363         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength ),         Eeprom.Buffer + PAK_FLR_PL_LEN_EEPROM_ADDR,       1 );
00364         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength ),             Eeprom.Buffer + PAK_FLR_CRC_LEN_EEPROM_ADDR,      1 );
00365         memcpy( &( Eeprom.EepromData.PacketParams.Params.Flrc.Whitening ),             Eeprom.Buffer + PAK_FLR_WHITENING_EEPROM_ADDR,    1 );
00366 
00367         Eeprom.EepromData.ModulationParams.PacketType   = PACKET_TYPE_FLRC;
00368         Eeprom.EepromData.PacketParams.PacketType       = PACKET_TYPE_FLRC;
00369         Eeprom.EepromData.DemoSettings.ModulationParam1 = Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth;
00370         Eeprom.EepromData.DemoSettings.ModulationParam2 = Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate;
00371         Eeprom.EepromData.DemoSettings.ModulationParam3 = Eeprom.EepromData.ModulationParams.Params.Flrc.ModulationShaping;
00372 
00373         Eeprom.EepromData.DemoSettings.PacketParam1 = Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength;
00374         Eeprom.EepromData.DemoSettings.PacketParam2 = Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordLength;
00375         Eeprom.EepromData.DemoSettings.PacketParam3 = Eeprom.EepromData.PacketParams.Params.Flrc.SyncWordMatch;
00376         Eeprom.EepromData.DemoSettings.PacketParam4 = Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType;
00377         Eeprom.EepromData.DemoSettings.PacketParam5 = Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength;
00378         Eeprom.EepromData.DemoSettings.PacketParam6 = Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength;
00379         Eeprom.EepromData.DemoSettings.PacketParam7 = Eeprom.EepromData.PacketParams.Params.Flrc.Whitening;
00380     }
00381     else // GFSK
00382     {
00383 #ifdef PRINT_DEBUG
00384         printf("Load Settings PACKET_TYPE_GFSK\n\r");
00385 #endif
00386         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth ),  Eeprom.Buffer + MOD_GFS_BRBW_EEPROM_ADDR,         1 );
00387         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationIndex ),   Eeprom.Buffer + MOD_GFS_MOD_IND_EEPROM_ADDR,      1 );
00388         memcpy( &( Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationShaping ), Eeprom.Buffer + MOD_GFS_MOD_SHAP_EEPROM_ADDR,     1 );
00389         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength ),        Eeprom.Buffer + PAK_GFS_PREAMBLE_LEN_EEPROM_ADDR, 1 );
00390         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength ),        Eeprom.Buffer + PAK_GFS_SYNC_LEN_EEPROM_ADDR,     1 );
00391         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordMatch ),         Eeprom.Buffer + PAK_GFS_SYNC_MATCH_EEPROM_ADDR,   1 );
00392         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType ),            Eeprom.Buffer + PAK_GFS_HEADERTYPE_EEPROM_ADDR,   1 );
00393         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength ),         Eeprom.Buffer + PAK_GFS_PL_LEN_EEPROM_ADDR,       1 );
00394         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength ),             Eeprom.Buffer + PAK_GFS_CRC_LEN_EEPROM_ADDR,      1 );
00395         memcpy( &( Eeprom.EepromData.PacketParams.Params.Gfsk.Whitening ),             Eeprom.Buffer + PAK_GFS_WHITENING_EEPROM_ADDR,    1 );
00396 
00397         Eeprom.EepromData.ModulationParams.PacketType   = PACKET_TYPE_GFSK;
00398         Eeprom.EepromData.PacketParams.PacketType       = PACKET_TYPE_GFSK;
00399         Eeprom.EepromData.DemoSettings.ModulationParam1 = Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth;
00400         Eeprom.EepromData.DemoSettings.ModulationParam2 = Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationIndex;
00401         Eeprom.EepromData.DemoSettings.ModulationParam3 = Eeprom.EepromData.ModulationParams.Params.Gfsk.ModulationShaping;
00402 
00403         Eeprom.EepromData.DemoSettings.PacketParam1 = Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength;
00404         Eeprom.EepromData.DemoSettings.PacketParam2 = Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength;
00405         Eeprom.EepromData.DemoSettings.PacketParam3 = Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordMatch;
00406         Eeprom.EepromData.DemoSettings.PacketParam4 = Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType;
00407         Eeprom.EepromData.DemoSettings.PacketParam5 = Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength;
00408         Eeprom.EepromData.DemoSettings.PacketParam6 = Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength;
00409         Eeprom.EepromData.DemoSettings.PacketParam7 = Eeprom.EepromData.PacketParams.Params.Gfsk.Whitening;
00410     }
00411 
00412     Eeprom.EepromData.DemoSettings.ModulationType = modulation;
00413 }
00414 
00415 void EepromSetRangingDefaultSettings( void )
00416 {
00417 #ifdef PRINT_DEBUG
00418     printf("Set Ranging Default Settings\n\r");
00419 #endif
00420 
00421     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_RANGING;
00422     Eeprom.EepromData.ModulationParams.PacketType = PACKET_TYPE_RANGING;
00423     Eeprom.EepromData.PacketParams.PacketType     = PACKET_TYPE_RANGING;
00424 
00425     Eeprom.EepromData.DemoSettings.ModulationParam1 = LORA_SF6;
00426     Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_1600;
00427     Eeprom.EepromData.DemoSettings.ModulationParam3 = LORA_CR_4_5;
00428 
00429     Eeprom.EepromData.DemoSettings.PacketParam1    = 12; // PreambleLength
00430     Eeprom.EepromData.DemoSettings.PacketParam2    = LORA_PACKET_VARIABLE_LENGTH;
00431     Eeprom.EepromData.DemoSettings.PacketParam3    = 10; // PayloadLength
00432     Eeprom.EepromData.DemoSettings.PacketParam4    = LORA_CRC_ON;
00433     Eeprom.EepromData.DemoSettings.PacketParam5    = LORA_IQ_NORMAL;
00434     Eeprom.EepromData.DemoSettings.RngRequestCount = 60;
00435     Eeprom.EepromData.DemoSettings.RngAntenna      = DEMO_RNG_ANT_1;
00436 
00437     EepromSaveSettings( RADIO_RANGING_PARAMS );
00438 }
00439 
00440 void EepromSetDefaultSettings( void )
00441 {
00442     Eeprom.EepromData.MenuSettings.ScreenCalibrated = false;
00443 
00444 #ifdef PRINT_DEBUG
00445     printf("Set Default Settings\n\r");
00446 #endif
00447 
00448     EepromSaveSettings( SCREEN_DATA );
00449 
00450     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_RANGING;
00451     Eeprom.EepromData.ModulationParams.PacketType = PACKET_TYPE_RANGING;
00452     Eeprom.EepromData.PacketParams.PacketType     = PACKET_TYPE_RANGING;
00453 
00454     Eeprom.EepromData.DemoSettings.ModulationParam1 = LORA_SF6;
00455     Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_1600;
00456     Eeprom.EepromData.DemoSettings.ModulationParam3 = LORA_CR_4_5;
00457 
00458     Eeprom.EepromData.DemoSettings.PacketParam1    = 12; // PreambleLength
00459     Eeprom.EepromData.DemoSettings.PacketParam2    = LORA_PACKET_VARIABLE_LENGTH;
00460     Eeprom.EepromData.DemoSettings.PacketParam3    = 10; // PayloadLength
00461     Eeprom.EepromData.DemoSettings.PacketParam4    = LORA_CRC_ON;
00462     Eeprom.EepromData.DemoSettings.PacketParam5    = LORA_IQ_NORMAL;
00463     Eeprom.EepromData.DemoSettings.RngRequestCount = 60;
00464     Eeprom.EepromData.DemoSettings.RngFullScale    = 30;
00465     Eeprom.EepromData.DemoSettings.RngAddress      = DEMO_RNG_ADDR_1;
00466     Eeprom.EepromData.DemoSettings.RngAntenna      = DEMO_RNG_ANT_1;
00467     Eeprom.EepromData.DemoSettings.RngUnit         = DEMO_RNG_UNIT_SEL_M;
00468 
00469     EepromSaveSettings( RADIO_RANGING_PARAMS );
00470 
00471     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_LORA;
00472     Eeprom.EepromData.ModulationParams.PacketType = PACKET_TYPE_LORA;
00473     Eeprom.EepromData.PacketParams.PacketType     = PACKET_TYPE_LORA;
00474 
00475     Eeprom.EepromData.DemoSettings.ModulationParam1 = LORA_SF10;
00476     Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_1600;
00477     Eeprom.EepromData.DemoSettings.ModulationParam3 = LORA_CR_4_5;
00478 
00479     Eeprom.EepromData.DemoSettings.PacketParam1 = 12; // PreambleLength
00480     Eeprom.EepromData.DemoSettings.PacketParam2 = LORA_PACKET_VARIABLE_LENGTH;
00481     Eeprom.EepromData.DemoSettings.PacketParam3 = DEMO_MIN_PAYLOAD;
00482     Eeprom.EepromData.DemoSettings.PacketParam4 = LORA_CRC_ON;
00483     Eeprom.EepromData.DemoSettings.PacketParam5 = LORA_IQ_NORMAL;
00484 
00485     EepromSaveSettings( RADIO_LORA_PARAMS );
00486 
00487     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_GFSK;
00488     Eeprom.EepromData.ModulationParams.PacketType = PACKET_TYPE_GFSK;
00489     Eeprom.EepromData.PacketParams.PacketType     = PACKET_TYPE_GFSK;
00490 
00491     Eeprom.EepromData.DemoSettings.ModulationParam1 = GFSK_BLE_BR_0_125_BW_0_3;
00492     Eeprom.EepromData.DemoSettings.ModulationParam2 = GFSK_BLE_MOD_IND_1_00;
00493     Eeprom.EepromData.DemoSettings.ModulationParam3 = RADIO_MOD_SHAPING_BT_1_0;
00494 
00495     Eeprom.EepromData.DemoSettings.PacketParam1 = PREAMBLE_LENGTH_32_BITS;
00496     Eeprom.EepromData.DemoSettings.PacketParam2 = GFSK_SYNCWORD_LENGTH_5_BYTE;
00497     Eeprom.EepromData.DemoSettings.PacketParam3 = RADIO_RX_MATCH_SYNCWORD_1;
00498     Eeprom.EepromData.DemoSettings.PacketParam4 = RADIO_PACKET_VARIABLE_LENGTH;
00499     Eeprom.EepromData.DemoSettings.PacketParam5 = DEMO_MIN_PAYLOAD;
00500     Eeprom.EepromData.DemoSettings.PacketParam6 = RADIO_CRC_3_BYTES;
00501     Eeprom.EepromData.DemoSettings.PacketParam7 = RADIO_WHITENING_ON;
00502 
00503     EepromSaveSettings( RADIO_GFSK_PARAMS );
00504 
00505     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_FLRC;
00506     Eeprom.EepromData.ModulationParams.PacketType = PACKET_TYPE_FLRC;
00507     Eeprom.EepromData.PacketParams.PacketType     = PACKET_TYPE_FLRC;
00508 
00509     Eeprom.EepromData.DemoSettings.ModulationParam1 = FLRC_BR_0_260_BW_0_3;
00510     Eeprom.EepromData.DemoSettings.ModulationParam2 = FLRC_CR_1_2;
00511     Eeprom.EepromData.DemoSettings.ModulationParam3 = RADIO_MOD_SHAPING_BT_1_0;
00512 
00513     Eeprom.EepromData.DemoSettings.PacketParam1 = PREAMBLE_LENGTH_32_BITS;
00514     Eeprom.EepromData.DemoSettings.PacketParam2 = FLRC_SYNCWORD_LENGTH_4_BYTE;
00515     Eeprom.EepromData.DemoSettings.PacketParam3 = RADIO_RX_MATCH_SYNCWORD_1;
00516     Eeprom.EepromData.DemoSettings.PacketParam4 = RADIO_PACKET_VARIABLE_LENGTH;
00517     Eeprom.EepromData.DemoSettings.PacketParam5 = DEMO_MIN_PAYLOAD;
00518     Eeprom.EepromData.DemoSettings.PacketParam6 = RADIO_CRC_3_BYTES;
00519     Eeprom.EepromData.DemoSettings.PacketParam7 = RADIO_WHITENING_OFF;
00520 
00521     EepromSaveSettings( RADIO_FLRC_PARAMS );
00522 
00523     Eeprom.EepromData.DemoSettings.Entity         = SLAVE;
00524     Eeprom.EepromData.DemoSettings.AntennaSwitch  = 0x00;
00525     Eeprom.EepromData.DemoSettings.RadioPowerMode = USE_DCDC;
00526     Eeprom.EepromData.DemoSettings.Frequency      = DEMO_CENTRAL_FREQ_PRESET1;
00527     Eeprom.EepromData.DemoSettings.TxPower        = DEMO_POWER_TX_MAX;
00528     Eeprom.EepromData.DemoSettings.MaxNumPacket   = 0x00; // infinite
00529     Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_LORA;
00530 
00531     EepromSaveSettings( DEMO_SETTINGS );
00532 }
00533 
00534 /*!
00535  * \brief Erase a page of Flash. Here used to Erase EEPROM region.
00536  *
00537  * \param [in]  page          address of page to erase
00538  * \param [in]  banks         address of banks to erase
00539  */
00540 void FlashPageErase( uint32_t page, uint32_t banks )
00541 {
00542     // Check the parameters
00543     assert_param( IS_FLASH_PAGE( page ) );
00544     assert_param( IS_FLASH_BANK_EXCLUSIVE( banks ) );
00545 
00546     if( ( banks & FLASH_BANK_1 ) != RESET )
00547     {
00548         CLEAR_BIT( FLASH->CR, FLASH_CR_BKER );
00549     }
00550     else
00551     {
00552         SET_BIT( FLASH->CR, FLASH_CR_BKER );
00553     }
00554 
00555     // Proceed to erase the page
00556     MODIFY_REG( FLASH->CR, FLASH_CR_PNB, ( page << 3 ) );
00557     SET_BIT( FLASH->CR, FLASH_CR_PER );
00558     SET_BIT( FLASH->CR, FLASH_CR_STRT );
00559 }
00560 
00561 /*!
00562  * \brief Write Eeprom to emulated EEPROM (in fact in Flash " higher address).
00563  *
00564  * \param [in]  addr          address of data (EEPROM offset not to be include)
00565  * \param [in]  buffer        buffer to use for copy
00566  * \param [in]  size          size of data to copy
00567  *
00568  * \retval      status        Status of operation (SUCCESS, ..)
00569  */
00570 uint8_t EepromMcuWriteBuffer( uint16_t addr, uint8_t *buffer, uint16_t size )
00571 {
00572     uint64_t *flash = ( uint64_t* )buffer;
00573 
00574     // assert_param( addr >= DATA_EEPROM_BASE );
00575     assert_param( buffer != NULL );
00576     assert_param( size < ( DATA_EEPROM_END - DATA_EEPROM_BASE ) );
00577 
00578     HAL_FLASH_Unlock( );
00579 
00580     FlashPageErase( 255, 1 );
00581 
00582     WRITE_REG( FLASH->CR, 0x40000000 );
00583 
00584     for( uint32_t i = 0; i < size; i++ )
00585     {
00586         HAL_FLASH_Program( FLASH_TYPEPROGRAM_DOUBLEWORD, DATA_EEPROM_BASE + \
00587                            ( 8 * i ), flash[i] );
00588     }
00589 
00590     HAL_FLASH_Lock( );
00591 
00592     return SUCCESS;
00593 }
00594 
00595 uint8_t EepromMcuReadBuffer( uint16_t addr, uint8_t *buffer, uint16_t size )
00596 {
00597     assert_param( buffer != NULL );
00598 
00599     // assert_param( addr >= DATA_EEPROM_BASE );
00600     assert_param( buffer != NULL );
00601     assert_param( size < ( DATA_EEPROM_END - DATA_EEPROM_BASE ) );
00602 
00603     memcpy( buffer, ( uint8_t* )DATA_EEPROM_BASE, size );
00604     return SUCCESS;
00605 }
00606 
00607 static MemTestStruct_t EepromDataCheckSum( void )
00608 {
00609     MemTestStruct_t memTestStruct;
00610     uint8_t x;
00611     uint8_t i;
00612     uint16_t crcBuf;
00613     memTestStruct.Value = 0xFFFF;
00614 
00615     for( i = 0; i < EEPROM_BUFFER_SIZE - sizeof( uint16_t ); i++ )
00616     {
00617         x = memTestStruct.Value >> 8 ^ Eeprom.Buffer[i];
00618         x ^= x >> 4;
00619         memTestStruct.Value = ( memTestStruct.Value << 8 ) ^ \
00620                               ( ( uint16_t )( x << 12 ) ) ^ \
00621                               ( ( uint16_t )( x << 5 ) ) ^ \
00622                               ( ( uint16_t )x );
00623     }
00624     memcpy( &crcBuf, Eeprom.Buffer + EEPROM_CRC_EEPROM_ADDR, 2 );
00625     memTestStruct.Valid = ( crcBuf == memTestStruct.Value );
00626 
00627     return memTestStruct;
00628 }
00629 
00630 void EepromFactoryReset( void )
00631 {
00632     EepromSetDefaultSettings( );
00633     EepromLoadSettings( ( RadioPacketTypes_t )Eeprom.EepromData.DemoSettings.ModulationType );
00634 }
00635