![](/media/cache/group/Semtech_stack_color_logo_highres.jpg.50x50_q85.jpg)
Source code for the SX126xDVK1xAS Dev Kit. This example code has only been tested on the Nucleo L476RG
Dependencies: mbed DmTftLibrary SX126xLib
Diff: Demo/DemoApplication.h
- Revision:
- 0:e5420f1a8a1a
- Child:
- 1:b96176a4ccb8
diff -r 000000000000 -r e5420f1a8a1a Demo/DemoApplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Demo/DemoApplication.h Tue Sep 05 08:15:37 2017 +0000 @@ -0,0 +1,248 @@ +/* + ______ _ + / _____) _ | | +( (____ _____ ____ _| |_ _____ ____| |__ + \____ \| ___ | (_ _) ___ |/ ___) _ \ + _____) ) ____| | | || |_| ____( (___| | | | +(______/|_____)_|_|_| \__)_____)\____)_| |_| + (C)2016 Semtech + +Description: Display driver header + +Maintainer: Gregory Cristian & Gilbert Menth +*/ + +#ifndef DEMO_APPLICATION_H +#define DEMO_APPLICATION_H + + +/*! + * \brief Used to display firmware version on TFT (Utilities menu) + */ +#define FIRMWARE_VERSION ( ( char* )"Firmware Version: 170727" ) + +/*! + * \brief Define range of central frequency [Hz] + */ +#define DEMO_CENTRAL_FREQ_MIN 850000000UL +#define DEMO_CENTRAL_FREQ_MAX 930000000UL + +/*! + * \brief Define 3 preset central frequencies [Hz] + */ +#define DEMO_CENTRAL_FREQ_PRESET1 868000000UL +#define DEMO_CENTRAL_FREQ_PRESET2 915000000UL +#define DEMO_CENTRAL_FREQ_PRESET3 930000000UL + +/*! + * \brief Define min and max Tx power [dBm] + */ +#define SX1261_POWER_TX_MIN -17 +#define SX1261_POWER_TX_MAX 15 + +#define SX1262_POWER_TX_MIN -10 +#define SX1262_POWER_TX_MAX 22 + +/*! + * \brief Define current demo mode + */ +enum DemoMode +{ + MASTER = 0, + SLAVE +}; + +/*! + * \brief Define GFSK bitrate + */ +typedef enum +{ + DEMO_BR_100 = 100, + DEMO_BR_600 = 600, + DEMO_BR_4800 = 4800, + DEMO_BR_9600 = 9600, + DEMO_BR_19200 = 19200, + DEMO_BR_57600 = 57600, + DEMO_BR_100000 = 100000, + DEMO_BR_250000 = 250000, +}DemoBitrate_t; + +/*! + * \brief Define GFSK frequency deviation + */ +typedef enum +{ + DEMO_FDEV_5000 = 5000, + DEMO_FDEV_10000 = 10000, + DEMO_FDEV_25000 = 25000, + DEMO_FDEV_50000 = 50000, + DEMO_FDEV_75000 = 75000, + DEMO_FDEV_100000 = 100000, + DEMO_FDEV_150000 = 150000, +}DemoFrequencyDev_t; + +/*! + * \brief List of states for demo state machine + */ +enum DemoInternalStates +{ + APP_IDLE = 0, // nothing to do (or wait a radio interrupt) + SEND_PING_MSG, + SEND_PONG_MSG, + APP_RX, // Rx done + APP_RX_TIMEOUT, // Rx timeout + APP_RX_ERROR, // Rx error + APP_TX, // Tx done + APP_TX_TIMEOUT, // Tx error + PER_TX_START, // PER master + PER_RX_START, // PER slave + CAD_DONE, // CAD Done + CAD_DONE_CHANNEL_DETECTED // Channel Detected following a CAD +}; + +/*! + * \brief Demo Settings structure of Eeprom structure + */ +typedef struct +{ + uint8_t Entity; // Master or Slave + uint8_t HoldDemo; // Put demo in hold status + uint8_t BoostedRx; // Use Boosted Rx if true + uint32_t Frequency; // Demo frequency + uint8_t LastDeviceConnected;// Last Device Connected + int8_t TxPower; // Demo Tx power + uint8_t RadioPowerMode; // Radio Power Mode [0: LDO, 1:DC_DC] + uint8_t PayloadLength; // Demo payload length + uint8_t ModulationType; // Demo modulation type (LORA, GFSK) + uint32_t ModulationParam1; // Demo Mod. Param1 (depend on modulation type) + uint32_t ModulationParam2; // Demo Mod. Param2 (depend on modulation type) + uint8_t ModulationParam3; // Demo Mod. Param3 (depend on modulation type) + uint8_t ModulationParam4; // Demo Mod. Param4 (depend on modulation type) + uint16_t PacketParam1; // Demo Pack. Param1 (depend on packet type) + uint8_t PacketParam2; // Demo Pack. Param2 (depend on packet type) + uint8_t PacketParam3; // Demo Pack. Param3 (depend on packet type) + uint8_t PacketParam4; // Demo Pack. Param4 (depend on packet type) + uint8_t PacketParam5; // Demo Pack. Param5 (depend on packet type) + uint8_t PacketParam6; // Demo Pack. Param6 (depend on packet type) + uint8_t PacketParam7; // Demo Pack. Param7 (depend on packet type) + uint8_t PacketParam8; // Demo Pack. Param8 (depend on packet type) + uint32_t MaxNumPacket; // Demo Max Num Packet for PingPong and PER + uint16_t InterPacketDelay; // Demo Inter-Packet Delay for PingPong and PER + uint32_t CntPacketTx; // Tx packet transmitted + uint32_t CntPacketRxOK; // Rx packet received OK + uint32_t CntPacketRxOKSlave;// Rx packet received OK (slave side) + uint32_t CntPacketRxKO; // Rx packet received KO + uint32_t CntPacketRxKOSlave;// Rx packet received KO (slave side) + uint16_t RxTimeOutCount; // Rx packet received KO (by timeout) + int8_t RssiValue; // Demo Rssi Value + int8_t SnrValue; // Demo Snr Value (only for LR24 mod. type) + uint32_t FreqErrorEst; // Estimation of the frequency error on the Rx side +}DemoSettings_t; + +/*! + * \brief Define freq offset for config central freq in "Radio Config Freq" menu + */ +enum FreqBase +{ + FB1 = 1, // 1 Hz + FB10 = 10, // 10 Hz + FB100 = 100, // 100 Hz + FB1K = 1000, // 1 kHz + FB10K = 10000, // 10 kHz + FB100K = 100000, // 100 kHz + FB1M = 1000000, // 1 MHz + FB10M = 10000000 // 10 MHz +}; + + +/*! + * \brief Simple Function which return the device connected. + * + * \retval deviceConnected device type connected + */ +uint8_t GetConnectedDevice( void ); + +/*! + * \brief Init RAM copy of Eeprom structure and init radio with it. + * + */ +void InitDemoApplication( void ); + +/*! + * \brief Init vars of demo and fix APP_IDLE state to demo state machine. + */ +void StopDemoApplication( void ); + +/*! + * \brief Run Demo in sleep mode. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoSleepMode( void ); + +/*! + * \brief Run Demo in standby RC mode. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoStandbyRcMode( void ); + +/*! + * \brief Run Demo in standby XOSC mode. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoStandbyXoscMode( void ); + +/*! + * \brief Run Demo Tx in continuous mode without modulation. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoTxCw( void ); + +/*! + * \brief Run Demo Tx in continuous modulation. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoTxContinuousModulation( void ); + +/*! + * \brief Run Demo Rx in continuous mode. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoRxContinuous( void ); + +/*! + * \brief Run demo PingPong. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoApplicationPingPong( void ); + +/*! + * \brief Compute payload of Rx frame and update current counts and indicators. + * + * \param [in] buffer buffer with frame to compute + * \param [in] buffersize size of frame data in the buffer + */ +void ComputePingPongPayload( uint8_t *buffer, uint8_t bufferSize ); + +/*! + * \brief Run demo PER. + * + * \retval demoStatusUpdate page refresh status ( >0 : refresh) + */ +uint8_t RunDemoApplicationPer( void ); + +/*! + * \brief Compute payload of Rx frame and update current counts and indicators. + * + * \param [in] buffer buffer with frame to compute + * \param [in] buffersize size of frame data in the buffer + */ +void ComputePerPayload( uint8_t *buffer, uint8_t bufferSize ); + +#endif // DEMO_APPLICATION_H