Cubebite Publish

Dependencies:   mbed

Fork of HelloWorld_IDS01A4 by ST

Files at this revision

API Documentation at this revision

Comitter:
jmhong
Date:
Tue Feb 13 06:35:39 2018 +0000
Parent:
13:d802c6ed2e75
Commit message:
180213 HJM commit;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
stm-spirit1-rf-driver.lib Show annotated file Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/.gitignore Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/README.md Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/mbed_lib.json Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/NanostackRfPhySpirit1.cpp Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/SimpleSpirit1.cpp Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/README.md Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/contiki-conf.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/hw-config.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/ip64-conf.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/platform-conf.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/radio.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-config.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-const.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/stm32l-spirit1-config.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/Release_Notes.html Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/MCU_Interface.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Aes.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Calibration.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Commands.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Config.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Csma.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_DirectRF.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_General.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Gpio.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_LinearFifo.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Management.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktBasic.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktCommon.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktMbus.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktStack.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Qi.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Radio.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Regs.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Timer.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Types.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Aes.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Calibration.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Commands.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Csma.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_DirectRF.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_General.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Gpio.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_LinearFifo.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Management.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktBasic.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktMbus.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktStack.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Qi.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Timer.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Types.c Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_gpio.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_shield_config.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/source/radio_spi.cpp Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/stm-spirit1-rf-driver/NanostackRfPhySpirit1.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/stm-spirit1-rf-driver/SimpleSpirit1.h Show diff for this revision Revisions of this file
stm-spirit1-rf-driver/stm-spirit1-rf-driver/radio_spi.h Show diff for this revision Revisions of this file
diff -r d802c6ed2e75 -r 1a6faeda6579 main.cpp
--- a/main.cpp	Wed Jan 17 04:04:16 2018 +0000
+++ b/main.cpp	Tue Feb 13 06:35:39 2018 +0000
@@ -14,22 +14,34 @@
  ******************************************************************************
  */
 
+
+
 //*************************************************************************************
-//Include
+//Define : Test, Compile 
 //*************************************************************************************
-#include "mbed.h"
-#include "SimpleSpirit1.h"
+/* 180108 cubebite HJM : cubebite Testing define, 1개씩만 켜야 함. */
+#define CUBEBITE_RF_SPEED_TEST_SEND_ON
+//#define CUBEBITE_RF_SPEED_TEST_RECV_ON
+
 
-#include <fstream>  // library that contains file input/output functions
+/* 180109 cubebite HJM : cubebite Compile define, 1개씩만 켜야 함. */
+//#define CUBEBITE_BOARD_F746ZG
+#define CUBEBITE_BOARD_F401RE
+
+
+#define CUBEBITE_RF_SETTING_VALUE_PRINT
 //*************************************************************************************
 
 
+
+
 //*************************************************************************************
 //Define : Debug
 //*************************************************************************************
 /* 180108 cubebite HJM : SimpleSpirit1 Debug define */
 #define NDEBUG
 #define HEAVY_DEBUG
+#define DEBUG_IRQ
 
 
 /* 180108 cubebite HJM : cubebite Debug define */
@@ -37,138 +49,207 @@
 //*************************************************************************************
 
 
-//*************************************************************************************
-//Define : Test, Compile 
-//*************************************************************************************
-/* 180108 cubebite HJM : cubebite Testing define, 1개씩만 켜야 함. */
-//#define CUBEBITE_RF_USER_BUTTON_SEND_TEST
-//#define CUBEBITE_RF_DEVICE_PARTNUMBER_TEST
-//#define CUBEBITE_RF_GPIO_0_TEST
-#define CUBEBITE_RF_SPEED_TEST_SEND_ON
-//#define CUBEBITE_RF_SPEED_TEST_RECV_ON
-
-
-/* 180109 cubebite HJM : cubebite Compile define, 1개씩만 켜야 함. */
-//#define CUBEBITE_BOARD_F746ZG
-#define CUBEBITE_BOARD_F401RE
-//*************************************************************************************
-
-
-//*************************************************************************************
-//Global variable : Create an instance by board
-//*************************************************************************************
-/* 180108 cubebite HJM : orignal code, backup */          
-//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(D11, D12, D3, D9, D10, D2); /* (SPI_CLK) = (D13:PA5:resistorR7 --> D3:PB3:resistorR4)*/
-
-#ifdef  CUBEBITE_BOARD_F401RE
-/* 180108 cubebite HJM : F401re borad, AnalogIn PIN Info, A0(PA_0) A1(PA_1) A2(PA_4) A3(PB_0) A4(PC_1) A5(PC_0) */
-/* RF Module 과 상관 관계 => A0(PA_0)[SPI GPIO 3] A1(PA_1)[CSN] A2(PA_4)[SPI1 GPIO 2] A3(PB_0)[SPI1 GPIO 1] A4(PC_1)[SPI1_GPIO 0] */
-/* 180108 cubebite HJM : F401re borad Init code */
-//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PC_7, PB_6, PA_10);    //F401re borad
-static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PA_0, PB_6, PA_10);    //F401re borad, IRQ Testing, GPIO 3 -> IRQ
-//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance2(PA_7, PA_6, PA_5, PA_0, PB_6, PA_10);    //F401re borad, IRQ Testing, GPIO 3 -> IRQ
-#endif
-
-
-
-#ifdef  CUBEBITE_BOARD_F746ZG
-/* 180108 cubebite HJM : F746zg borad, AnalogIn PIN Info, A0(PA_3) A1(PC_0) A2(PC_3) A3(PF_3) A4(PF_5) A5(PF_10)  */
-/* RF Module 과 상관 관계 => A0(PA_3)[SPI GPIO 3] A1(PC_0)[CSN] A2(PC_3)[SPI1 GPIO 2] A3(PF_3)[SPI1 GPIO 1] A4(PF_5)[SPI1_GPIO 0] */
-/* 180108 cubebite HJM : F746zg borad Init code */
-//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PD_14, PD_5, PD_6);    //F746zg borad
-static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PA_3, PD_5, PD_6);    //F746zg borad, IRQ Testing, GPIO 3 -> IRQ
-//static SimpleSpirit1 &myspirit2 = SimpleSpirit1::CreateInstance2(PB_5, PB_4, PB_3, PA_3, PD_5, PD_6);    //F746zg borad, IRQ Testing, GPIO 3 -> IRQ
-#endif
-//*************************************************************************************
 
 
 //*************************************************************************************
-//Global variable : LEDs and user buttons by board
-//*************************************************************************************
-#ifdef  CUBEBITE_BOARD_F401RE
-//180116 HJM : 그 전날 뻗어서 혹시 이쪽 LED 병렬회선을 사용하다가 오류가 났을 수도 있을 것 같다는 의심을 하게 됨. 주석처리하고 다시 테스트 하기로 함.
-//static DigitalOut TestLED(D5);         /* LED of IDS01A4/5 */
-#endif
-
-#ifdef  CUBEBITE_BOARD_F746ZG
-static DigitalOut TestLED(PB_0);         /* LED of IDS01A4/5 */
-#endif
-
-#ifdef  CUBEBITE_RF_USER_BUTTON_SEND_TEST
-static InterruptIn event(USER_BUTTON); /* Interrupt event to give userinterface to send pkt. */
-#endif
-//*************************************************************************************
-
-
-//*************************************************************************************
-//Global variable : Rf Send, read Buffer
-//*************************************************************************************
-/* 180108 cubebite HJM : send testing, orignal code  */
-#define TEST_STR_LEN (32)
-static uint8_t send_buf[TEST_STR_LEN] ={'S','P','I','R','I','T','1',' ','H','E','L','L','O',' ','W','O','R','L','D',' ','P','2','P',' ','D','E','M','O'};
-static uint8_t read_buf[TEST_STR_LEN] ={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
-//*************************************************************************************
-
-
-//*************************************************************************************
-//Global variable : tx, rx Flag
-//*************************************************************************************
-static volatile bool rx_done_flag = false; 
-static volatile bool tx_done_flag = false; 
-static volatile bool send_data_flag = false;
-//*************************************************************************************
-
-
+//Include
 //*************************************************************************************
-//Global variable : Testing
-//*************************************************************************************
-/* Test : GPIO 0 */
-#ifdef  CUBEBITE_RF_GPIO_0_TEST
-    #ifdef  CUBEBITE_BOARD_F401RE
-/* 180108 cubebite HJM : F401re borad, PC_1 == RF_MODULE_GPIO 0, Testing code */
-static DigitalIn RF_GPIO_0_INPUT(PC_1);   //F401re borad
-//static DigitalIn RF_GPIO_3_INPUT(PA_0);   //F401re borad, 사용시, send 정상 동작 안함, Spirit1 IRQ 핀이랑 같이 물려있기 때문
-    #endif
-#endif
-
-#ifdef  CUBEBITE_RF_GPIO_0_TEST
-    #ifdef  CUBEBITE_BOARD_F746ZG
-/* 180108 cubebite HJM : F746zg borad, PC_1 == RF_MODULE_GPIO 0, Testing code */
-static DigitalIn RF_GPIO_0_INPUT(PF_5); //F746zg borad
-//static DigitalIn RF_GPIO_3_INPUT(PA_3); //F746zg borad, 사용시, send 정상 동작 안함, Spirit1 IRQ 핀이랑 같이 물려있기 때문
-    #endif
-#endif
-
-
-/* Test : RF Speed Test */
-#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON
-static clock_t clockRfSpeedTestStart, clockRfSpeedTestEnd;
-static float fRfSpeedTestResultTime;
-
-static bool bIsSendFirstClockFunctionStarted = false;
-static bool bIsSetSendFlag = false;
-
-#endif
-
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
-#define TEST_ACK_STR_LEN (6)
-static uint8_t send_ack_buf[TEST_ACK_STR_LEN] ={'O','K'};
-size_t curr_ack_len = strlen((const char*)send_ack_buf) + 1;
-
-static bool bIsAckSended = false;
-#endif
+#ifndef __MAIN_H__
+#define __MAIN_H__
+#include "main.h"
+#endif  //__MAIN_H__
 //*************************************************************************************
 
 
 
 
+enum RecvReturnValue
+{
+    CUBEBITE_RECV_OK = 0, CUBEBITE_RECV_ERROR_READ_NOTHING, CUBEBITE_RECV_ERROR_READ_NOT_MATCH
+};
+
+enum SendReturnValue
+{
+    CUBEBITE_SEND_OK = 0, CUBEBITE_SEND_ERROR, CUBEBITE_SEND_COLLISION, CUBEBITE_SEND_NOACK, CUBEBITE_SEND_ERROR_UNKNOWN
+};
+
+
+
+
+
+static void callback_func(int event);
+
+static int ReadRcvdData(SimpleSpirit1& myspirit);
+static int ReadRcvdData_ClockMeasure_AckEnd(SimpleSpirit1& myspirit);
+
+static int SendData(SimpleSpirit1& myspirit);
+static int SendData_ClockMeasure_AckStart(SimpleSpirit1& myspirit);
 
 
 
 
 
+/*
+    <RF 설정 값>
+황무지     -> 전파
+고속도로    -> 주파수
+차선      -> 채널 
+    
+#define POWER_DBM                   11.6
+#define CHANNEL_SPACE               100e3
+#define FREQ_DEVIATION              20e3
+#define BANDWIDTH                   100.5e3
+#define MODULATION_SELECT           GFSK_BT1
+#define DATARATE                    38400
+#define XTAL_OFFSET_PPM             0
+#define SYNC_WORD                   0x88888888
+#define LENGTH_WIDTH                8   // betzw - NOTE: only 255 bytes for payload!!!
+#define CRC_MODE                    PKT_CRC_MODE_16BITS_2
+#define EN_WHITENING                S_DISABLE
+#define INFINITE_TIMEOUT            0.0
+
+#define BASE_FREQUENCY              433.0e6
+
+*/
 
 
+/**
+ * @brief  main routine
+ * @param  None
+ * @retval int
+ */
+int main() 
+{  
+    /* 180108 cubebite HJM : function return value print */
+    int iReturn = 0; 
+
+    //*************************************************************************************
+    //Global variable : Create an instance by board
+    //*************************************************************************************
+    /* 180108 cubebite HJM : orignal code, backup */          
+    //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(D11, D12, D3, D9, D10, D2); /* (SPI_CLK) = (D13:PA5:resistorR7 --> D3:PB3:resistorR4)*/
+    
+#ifdef  CUBEBITE_BOARD_F401RE
+    /* 180108 cubebite HJM : F401re borad, AnalogIn PIN Info, A0(PA_0) A1(PA_1) A2(PA_4) A3(PB_0) A4(PC_1) A5(PC_0) */
+    /* RF Module 과 상관 관계 => A0(PA_0)[SPI GPIO 3] A1(PA_1)[CSN] A2(PA_4)[SPI1 GPIO 2] A3(PB_0)[SPI1 GPIO 1] A4(PC_1)[SPI1_GPIO 0] */
+    /* 180108 cubebite HJM : F401re borad Init code */
+    //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PC_7, PB_6, PA_10);    //F401re borad
+    static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PA_0, PB_6, PA_10);    //F401re borad, IRQ Testing, GPIO 3 -> IRQ
+    //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance_RSSI_negative_OneHundredTwenty(PA_7, PA_6, PA_5, PA_0, PB_6, PA_10);    //F401re borad, IRQ Testing, GPIO 3 -> IRQ
+#endif
+    
+    
+    
+#ifdef  CUBEBITE_BOARD_F746ZG
+    /* 180108 cubebite HJM : F746zg borad, AnalogIn PIN Info, A0(PA_3) A1(PC_0) A2(PC_3) A3(PF_3) A4(PF_5) A5(PF_10)  */
+    /* RF Module 과 상관 관계 => A0(PA_3)[SPI GPIO 3] A1(PC_0)[CSN] A2(PC_3)[SPI1 GPIO 2] A3(PF_3)[SPI1 GPIO 1] A4(PF_5)[SPI1_GPIO 0] */
+    /* 180108 cubebite HJM : F746zg borad Init code */
+    //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PD_14, PD_5, PD_6);    //F746zg borad
+    static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PA_3, PD_5, PD_6);    //F746zg borad, IRQ Testing, GPIO 3 -> IRQ
+    //static SimpleSpirit1 &myspirit2 = SimpleSpirit1::CreateInstance2(PB_5, PB_4, PB_3, PA_3, PD_5, PD_6);    //F746zg borad, IRQ Testing, GPIO 3 -> IRQ
+#endif
+    //*************************************************************************************
+                   
+    
+    
+    
+    /* 180108 cubebite HJM : spirit module, init code  */
+    printf("[CUBEBITE] Init ");
+    /* LED off */
+    TestLED = 0; 
+    myspirit.attach_irq_callback(callback_func);  
+    iReturn = myspirit.on();
+    if ( 0 == iReturn )
+    {
+        printf("OK.\n");    
+    }
+    else
+    {
+        printf("ERROR.\n");
+    }
+    
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] CUBEBITE_DEBUG ON. \n");
+#endif  //CUBEBITE_DEBUG
+
+
+#ifdef  CUBEBITE_RF_SETTING_VALUE_PRINT
+    printf("Xtal offset in ppm              : [%d]\n", XTAL_OFFSET_PPM);
+    printf("base frequency                  : [%d]\n", (uint32_t)BASE_FREQUENCY);
+    printf("channel space                   : [%d]\n", (uint32_t)CHANNEL_SPACE);
+    printf("channel number                  : [%d]\n", CHANNEL_NUMBER);    
+    printf("modulation select               : [%d]\n", MODULATION_SELECT);
+    printf("data rate                       : [%d]\n", DATARATE);
+    printf("frequency deviation             : [%d]\n", (uint32_t)FREQ_DEVIATION);
+    printf("channel filter bandwidth        : [%d]\n", (uint32_t)BANDWIDTH);
+    #ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON    
+//    printf("\nOutput Power(dBm)             : [%f]\n", POWER_DBM);
+    printf("\nOutput Power(dBm)             : [%f]\n", (float)CUBEBITE_OUTPUT_POWER_DBM_TEST);
+    
+    #endif  //CUBEBITE_RF_SPEED_TEST_SEND_ON
+    
+    #ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
+    printf("\nRSSI threshold Setting value  : [%d]\n", (int)CCA_THRESHOLD);
+    #endif  //CUBEBITE_RF_SPEED_TEST_RECV_ON
+    
+    wait(2);
+#endif  //CUBEBITE_RF_SETTING_VALUE_PRINT
+    
+    while(1) 
+    {
+        /* low power in idle condition., waiting for an event */
+        __WFE(); 
+        
+#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON  
+        iReturn = SendData(myspirit);
+        if (CUBEBITE_SEND_OK == iReturn)
+        {
+            printf("[DEBUG] send OK.\n");
+        }
+        else if (CUBEBITE_SEND_ERROR == iReturn)
+        {
+            printf("[DEBUG] send ERROR.\n");
+        }
+        
+        iReturn = (int)myspirit.get_last_sqi(); //HJM : LQI, 현재 주변 통신 품질 값, 높을수록 좋은 것.
+        printf("get_last_sqi() return       : [%d]\n", iReturn);
+#endif
+
+#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
+        if (bRxDoneFlag)
+        {            
+            iReturn = ReadRcvdData(myspirit);      
+            if (CUBEBITE_RECV_OK == iReturn)
+            {
+                //통신 속도 체크시, 응답 send code.
+                printf("[DEBUG] recv OK.\n");
+                
+                float fReturn1 = myspirit.get_last_rssi_dbm();
+                printf("get_last_rssi_dbm() return       : [%f]\n", fReturn1);  //HJM : 위의 값과 같을 거라고 예상 됨. 나중에 테스트.    
+                if (-50 < fReturn1)   //-80 < fReturn1
+                {
+                    TestLED3 = !TestLED3;     /* Toggle LED at the receiver */                    
+                }
+                else if (-50 >= fReturn1)
+                {
+//                    TestLED = !TestLED;     /* Toggle LED at the receiver */
+                    TestLED2 = !TestLED2;     /* Toggle LED at the receiver */                    
+//                    TestLED3 = !TestLED3;     /* Toggle LED at the receiver */
+                }                
+                else if (-70 >= fReturn1)    //-100 >= fReturn1
+                {
+                    TestLED = !TestLED;     /* Toggle LED at the receiver */                    
+                }
+            }
+            bRxDoneFlag = 0;                        
+        }
+#endif        
+        
+    }
+  /* unreachable */
+  // myspirit.off();
+  // return 0;
+}
 
 
 
@@ -184,111 +265,43 @@
 #ifdef  CUBEBITE_DEBUG
     printf("[CUBEBITE] callback_func(int event) \n");
 #endif
-  
-  
+
   
     if(event == SimpleSpirit1::RX_DONE) 
     {         
-        rx_done_flag = 1;
+        bRxDoneFlag = 1;
     }
     else if (event == SimpleSpirit1::TX_DONE) 
     {  
-        tx_done_flag = 1;
+        bTxDoneFlag = 1;
     }
 }
 
 
 
-
-/**
- * @brief  set_send_data_flag
- * @param  None
- * @retval None
- */
-static void set_send_data_flag(void)
-{  
-    send_data_flag = 1 ;
-}
-
-
-static void set_ack_send_data_flag(void)
-{  
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
-    bIsAckSended = 1;
-#endif
-}
-
-
-
-
-/**
- * @brief  send_data
- * @param  None
- * @retval None
- */
-static void send_data(void)
-{
-#ifdef  CUBEBITE_DEBUG
-    printf("[CUBEBITE] send_data() 호출 됨.\n");
-    printf("[CUBEBITE] myspirit, is_receiving()\t......");
-#endif
-    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
-#ifdef  CUBEBITE_DEBUG
-    printf("OK\n");
-#endif
-
-
-    size_t curr_len = strlen((const char*)send_buf) + 1;
-    int iRet = 0;
-
-
-#ifdef  CUBEBITE_DEBUG  
-    printf("[CUBEBITE] myspirit, send()\t......");
-#endif
-    iRet = myspirit.send(send_buf, curr_len);
-    if (iRet == RADIO_TX_OK)
-    {
-#ifdef  CUBEBITE_DEBUG        
-        printf("[RADIO_TX_OK]\n");
-#endif
-
-#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON 
-    #ifdef CUBEBITE_BOARD_F401RE
-        if (false == bIsSendFirstClockFunctionStarted)
-        {
-            clockRfSpeedTestStart = clock();    
-            bIsSendFirstClockFunctionStarted = true;
-        }
-    #endif
-#endif
-    }
-    else if (iRet == RADIO_TX_ERR)
-    {
-#ifdef  CUBEBITE_DEBUG
-        printf("[RADIO_TX_ERR]\n");
-#endif
-    }
-    else if (iRet == RADIO_TX_COLLISION)
-    {
-#ifdef  CUBEBITE_DEBUG
-        printf("[RADIO_TX_COLLISION]\n");
-#endif
-    }
-    else if (iRet == RADIO_TX_NOACK)
-    {
-#ifdef  CUBEBITE_DEBUG
-        printf("[RADIO_TX_NOACK]\n");
-#endif
-    }
-    
-#ifdef  CUBEBITE_DEBUG
-    printf("[CUBEBITE] send_data() 호출 끝.\n");
-#endif
-}
-
-
-
-
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//recv
 
 
 
@@ -296,36 +309,47 @@
 
 
 /**
- * @brief  read_rcvd_data
+ * @brief  ReadRcvdData
  * @param  None
  * @retval None
  */
-static void read_rcvd_data(void)
+static int ReadRcvdData(SimpleSpirit1& myspirit)
 {  
 #ifdef  CUBEBITE_DEBUG
-    printf("[CUBEBITE] read_rcvd_data() 호출 됨. \n");  
+    printf("[CUBEBITE] ReadRcvdData() 호출 됨. \n");  
 #endif
  
-    for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) read_buf[flush_count] = 0 ;/* clear the read buffer */
+    for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) uiRendBuf[flush_count] = 0 ;/* clear the read buffer */
+    
 
-    int ret = myspirit.read(read_buf, sizeof(read_buf));
+    int ret = myspirit.read(uiRendBuf, sizeof(uiRendBuf));    
     if (ret == 0) 
     {
         printf("[CUBEBITE] Read() Error : Nothing to read\n");
-        return;
+        return CUBEBITE_RECV_ERROR_READ_NOTHING;
     }
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
-    ret = strcmp((const char *)read_buf, (const char *)send_buf);
+    printf("ReadRcvdData() 1");
+    
+    printf("[DEBUG]recv -> %s ", uiRendBuf);
+
+    ret = strcmp((const char *)uiRendBuf, (const char *)uiSendBuf);
+    printf(" 3");
     if (0 == ret)
     {        
-        set_ack_send_data_flag();
+//        set_ack_bSendDataFlag(); //180118 HJM : 다시 바로 보내는 걸로 수정
 //        printf("read, send buf collect!!\n");
-        TestLED = !TestLED;     /* Toggle LED at the receiver */
+//        TestLED = !TestLED;     /* Toggle LED at the receiver */
+        printf(" 4");
 //        bIsAckSended = true;
-        
-        //746zg 보드
-        /*
-        int iRet = myspirit.send(send_ack_buf, curr_ack_len);
+//        printf("[DEBUG]recv -> %s\n", uiRendBuf);
+#ifdef  CUBEBITE_DEBUG
+        printf("[DEBUG]recv -> %s\n", uiRendBuf);
+#endif
+
+        //746zg 보드        
+//        wait(1.0);
+/*
+        int iRet = myspirit.send(uiSendAckBuf, sizetCurrAckBufLen);
         if (iRet == RADIO_TX_OK)
         {
         #ifdef  CUBEBITE_DEBUG
@@ -349,8 +373,81 @@
         #ifdef  CUBEBITE_DEBUG            
             printf("ACK : [RADIO_TX_NOACK]\n");
         #endif
-        }    
-        */              
+        }                          
+        */
+        
+        return CUBEBITE_RECV_OK;
+        printf(" 5 ok\n");
+    }
+
+
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] ReadRcvdData() 호출 끝. \n");  
+#endif
+
+    return CUBEBITE_RECV_ERROR_READ_NOT_MATCH;
+    printf(" 6 error\n");
+}
+
+
+
+static int ReadRcvdData_ClockMeasure_AckEnd(SimpleSpirit1& myspirit)
+{  
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] ReadRcvdData() 호출 됨. \n");  
+#endif
+ 
+    for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) uiRendBuf[flush_count] = 0 ;/* clear the read buffer */
+
+    int ret = myspirit.read(uiRendBuf, sizeof(uiRendBuf));
+    if (ret == 0) 
+    {
+        printf("[CUBEBITE] Read() Error : Nothing to read\n");
+        return CUBEBITE_RECV_ERROR_READ_NOTHING;
+    }
+#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
+    ret = strcmp((const char *)uiRendBuf, (const char *)uiSendBuf);
+    if (0 == ret)
+    {        
+//        set_ack_bSendDataFlag(); //180118 HJM : 다시 바로 보내는 걸로 수정
+//        printf("read, send buf collect!!\n");
+        TestLED = !TestLED;     /* Toggle LED at the receiver */
+//        bIsAckSended = true;
+#ifdef  CUBEBITE_DEBUG
+        printf("[DEBUG]recv -> %s\n", uiRendBuf);
+#endif
+
+        //746zg 보드        
+//        wait(1.0);
+/*
+        int iRet = myspirit.send(uiSendAckBuf, sizetCurrAckBufLen);
+        if (iRet == RADIO_TX_OK)
+        {
+        #ifdef  CUBEBITE_DEBUG
+            printf("ACK : [RADIO_TX_OK]\n");
+        #endif
+        }
+        else if (iRet == RADIO_TX_ERR)
+        {
+        #ifdef  CUBEBITE_DEBUG            
+            printf("ACK : [RADIO_TX_ERR]\n");
+        #endif
+        }
+        else if (iRet == RADIO_TX_COLLISION)
+        {
+        #ifdef  CUBEBITE_DEBUG            
+            printf("ACK : [RADIO_TX_COLLISION]\n");
+        #endif            
+        }
+        else if (iRet == RADIO_TX_NOACK)
+        {
+        #ifdef  CUBEBITE_DEBUG            
+            printf("ACK : [RADIO_TX_NOACK]\n");
+        #endif
+        }                          
+        */
+        
+        return CUBEBITE_RECV_OK;
     }
 #endif
 
@@ -358,214 +455,169 @@
     //401re 보드
     if (true == bIsSendFirstClockFunctionStarted)
     {
-        clockRfSpeedTestEnd = clock();
+        clocktimeRFSpeedTestEnd = clock();
     } 
-//    printf("[DEBUG]recv -> %s\n", read_buf);
+    //printf("[DEBUG]recv -> %s\n", uiRendBuf);
 #endif    
 
 
 #ifdef  CUBEBITE_DEBUG
-    printf("[CUBEBITE] read_rcvd_data() 호출 끝. \n");  
+    printf("[CUBEBITE] ReadRcvdData() 호출 끝. \n");  
 #endif
+
+    return CUBEBITE_RECV_ERROR_READ_NOT_MATCH;
 }
 
-static void ack_send_data(void)
-{  
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
-    //746zg 보드
-    int iRet = myspirit.send(send_ack_buf, curr_ack_len);
-    if (iRet == RADIO_TX_OK)
-    {
-    #ifdef  CUBEBITE_DEBUG
-        printf("ACK : [RADIO_TX_OK]\n");
-    #endif
-    }
-    else if (iRet == RADIO_TX_ERR)
-    {
-    #ifdef  CUBEBITE_DEBUG            
-        printf("ACK : [RADIO_TX_ERR]\n");
-    #endif
-    }
-    else if (iRet == RADIO_TX_COLLISION)
-    {
-    #ifdef  CUBEBITE_DEBUG            
-        printf("ACK : [RADIO_TX_COLLISION]\n");
-    #endif            
-    }
-    else if (iRet == RADIO_TX_NOACK)
-    {
-    #ifdef  CUBEBITE_DEBUG            
-        printf("ACK : [RADIO_TX_NOACK]\n");
-    #endif
-    }    
-#endif
-}
+
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//send
+
+
+
 
 
 
 /**
- * @brief  main routine
+ * @brief  SendData
  * @param  None
- * @retval int
+ * @retval None
  */
-int main() 
-{  
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
-    /* LED off */
-    TestLED = 0;                
-#endif  
-    /* 180108 cubebite HJM : function return value print */
+static int SendData(SimpleSpirit1& myspirit)
+{
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] SendData() 호출 됨.\n");
+#endif
+    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
+
+    size_t curr_len = strlen((const char*)uiSendBuf) + 1;
     int iRet = 0;
 
-#ifdef  CUBEBITE_RF_GPIO_0_TEST
-    /* 180108 cubebite HJM : GPIO 0, init code */
-    SGpioInit gpioIRQ={
-        SPIRIT_GPIO_0,
-        SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP,
-        SPIRIT_GPIO_DIG_OUT_IRQ
-    };
-    SpiritGpioInit(&gpioIRQ);
-    
-    /* 180108 cubebite HJM : GPIO 0, For spiritFunctionalState(), Testing code */
-    SpiritFunctionalState spiritFunctionalState={
-          S_DISABLE
-    };
-#endif    
+    printf("SendData() uiSendBuf -> [%s]\n", uiSendBuf);
+    iRet = myspirit.send(uiSendBuf, curr_len);
+    if (iRet == RADIO_TX_OK)
+    {
+#ifdef  CUBEBITE_DEBUG        
+        printf("[RADIO_TX_OK]\n");
+#endif
+        return CUBEBITE_SEND_OK;
+    }
+    else if (iRet == RADIO_TX_ERR)
+    {
+#ifdef  CUBEBITE_DEBUG
+        printf("[RADIO_TX_ERR]\n");
+#endif
+        return CUBEBITE_SEND_ERROR;
+    }
+    else if (iRet == RADIO_TX_COLLISION)
+    {
+#ifdef  CUBEBITE_DEBUG        
+        printf("[RADIO_TX_COLLISION]\n");
+#endif        
+        return CUBEBITE_SEND_COLLISION;
+    }
+    else if (iRet == RADIO_TX_NOACK)
+    {
+#ifdef  CUBEBITE_DEBUG                
+        printf("[RADIO_TX_NOACK]\n");
+#endif  
+        return CUBEBITE_SEND_NOACK;              
+    }
     
-    /* 180108 cubebite HJM : spirit module, init code  */
-    printf("[CUBEBITE] myspirit, attach_irq_callback()\t......");
-    myspirit.attach_irq_callback(callback_func);
-    printf("OK\n");    
-      
-    printf("[CUBEBITE] myspirit, on()\t......");
-    iRet = myspirit.on();
-    if ( 0 == iRet )
-    {
-        printf("OK\n");    
-    }
-    else
-    {
-        printf("ERROR\n");
-    }
 #ifdef  CUBEBITE_DEBUG
-    printf("[CUBEBITE] CUBEBITE_DEBUG ON. \n");
+    printf("[CUBEBITE] SendData() 호출 끝.\n");
 #endif
 
-      
-#ifdef  CUBEBITE_RF_USER_BUTTON_SEND_TEST
-    event.rise(&set_send_data_flag); /*User button interrupt trigger to set send data flag */
-#endif
+    return CUBEBITE_SEND_ERROR_UNKNOWN;
+}
 
 
-#ifdef  CUBEBITE_RF_DEVICE_PARTNUMBER_TEST  
-  uint16_t int16SpiritPartNum = 0;
+static int SendData_ClockMeasure_AckStart(SimpleSpirit1& myspirit)
+{
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] SendData() 호출 됨.\n");
 #endif
-    while(1) 
+    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
+
+    size_t curr_len = strlen((const char*)uiSendBuf) + 1;
+    int iRet = 0;
+
+    iRet = myspirit.send(uiSendBuf, curr_len);
+    if (iRet == RADIO_TX_OK)
     {
-#ifdef  CUBEBITE_RF_DEVICE_PARTNUMBER_TEST
-        printf("[CUBEBITE][devicePartNumber] SpiritGeneralGetDevicePartNumber()\t......");
+#ifdef  CUBEBITE_DEBUG        
+        printf("[RADIO_TX_OK]\n");
+#endif
+
+#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON     
+        if (false == bIsSendFirstClockFunctionStarted)
+        {
+            clocktimeRFSpeedTestStart = clock();    
+            bIsSendFirstClockFunctionStarted = true;            
+        }
+#endif
+
+        return CUBEBITE_SEND_OK;
+    }
+    else if (iRet == RADIO_TX_ERR)
+    {
+#ifdef  CUBEBITE_DEBUG
+        printf("[RADIO_TX_ERR]\n");
+#endif
+        return CUBEBITE_SEND_ERROR;
+    }
+    else if (iRet == RADIO_TX_COLLISION)
+    {
+#ifdef  CUBEBITE_DEBUG        
+        printf("[RADIO_TX_COLLISION]\n");
+#endif        
+        return CUBEBITE_SEND_COLLISION;
+    }
+    else if (iRet == RADIO_TX_NOACK)
+    {
+#ifdef  CUBEBITE_DEBUG                
+        printf("[RADIO_TX_NOACK]\n");
+#endif  
+        return CUBEBITE_SEND_NOACK;              
+    }
     
-        int16SpiritPartNum = SpiritGeneralGetDevicePartNumber();
-        printf("OK => ");
-        printf("int16SpiritPartNum value : [0x%04X]\n", int16SpiritPartNum);
-        int16SpiritPartNum = 0;
-#endif    
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] SendData() 호출 끝.\n");
+#endif
+
+    return CUBEBITE_SEND_ERROR_UNKNOWN;
+}
 
 
 
 
-        /* low power in idle condition., waiting for an event */
-        __WFE(); 
-    
-    
-    
-    
-    
-#ifdef  CUBEBITE_RF_GPIO_0_TEST    
-        //180108 HJM : For spiritFunctionalState(), testing code
-        
-        if (S_ENABLE == spiritFunctionalState)
-        {
-            spiritFunctionalState = S_DISABLE;    
-        }
-        else
-        {
-            spiritFunctionalState = S_ENABLE;    
-        }
-        
-        /* 180108 cubebite HJM : GPIO 0, For, spiritFunctionalState() => Enables or Disables the output of temperature sensor on SPIRIT GPIO_0. */
-        SpiritGpioTemperatureSensor(spiritFunctionalState);
-        
-        /* 180108 cubebite HJM : RF_GPIO_0_INPUT pin value print */
-        printf("****** RF GPIO_0 Status Testing => [%d] ******\n", (int)RF_GPIO_0_INPUT);
-        wait(1);
-#endif
-    
-#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON 
-    //180112 HJM : Ack 응답 올 때 까지의 Timeout.
-//            wait(0.5);  //100ms, 정상 동작, .       ( 테스트)
-            wait(0.1);  //100ms, 정상 동작, 송신 쪽 오류 O.       (1일 테스트)
-//            wait(0.08);  //100ms, 정상 동작, 오류 X.    (5분 테스트)
-//            wait(0.07);  //70ms, 
-//            wait(0.06); //60ms, 정상 동작, 송신 쪽 오류 O, (1시간 테스트)
-//            wait(0.05);  // 50ms, 정상 동작, 오류 X.   (13분 테스트)
-//            wait(0.03);  // 30ms, 정상 동작, ??? 오류 O.      (1시간 테스트)
-//            wait(0.02);  // 20ms, 정상 동작, 수신 쪽 오류 O.   (2분 테스트)
-//            wait(0.01);  // 10ms, 정상 동작, 수신 쪽 오류 O.   (1분 테스트)
-//            wait(0.008);    // 8ms, 정상 동작, 하지만 0.01 이 최대 속도값으로 보임.
-//            wait(0.005);  // 5ms, 정상 동작, 하지만 0.01 이 최대 속도값으로 보임, 하지만 Nothing to read 오류가 많이 뜸.    (20분 테스트)
-//            wait(0.00001);  // 0.01ms, 비 정상 동작.   (30분 테스트)
-            set_send_data_flag();    
-#endif
-    
-        if(rx_done_flag) 
-        {
-            rx_done_flag = false; 
-            read_rcvd_data();
-//            printf("recvedd.\n");            
-#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON                
-            if (true == bIsSendFirstClockFunctionStarted)
-            {
-                fRfSpeedTestResultTime = (float)(clockRfSpeedTestEnd - clockRfSpeedTestStart)/CLOCKS_PER_SEC;
-                //180115 HJM : .csv 형식으로 출력하여 데이터를 도식화 하기위해 log 수정,
-                //((putty출력中)시,분,초,)송신위치,수신위치,대략거리(m),송신딜레이(sec),송신데이터양(byte),속도(sec)
-//                printf("Clock Rf Speed Test : [%.9f(sec)] \n", fRfSpeedTestResultTime);
-//                printf(",hjm(keyboard-right),hjm(keyboard-left),1,0.1,28,%.9f\n", fRfSpeedTestResultTime);    //1차, 2시간 테스트
-                printf(",hjm(keyboard-left),mars(tv-desk),10,0.1,28,%.9f\n", fRfSpeedTestResultTime);                                                    //2ì°¨
-                
-                
-                bIsSendFirstClockFunctionStarted = false;                
-            }
-#endif
-        }
-        
-        else if (send_data_flag)
-        { 
+
+
 
-            send_data_flag = false;
-            send_data();
-//            printf("sended.\n");
+
 
-        }
-    
-        else if (tx_done_flag)
-        {
-          tx_done_flag = false;
-    //      printf("\n***Packet sent ***\nSent string ='%s' (len=%d)\n", send_buf, strlen((const char*)send_buf) + 1);      
-        }
-    
-#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON 
-//180112 HJM 오후 1시, 현재 사용 안하는 중, recv 쪽에서 strcmp로 보낸 데이터와 받은 데이터 비교 후, send 를 바로 하는 코드로 바꿨음.
-//180116 HJM 오전 9시, 그 전날도 뻗고, OK 신호를 제대로 받지를 않아서 recv 쪽 ok send 보내는 쪽을 의심, 다시 바꾸기로함.
-        else if (true == bIsAckSended)
-        {
-            bIsAckSended = false;
-            ack_send_data();
-//            printf("recv sended.\n"); 
-        }
-#endif
-    }
-  /* unreachable */
-  // myspirit.off();
-  // return 0;
-}
+
diff -r d802c6ed2e75 -r 1a6faeda6579 main.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Tue Feb 13 06:35:39 2018 +0000
@@ -0,0 +1,94 @@
+#pragma once
+
+#ifndef __MBED_H__
+#define __MBED_H__
+#include "mbed.h"
+#endif  //__MBED_H__
+
+#ifndef __SIMPLESPIRIT1_H__
+#define __SIMPLESPIRIT1_H__
+#include "SimpleSpirit1.h"
+#endif  //__SIMPLESPIRIT1_H__
+
+
+//*************************************************************************************
+//Global variable : LEDs and user buttons by board
+//*************************************************************************************
+#ifdef  CUBEBITE_BOARD_F401RE
+static DigitalOut TestLED(D5);         /* LED of IDS01A4/5 */
+#endif
+
+#ifdef  CUBEBITE_BOARD_F746ZG
+static DigitalOut TestLED(PB_0);         /* LED of IDS01A4/5 */
+static DigitalOut TestLED2(PB_7);         /* LED of IDS01A4/5 */
+static DigitalOut TestLED3(PB_14);         /* LED of IDS01A4/5 */
+#endif
+
+#ifdef  CUBEBITE_RF_USER_BUTTON_SEND_TEST
+static InterruptIn event(USER_BUTTON); /* Interrupt event to give userinterface to send pkt. */
+#endif
+//*************************************************************************************
+
+
+
+
+
+//*************************************************************************************
+//Global variable : Rf Send, read Buffer
+//*************************************************************************************
+/* 180108 cubebite HJM : send testing, orignal code  */
+#define TEST_STR_LEN (32)
+static uint8_t uiSendBuf[TEST_STR_LEN] ={'S','P','I','R','I','T','1',' ','H','E','L','L','O',' ','W','O','R','L','D',' ','P','2','P',' ','D','E','M','O'};
+static uint8_t uiRendBuf[TEST_STR_LEN] ={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
+//*************************************************************************************
+
+
+
+//*************************************************************************************
+//Global variable : tx, rx Flag
+//*************************************************************************************
+static volatile bool bRxDoneFlag = false; 
+static volatile bool bTxDoneFlag = false; 
+static volatile bool bSendDataFlag = false;
+//*************************************************************************************
+
+
+
+
+//*************************************************************************************
+//Global variable : Testing
+//*************************************************************************************
+
+/* Test : RF Speed Test */
+#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON
+static clock_t clocktimeRFSpeedTestStart, clocktimeRFSpeedTestEnd;
+static float fRfSpeedTestResultTime;
+
+static bool bIsSendFirstClockFunctionStarted = false;
+static bool bIsSetSendFlag = false;
+#endif
+
+
+#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
+#define TEST_ACK_STR_LEN (6)
+static uint8_t uiSendAckBuf[TEST_ACK_STR_LEN] ={'O','K'};
+size_t sizetCurrAckBufLen = strlen((const char*)uiSendAckBuf) + 1;
+
+static bool bIsAckSended = false;
+#endif
+//*************************************************************************************
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm-spirit1-rf-driver.lib	Tue Feb 13 06:35:39 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/jmhong/code/stm-spirit1-rf-driver/#6c5fc276194a
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/.gitignore
--- a/stm-spirit1-rf-driver/.gitignore	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-BUILD
-.mbed
-projectfiles
-*.py*
-RCS
-atmel-rf-driver
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/README.md
--- a/stm-spirit1-rf-driver/README.md	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-# Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 Module for STM32 Nucleo #
-
-Currently supported boards:
- * [X-NUCLEO-IDS01A4](http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32-nucleo-expansion-boards/stm32-ode-connect-hw/x-nucleo-ids01a4.html)
-
-**Note**, in order to use expansion board `X-NUCLEO-IDS01A4` in mbed you need to perform the following HW modifications on the board:
- * **Un**mount resistor `R4`
- * **Mount** resistor `R7`
- 
-Furthermore, on some Nucleo development boards (e.g. the [NUCLEO_F429ZI](https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/)), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro `SPIRIT1_SPI_MOSI=PB_5` defined, while the development board typically requires some HW modification as e.g. described [here](https://github.com/ARMmbed/sal-nanostack-driver-stm32-eth)! 
-
-This driver can be used together with the 6LoWPAN stack (*a.k.a.* Nanostack).
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/mbed_lib.json
--- a/stm-spirit1-rf-driver/mbed_lib.json	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-{
-    "name": "spirit1",
-    "config": {
-	"mac-address": "{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}"
-    },
-    "macros": ["USE_STM32F4XX_NUCLEO", "X_NUCLEO_IDS01A4", "SPIRIT_USE_FULL_ASSERT"]
-}
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/NanostackRfPhySpirit1.cpp
--- a/stm-spirit1-rf-driver/source/NanostackRfPhySpirit1.cpp	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,829 +0,0 @@
-#if MBED_CONF_RTOS_PRESENT
-
-#include "NanostackRfPhySpirit1.h"
-#include "SimpleSpirit1.h"
-#include "nanostack/platform/arm_hal_phy.h"
-#include "platform/arm_hal_interrupt.h"
-
-#include "mbed_trace.h"
-#define TRACE_GROUP  "SPIRIT"
-
-/* Define beyond macro if you want to perform heavy debug tracing (includes tracing in IRQ context) */
-// #define HEAVY_TRACING
-
-static phy_device_driver_s device_driver;
-static int8_t rf_radio_driver_id = -1;
-
-const phy_rf_channel_configuration_s phy_subghz = {868000000, 1000000, 250000, 11, M_GFSK};
-
-static phy_device_channel_page_s phy_channel_pages[] = {
-        {CHANNEL_PAGE_2, &phy_subghz},
-        {CHANNEL_PAGE_0, NULL}
-};
-
-static uint8_t tx_sequence = 0xff;
-static uint8_t mac_tx_handle = 0;
-
-static SimpleSpirit1 *rf_device = NULL;
-static uint8_t rf_rx_buf[MAX_PACKET_LEN];
-
-static uint16_t stored_short_adr;
-static uint16_t stored_pan_id;
-static uint8_t stored_mac_address[8] = MBED_CONF_SPIRIT1_MAC_ADDRESS;
-
-#define RF_SIG_ACK_NEEDED (1<<0)
-#define RF_SIG_CB_TX_DONE (1<<1)
-#define RF_SIG_CB_RX_RCVD (1<<2)
-static Thread rf_ack_sender(osPriorityRealtime);
-static volatile uint8_t rf_rx_sequence;
-static volatile bool rf_ack_sent = false;
-static volatile bool expecting_ack = false;
-static volatile bool need_ack = false;
-
-/* MAC frame helper macros */
-#define MAC_FCF_FRAME_TYPE_MASK         0x0007
-#define MAC_FCF_FRAME_TYPE_SHIFT        0
-#define MAC_FCF_SECURITY_BIT_MASK       0x0008
-#define MAC_FCF_SECURITY_BIT_SHIFT      3
-#define MAC_FCF_PENDING_BIT_MASK        0x0010
-#define MAC_FCF_PENDING_BIT_SHIFT       4
-#define MAC_FCF_ACK_REQ_BIT_MASK        0x0020
-#define MAC_FCF_ACK_REQ_BIT_SHIFT       5
-#define MAC_FCF_INTRA_PANID_MASK        0x0040
-#define MAC_FCF_INTRA_PANID_SHIFT       6
-#define MAC_FCF_DST_ADDR_MASK           0x0c00
-#define MAC_FCF_DST_ADDR_SHIFT          10
-#define MAC_FCF_VERSION_MASK            0x3000
-#define MAC_FCF_VERSION_SHIFT           12
-#define MAC_FCF_SRC_ADDR_MASK           0xc000
-#define MAC_FCF_SRC_ADDR_SHIFT          14
-
-/* MAC supported frame types */
-#define FC_BEACON_FRAME         0x00
-#define FC_DATA_FRAME           0x01
-#define FC_ACK_FRAME            0x02
-#define FC_CMD_FRAME            0x03
-
-static inline void rf_if_lock(void)
-{
-    platform_enter_critical();
-}
-
-static inline void rf_if_unlock(void)
-{
-    platform_exit_critical();
-}
-
-static inline uint16_t rf_read_16_bit(uint8_t *data_ptr) { // little-endian
-    uint16_t ret;
-
-    ret = ((uint16_t)data_ptr[0]) + (((uint16_t)data_ptr[1]) << 8);
-    return ret;
-}
-
-/* Note: we are in IRQ context */
-static inline void rf_send_signal(int32_t signal) {
-#ifdef HEAVY_TRACING
-    tr_info("%s (%d): %d", __func__, __LINE__, signal);
-#endif
-    rf_ack_sender.signal_set(signal);
-}
-
-static volatile phy_link_tx_status_e phy_status;
-/* Note: we are in IRQ context */
-static void rf_handle_ack(uint8_t seq_number)
-{
-    /*Received ACK sequence must be equal with transmitted packet sequence*/
-    if(tx_sequence == seq_number)
-    {
-#ifdef HEAVY_TRACING
-        tr_info("%s (%d)", __func__, __LINE__);
-#endif
-
-        /*Call PHY TX Done API*/
-        if(device_driver.phy_tx_done_cb){
-            phy_status = PHY_LINK_TX_DONE;
-            rf_send_signal(RF_SIG_CB_TX_DONE);
-        }
-    } else {
-#ifdef HEAVY_TRACING
-        tr_info("%s (%d)", __func__, __LINE__);
-#endif
-
-        /*Call PHY TX Done API*/
-        if(device_driver.phy_tx_done_cb){
-            phy_status = PHY_LINK_TX_FAIL;
-            rf_send_signal(RF_SIG_CB_TX_DONE);
-        }
-    }
-}
-
-/* Note: we are in IRQ context */
-static inline bool rf_check_mac_address(uint8_t *dest) {
-    for(int i = 0; i < 8; i++) {
-        if(dest[i] != stored_mac_address[7-i]) {
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d): i=%d, dest=%x, stored=%x",
-                    __func__, __LINE__,
-                    i, dest[i], stored_mac_address[7-i]);
-#endif
-            return false;
-        }
-    }
-    return true;
-}
-
-/* Note: we are in IRQ context */
-/* Returns true if packet should be accepted */
-static bool rf_check_destination(int len, uint8_t *ack_requested) {
-    uint8_t frame_type;
-    uint16_t dst_pan_id;
-    uint16_t dst_short_adr;
-    uint8_t dst_addr_mode = 0x0; /*0x00 = no address 0x01 = reserved 0x02 = 16-bit short address 0x03 = 64-bit extended address */
-    uint8_t src_addr_mode = 0x0; /*0x00 = no address 0x01 = reserved 0x02 = 16-bit short address 0x03 = 64-bit extended address */
-    uint8_t min_size = 3; // FCF & SeqNr
-    bool ret = false;
-#if defined(HEAVY_TRACING)
-    bool panid_compr = false;
-#endif
-
-    if(len < 3) {
-        tr_debug("%s (%d)", __func__, __LINE__);
-        return false;
-    }
-
-    uint16_t fcf = rf_read_16_bit(rf_rx_buf);
-    frame_type = ((fcf & MAC_FCF_FRAME_TYPE_MASK) >> MAC_FCF_FRAME_TYPE_SHIFT);
-    (*ack_requested) = ((fcf & MAC_FCF_ACK_REQ_BIT_MASK) >> MAC_FCF_ACK_REQ_BIT_SHIFT);
-    dst_addr_mode = ((fcf & MAC_FCF_DST_ADDR_MASK) >> MAC_FCF_DST_ADDR_SHIFT);
-    src_addr_mode = ((fcf & MAC_FCF_SRC_ADDR_MASK) >> MAC_FCF_SRC_ADDR_SHIFT);
-#if defined(HEAVY_TRACING)
-    panid_compr = ((fcf & MAC_FCF_INTRA_PANID_MASK) >> MAC_FCF_INTRA_PANID_SHIFT);
-#endif
-
-#ifdef HEAVY_TRACING
-    tr_info("%s (%d): len=%d, ftype=%x, snr=%x, ack=%d, dst=%x, src=%x, intra=%d", __func__, __LINE__, len, frame_type,
-            rf_rx_buf[2], (*ack_requested), dst_addr_mode, src_addr_mode, panid_compr);
-#endif
-
-    if(frame_type == FC_ACK_FRAME) { // betzw: we support up to two different forms of ACK frames!
-        if((len == 3) && (dst_addr_mode == 0x0) && (src_addr_mode == 0x0)) {
-            ret = true;
-        }
-
-#ifdef HEAVY_TRACING
-        tr_info("%s (%d): ret=%d", __func__, __LINE__, ret);
-#endif
-        (*ack_requested) = 0;  // Never acknowledge ACK frames
-        return ret;
-    }
-
-    switch(dst_addr_mode) {
-        case 0x00:
-            ret = true; // no check possible;
-            break;
-
-        case 0x02:
-            min_size += 4; // pan id + short dest adr
-
-            if(len < 5) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            dst_pan_id = rf_read_16_bit(&rf_rx_buf[3]);
-            if((dst_pan_id != stored_pan_id) && (dst_pan_id != 0xFFFF)) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            if(len < 7) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            dst_short_adr = rf_read_16_bit(&rf_rx_buf[5]);
-            if((dst_short_adr != stored_short_adr) && (dst_short_adr != 0xFFFF)) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d): %d!=%d", __func__, __LINE__, dst_short_adr, stored_short_adr);
-#endif
-                return false;
-            }
-
-            ret = true;
-            break;
-
-        case 0x03:
-            min_size += 10; // pan id + dest mac addr
-
-            if(len < 5) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            dst_pan_id = rf_read_16_bit(&rf_rx_buf[3]);
-            if((dst_pan_id != stored_pan_id) && (dst_pan_id != 0xFFFF)) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            if(len < 13) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            ret = rf_check_mac_address(&rf_rx_buf[5]);
-
-            if(!ret) {
-#ifdef HEAVY_TRACING
-                tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-                return false;
-            }
-
-            break;
-
-        default:
-            /* not supported */
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-            return false;
-    }
-
-    if(ret && (*ack_requested)) {
-        rf_rx_sequence = rf_rx_buf[2];
-    }
-
-#ifdef HEAVY_TRACING
-    tr_info("%s (%d), ret=%d, ack=%d", __func__, __LINE__, ret, (*ack_requested));
-#endif
-    return ret;
-}
-
-static uint16_t rf_buffer_len = 0;
-static uint8_t rf_sqi;
-static int8_t rf_rssi;
-/* Note: we are in IRQ context */
-static inline void rf_handle_rx_end(void)
-{
-    uint8_t ack_requested = 0;
-
-    /* Get received data */
-    rf_buffer_len = rf_device->read(rf_rx_buf, MAX_PACKET_LEN);
-    if(!rf_buffer_len)
-        return;
-
-#ifdef HEAVY_TRACING
-    tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-
-    /* Check if packet should be accepted */
-    if(!rf_check_destination(rf_buffer_len, &ack_requested)) {
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-        return;
-    }
-
-    /* If waiting for ACK, check here if the packet is an ACK to a message previously sent */
-    if(expecting_ack) {
-        uint16_t fcf = rf_read_16_bit(rf_rx_buf);
-        expecting_ack = false;
-
-        if(((fcf & MAC_FCF_FRAME_TYPE_MASK) >> MAC_FCF_FRAME_TYPE_SHIFT) == FC_ACK_FRAME) {
-            /*Send sequence number in ACK handler*/
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d), len=%u", __func__, __LINE__, (unsigned int)rf_buffer_len);
-#endif
-            rf_handle_ack(rf_rx_buf[2]);
-            return;
-        } else {
-            /*Call PHY TX Done API*/
-            if(device_driver.phy_tx_done_cb){
-                phy_status = PHY_LINK_TX_FAIL;
-                rf_send_signal(RF_SIG_CB_TX_DONE);
-            }
-        }
-    }
-
-    /* Kick off ACK sending */
-    if(ack_requested) {
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d), len=%u", __func__, __LINE__, (unsigned int)rf_buffer_len);
-#endif
-        rf_send_signal(RF_SIG_ACK_NEEDED);
-    }
-
-    /* Get link information */
-    rf_rssi = (int8_t)rf_device->get_last_rssi_dbm();
-    rf_sqi = (uint8_t)rf_device->get_last_sqi(); // use SQI as link quality
-
-    /* Note: Checksum of the packet must be checked and removed before entering here */
-    /* TODO - betzw: what to do? */
-
-#ifdef HEAVY_TRACING
-    tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-
-    /* Send received data and link information to the network stack */
-    if( device_driver.phy_rx_cb ){
-        rf_send_signal(RF_SIG_CB_RX_RCVD);
-    }
-}
-
-/* Note: we are in IRQ context */
-static inline void rf_handle_tx_end(void)
-{
-    /* Check if this is an ACK sending which is still pending */
-    if(rf_ack_sent) {
-        rf_ack_sent = false;
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-        return; // no need to inform stack
-    }
-
-    /* Transform `need_ack` in `expecting_ack` */
-    if(need_ack) {
-        need_ack = false;
-        expecting_ack = true;
-    }
-
-    /*Call PHY TX Done API*/
-    if(device_driver.phy_tx_done_cb){
-        phy_status = PHY_LINK_TX_SUCCESS;
-        rf_send_signal(RF_SIG_CB_TX_DONE);
-    }
-}
-
-/* Note: we might be in IRQ context */
-static inline void rf_handle_tx_err(phy_link_tx_status_e phy_val = PHY_LINK_TX_FAIL) {
-    /*Call PHY TX Done API*/
-    if(device_driver.phy_tx_done_cb){
-        need_ack = false;
-        phy_status = phy_val;
-        rf_send_signal(RF_SIG_CB_TX_DONE);
-    }
-}
-
-/* Note: we are in IRQ context */
-static void rf_callback_func(int event) {
-    switch(event) {
-        case SimpleSpirit1::RX_DONE:
-            rf_handle_rx_end();
-            break;
-        case SimpleSpirit1::TX_DONE:
-            rf_handle_tx_end();
-            break;
-        case SimpleSpirit1::TX_ERR:
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d): TX_ERR!!!", __func__, __LINE__);
-#endif
-            rf_handle_tx_err();
-            break;
-    }
-}
-
-static int8_t rf_trigger_send(uint8_t *data_ptr, uint16_t data_length, uint8_t tx_handle, data_protocol_e data_protocol)
-{
-#ifndef NDEBUG
-    debug_if(!(data_length >= 3), "\r\nassert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-
-    /* Give 'rf_ack_sender' a better chance to run */
-    Thread::yield();
-
-    /* Get Lock */
-    rf_if_lock();
-
-    /*Check if transmitter is busy*/
-    if(rf_device->is_receiving()) { /* betzw - WAS: (rf_device->channel_clear() != 0)), do NOT use this but rather study and enable automatic CCA */
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-
-        /* Release Lock */
-        rf_if_unlock();
-
-        /*Return busy*/
-        return -1;
-    } else {
-        uint16_t fcf = rf_read_16_bit(data_ptr);
-
-        /*Check if transmitted data needs to be acked*/
-        if((fcf & MAC_FCF_ACK_REQ_BIT_MASK) >> MAC_FCF_ACK_REQ_BIT_SHIFT)
-            need_ack = true;
-        else
-            need_ack = false;
-
-        /*Store the sequence number for ACK handling*/
-        tx_sequence = *(data_ptr + 2);
-
-        /*Store TX handle*/
-        mac_tx_handle = tx_handle;
-
-#ifdef HEAVY_TRACING
-        tr_info("%s (%d), len=%d, tx_handle=%x, tx_seq=%x, need_ack=%d (%x:%x, %x:%x, %x:%x, %x:%x)", __func__, __LINE__,
-                data_length, tx_handle, tx_sequence, need_ack,
-                data_ptr[3], data_ptr[4], data_ptr[5], data_ptr[6],
-                data_ptr[7], data_ptr[8], data_ptr[9], data_ptr[10]);
-#endif
-
-        /*Send the packet*/
-        int ret = rf_device->send(data_ptr, data_length);
-        if(ret != RADIO_TX_OK) {
-            rf_handle_tx_err(PHY_LINK_CCA_FAIL);
-        }
-
-        /* Release Lock */
-        rf_if_unlock();
-    }
-
-    /*Return success*/
-    return 0;
-}
-
-static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_t rf_channel)
-{
-    int8_t ret_val = 0;
-    switch (new_state)
-    {
-        /*Reset PHY driver and set to idle*/
-        case PHY_INTERFACE_RESET:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            rf_device->reset_board();
-            break;
-            /*Disable PHY Interface driver*/
-        case PHY_INTERFACE_DOWN:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            ret_val = rf_device->off();
-            if(ret_val != 0) ret_val = -1;
-            break;
-            /*Enable PHY Interface driver*/
-        case PHY_INTERFACE_UP:
-            ret_val = rf_device->on();
-            if(ret_val != 0) {
-                tr_debug("%s (%d)", __func__, __LINE__);
-                ret_val = -1;
-                break;
-            }
-            tr_debug("%s (%d) - channel: %d", __func__, __LINE__, (int)rf_channel);
-            rf_device->set_channel(rf_channel);
-            break;
-            /*Enable wireless interface ED scan mode*/
-        case PHY_INTERFACE_RX_ENERGY_STATE:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            break;
-            /*Enable Sniffer state*/
-        case PHY_INTERFACE_SNIFFER_STATE:
-            // TODO - if we really need this - WAS: rf_setup_sniffer(rf_channel);
-            tr_debug("%s (%d)", __func__, __LINE__);
-            ret_val = -1;
-            break;
-        default:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            break;
-    }
-    return ret_val;
-}
-
-static int8_t rf_extension(phy_extension_type_e extension_type, uint8_t *data_ptr)
-{
-    switch (extension_type)
-    {
-        /*Control MAC pending bit for Indirect data transmission*/
-        case PHY_EXTENSION_CTRL_PENDING_BIT:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            break;
-
-            /*Return frame pending status*/
-        case PHY_EXTENSION_READ_LAST_ACK_PENDING_STATUS:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            *data_ptr = 0;
-            break;
-
-            /*Set channel, used for setting channel for energy scan*/
-        case PHY_EXTENSION_SET_CHANNEL:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            break;
-
-            /*Read energy on the channel*/
-        case PHY_EXTENSION_READ_CHANNEL_ENERGY:
-            // TODO: *data_ptr = rf_get_channel_energy();
-            tr_debug("%s (%d)", __func__, __LINE__);
-            *data_ptr = (int8_t)rf_device->get_last_rssi_dbm();
-            break;
-
-            /*Read status of the link*/
-        case PHY_EXTENSION_READ_LINK_STATUS:
-            // TODO: *data_ptr = rf_get_link_status();
-            tr_debug("%s (%d)", __func__, __LINE__);
-            *data_ptr = rf_device->get_last_sqi(); // use SQI as link quality
-            break;
-
-        default:
-            tr_debug("%s (%d)", __func__, __LINE__);
-            break;
-    }
-    return 0;
-}
-
-static inline void rf_set_mac_address(uint8_t *ptr) {
-    tr_debug("%s (%d), adr0=%x, adr1=%x, adr2=%x, adr3=%x, adr4=%x, adr5=%x, adr6=%x, adr7=%x",
-             __func__, __LINE__,
-             ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7]);
-    for(int i = 0; i < 8; i++) {
-        stored_mac_address[i] = ptr[i];
-    }
-}
-
-static inline void rf_get_mac_address(uint8_t *ptr) {
-    for(int i = 0; i < 8; i++) {
-        ptr[i] = stored_mac_address[i];
-    }
-    tr_debug("%s (%d), adr0=%x, adr1=%x, adr2=%x, adr3=%x, adr4=%x, adr5=%x, adr6=%x, adr7=%x",
-             __func__, __LINE__,
-             ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7]);
-}
-
-static inline void rf_set_short_adr(uint8_t *ptr) {
-    stored_short_adr = (ptr[0] << 8) + ptr[1]; // big-endian
-    tr_debug("%s (%d), adr0=%x, adr1=%x, val=%d",
-             __func__, __LINE__,
-             ptr[0], ptr[1], stored_short_adr);
-}
-
-static inline void rf_set_pan_id(uint8_t *ptr) {
-    stored_pan_id = (ptr[0] << 8) + ptr[1]; // big-endian
-    tr_debug("%s (%d), adr0=%x, adr1=%x, val=%d",
-            __func__, __LINE__,
-            ptr[0], ptr[1], stored_pan_id);
-}
-
-static int8_t rf_address_write(phy_address_type_e address_type, uint8_t *address_ptr)
-{
-    switch (address_type)
-    {
-        /*Set 48-bit address*/
-        case PHY_MAC_48BIT:
-            /* Not used in this example */
-            // betzw - WAS: rf_set_mac_48bit(address_ptr);
-            break;
-            /*Set 64-bit address*/
-        case PHY_MAC_64BIT:
-            rf_set_mac_address(address_ptr);
-            break;
-            /*Set 16-bit address*/
-        case PHY_MAC_16BIT:
-            rf_set_short_adr(address_ptr);
-            break;
-            /*Set PAN Id*/
-        case PHY_MAC_PANID:
-            rf_set_pan_id(address_ptr);
-            break;
-    }
-
-    return 0;
-}
-
-static void rf_ack_loop(void) {
-    static uint16_t buffer[2] = {
-            (FC_ACK_FRAME << MAC_FCF_FRAME_TYPE_SHIFT),
-            0x0
-    };
-
-    tr_debug("%s (%d)", __func__, __LINE__);
-
-    do {
-        /* Wait for signal */
-        osEvent event = rf_ack_sender.signal_wait(0);
-
-        if(event.status != osEventSignal) {
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-            continue;
-        }
-
-        int32_t signals = event.value.signals;
-
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-
-        /* Get Lock */
-        rf_if_lock();
-
-        if(signals & RF_SIG_ACK_NEEDED) {
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-
-            /* Prepare payload */
-            uint8_t *ptr = (uint8_t*)&buffer[1];
-            ptr[0] = rf_rx_sequence;   // Sequence number
-
-            /* Wait for device not receiving */
-            while(rf_device->is_receiving()) {
-#ifdef HEAVY_TRACING
-                tr_info("%s (%d)", __func__, __LINE__);
-#endif
-                wait_us(10);
-            }
-
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d), hdr=%x, nr=%x", __func__, __LINE__, buffer[0], ptr[0]);
-#endif
-
-            /* Set information that we have sent an ACK */
-            rf_ack_sent = true;
-
-            /*Send the packet*/
-            rf_device->send((uint8_t*)buffer, 3, false);
-
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d), hdr=%x, nr=%x", __func__, __LINE__, buffer[0], ptr[0]);
-#endif
-        }
-
-        if(signals & RF_SIG_CB_TX_DONE) {
-            device_driver.phy_tx_done_cb(rf_radio_driver_id, mac_tx_handle, phy_status,
-                                         (phy_status == PHY_LINK_CCA_FAIL) ? 0xFF : 0, 0);
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-        }
-
-        if(signals & RF_SIG_CB_RX_RCVD) {
-            device_driver.phy_rx_cb(rf_rx_buf, rf_buffer_len, rf_sqi, rf_rssi, rf_radio_driver_id);
-#ifdef HEAVY_TRACING
-            tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-        }
-
-        /* Release Lock */
-        rf_if_unlock();
-
-#ifdef HEAVY_TRACING
-        tr_debug("%s (%d)", __func__, __LINE__);
-#endif
-    } while(true);
-}
-
-void NanostackRfPhySpirit1::rf_init(void) {
-#ifndef NDEBUG
-    osStatus ret;
-#endif
-
-    if(rf_device == NULL) {
-        rf_device = &SimpleSpirit1::CreateInstance(_spi_mosi, _spi_miso, _spi_sclk, _dev_irq, _dev_cs, _dev_sdn, _brd_led);
-        rf_device->attach_irq_callback(rf_callback_func);
-
-#ifndef NDEBUG
-        ret =
-#endif
-                rf_ack_sender.start(rf_ack_loop);
-
-#ifndef NDEBUG
-        debug_if(!(ret == osOK), "\r\nassert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-    }
-}
-
-NanostackRfPhySpirit1::NanostackRfPhySpirit1(PinName spi_mosi, PinName spi_miso, PinName spi_sclk,
-                                             PinName dev_irq,  PinName dev_cs, PinName dev_sdn, PinName brd_led) :
-    _spi_mosi(spi_mosi),
-    _spi_miso(spi_miso),
-    _spi_sclk(spi_sclk),
-    _dev_irq(dev_irq),
-    _dev_cs(dev_cs),
-    _dev_sdn(dev_sdn),
-    _brd_led(brd_led)
-{
-    /* Nothing to do */
-    tr_debug("%s (%d)", __func__, __LINE__);
-}
-
-NanostackRfPhySpirit1::~NanostackRfPhySpirit1()
-{
-    /* Nothing to do */
-    tr_debug("%s (%d)", __func__, __LINE__);
-}
-
-int8_t NanostackRfPhySpirit1::rf_register()
-{
-    tr_debug("%s (%d)", __func__, __LINE__);
-
-    /* Get Lock */
-    rf_if_lock();
-
-    /* Do some initialization */
-    rf_init();
-
-    /* Set pointer to MAC address */
-    device_driver.PHY_MAC = stored_mac_address;
-
-    /* Set driver Name */
-    device_driver.driver_description = (char*)"Spirit1 Sub-GHz RF";
-
-    /*Type of RF PHY is SubGHz*/
-    device_driver.link_type = PHY_LINK_15_4_SUBGHZ_TYPE;
-
-    /*Maximum size of payload*/
-    device_driver.phy_MTU = MAX_PACKET_LEN;
-
-    /*No header in PHY*/
-    device_driver.phy_header_length = 0;
-
-    /*No tail in PHY*/
-    device_driver.phy_tail_length = 0;
-
-    /*Set up driver functions*/
-    device_driver.address_write = &rf_address_write;
-    device_driver.extension = &rf_extension;
-    device_driver.state_control = &rf_interface_state_control;
-    device_driver.tx = &rf_trigger_send;
-
-    /*Set supported channel pages*/
-    device_driver.phy_channel_pages = phy_channel_pages;
-
-    //Nullify rx/tx callbacks
-    device_driver.phy_rx_cb = NULL;
-    device_driver.phy_tx_done_cb = NULL;
-    device_driver.arm_net_virtual_rx_cb = NULL;
-    device_driver.arm_net_virtual_tx_cb = NULL;
-
-    /*Register device driver*/
-    rf_radio_driver_id = arm_net_phy_register(&device_driver);
-
-    /* Release Lock */
-    rf_if_unlock();
-
-    tr_debug("%s (%d)", __func__, __LINE__);
-    return rf_radio_driver_id;
-}
-
-void NanostackRfPhySpirit1::rf_unregister()
-{
-    tr_debug("%s (%d)", __func__, __LINE__);
-
-    /* Get Lock */
-    rf_if_lock();
-
-    if (rf_radio_driver_id >= 0) {
-        arm_net_phy_unregister(rf_radio_driver_id);
-        rf_radio_driver_id = -1;
-    }
-
-    /* Release Lock */
-    rf_if_unlock();
-}
-
-void NanostackRfPhySpirit1::get_mac_address(uint8_t *mac)
-{
-    tr_debug("%s (%d)", __func__, __LINE__);
-
-    /* Get Lock */
-    rf_if_lock();
-
-    if(rf_radio_driver_id >= 0) {
-        rf_get_mac_address(mac);
-    } else {
-        error("NanostackRfPhySpirit1 must be registered to read mac address");
-    }
-
-    /* Release Lock */
-    rf_if_unlock();
-}
-
-void NanostackRfPhySpirit1::set_mac_address(uint8_t *mac)
-{
-    tr_debug("%s (%d)", __func__, __LINE__);
-
-    /* Get Lock */
-    rf_if_lock();
-
-    if(rf_radio_driver_id < 0) {
-        rf_set_mac_address(mac);
-    } else {
-        error("NanostackRfPhySpirit1 cannot change mac address when running");
-    }
-
-    /* Release Lock */
-    rf_if_unlock();
-}
-
-#endif /* MBED_CONF_RTOS_PRESENT */
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/SimpleSpirit1.cpp
--- a/stm-spirit1-rf-driver/source/SimpleSpirit1.cpp	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,642 +0,0 @@
-/*** Mbed Includes ***/
-#include "SimpleSpirit1.h"
-#include "radio_spi.h"
-
-#define SPIRIT_GPIO_IRQ			(SPIRIT_GPIO_3)
-
-static uint16_t last_state;
-#define SPIRIT1_STATUS()		((last_state = (uint16_t)refresh_state()) & SPIRIT1_STATE_STATEBITS)
-
-#define XO_ON                   (0x1)
-
-#define BUSYWAIT_UNTIL(cond, millisecs) \
-        do { \
-            uint32_t start = us_ticker_read(); \
-            uint32_t limit = (uint32_t)millisecs*1000U; \
-            while (!(cond)) { \
-                uint32_t now = us_ticker_read(); \
-                if((now - start) > limit) break; \
-            } \
-        } while(0)
-
-#define st_lib_spirit_irqs		SpiritIrqs
-
-#define STATE_TIMEOUT           (100)
-
-// betzw: switching force & back from standby is on some devices quite unstable
-#define USE_STANDBY_STATE
-
-/*** Class Implementation ***/
-/** Static Class Variables **/
-SimpleSpirit1 *SimpleSpirit1::_singleton = NULL;
-
-/** Constructor **/
-SimpleSpirit1::SimpleSpirit1(PinName mosi, PinName miso, PinName sclk,
-                             PinName irq, PinName cs, PinName sdn,
-                             PinName led) :
-    		        _spi(mosi, miso, sclk),
-    		        _irq(irq),
-    		        _chip_select(cs),
-    		        _shut_down(sdn),
-    		        _led(led),
-    		        _current_irq_callback(),
-    		        _rx_receiving_timeout()
-{
-}
-
-/** Init Function **/
-void SimpleSpirit1::init() {
-    /* reset irq disable counter and irq callback & disable irq */
-    _nr_of_irq_disables = 0;
-    disable_spirit_irq();
-
-    /* unselect chip */
-    chip_unselect();
-
-    /* configure spi */
-    _spi.format(8, 0); /* 8-bit, mode = 0, [order = SPI_MSB] only available in mbed3 */
-    _spi.frequency(10000000); // 10MHz (i.e. max speed allowed for Spirit1)
-
-    /* install irq handler */
-    _irq.mode(PullUp);
-    _irq.fall(Callback<void()>(this, &SimpleSpirit1::IrqHandler));
-
-    /* init cube vars */
-    spirit_on = OFF;
-    last_rssi = 0 ; //MGR
-    last_sqi = 0 ;  //MGR
-
-    /* set frequencies */
-    radio_set_xtal_freq(XTAL_FREQUENCY);
-    mgmt_set_freq_base((uint32_t)BASE_FREQUENCY);
-
-    /* restart board */
-    enter_shutdown();
-    exit_shutdown();
-
-    /* soft core reset */
-    cmd_strobe(SPIRIT1_STROBE_SRES);
-
-    /* Configures the SPIRIT1 radio part */
-    SRadioInit x_radio_init = {
-            XTAL_OFFSET_PPM,
-            (uint32_t)BASE_FREQUENCY,
-            (uint32_t)CHANNEL_SPACE,
-            CHANNEL_NUMBER,
-            MODULATION_SELECT,
-            DATARATE,
-            (uint32_t)FREQ_DEVIATION,
-            (uint32_t)BANDWIDTH
-    };
-    radio_init(&x_radio_init);
-    /*180117 HJM : 송신 신호 세기 */
-    radio_set_pa_level_dbm(0,POWER_DBM);
-    radio_set_pa_level_max_index(0);
-
-    /* Configures the SPIRIT1 packet handler part*/
-    PktBasicInit x_basic_init = {
-            PREAMBLE_LENGTH,
-            SYNC_LENGTH,
-            SYNC_WORD,
-            LENGTH_TYPE,
-            LENGTH_WIDTH,
-            CRC_MODE,
-            CONTROL_LENGTH,
-            EN_ADDRESS,
-            EN_FEC,
-            EN_WHITENING
-    };
-    pkt_basic_init(&x_basic_init);
-
-    /* Enable the following interrupt sources, routed to GPIO */
-    irq_de_init(NULL);
-    irq_clear_status();
-    irq_set_status(TX_DATA_SENT, S_ENABLE);
-    irq_set_status(RX_DATA_READY,S_ENABLE);
-    irq_set_status(RX_DATA_DISC, S_ENABLE);
-    irq_set_status(VALID_SYNC, S_ENABLE);
-    irq_set_status(TX_FIFO_ERROR, S_ENABLE);
-    irq_set_status(RX_FIFO_ERROR, S_ENABLE);
-#ifndef RX_FIFO_THR_WA
-    irq_set_status(TX_FIFO_ALMOST_EMPTY, S_ENABLE);
-    irq_set_status(RX_FIFO_ALMOST_FULL, S_ENABLE);
-#endif // !RX_FIFO_THR_WA
-
-    /* Configure Spirit1 */
-    radio_persistent_rx(S_ENABLE);
-    qi_set_sqi_threshold(SQI_TH_0);
-    qi_sqi_check(S_ENABLE);
-    qi_set_rssi_threshold_dbm(CCA_THRESHOLD);	//180117 HJM : RSSI 전송 셋팅. 채널이 낮 으면 채널이 통화 중으로 표시, 현재 CCA_THRESHOLD => -98.0 설정 되어있음.
-    timer_set_rx_timeout_stop_condition(SQI_ABOVE_THRESHOLD);
-    timer_set_infinite_rx_timeout();
-    radio_afc_freeze_on_sync(S_ENABLE);
-    calibration_rco(S_ENABLE);
-
-    spirit_on = OFF;
-    CLEAR_TXBUF();
-    CLEAR_RXBUF();
-    _spirit_tx_started = false;
-    _is_receiving = false;
-
-    /* Configure the radio to route the IRQ signal to its GPIO 3 */
-    SGpioInit x_gpio_init = {
-            SPIRIT_GPIO_IRQ,
-            SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP,
-            SPIRIT_GPIO_DIG_OUT_IRQ
-    };
-    spirit_gpio_init(&x_gpio_init);
-
-    /* Setup CSMA/CA */
-    CsmaInit x_csma_init = {
-            S_ENABLE,         // enable persistent mode
-            TBIT_TIME_64,     // Tcca time
-            TCCA_TIME_3,      // Lcca length
-            5,                // max nr of backoffs (<8)
-            1,                // BU counter seed
-            8                 // BU prescaler
-    };
-    csma_ca_init(&x_csma_init);
-
-#ifdef USE_STANDBY_STATE
-    /* Puts the SPIRIT1 in STANDBY mode (125us -> rx/tx) */
-    cmd_strobe(SPIRIT1_STROBE_STANDBY);
-#endif // USE_STANDBY_STATE
-}
-
-
-
-
-
-
-
-
-static volatile int tx_fifo_remaining = 0;            // to be used in irq handler
-static volatile int tx_buffer_pos = 0;                // to be used in irq handler
-static const volatile uint8_t *tx_fifo_buffer = NULL; // to be used in irq handler
-int SimpleSpirit1::send(const void *payload, unsigned int payload_len, bool use_csma_ca) {
-    /* Checks if the payload length is supported */
-    if(payload_len > MAX_PACKET_LEN) {
-        return RADIO_TX_ERR;
-    }
-
-    disable_spirit_irq();
-
-    BUSYWAIT_UNTIL(SPIRIT1_STATUS() == SPIRIT1_STATE_RX, STATE_TIMEOUT);
-#ifndef NDEBUG
-    if((last_state & SPIRIT1_STATE_STATEBITS) != SPIRIT1_STATE_RX) {
-        debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, last_state>>1);
-    }
-#endif
-
-    /* Reset State to Ready */
-    set_ready_state();
-
-    cmd_strobe(SPIRIT1_STROBE_FTX); // flush TX FIFO buffer
-
-#ifndef NDEBUG
-    debug_if(!(linear_fifo_read_num_elements_tx_fifo() == 0), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-
-    pkt_basic_set_payload_length(payload_len); // set desired payload len
-
-    if(use_csma_ca) {
-        csma_ca_state(S_ENABLE); // enable CSMA/CA
-    }
-
-    /* Init buffer & number of bytes to be send */
-    tx_fifo_remaining = payload_len;
-    tx_fifo_buffer = (const uint8_t*)payload;
-
-    int8_t fifo_available = SPIRIT_MAX_FIFO_LEN; // fill-up whole fifo
-    int8_t to_send = (tx_fifo_remaining > fifo_available) ? fifo_available : tx_fifo_remaining;
-
-    tx_fifo_remaining -= to_send;
-
-    /* Fill FIFO Buffer */
-    if(to_send > 0) {
-        spi_write_linear_fifo(to_send, (uint8_t*)&tx_fifo_buffer[0]);
-    }
-
-    tx_buffer_pos = to_send;
-    _spirit_tx_started = true;
-
-    enable_spirit_irq();
-
-    /* Start transmitting */
-    cmd_strobe(SPIRIT1_STROBE_TX);
-
-    while(tx_fifo_remaining != 0); // wait until not everything is yet send (evtl. by irq handler)
-
-    BUSYWAIT_UNTIL(!_spirit_tx_started, STATE_TIMEOUT);
-#ifdef HEAVY_DEBUG
-    debug("\r\n%s (%d): state=%x, _spirit_tx_started=%d\r\n", __func__, __LINE__, SPIRIT1_STATUS()>>1, _spirit_tx_started);
-#endif
-
-    if(use_csma_ca) {
-        csma_ca_state(S_DISABLE); // disable CSMA/CA
-    }
-
-    cmd_strobe(SPIRIT1_STROBE_RX); // Return to RX state
-
-    disable_spirit_irq();
-    if(_spirit_tx_started) { // in case of state timeout
-        _spirit_tx_started = false;
-        enable_spirit_irq();
-        return RADIO_TX_ERR;
-    } else {
-        enable_spirit_irq();
-        return RADIO_TX_OK;
-    }
-}
-
-/** Set Ready State **/
-void SimpleSpirit1::set_ready_state(void) {
-    uint16_t state;
-
-    disable_spirit_irq();
-
-    _spirit_tx_started = false;
-    _is_receiving = false;
-    stop_rx_timeout();
-
-    cmd_strobe(SPIRIT1_STROBE_FRX);
-    CLEAR_RXBUF();
-    CLEAR_TXBUF();
-
-    state = SPIRIT1_STATUS();
-    if(state == SPIRIT1_STATE_STANDBY) {
-        cmd_strobe(SPIRIT1_STROBE_READY);
-    } else if(state == SPIRIT1_STATE_RX) {
-        cmd_strobe(SPIRIT1_STROBE_SABORT);
-    } else if(state != SPIRIT1_STATE_READY) {
-#ifndef NDEBUG
-        debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, state>>1);
-#endif
-    }
-
-    BUSYWAIT_UNTIL((SPIRIT1_STATUS() == SPIRIT1_STATE_READY) && ((last_state & XO_ON) == XO_ON), STATE_TIMEOUT);
-    if(last_state != (SPIRIT1_STATE_READY | XO_ON)) {
-        error("\r\nSpirit1: failed to become ready (%x) => pls. reset!\r\n", last_state);
-        enable_spirit_irq();
-        return;
-    }
-
-    irq_clear_status();
-
-    enable_spirit_irq();
-}
-
-int SimpleSpirit1::off(void) {
-    if(spirit_on == ON) {
-        /* Disables the mcu to get IRQ from the SPIRIT1 */
-        disable_spirit_irq();
-
-        /* first stop rx/tx */
-        set_ready_state();
-
-#ifdef USE_STANDBY_STATE
-        /* Puts the SPIRIT1 in STANDBY */
-        cmd_strobe(SPIRIT1_STROBE_STANDBY);
-        BUSYWAIT_UNTIL(SPIRIT1_STATUS() == SPIRIT1_STATE_STANDBY, STATE_TIMEOUT);
-        if((last_state & SPIRIT1_STATE_STATEBITS) != SPIRIT1_STATE_STANDBY) {
-            error("\r\nSpirit1: failed to enter standby (%x)\r\n", last_state>>1);
-            return 1;
-        }
-#endif // USE_STANDBY_STATE
-
-        spirit_on = OFF;
-        _nr_of_irq_disables = 1;
-    }
-    return 0;
-}
-
-int SimpleSpirit1::on(void) {
-    if(spirit_on == OFF) {
-        set_ready_state();
-
-        /* now we go to Rx */
-        cmd_strobe(SPIRIT1_STROBE_RX);
-
-        BUSYWAIT_UNTIL(SPIRIT1_STATUS() == SPIRIT1_STATE_RX, STATE_TIMEOUT);
-        if((last_state & SPIRIT1_STATE_STATEBITS) != SPIRIT1_STATE_RX) {
-            error("\r\nSpirit1: failed to enter rx (%x) => retry\r\n", last_state>>1);
-        }
-
-        /* Enables the mcu to get IRQ from the SPIRIT1 */
-        spirit_on = ON;
-#ifndef NDEBUG
-        debug_if(!(_nr_of_irq_disables == 1), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-        enable_spirit_irq();
-    }
-
-#ifndef NDEBUG
-    if(SPIRIT1_STATUS() != SPIRIT1_STATE_RX) {
-        debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, last_state>>1);
-    }
-#endif
-
-    return 0;
-}
-
-uint8_t SimpleSpirit1::refresh_state(void) {
-    uint8_t mcstate;
-
-    SpiritSpiReadRegisters(MC_STATE0_BASE, 1, &mcstate);
-
-    return mcstate;
-}
-
-int SimpleSpirit1::read(void *buf, unsigned int bufsize)
-{
-    disable_spirit_irq();
-
-    /* Checks if the RX buffer is empty */
-    if(IS_RXBUF_EMPTY()) {
-#ifndef NDEBUG
-        debug("\r\nBuffer is empty\r\n");
-#endif
-        set_ready_state();
-
-        cmd_strobe(SPIRIT1_STROBE_RX);
-        BUSYWAIT_UNTIL(SPIRIT1_STATUS() == SPIRIT1_STATE_RX, STATE_TIMEOUT);
-        enable_spirit_irq();
-        return 0;
-    }
-
-    if(bufsize < spirit_rx_len) {
-        enable_spirit_irq();
-
-        /* If buf has the correct size */
-#ifndef NDEBUG
-        debug("\r\nTOO SMALL BUF\r\n");
-#endif
-        return 0;
-    } else {
-        /* Copies the packet received */
-        memcpy(buf, spirit_rx_buf, spirit_rx_len);
-
-        bufsize = spirit_rx_len;
-        CLEAR_RXBUF();
-
-        enable_spirit_irq();
-
-        return bufsize;
-    }
-
-}
-
-int SimpleSpirit1::channel_clear(void)
-{
-    float rssi_value;
-    /* Local variable used to memorize the SPIRIT1 state */
-    uint8_t spirit_state = ON;
-
-    if(spirit_on == OFF) {
-        /* Wakes up the SPIRIT1 */
-        on();
-        spirit_state = OFF;
-    }
-
-#ifndef NDEBUG
-    if(SPIRIT1_STATUS() != SPIRIT1_STATE_RX) {
-        debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, last_state>>1);
-    }
-#endif
-
-    disable_spirit_irq();
-
-    /* Reset State to Ready */
-    set_ready_state();
-
-    /* Stores the RSSI value */
-    rssi_value = qi_get_rssi_dbm();
-
-    enable_spirit_irq();
-
-    /* Puts the SPIRIT1 in its previous state */
-    if(spirit_state==OFF) {
-        off();
-#ifndef NDEBUG
-#ifdef USE_STANDBY_STATE
-        if(SPIRIT1_STATUS() != SPIRIT1_STATE_STANDBY) {
-#else
-            if(SPIRIT1_STATUS() != SPIRIT1_STATE_READY) {
-#endif
-                debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, last_state>>1);
-            }
-#endif
-        } else {
-            disable_spirit_irq();
-
-            set_ready_state();
-
-            cmd_strobe(SPIRIT1_STROBE_RX);
-            BUSYWAIT_UNTIL(SPIRIT1_STATUS() == SPIRIT1_STATE_RX, STATE_TIMEOUT);
-            if((last_state & SPIRIT1_STATE_STATEBITS) != SPIRIT1_STATE_RX) {
-                error("\r\nSpirit1: (#2) failed to enter rx (%x) => retry\r\n", last_state>>1);
-            }
-
-            enable_spirit_irq();
-
-#ifndef NDEBUG
-            if(SPIRIT1_STATUS() != SPIRIT1_STATE_RX) {
-                debug("\r\nAssert failed in: %s (%d): state=%x\r\n", __func__, __LINE__, last_state>>1);
-            }
-#endif
-        }
-
-        /* Checks the RSSI value with the threshold */
-        if(rssi_value<CCA_THRESHOLD) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    int SimpleSpirit1::get_pending_packet(void)
-    {
-        return !IS_RXBUF_EMPTY();
-    }
-
-    /** Spirit Irq Callback **/
-    /* betzw - TODO: use threaded interrupt handling when `MBED_CONF_RTOS_PRESENT` is defined (see `atmel-rf-driver`) */
-    void SimpleSpirit1::IrqHandler() {
-        st_lib_spirit_irqs x_irq_status;
-
-        /* get interrupt source from radio */
-        irq_get_status(&x_irq_status);
-
-        /* The IRQ_TX_DATA_SENT notifies the packet has been sent. Puts the SPIRIT1 in RX */
-        if(x_irq_status.IRQ_TX_DATA_SENT) { /* betzw - NOTE: MUST be handled before `IRQ_RX_DATA_READY` for Nanostack integration!
-	                                                     Logically, Nanostack only expects the "DONE" after "SUCCESS" (if it gets
-	                                                     DONE before SUCCESS, it assumes you're not going to bother to send SUCCESS).
-         */
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug_if(!((*tmp) & IRQ_TX_DATA_SENT_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-            debug_if(tx_fifo_remaining != 0, "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-
-            if(_spirit_tx_started) {
-                _spirit_tx_started = false;
-
-                /* call user callback */
-                if(_current_irq_callback) {
-                    _current_irq_callback(TX_DONE);
-                }
-            }
-
-            /* Disable handling of other TX flags */
-            x_irq_status.IRQ_TX_FIFO_ALMOST_EMPTY = S_RESET;
-            tx_fifo_buffer = NULL;
-        }
-
-#ifndef RX_FIFO_THR_WA
-        /* The IRQ_TX_FIFO_ALMOST_EMPTY notifies an nearly empty TX fifo */
-        if(x_irq_status.IRQ_TX_FIFO_ALMOST_EMPTY) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug_if(!((*tmp) & IRQ_TX_FIFO_ALMOST_EMPTY_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-            debug_if(!_spirit_tx_started, "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-            debug_if(tx_fifo_buffer == NULL, "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-
-            int8_t fifo_available = SPIRIT_MAX_FIFO_LEN/2; // fill-up half fifo
-            int8_t to_send = (tx_fifo_remaining > fifo_available) ? fifo_available : tx_fifo_remaining;
-
-            tx_fifo_remaining -= to_send;
-
-            /* Fill FIFO Buffer */
-            if(to_send > 0) {
-                spi_write_linear_fifo(to_send, (uint8_t*)&tx_fifo_buffer[tx_buffer_pos]);
-            }
-            tx_buffer_pos += to_send;
-        }
-#endif // !RX_FIFO_THR_WA
-
-        /* TX FIFO underflow/overflow error */
-        if(x_irq_status.IRQ_TX_FIFO_ERROR) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-            debug_if(!((*tmp) & IRQ_TX_FIFO_ERROR_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-            if(_spirit_tx_started) {
-                _spirit_tx_started = false;
-                /* call user callback */
-                if(_current_irq_callback) {
-                    _current_irq_callback(TX_ERR);
-                }
-            }
-
-            /* reset data still to be sent */
-            tx_fifo_remaining = 0;
-        }
-
-        /* The IRQ_RX_DATA_READY notifies a new packet arrived */
-        if(x_irq_status.IRQ_RX_DATA_READY) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug_if(!((*tmp) & IRQ_RX_DATA_READY_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-
-            if(!_is_receiving) { // spurious irq?!? (betzw: see comments on macro 'RX_FIFO_THR_WA'!)
-#ifdef HEAVY_DEBUG
-                debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-#endif
-            } else {
-                _is_receiving = false; // Finished receiving
-                stop_rx_timeout();
-
-                spirit_rx_len = pkt_basic_get_received_pkt_length();
-
-#ifdef DEBUG_IRQ
-                debug_if(!(spirit_rx_len <= MAX_PACKET_LEN), "\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-#endif
-
-                if(spirit_rx_len <= MAX_PACKET_LEN) {
-                    uint8_t to_receive = spirit_rx_len - _spirit_rx_pos;
-                    if(to_receive > 0) {
-                        spi_read_linear_fifo(to_receive, &spirit_rx_buf[_spirit_rx_pos]);
-                        _spirit_rx_pos += to_receive;
-                    }
-                }
-
-                cmd_strobe(SPIRIT1_STROBE_FRX);
-
-                last_rssi = qi_get_rssi(); //MGR
-                last_sqi  = qi_get_sqi();  //MGR
-
-                /* call user callback */
-                if((_spirit_rx_pos == spirit_rx_len) && _current_irq_callback) {
-                    _current_irq_callback(RX_DONE);
-                }
-
-                /* Disable handling of other RX flags */
-                x_irq_status.IRQ_RX_FIFO_ALMOST_FULL = S_RESET;
-            }
-        }
-
-#ifndef RX_FIFO_THR_WA
-        /* RX FIFO almost full */
-        if(x_irq_status.IRQ_RX_FIFO_ALMOST_FULL) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug_if(!((*tmp) & IRQ_RX_FIFO_ALMOST_FULL_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-            if(!_is_receiving) { // spurious irq?!?
-#ifdef DEBUG_IRQ
-                debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-#endif
-            } else {
-                uint8_t fifo_available = linear_fifo_read_num_elements_rx_fifo();
-                if((fifo_available + _spirit_rx_pos) <= MAX_PACKET_LEN) {
-                    spi_read_linear_fifo(fifo_available, &spirit_rx_buf[_spirit_rx_pos]);
-                    _spirit_rx_pos += fifo_available;
-                } else {
-#ifdef DEBUG_IRQ
-                    debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-#endif
-                }
-            }
-        }
-#endif // !RX_FIFO_THR_WA
-
-        /* Reception errors */
-        if((x_irq_status.IRQ_RX_FIFO_ERROR) || (x_irq_status.IRQ_RX_DATA_DISC)) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-            debug_if(!((*tmp) & (IRQ_RX_FIFO_ERROR_MASK | IRQ_RX_DATA_DISC_MASK)), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-            rx_timeout_handler();
-            if(_spirit_tx_started) {
-                _spirit_tx_started = false;
-                /* call user callback */
-                if(_current_irq_callback) {
-                    _current_irq_callback(TX_ERR);
-                }
-            }
-        }
-
-        /* The IRQ_VALID_SYNC is used to notify a new packet is coming */
-        if(x_irq_status.IRQ_VALID_SYNC) {
-#ifdef DEBUG_IRQ
-            uint32_t *tmp = (uint32_t*)&x_irq_status;
-            debug_if(!((*tmp) & IRQ_VALID_SYNC_MASK), "\r\nAssert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-            /* betzw - NOTE: there is a race condition between Spirit1 receiving packets and
-             *               the MCU trying to send a packet, which gets resolved in favor of
-             *               sending.
-             */
-            if(_spirit_tx_started) {
-#ifdef DEBUG_IRQ
-                debug("\r\n%s (%d): irq=%x\r\n", __func__, __LINE__, *tmp);
-#endif
-            } else {
-                _is_receiving = true;
-                start_rx_timeout();
-            }
-        }
-    }
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/README.md
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/README.md	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-Getting Started with Contiki for STM32 Nucleo equipped with sub-1GHz SPIRIT1 expansion boards
-=============================================================================================
-
-This guide explains how to get started with the STM32 Nucleo and expansion boards port to Contiki.
-
-Port Feature
-============
-
-The port supports the following boards from ST:
--    NUCLEO-L152RE board, based on the STM32L152RET6 ultra-low power microcontroller
--	X-NUCLEO-IDS01A4 based on sub-1GHz SPSGRF-868 SPIRIT1 module (operating at 868 MHz)
--	X-NUCLEO-IDS01A5 based on sub-1GHz SPSGRF-915 SPIRIT1 module (operating at 915 MHz)
--   X-NUCLEO-IKS01A1 featuring motion MEMS and environmental sensors (optional)
-
-The following drivers are included:
-- LEDs and buttons (user, reset)
-- USB
-- SPIRIT1 sub-1GHz transceiver  
-- HTS221, LIS3MDL, LPS25HB, LSM6DS0 sensors
-
-
-Hardware Requirements
-=====================
-
-* NUCLEO-L152RE development board
-
- >The NUCLEO-L152RE board belongs to the STM32 Nucleo family.
-It features an STM32L152RET6 ultra-low power microcontroller based on ARM Cortex M3 MCU.
-Detailed information on the NUCLEO-L152RE development board can be found at:
-http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260002
-
-
-* X-NUCLEO-IDS01Ax sub-1GHz expansion board
-
- >The X-NUCLEO-IDS01A4 and X-NUCLEO-IDS01A5 are STM32 Nucleo expansion boards that use 
-the module SPSGRF-868 or SPSGRF-915 based on SPIRIT1 low data rate, low power sub-1 GHz transceiver.
-
- >The user can select the X-NUCLEO-IDS01A4 board to operate the SPIRIT1 transceiver at 868MHz or the X-NUCLEO-IDS01A5 board to operate the SPIRIT1 transceiver at 915MHz.
-
- >Detailed information on the X-NUCLEO-IDS01A4 expansion board can be found at:
-http://www.st.com/web/catalog/tools/FM146/CL2167/SC2006/PF261982
-
- >Detailed information on the X-NUCLEO-IDS01A5 expansion board can be found at:
-http://www.st.com/web/catalog/tools/FM146/CL2167/SC2006/PF261983 
-
- >Detailed information on the SPIRIT1 sub-1GHz transceiver can be found at:
-http://www.st.com/web/catalog/sense_power/FM2185/SC1845/PF253167
-
-* X-NUCLEO-IKS01A1, motion MEMS and environmental sensors expansion board (OPTIONAL)
-
- >The X-NUCLEO-IKS01A1 is a motion MEMS and environmental sensor evaluation board.
-The use of this board is optional in the stm32nucleo-spirit1 Contiki platform. 
-
- >Detailed information on the X-NUCLEO-IKS01A1 expansion board can be found at:
-http://www.st.com/web/catalog/tools/FM146/CL2167/SC2006/PF261191
-
-
-* USB type A to Mini-B USB cable, to connect the STM32 Nucleo board to the PC
-
-Software Requirements
-=====================
-
-The following software are needed:
-
-* ST port of Contiki for STM32 Nucleo and expansion boards. 
- 
- >The port is automatically installed when both the Contiki and the submodule repository are cloned: the former hosts the Contiki distribution and the ST platform interface, the latter hosts the actual library. The following commands are needed to download the full porting: 
-
-	git clone https://github.com/STclab/contiki.git
-	cd contiki/
-	git checkout stm32nucleo-spirit1
-	git submodule init
-	git submodule update
-
-
-Note: the first and third steps are required only if using the STclab GitHub repository, they won't be needed any more once the Pull Request is accepted.
-
-The platform name is: stm32nucleo-spirit1
-
-* A toolchain to build the firmware: The port has been developed and tested with GNU Tools 
-for ARM Embedded Processors.
- >The toolchain can be found at: https://launchpad.net/gcc-arm-embedded
-The port was developed and tested using this version: gcc-arm-none-eabi v4.8.3
-
-
-Examples
-========
-
-The following examples have been successfully tested:
-
-* examples/stm32nucleo-spirit1/sensor-demo
-* examples/ipv6/simple-udp-rpl (multicast, rpl-border-router, simple-udp-rpl)
-
-
-Build an example
-================
-In order to build an example go to the selected example directory (see a list of tested
-examples in the previous section).
-
-For example, go to examples/ipv6/simple-udp-rpl directory.
-
-	
-If the X-NUCLEO-IDS01A4 sub-1GHz RF expansion board is used, the following must be run:
-
-	make TARGET=stm32nucleo-spirit1 USE_SUBGHZ_BOARD=IDS01A4 clean
-	make TARGET=stm32nucleo-spirit1 USE_SUBGHZ_BOARD=IDS01A4
-
-If the X-NUCLEO-IDS01A5 sub-1GHz RF expansion board is used, the following must be run:
-
-	make TARGET=stm32nucleo-spirit1 USE_SUBGHZ_BOARD=IDS01A5 clean
-	make TARGET=stm32nucleo-spirit1 USE_SUBGHZ_BOARD=IDS01A5
-	
-	
-This will create executables for UDP sender and receiver nodes.
-
-In order to generate binary files that can be flashed on the STM32 Nucleo the following command must be run:
-
-	arm-none-eabi-objcopy -O binary unicast-sender.stm32nucleo-spirit1 unicast-sender.bin
-	arm-none-eabi-objcopy -O binary unicast-receiver.stm32nucleo-spirit1 unicast-receiver.bin
-
-These executables can be programmed on the nodes using the procedure described hereafter.
-
-
-In case you need to build an example that uses the additional sensors expansion board 
-(for example, considering a system made of NUCLEO-L152RE, X-NUCLEO-IDS01A4 and X-NUCLEO-IKS01A1)
-then the command to be run would be:
-
-	make TARGET=stm32nucleo-spirit1 USE_SUBGHZ_BOARD=IDS01A4 USE_SENSOR_BOARD=1
-
-System setup
-============ 
-
-1. Check that the jumper on the J1 connector on the X-NUCLEO-IDS01Ax expansion board is connected. 
-This jumper provides the required voltage to the devices on the board.
-
-2. Connect the X-NUCLEO-IDS01Ax board to the STM32 Nucleo board (NUCLEO-L152RE) from the top.
-
-3. If the optional X-NUCLEO-IKS01A1 board is used, connect it on top of the X-NUCLEO-IDS01Ax board.
-
-4. Power the STM32 Nucleo board using the Mini-B USB cable connected to the PC.
-
-5. Program the firmware on the STM32 Nucleo board. 
-This can be done by copying the binary file on the USB mass storage that is 
-automatically created when plugging the STM32 Nucleo board to the PC.
-
-6. Reset the MCU by using the reset button on the STM32 Nucleo board
-
-
-
-
-
-
-
-
-
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/contiki-conf.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/contiki-conf.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-/**
-******************************************************************************
-* @file    platform/stm32nucleo-spirit1/contiki-conf.h
-* @author  System LAB 
-* @version V1.0.0
-* @date    17-May-2015
-* @brief   Contiki configuration parameters
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*      without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/
-/*---------------------------------------------------------------------------*/
-#ifndef __CONTIKI_CONF_H__
-#define __CONTIKI_CONF_H__
-/*---------------------------------------------------------------------------*/
-#include "platform-conf.h"
-//#include "project-conf.h"
-/*---------------------------------------------------------------------------*/
-#define SLIP_BRIDGE_CONF_NO_PUTCHAR 1
-
-#define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 8
-#define NULLRDC_CONF_802154_AUTOACK 0
-#define NETSTACK_CONF_FRAMER  framer_802154
-#define NETSTACK_CONF_NETWORK sicslowpan_driver
-
-#undef NETSTACK_CONF_RDC
-#define NETSTACK_CONF_RDC     nullrdc_driver
-#define NETSTACK_RDC_HEADER_LEN 0
-
-#undef NETSTACK_CONF_MAC
-#define NETSTACK_CONF_MAC csma_driver
-#define NETSTACK_MAC_HEADER_LEN 0
-
-#define SICSLOWPAN_CONF_MAC_MAX_PAYLOAD \
-  (NETSTACK_RADIO_MAX_PAYLOAD_LEN - NETSTACK_MAC_HEADER_LEN - \
-   NETSTACK_RDC_HEADER_LEN )
-
-#define RIMESTATS_CONF_ENABLED                 0
-#define RIMESTATS_CONF_ON                      0
-
-
-/* Network setup for IPv6 */
-
-#define CXMAC_CONF_ANNOUNCEMENTS         0
-
-
-/* A trick to resolve a compilation error with IAR. */
-#ifdef __ICCARM__
-#define UIP_CONF_DS6_AADDR_NBU              1
-#endif
-
-/* radio driver blocks until ACK is received */
-#define NULLRDC_CONF_ACK_WAIT_TIME          (0)
-#define CONTIKIMAC_CONF_BROADCAST_RATE_LIMIT 0
-#define IEEE802154_CONF_PANID       0xABCD
-
-#define AODV_COMPLIANCE
-
-#define WITH_ASCII 1
-
-#define PROCESS_CONF_NUMEVENTS 8
-#define PROCESS_CONF_STATS 1
-/*#define PROCESS_CONF_FASTPOLL    4*/
-
-
-#define LINKADDR_CONF_SIZE              8
-
-#define UIP_CONF_LL_802154              1
-#define UIP_CONF_LLH_LEN                0
-
-#define UIP_CONF_ROUTER                 1
-
-/* configure number of neighbors and routes */
-#ifndef UIP_CONF_DS6_ROUTE_NBU
-#define UIP_CONF_DS6_ROUTE_NBU   30
-#endif /* UIP_CONF_DS6_ROUTE_NBU */
-
-#ifndef UIP_CONF_ND6_SEND_RA
-#define UIP_CONF_ND6_SEND_RA    0
-#endif
-#define UIP_CONF_ND6_REACHABLE_TIME    600000 //90000// 600000 
-#define UIP_CONF_ND6_RETRANS_TIMER      10000
-
-
-#define UIP_CONF_IPV6                   1
-#ifndef UIP_CONF_IPV6_QUEUE_PKT
-#define UIP_CONF_IPV6_QUEUE_PKT         0
-#endif /* UIP_CONF_IPV6_QUEUE_PKT */
-#define UIP_CONF_IP_FORWARD             0
-#ifndef UIP_CONF_BUFFER_SIZE
-//#define UIP_CONF_BUFFER_SIZE    280
-#define UIP_CONF_BUFFER_SIZE    600
-#endif
-
-#define SICSLOWPAN_CONF_MAXAGE                  4
-#define SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS       2
-
-
-#ifndef SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS
-#define SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS   5
-#endif /* SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS */
-
-#define UIP_CONF_ICMP_DEST_UNREACH 1
-
-#define UIP_CONF_DHCP_LIGHT
-#define UIP_CONF_LLH_LEN         0
-#ifndef UIP_CONF_RECEIVE_WINDOW
-#define UIP_CONF_RECEIVE_WINDOW  150
-#endif
-#ifndef UIP_CONF_TCP_MSS
-#define UIP_CONF_TCP_MSS         UIP_CONF_RECEIVE_WINDOW
-#endif
-#define UIP_CONF_MAX_CONNECTIONS 4
-#define UIP_CONF_MAX_LISTENPORTS 8
-#define UIP_CONF_UDP_CONNS       12
-#define UIP_CONF_FWCACHE_SIZE    30
-#define UIP_CONF_BROADCAST       1
-#define UIP_ARCH_IPCHKSUM        0
-#define UIP_CONF_UDP             1
-#define UIP_CONF_UDP_CHECKSUMS   1
-#define UIP_CONF_TCP		 1
-/*---------------------------------------------------------------------------*/
-/* include the project config */
-/* PROJECT_CONF_H might be defined in the project Makefile */
-#ifdef PROJECT_CONF_H
-#include "project-conf.h"
-#endif /* PROJECT_CONF_H */
-/*---------------------------------------------------------------------------*/
-#endif /* CONTIKI_CONF_H */
-/*---------------------------------------------------------------------------*/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/hw-config.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/hw-config.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
- /**
-  ******************************************************************************
-  * @file    hw-config.h
-  * @author  System LAB 
- * @version V1.0.0
- * @date    17-May-2015
-  * @brief   Header file for Hardware Configuration & Setup
-  ******************************************************************************
-  * @attention
-  *
- * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-  *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
-  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-/*---------------------------------------------------------------------------*/
-#ifndef __HW_CONFIG_H
-#define __HW_CONFIG_H
-/*---------------------------------------------------------------------------*/
-#include "stm32l-spirit1-config.h"
-/*---------------------------------------------------------------------------*/
-#define UART_RxBufferSize    512
-/*---------------------------------------------------------------------------*/    
-#define I2Cx                            I2C1
-#define I2Cx_CLK_ENABLE()               __I2C1_CLK_ENABLE()
-#define I2Cx_SDA_GPIO_CLK_ENABLE()      __GPIOB_CLK_ENABLE()
-#define I2Cx_SCL_GPIO_CLK_ENABLE()      __GPIOB_CLK_ENABLE() 
-/*---------------------------------------------------------------------------*/
-#define I2Cx_FORCE_RESET()              __I2C1_FORCE_RESET()
-#define I2Cx_RELEASE_RESET()            __I2C1_RELEASE_RESET()
-/*---------------------------------------------------------------------------*/
-/* Definition for I2Cx Pins */
-#define I2Cx_SCL_PIN                    GPIO_PIN_8
-#define I2Cx_SCL_GPIO_PORT              GPIOB
-#define I2Cx_SDA_PIN                    GPIO_PIN_9
-#define I2Cx_SDA_GPIO_PORT              GPIOB
-#define I2Cx_SCL_SDA_AF                 GPIO_AF4_I2C1
-
-/* Definition for I2Cx's NVIC */
-#define I2Cx_EV_IRQn                    I2C1_EV_IRQn
-#define I2Cx_ER_IRQn                    I2C1_ER_IRQn
-#define I2Cx_EV_IRQHandler              I2C1_EV_IRQHandler
-#define I2Cx_ER_IRQHandler              I2C1_ER_IRQHandler
-
-  
-#define I2Cx                            I2C1
-#define I2Cx_CLK_ENABLE()               __I2C1_CLK_ENABLE()
-#define I2Cx_SDA_GPIO_CLK_ENABLE()      __GPIOB_CLK_ENABLE()
-#define I2Cx_SCL_GPIO_CLK_ENABLE()      __GPIOB_CLK_ENABLE() 
-
-#define I2Cx_FORCE_RESET()              __I2C1_FORCE_RESET()
-#define I2Cx_RELEASE_RESET()            __I2C1_RELEASE_RESET()
-
-/* Definition for I2Cx Pins */
-#define I2Cx_SCL_PIN                    GPIO_PIN_8
-#define I2Cx_SCL_GPIO_PORT              GPIOB
-#define I2Cx_SDA_PIN                    GPIO_PIN_9
-#define I2Cx_SDA_GPIO_PORT              GPIOB
-#define I2Cx_SCL_SDA_AF                 GPIO_AF4_I2C1
-
-/* Definition for I2Cx's NVIC */
-#define I2Cx_EV_IRQn                    I2C1_EV_IRQn
-#define I2Cx_ER_IRQn                    I2C1_ER_IRQn
-#define I2Cx_EV_IRQHandler              I2C1_EV_IRQHandler
-#define I2Cx_ER_IRQHandler              I2C1_ER_IRQHandler
-
-/* User can use this section to tailor USARTx/UARTx instance used and associated
-   resources */
-/* Definition for USARTx clock resources */
-#define USARTx                           USART2
-#define USARTx_CLK_ENABLE()              __USART2_CLK_ENABLE();
-#define DMAx_CLK_ENABLE()                __DMA1_CLK_ENABLE()
-#define USARTx_RX_GPIO_CLK_ENABLE()      __GPIOA_CLK_ENABLE()
-#define USARTx_TX_GPIO_CLK_ENABLE()      __GPIOA_CLK_ENABLE()
-
-#define USARTx_FORCE_RESET()             __USART2_FORCE_RESET()
-#define USARTx_RELEASE_RESET()           __USART2_RELEASE_RESET()
-
-/* Definition for USARTx Pins */
-#define USARTx_TX_PIN                    GPIO_PIN_2
-#define USARTx_TX_GPIO_PORT              GPIOA
-
-#define USARTx_RX_PIN                    GPIO_PIN_3
-#define USARTx_RX_GPIO_PORT              GPIOA
-
-     /* Definition for USARTx's NVIC */
-#define USARTx_IRQn                      USART2_IRQn
-#define USARTx_IRQHandler                USART2_IRQHandler
-
-#define USARTx_TX_AF                     GPIO_AF7_USART2 
-#define USARTx_RX_AF                     GPIO_AF7_USART2
-
-
-  /* Enable sensor mask */
-#define PRESSURE_SENSOR                         0x00000001
-#define TEMPERATURE_SENSOR                      0x00000002
-#define HUMIDITY_SENSOR                         0x00000004
-#define UV_SENSOR                               0x00000008  
-#define ACCELEROMETER_SENSOR                    0x00000010  
-#define GYROSCOPE_SENSOR                        0x00000020
-#define MAGNETIC_SENSOR                         0x00000040      
-/*---------------------------------------------------------------------------*/
-#endif  /*__HW_CONFIG_H*/
-/*---------------------------------------------------------------------------*/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/ip64-conf.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/ip64-conf.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2012, Thingsquare, http://www.thingsquare.com/.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-#ifndef IP64_CONF_H
-#define IP64_CONF_H
-
-/*
-#include "ip64-tap-driver.h"
-#include "ip64-eth-interface.h"
-
-#define IP64_CONF_UIP_FALLBACK_INTERFACE ip64_eth_interface
-#define IP64_CONF_INPUT                  ip64_eth_interface_input
-
-#define IP64_CONF_ETH_DRIVER             ip64_tap_driver
-
-
-#undef UIP_FALLBACK_INTERFACE
-#define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface
-*/
-#ifdef MY_DRIVERS
-#include <my_wifi_interface.h>
-#include <my_wifi_driver.h>
-
-#define IP64_CONF_UIP_FALLBACK_INTERFACE_SLIP 0
-#define IP64_CONF_UIP_FALLBACK_INTERFACE my_wifi_interface
-#define IP64_CONF_INPUT                  my_wifi_interface_input
-#define IP64_CONF_ETH_DRIVER             my_wifi_driver
-
-#undef UIP_CONF_ND6_RA_RDNSS
-#define UIP_CONF_ND6_RA_RDNSS 1
-
-#undef UIP_CONF_ND6_SEND_RA
-#define UIP_CONF_ND6_SEND_RA  1
-
-#undef UIP_CONF_ROUTER
-#define UIP_CONF_ROUTER       1
-
-#ifndef QUEUEBUF_CONF_NUM
-#define QUEUEBUF_CONF_NUM          16
-#endif
-
-
-#else
-
-
-#include "net/ip64/ip64-slip-interface.h"
-#include "net/ip64/ip64-null-driver.h"
-
-#define IP64_CONF_UIP_FALLBACK_INTERFACE_SLIP 1
-#define IP64_CONF_UIP_FALLBACK_INTERFACE ip64_slip_interface
-#define IP64_CONF_INPUT                  ip64_slip_interface_input
-#define IP64_CONF_ETH_DRIVER             ip64_null_driver
-
-#undef UIP_CONF_ND6_RA_RDNSS
-#define UIP_CONF_ND6_RA_RDNSS 1
-
-#undef UIP_CONF_ND6_SEND_RA
-#define UIP_CONF_ND6_SEND_RA  1
-
-#undef UIP_CONF_ROUTER
-#define UIP_CONF_ROUTER       1
-
-#ifndef QUEUEBUF_CONF_NUM
-#define QUEUEBUF_CONF_NUM          16
-#endif
-
-#endif//MY_DRIVERS
-
-#endif /* IP64_CONF_H */
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/platform-conf.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/platform-conf.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-/**
-******************************************************************************
-* @file    platform/stm32nucleo-spirit1/platform-conf.h
-* @author  System LAB 
-* @version V1.0.0
-* @date    17-May-2015
-* @brief   Configuration parameters
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*      without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/
-/*---------------------------------------------------------------------------*/
-/**
- * \addtogroup stm32nucleo-spirit1
- * @{
- *
- * \defgroup stm32nucleo-spirit1-peripherals User Button on STM32 Nucleo
- *
- * Defines some of the platforms capabilities
- * @{
- *
- * \file
- * Header file for the stm32nucleo-spirit1 platform configuration
- */
-/*---------------------------------------------------------------------------*/
-#ifndef __PLATFORM_CONF_H__
-#define __PLATFORM_CONF_H__
-/*---------------------------------------------------------------------------*/
-#ifdef USE_STM32L1XX_NUCLEO
-#include <inttypes.h>
-#include <string.h>
-/*---------------------------------------------------------------------------*/
-#define PLATFORM_HAS_LEDS 1
-#define PLATFORM_HAS_BUTTON 1
-#define PLATFORM_HAS_RADIO 1
-
-#define LEDS_GREEN  1 /*Nucleo LED*/
-#define LEDS_RED    2 /*SPIRIT1 LED*/
-
-#ifdef COMPILE_SENSORS
-#define LEDS_CONF_ALL 1 /*Can't use SPIRIT1 LED in this case*/
-#else
-#define LEDS_CONF_ALL 3 /*No sensors -> we can use SPIRIT1 LED in this case*/
-#endif /*COMPILE_SENSORS*/
-/*---------------------------------------------------------------------------*/
-#define F_CPU                   32000000ul
-#define RTIMER_ARCH_SECOND              32768   
-#define PRESCALER       ((F_CPU / (RTIMER_ARCH_SECOND*2)))
-
-#define UART1_CONF_TX_WITH_INTERRUPT        0
-#define WITH_SERIAL_LINE_INPUT              1
-#define TELNETD_CONF_NUMLINES               6
-#define NETSTACK_CONF_RADIO                 spirit_radio_driver
-#define NETSTACK_RADIO_MAX_PAYLOAD_LEN      96 /* spirit1-config.h */
-
-#if WITH_IP64
-#include "ip64-conf.h"
-#define WITH_SLIP 1
-#ifndef UIP_FALLBACK_INTERFACE
-#define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface
-#endif
-#endif /* WITH_IP64 */
-
-/*---------------------------------------------------------------------------*/
-/* define ticks/second for slow and fast clocks. Notice that these should be a
-  power of two, eg 64,128,256,512 etc, for efficiency as POT's can be optimized
-  well. */
-#define CLOCK_CONF_SECOND             128
-#define RELOAD_VALUE        ((F_CPU/CLOCK_CONF_SECOND) - 1)
-/* One tick: 62.5 ms */
-
-#define RTIMER_CLOCK_LT(a,b)     ((signed short)((a)-(b)) < 0)
-/*---------------------------------------------------------------------------*/
-typedef unsigned long clock_time_t;     
-typedef unsigned long long rtimer_clock_t; 
-/*---------------------------------------------------------------------------*/
-#define CC_CONF_REGISTER_ARGS          0
-#define CC_CONF_FUNCTION_POINTER_ARGS  1
-#define CC_CONF_FASTCALL
-#define CC_CONF_VA_ARGS                1
-#define CC_CONF_INLINE                 inline
-
-#define CCIF
-#define CLIF
-/*---------------------------------------------------------------------------*/
-typedef uint8_t         u8_t;
-typedef uint16_t        u16_t;
-typedef uint32_t        u32_t;
-typedef  int32_t        s32_t;
-typedef unsigned short  uip_stats_t;
-/*---------------------------------------------------------------------------*/
-#define MULTICHAN_CONF_SET_CHANNEL(x)
-#define MULTICHAN_CONF_READ_RSSI(x) 0
-/*---------------------------------------------------------------------------*/
-#endif//USE_STM32L1XX_NUCLEO
-
-#ifdef USE_STM32F4XX_NUCLEO
-#include <inttypes.h>
-#include <string.h>
-#include "main.h"
-/*---------------------------------------------------------------------------*/
-#define PLATFORM_HAS_LEDS 1
-#define PLATFORM_HAS_BUTTON 1
-#define PLATFORM_HAS_RADIO 1
-
-#define LEDS_GREEN  1 /*Nucleo LED*/
-#define LEDS_RED    2 /*SPIRIT1 LED*/
-
-#ifdef COMPILE_SENSORS
-#define LEDS_CONF_ALL 1 /*Can't use SPIRIT1 LED in this case*/
-#else
-#define LEDS_CONF_ALL 3 /*No sensors -> we can use SPIRIT1 LED in this case*/
-#endif /*COMPILE_SENSORS*/
-/*---------------------------------------------------------------------------*/
-#define F_CPU                   	84000000ul
-#define RTIMER_ARCH_SECOND          96000//32678
-//#define PRESCALER       			uwPrescalerValue
-
-#define UART1_CONF_TX_WITH_INTERRUPT        0
-#define WITH_SERIAL_LINE_INPUT              1
-#define TELNETD_CONF_NUMLINES               6
-#define NETSTACK_CONF_RADIO                 spirit_radio_driver
-#define NETSTACK_RADIO_MAX_PAYLOAD_LEN      96 /* spirit1-config.h */
-
-#if WITH_IP64
-#include "ip64-conf.h"
-#define WITH_SLIP 1
-#ifndef UIP_FALLBACK_INTERFACE
-#define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface
-#endif
-#endif /* WITH_IP64 */
-
-/*---------------------------------------------------------------------------*/
-/* define ticks/second for slow and fast clocks. Notice that these should be a
-  power of two, eg 64,128,256,512 etc, for efficiency as POT's can be optimized
-  well. */
-#define CLOCK_CONF_SECOND             512
-#define RELOAD_VALUE        ((F_CPU/CLOCK_CONF_SECOND) - 1)
-
-/* One tick: 62.5 ms */
-
-#define RTIMER_CLOCK_LT(a,b)     ((signed short)((a)-(b)) < 0)
-/*---------------------------------------------------------------------------*/
-typedef unsigned long clock_time_t;
-typedef unsigned long long rtimer_clock_t;
-/*---------------------------------------------------------------------------*/
-#define CC_CONF_REGISTER_ARGS          0
-#define CC_CONF_FUNCTION_POINTER_ARGS  1
-#define CC_CONF_FASTCALL
-#define CC_CONF_VA_ARGS                1
-#define CC_CONF_INLINE                 inline
-
-#define CCIF
-#define CLIF
-/*---------------------------------------------------------------------------*/
-typedef uint8_t         u8_t;
-typedef uint16_t        u16_t;
-typedef uint32_t        u32_t;
-typedef  int32_t        s32_t;
-typedef unsigned short  uip_stats_t;
-/*---------------------------------------------------------------------------*/
-#define MULTICHAN_CONF_SET_CHANNEL(x)
-#define MULTICHAN_CONF_READ_RSSI(x) 0
-/*---------------------------------------------------------------------------*/
-#endif//USE_STM32F4XX_NUCLEO
-
-#endif /* __PLATFORM_CONF_H__ */
-/*---------------------------------------------------------------------------*/
-/**
- * @}
- * @}
- */
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/radio.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/radio.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 2005, Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file is part of the Contiki operating system.
- *
- */
-
-/**
- * \file
- *         Header file for the radio API
- * \author
- *         Adam Dunkels <adam@sics.se>
- *         Joakim Eriksson <joakime@sics.se>
- *         Niclas Finne <nfi@sics.se>
- *         Nicolas Tsiftes <nvt@sics.se>
- */
-
-/**
- * \addtogroup dev
- * @{
- */
-
-/**
- * \defgroup radio Radio API
- *
- * The radio API module defines a set of functions that a radio device
- * driver must implement.
- *
- * @{
- */
-
-#ifndef RADIO_H_
-#define RADIO_H_
-
-#include <stddef.h>
-
-/**
- * Each radio has a set of parameters that designate the current
- * configuration and state of the radio. Parameters can either have
- * values of type radio_value_t, or, when this type is insufficient, a
- * generic object that is specified by a memory pointer and the size
- * of the object.
- *
- * The radio_value_t type is set to an integer type that can hold most
- * values used to configure the radio, and is therefore the most
- * common type used for a parameter. Certain parameters require
- * objects of a considerably larger size than radio_value_t, however,
- * and in these cases the documentation below for the parameter will
- * indicate this.
- *
- * All radio parameters that can vary during runtime are prefixed by
- * "RADIO_PARAM", whereas those "parameters" that are guaranteed to
- * remain immutable are prefixed by "RADIO_CONST". Each mutable
- * parameter has a set of valid parameter values. When attempting to
- * set a parameter to an invalid value, the radio will return
- * RADIO_RESULT_INVALID_VALUE.
- *
- * Some radios support only a subset of the defined radio parameters.
- * When trying to set or get such an unsupported parameter, the radio
- * will return RADIO_RESULT_NOT_SUPPORTED.
- */
-
-typedef int radio_value_t;
-typedef unsigned radio_param_t;
-
-enum {
-
-  /* Radio power mode determines if the radio is on
-    (RADIO_POWER_MODE_ON) or off (RADIO_POWER_MODE_OFF). */
-  RADIO_PARAM_POWER_MODE,
-
-  /*
-   * Channel used for radio communication. The channel depends on the
-   * communication standard used by the radio. The values can range
-   * from RADIO_CONST_CHANNEL_MIN to RADIO_CONST_CHANNEL_MAX.
-   */
-  RADIO_PARAM_CHANNEL,
-
-  /* Personal area network identifier, which is used by the address filter. */
-  RADIO_PARAM_PAN_ID,
-
-  /* Short address (16 bits) for the radio, which is used by the address
-     filter. */
-  RADIO_PARAM_16BIT_ADDR,
-
-  /*
-   * Radio receiver mode determines if the radio has address filter
-   * (RADIO_RX_MODE_ADDRESS_FILTER) and auto-ACK (RADIO_RX_MODE_AUTOACK)
-   * enabled. This parameter is set as a bit mask.
-   */
-  RADIO_PARAM_RX_MODE,
-
-  /*
-   * Radio transmission mode determines if the radio has send on CCA
-   * (RADIO_TX_MODE_SEND_ON_CCA) enabled or not. This parameter is set
-   * as a bit mask.
-   */
-  RADIO_PARAM_TX_MODE,
-
-  /*
-   * Transmission power in dBm. The values can range from
-   * RADIO_CONST_TXPOWER_MIN to RADIO_CONST_TXPOWER_MAX.
-   *
-   * Some radios restrict the available values to a subset of this
-   * range.  If an unavailable TXPOWER value is requested to be set,
-   * the radio may select another TXPOWER close to the requested
-   * one. When getting the value of this parameter, the actual value
-   * used by the radio will be returned.
-   */
-  RADIO_PARAM_TXPOWER,
-
-  /*
-   * Clear channel assessment threshold in dBm. This threshold
-   * determines the minimum RSSI level at which the radio will assume
-   * that there is a packet in the air.
-   *
-   * The CCA threshold must be set to a level above the noise floor of
-   * the deployment. Otherwise mechanisms such as send-on-CCA and
-   * low-power-listening duty cycling protocols may not work
-   * correctly. Hence, the default value of the system may not be
-   * optimal for any given deployment.
-   */
-  RADIO_PARAM_CCA_THRESHOLD,
-
-  /* Received signal strength indicator in dBm. */
-  RADIO_PARAM_RSSI,
-
-  /*
-   * Long (64 bits) address for the radio, which is used by the address filter.
-   * The address is specified in network byte order.
-   *
-   * Because this parameter value is larger than what fits in radio_value_t,
-   * it needs to be used with radio.get_object()/set_object().
-   */
-  RADIO_PARAM_64BIT_ADDR,
-
-  /* Constants (read only) */
-
-  /* The lowest radio channel. */
-  RADIO_CONST_CHANNEL_MIN,
-  /* The highest radio channel. */
-  RADIO_CONST_CHANNEL_MAX,
-
-  /* The minimum transmission power in dBm. */
-  RADIO_CONST_TXPOWER_MIN,
-  /* The maximum transmission power in dBm. */
-  RADIO_CONST_TXPOWER_MAX
-};
-
-/* Radio power modes */
-enum {
-  RADIO_POWER_MODE_OFF,
-  RADIO_POWER_MODE_ON
-};
-
-/**
- * The radio reception mode controls address filtering and automatic
- * transmission of acknowledgements in the radio (if such operations
- * are supported by the radio). A single parameter is used to allow
- * setting these features simultaneously as an atomic operation.
- *
- * To enable both address filter and transmissions of automatic
- * acknowledgments:
- *
- * NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE,
- *       RADIO_RX_MODE_ADDRESS_FILTER | RADIO_RX_MODE_AUTOACK);
- */
-#define RADIO_RX_MODE_ADDRESS_FILTER   (1 << 0)
-#define RADIO_RX_MODE_AUTOACK          (1 << 1)
-
-/**
- * The radio transmission mode controls whether transmissions should
- * be done using clear channel assessment (if supported by the
- * radio). If send-on-CCA is enabled, the radio's send function will
- * wait for a radio-specific time window for the channel to become
- * clear. If this does not happen, the send function will return
- * RADIO_TX_COLLISION.
- */
-#define RADIO_TX_MODE_SEND_ON_CCA      (1 << 0)
-
-/* Radio return values when setting or getting radio parameters. */
-typedef enum {
-  RADIO_RESULT_OK,
-  RADIO_RESULT_NOT_SUPPORTED,
-  RADIO_RESULT_INVALID_VALUE,
-  RADIO_RESULT_ERROR
-} radio_result_t;
-
-/* Radio return values for transmissions. */
-enum {
-  RADIO_TX_OK,
-  RADIO_TX_ERR,
-  RADIO_TX_COLLISION,
-  RADIO_TX_NOACK,
-};
-
-/**
- * The structure of a device driver for a radio in Contiki.
- */
-struct radio_driver {
-
-  int (* init)(void);
-
-  /** Prepare the radio with a packet to be sent. */
-  int (* prepare)(const void *payload, unsigned short payload_len);
-
-  /** Send the packet that has previously been prepared. */
-  int (* transmit)(unsigned short transmit_len);
-
-  /** Prepare & transmit a packet. */
-  int (* send)(const void *payload, unsigned short payload_len);
-
-  /** Read a received packet into a buffer. */
-  int (* read)(void *buf, unsigned short buf_len);
-
-  /** Perform a Clear-Channel Assessment (CCA) to find out if there is
-      a packet in the air or not. */
-  int (* channel_clear)(void);
-
-  /** Check if the radio driver is currently receiving a packet */
-  int (* receiving_packet)(void);
-
-  /** Check if the radio driver has just received a packet */
-  int (* pending_packet)(void);
-
-  /** Turn the radio on. */
-  int (* on)(void);
-
-  /** Turn the radio off. */
-  int (* off)(void);
-
-  /** Get a radio parameter value. */
-  radio_result_t (* get_value)(radio_param_t param, radio_value_t *value);
-
-  /** Set a radio parameter value. */
-  radio_result_t (* set_value)(radio_param_t param, radio_value_t value);
-
-  /**
-   * Get a radio parameter object. The argument 'dest' must point to a
-   * memory area of at least 'size' bytes, and this memory area will
-   * contain the parameter object if the function succeeds.
-   */
-  radio_result_t (* get_object)(radio_param_t param, void *dest, size_t size);
-
-  /**
-   * Set a radio parameter object. The memory area referred to by the
-   * argument 'src' will not be accessed after the function returns.
-   */
-  radio_result_t (* set_object)(radio_param_t param, const void *src,
-                                size_t size);
-
-};
-
-#endif /* RADIO_H_ */
-
-/** @} */
-/** @} */
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-config.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-config.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2012, STMicroelectronics.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file is part of the Contiki operating system.
- *
- */
-/*---------------------------------------------------------------------------*/
-#ifndef __SPIRIT1_CONFIG_H__
-#define __SPIRIT1_CONFIG_H__
-/*---------------------------------------------------------------------------*/
-#include "radio.h"
-#include "SPIRIT_Config.h"
-#include "spirit1-const.h"
-/*---------------------------------------------------------------------------*/
-#define CCA_THRESHOLD               -98.0   /* dBm */
-#define XTAL_FREQUENCY              50000000    /* Hz */ 
-#define SPIRIT_MAX_FIFO_LEN         (96) // betzw - WAS: 600
-/*---------------------------------------------------------------------------*/
-
-/* Sometimes Spirit1 seems to NOT deliver (correctly) the 'IRQ_RX_DATA_READY'
- * event for packets which have a length which is close to a multiple of
- * RX FIFO size. Furthermore, in these cases also the content delivery seems
- * to be compromised as well as the generation of RX/TX FIFO errors.
- * This can be avoided by reducing the maximum packet length to a value which
- * is lower than the RX FIFO size.
- *
- * Enable beyond macro if you want to use the version of the driver which avoids
- * FIFO overflows by reducing packet length.
- *
- * NOTE: the non delivery of event 'IRQ_RX_DATA_READY' MUST still be
- *       investigated further deeply (both on HW & SW level)!
- */
-#define RX_FIFO_THR_WA
-
-/**    
- * The MAX_PACKET_LEN is an arbitrary value used to define the two array
- * spirit_txbuf and spirit_rxbuf.
- * The SPIRIT1 supports with its packet handler a length of 65,535 bytes,
- * and in direct mode (without packet handler) there is no limit of data.
- */
-#ifdef RX_FIFO_THR_WA
-#define MAX_PACKET_LEN              (SPIRIT_MAX_FIFO_LEN-1)
-#else
-#define MAX_PACKET_LEN              (255) // betzw - WAS: SPIRIT_MAX_FIFO_LEN, but LEN_WIDTH is set to 7 so the variable payload length is theoretically from 0 to 255 bytes
-#endif
-
-/*---------------------------------------------------------------------------*/
-/**    
- * Spirit1 IC version
- */
-#define SPIRIT1_VERSION             SPIRIT_VERSION_3_0
-/*---------------------------------------------------------------------------*/
-#endif /* __SPIRIT1_CONFIG_H__ */
-/*---------------------------------------------------------------------------*/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-const.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1-const.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2012, STMicroelectronics.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-/*---------------------------------------------------------------------------*/
-#ifndef __SPIRIT1_CONST_H__
-#define __SPIRIT1_CONST_H__
-/*---------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-
-/* The state bitfield and values for different states, as read from MC_STATE[1:0] registers,
-which are returned on any SPI read or write operation. */
-#define SPIRIT1_STATE_STATEBITS           (0x00FE)
-/*---------------------------------------------------------------------------*/
-
-#define SPIRIT1_STATE_STANDBY             ((0x0040)<<1)
-#define SPIRIT1_STATE_SLEEP               ((0x0036)<<1)
-#define SPIRIT1_STATE_READY               ((0x0003)<<1)
-#define SPIRIT1_STATE_LOCK                ((0x000F)<<1)
-#define SPIRIT1_STATE_RX                  ((0x0033)<<1)
-#define SPIRIT1_STATE_TX                  ((0x005F)<<1)
-/* NB the below states were extracted from ST drivers, but are not specified in the datasheet */
-#define SPIRIT1_STATE_PM_SETUP            ((0x003D)<<1)
-#define SPIRIT1_STATE_XO_SETTLING         ((0x0023)<<1)
-#define SPIRIT1_STATE_SYNTH_SETUP         ((0x0053)<<1)
-#define SPIRIT1_STATE_PROTOCOL            ((0x001F)<<1)
-#define SPIRIT1_STATE_SYNTH_CALIBRATION   ((0x004F)<<1)
-/*---------------------------------------------------------------------------*/
-/* strobe commands */
-#define SPIRIT1_STROBE_TX             0x60
-#define SPIRIT1_STROBE_RX             0x61
-#define SPIRIT1_STROBE_READY          0x62
-#define SPIRIT1_STROBE_STANDBY        0x63
-#define SPIRIT1_STROBE_SLEEP          0x64
-#define SPIRIT1_STROBE_SABORT         0x67
-#define SPIRIT1_STROBE_SRES           0x70
-#define SPIRIT1_STROBE_FRX            0x71
-#define SPIRIT1_STROBE_FTX            0x72
-/*---------------------------------------------------------------------------*/
-
-
-
-/* Exported types ------------------------------------------------------------*/
-/*------------------------------------------------------------------*/
-
-
-#endif /* __SPIRIT1_CONST_H__ */
-/*---------------------------------------------------------------------------*/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/spirit1.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2012, STMicroelectronics.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file is part of the Contiki operating system.
- *
- */
-/*---------------------------------------------------------------------------*/
-#ifndef __SPIRIT_H__
-#define __SPIRIT_H__
-/*---------------------------------------------------------------------------*/
-#include "radio.h"
-#include "SPIRIT_Config.h"
-#include "spirit1-config.h"
-//#include "spirit1_appli.h"
-#include "spirit1-const.h"
-/*---------------------------------------------------------------------------*/   
-extern const struct radio_driver spirit_radio_driver;
-void spirit1_interrupt_callback(void);
-
-/* exported from spirit1appli.h */
-
-#include "radio_shield_config.h"
-#include "MCU_Interface.h"
-#include "SPIRIT_Config.h"
-// betzw - WAS: #include "SPIRIT1_Util.h"
-
-
-#if defined(X_NUCLEO_IDS01A3)
-	 #define USE_SPIRIT1_433MHz
-#elif defined(X_NUCLEO_IDS01A4)
-         #define USE_SPIRIT1_868MHz
-#elif defined(X_NUCLEO_IDS01A5)
-         #define USE_SPIRIT1_915MHz
-#else
-#error SPIRIT1 Nucleo Shield undefined or unsupported
-#endif
-
-/*  Uncomment the Link Layer features to be used */
-// #define USE_AUTO_ACK
-// #define USE_AUTO_ACK_PIGGYBACKING
-// #define USE_AUTO_RETRANSMISSION
-
-#if defined(USE_AUTO_ACK)&& defined(USE_AUTO_ACK_PIGGYBACKING)&& defined(USE_AUTO_RETRANSMISSION)
-#define USE_STack_PROTOCOL
-
-/* LLP configuration parameters */
-#define EN_AUTOACK                      S_ENABLE
-#define EN_PIGGYBACKING             	S_ENABLE
-#define MAX_RETRANSMISSIONS         	PKT_N_RETX_2
-
-#else
-#define USE_BASIC_PROTOCOL
-
-#endif
-
-/*  Uncomment the system Operating mode */
-//#define USE_LOW_POWER_MODE
-
-#if defined (USE_LOW_POWER_MODE)
-#define LPM_ENABLE
-#define MCU_STOP_MODE
-//#define MCU_SLEEP_MODE
-//#define RF_STANDBY
-#endif
-
-
-/* Exported constants --------------------------------------------------------*/
-
-/* Radio configuration parameters  */
-/* General Remarks:
- * Two SPSGRF modules will only communicate when both are having same frequency , same channel number,
- * same modulation scheme, same data rate, etc.
- * For example, the SPSGRF-915 module supports frequencies 902 to 928 MHz. User can select any frequency
- * between this band.
- */
-#define XTAL_OFFSET_PPM             0
-#define INFINITE_TIMEOUT            0.0
-
-#ifdef USE_SPIRIT1_433MHz
-#define BASE_FREQUENCY              433.0e6
-#endif
-
-#ifdef USE_SPIRIT1_868MHz
-#define BASE_FREQUENCY              868.0e6
-#endif
-
-#ifdef USE_SPIRIT1_915MHz
-#define BASE_FREQUENCY              915.0e6
-#endif
-
-
-/*  Addresses configuration parameters  */
-#define EN_FILT_MY_ADDRESS          S_DISABLE
-#define MY_ADDRESS                  0x24
-#define EN_FILT_MULTICAST_ADDRESS   S_DISABLE
-#define MULTICAST_ADDRESS           0xEE
-#define EN_FILT_BROADCAST_ADDRESS   S_DISABLE
-#define BROADCAST_ADDRESS           0xFF
-#define DESTINATION_ADDRESS         0x44
-#define EN_FILT_SOURCE_ADDRESS      S_DISABLE
-#define SOURCE_ADDR_MASK            0xf0
-#define SOURCE_ADDR_REF             0x37
-
-#define APPLI_CMD                       0x11
-#define NWK_CMD                         0x22
-#define LED_TOGGLE                      0xff
-#define ACK_OK                          0x01
-#define MAX_BUFFER_LEN                  96
-#define TIME_TO_EXIT_RX                 3000
-#define DELAY_RX_LED_TOGGLE             200
-#define DELAY_TX_LED_GLOW               1000
-#define LPM_WAKEUP_TIME                 100
-#define DATA_SEND_TIME                  30
-
-#define PREAMBLE_LENGTH             PKT_PREAMBLE_LENGTH_04BYTES
-#define SYNC_LENGTH                 PKT_SYNC_LENGTH_4BYTES
-#define CONTROL_LENGTH              PKT_CONTROL_LENGTH_0BYTES
-#define EN_ADDRESS                  S_DISABLE
-#define EN_FEC                      S_DISABLE
-#define CHANNEL_NUMBER              1 // betzw - WAS: 0
-#define LENGTH_TYPE                 PKT_LENGTH_VAR
-#define POWER_INDEX                 7
-#define RECEIVE_TIMEOUT             2000.0 /*change the value for required timeout period*/
-#define RSSI_THRESHOLD              -120
-
-
-
-#define POWER_DBM                   11.6
-#define CHANNEL_SPACE               100e3
-#define FREQ_DEVIATION              127e3
-#define BANDWIDTH                   540.0e3
-#define MODULATION_SELECT           GFSK_BT1
-#define DATARATE                    250000
-#define XTAL_OFFSET_PPM             0
-#define SYNC_WORD                   0x88888888
-#define LENGTH_WIDTH                8 // betzw - NOTE: only 255 bytes for payload!!!
-#define CRC_MODE                    PKT_CRC_MODE_16BITS_2
-#define EN_WHITENING                S_DISABLE
-#define INFINITE_TIMEOUT            0.0
-
-// extern volatile FlagStatus xRxDoneFlag, xTxDoneFlag;
-// extern volatile FlagStatus PushButtonStatusWakeup;
-extern uint16_t wakeupCounter;
-extern uint16_t dataSendCounter ;
-// extern volatile FlagStatus PushButtonStatusData, datasendFlag;
-
-typedef struct
-{
-  uint8_t Cmdtag;
-  uint8_t CmdType;
-  uint8_t CmdLen;
-  uint8_t Cmd;
-  uint8_t DataLen;
-  uint8_t* DataBuff;
-}AppliFrame_t;
-
-/*---------------------------------------------------------------------------*/
-#endif /* __SPIRIT_H__ */
-/*---------------------------------------------------------------------------*/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/stm32l-spirit1-config.h
--- a/stm-spirit1-rf-driver/source/libs/Contiki_STM32_Library/stm32l-spirit1-config.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32l-spirit1-config.h
-  * @author  MCD Application Team
-  * @version V3.4.0
-  * @date    29-June-2012
-  * @brief   Evaluation board specific configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32L_SPIRIT1_CONFIG_H
-#define __STM32L_SPIRIT1_CONFIG_H
-
-/* Includes ------------------------------------------------------------------*/
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-/* Define the STM32F10x hardware depending on the used evaluation board */
-#ifdef USE_STM3210B_EVAL
-  #define USB_DISCONNECT                      GPIOD  
-  #define USB_DISCONNECT_PIN                  GPIO_PIN_9
-  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOD
-  #define EVAL_COM1_IRQHandler                USART1_IRQHandler 
-
-#elif defined (USE_STM3210E_EVAL)
-  #define USB_DISCONNECT                      GPIOB  
-  #define USB_DISCONNECT_PIN                  GPIO_PIN_14
-  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOB
-  #define EVAL_COM1_IRQHandler                USART1_IRQHandler 
-
-#elif defined (USE_STM3210C_EVAL)
-  #define USB_DISCONNECT                      0  
-  #define USB_DISCONNECT_PIN                  0
-  #define RCC_APB2Periph_GPIO_DISCONNECT      0
-  #define EVAL_COM1_IRQHandler                USART2_IRQHandler 
-
-#elif defined (USE_STM32L152_EVAL) || defined (USE_STM32L152D_EVAL)
- /* 
-   For STM32L15xx devices it is possible to use the internal USB pullup
-   controlled by register SYSCFG_PMC (refer to RM0038 reference manual for
-   more details).
-   It is also possible to use external pullup (and disable the internal pullup)
-   by setting the define USB_USE_EXTERNAL_PULLUP in file platform_config.h
-   and configuring the right pin to be used for the external pull up configuration.
-   To have more details on how to use an external pull up, please refer to 
-   STM3210E-EVAL evaluation board manuals.
-   */
- /* Uncomment the following define to use an external pull up instead of the 
-    integrated STM32L15xx internal pull up. In this case make sure to set up
-    correctly the external required hardware and the GPIO defines below.*/
-/* #define USB_USE_EXTERNAL_PULLUP */
-
- #if !defined(USB_USE_EXTERNAL_PULLUP)
-  #define STM32L15_USB_CONNECT                SYSCFG_USBPuCmd(ENABLE)
-  #define STM32L15_USB_DISCONNECT             SYSCFG_USBPuCmd(DISABLE)
-
- #elif defined(USB_USE_EXTERNAL_PULLUP)
-  /* PA0 is chosen just as illustrating example, you should modify the defines
-    below according to your hardware configuration. */ 
-  #define USB_DISCONNECT                      GPIOA
-  #define USB_DISCONNECT_PIN                  GPIO_PIN_0
-  #define RCC_AHBPeriph_GPIO_DISCONNECT       RCC_AHBPeriph_GPIOA
-  #define STM32L15_USB_CONNECT                GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN)
-  #define STM32L15_USB_DISCONNECT             GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN)
- #endif /* USB_USE_EXTERNAL_PULLUP */
-
-#ifdef USE_STM32L152_EVAL 
- #define EVAL_COM1_IRQHandler              USART2_IRQHandler
-#elif defined (USE_STM32L152D_EVAL) 
- #define EVAL_COM1_IRQHandler              USART1_IRQHandler
-#endif /*USE_STM32L152_EVAL*/
-
-#endif /* USE_STM3210B_EVAL */
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#endif /* __STM32L_SPIRIT1_CONFIG_H */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/Release_Notes.html
--- a/stm-spirit1-rf-driver/source/libs/spirit1/Release_Notes.html	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<link rel="File-List" href="Library_files/filelist.xml">
-<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for SPIRIT1 Driver</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]-->
-
-
-
-<style>
-<!--
-/* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-{mso-style-parent:"";
-margin:0in;
-margin-bottom:.0001pt;
-mso-pagination:widow-orphan;
-font-size:12.0pt;
-font-family:"Times New Roman";
-mso-fareast-font-family:"Times New Roman";}
-h2
-{mso-style-next:Normal;
-margin-top:12.0pt;
-margin-right:0in;
-margin-bottom:3.0pt;
-margin-left:0in;
-mso-pagination:widow-orphan;
-page-break-after:avoid;
-mso-outline-level:2;
-font-size:14.0pt;
-font-family:Arial;
-font-weight:bold;
-font-style:italic;}
-a:link, span.MsoHyperlink
-{color:blue;
-text-decoration:underline;
-text-underline:single;}
-a:visited, span.MsoHyperlinkFollowed
-{color:blue;
-text-decoration:underline;
-text-underline:single;}
-p
-{mso-margin-top-alt:auto;
-margin-right:0in;
-mso-margin-bottom-alt:auto;
-margin-left:0in;
-mso-pagination:widow-orphan;
-font-size:12.0pt;
-font-family:"Times New Roman";
-mso-fareast-font-family:"Times New Roman";}
-@page Section1
-{size:8.5in 11.0in;
-margin:1.0in 1.25in 1.0in 1.25in;
-mso-header-margin:.5in;
-mso-footer-margin:.5in;
-mso-paper-source:0;}
-div.Section1
-{page:Section1;}
--->
-</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->
-<meta content="MCD Application Team" name="author"></head><body link="blue" vlink="blue">
-<div class="Section1">
-<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br>
-</o:p></span></p>
-<div align="center">
-<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
-<tbody>
-<tr>
-<td style="padding: 0cm;" valign="top">
-<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
-<tbody>
-<tr>
-<td style="vertical-align: top;">
-<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p>
-</td>
-</tr>
-<tr style="">
-<td style="padding: 1.5pt;">
-<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release
-Notes for SPIRIT1 Driver</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1>
-<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright
-2014 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p>
-<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../../../_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p>
-</td>
-</tr>
-</tbody>
-</table>
-<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p>&nbsp;</o:p></span></p>
-<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900">
-<tbody>
-<tr style="">
-<td style="padding: 0cm;" valign="top">
-<span style="font-family: &quot;Times New Roman&quot;;">
-</span>
-<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">Update History</span></h2>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 200px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V3.0.1
-/ 10-Oct-2014</span></h3>
-<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
-Changes<o:p></o:p></span></u></b></p>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<span style="font-size: 10pt; font-family: Verdana;"></span>
-<ul style="list-style-type: square;">
-<li><span style="font-size: 10pt; font-family: Verdana;">First
-official release.</span><span style="color: rgb(0, 0, 0); font-family: Verdana; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; display: inline ! important; float: none;"></span><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span></li>
-</ul>
-<span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"></span>
-<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span><br>
-</h2>
-
-
-<font size="-1"><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at:</span><br><br>
-
-
-<font size="-1"><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;"><center>
-<a href=http://www.st.com/software_license_agreement_liberty_v2> http://www.st.com/software_license_agreement_liberty_v2</a></center></span><br><br>
-
-<font size="-1"><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-</a></span>
-
-</font>
-
-
-<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;"><o:p></o:p></span></p>
-<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b>
-<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;">
-<hr align="center" size="2" width="100%"></span></div>
-<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt; text-align: center;" align="center"><span style="font-size: 10pt; font-family: Verdana; color: black;">For
-complete documentation on</span><span style="font-size: 10pt; font-family: Verdana;"><span style="color: black;">&nbsp;SPIRIT1 Driver
-visit </span><u><span style="color: blue;"><a href="http://www.st.com/web/catalog/sense_power/FM1968/CL1976/SC1845/PF253167" target="_blank">www.st.com/SPIRIT1</a></span></u></span><span style="font-size: 10pt; font-family: Verdana;"><a target="_blank" href="http://www.st.com/web/catalog/sense_power/FM1968/CL1976/SC1898/PF258646"><u><span style="color: blue;"></span></u></a></span><span style="font-size: 10pt; font-family: Verdana;"><u><span style="color: blue;"></span></u></span><span style="color: black;"><o:p></o:p></span></p>
-</td>
-</tr>
-</tbody>
-</table>
-<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p>
-</td>
-</tr>
-</tbody>
-</table>
-</div>
-<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
-</div>
-</body></html>
\ No newline at end of file
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/MCU_Interface.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/MCU_Interface.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/**
- * @file    MCU_Interface.h
- * @author  VMA division - AMS
- * @version V2.0.2
- * @date    Febrary 7, 2015
- * @brief   Header file for low level SPIRIT SPI driver.
- * @details
- *
- * This header file constitutes an interface to the SPI driver used to
- * communicate with Spirit.
- * It exports some function prototypes to write/read registers and FIFOs
- * and to send command strobes.
- * Since the Spirit libraries are totally platform independent, the implementation
- * of these functions are not provided here. The user have to implement these functions
- * taking care to keep the exported prototypes.
- *
- * These functions are:
- *
- * <ul>
- * <li>SpiritSpiInit</i>
- * <li>SpiritSpiWriteRegisters</i>
- * <li>SpiritSpiReadRegisters</i>
- * <li>SpiritSpiCommandStrobes</i>
- * <li>SpiritSpiWriteLinearFifo</i>
- * <li>SpiritSpiReadLinearFifo</i>
- * </ul>
- *
- * @note An example of SPI driver implementation is available in the <i>Sdk_Eval</i> library.
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * THIS SOURCE CODE IS PROTECTED BY A LICENSE.
- * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED
- * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
- *
- * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __MCU_INTERFACE_H
-#define __MCU_INTERFACE_H
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/** @defgroup SPIRIT_SPI_Driver         SPI Driver
- * @brief Header file for low level SPIRIT SPI driver.
- * @details See the file <i>@ref MCU_Interface.h</i> for more details.
- * @{
- */
-
-
-
-/** @defgroup SPI_Exported_Types        SPI Exported Types
- * @{
- */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup SPI_Exported_Constants    SPI Exported Constants
- * @{
- */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup SPI_Exported_Macros       SPI Exported Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup SPI_Exported_Functions    SPI Exported Functions
- * @{
- */
-
-typedef SpiritStatus StatusBytes;
-
-void SdkEvalSpiInit(void);
-StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode);
-StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-
-void SdkEvalEnterShutdown(void);
-void SdkEvalExitShutdown(void);
-SpiritFlagStatus SdkEvalCheckShutdown(void);
-
-#define SpiritEnterShutdown                                  SdkEvalEnterShutdown
-#define SpiritExitShutdown                                   SdkEvalExitShutdown
-#define SpiritCheckShutdown                                  (SpiritFlagStatus)SdkEvalCheckShutdown
-
-
-#define SpiritSpiInit                                                  SdkEvalSpiInit
-#define SpiritSpiWriteRegisters(cRegAddress, cNbBytes, pcBuffer)       SdkEvalSpiWriteRegisters(cRegAddress, cNbBytes, pcBuffer)
-#define SpiritSpiReadRegisters(cRegAddress, cNbBytes, pcBuffer)        SdkEvalSpiReadRegisters(cRegAddress, cNbBytes, pcBuffer)
-#define SpiritSpiCommandStrobes(cCommandCode)                          SdkEvalSpiCommandStrobes(cCommandCode)
-#define SpiritSpiWriteLinearFifo(cNbBytes, pcBuffer)                         SdkEvalSpiWriteFifo(cNbBytes, pcBuffer)
-#define SpiritSpiReadLinearFifo(cNbBytes, pcBuffer)                          SdkEvalSpiReadFifo(cNbBytes, pcBuffer)
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Aes.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Aes.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Aes.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT AES Engine.
-  *
- * @details
- *
- * In order to encrypt data, the user must manage the AES_END IRQ.
- * The data have to be splitted in blocks of 16 bytes and written
- * into the <i>AES DATA IN registers</i>. Then, after the key is written
- * into the <i>AES KEY registers</i>, a command of <i>Execute encryption</i>
- * has to be sent.
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritAesWriteDataIn(data_buff , N_BYTES);
- *  SpiritAesExecuteEncryption();
- *
- *  while(!aes_end_flag);       // the flag is set by the ISR routine which manages the AES_END irq
- *  aes_end_flag=RESET;
- *
- *  SpiritAesReadDataOut(enc_data_buff , N_BYTES);
- *
- * @endcode
- *
- * In order to decrypt data, the user must manage the AES_END IRQ and have a decryption key.
- * There are two operative modes to make the data decryption:
- * <ul>
- * <li> Derive the decryption key from the encryption key and decrypt data directly
- * using the <i>SpiritAesDeriveDecKeyExecuteDec()</i> function
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritAesWriteDataIn(enc_data_buff , N_BYTES);
- *  SpiritAesDeriveDecKeyExecuteDec();
- *
- *  while(!aes_end_flag);       // the flag is set by the ISR routine which manages the AES_END irq
- *  aes_end_flag=RESET;
- *
- *  SpiritAesReadDataOut(data_buff , N_BYTES);
- *
- * @endcode
- * </li>
- *
- * <li> Derive the decryption key from the encryption key using the <i>SpiritAesDeriveDecKeyFromEnc()</i>
- * function, store it into the <i>AES KEY registers</i> and then decrypt data using the
- * <i>SpiritAesExecuteDecryption()</i> function
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritAesWriteDataIn(key_enc , 16);
- *  SpiritAesDeriveDecKeyFromEnc();
- *
- *  while(!aes_end_flag);       // the flag is set by the ISR routine which manages the AES_END irq
- *  aes_end_flag=RESET;
- *
- *  SpiritAesReadDataOut(key_dec , 16);
- *
- *  SpiritAesWriteKey(key_dec);
- *  SpiritAesWriteDataIn(enc_data_buff , 16);
- *  SpiritAesExecuteDecryption();
- *
- *  while(!aes_end_flag);       // the flag is set by the ISR routine which manages the AES_END irq
- *  aes_end_flag=RESET;
- *
- *  SpiritAesReadDataOut(data_buff , N_BYTES);
- *
- * @endcode
- * </li>
- * </ul>
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_AES_H
-#define __SPIRIT_AES_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Aes AES
- * @brief Configuration and management of SPIRIT AES Engine.
- * @details See the file <i>@ref SPIRIT_Aes.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Aes_Exported_Types AES Exported Types
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Exported_Constants     AES Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Exported_Macros        AES Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Exported_Functions     AES Exported Functions
- * @{
- */
-
-void SpiritAesMode(SpiritFunctionalState xNewState);
-void SpiritAesWriteDataIn(uint8_t* pcBufferDataIn, uint8_t cDataLength);
-void SpiritAesReadDataOut(uint8_t* pcBufferDataOut, uint8_t cDataLength);
-void SpiritAesWriteKey(uint8_t* pcKey);
-void SpiritAesReadKey(uint8_t* pcKey);
-void SpiritAesDeriveDecKeyFromEnc(void);
-void SpiritAesExecuteEncryption(void);
-void SpiritAesExecuteDecryption(void);
-void SpiritAesDeriveDecKeyExecuteDec(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Calibration.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Calibration.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Calibration.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT VCO-RCO calibration.
-  *
- * @details
- *
- * This module allows the user to set some parameters which deal
- * with the oscillators calibration.
- * The state machine of Spirit contemplates some optional calibrating operations
- * in the transition between the READY and the LOCK state.
- * The user is allowed to enable or disable the automatic RCO/VCO calibration
- * by calling the functions <i>@ref SpiritCalibrationVco()</i> and <i>@ref SpiritCalibrationRco()</i>.
- * The following example shows how to do an initial calibration of VCO.
- *
- * <b>Example:</b>
- * @code
- *  uint8_t calData;
- *
- *  SpiritCalibrationVco(S_ENABLE);
- *  SpiritCmdStrobeLockTx();
- *
- *  while(g_xStatus.MC_STATE != MC_STATE_LOCK){
- *      SpiritRefreshStatus();
- *  }
- *
- *  calData = SpiritCalibrationGetVcoCalDataTx();
- *  SpiritCalibrationSetVcoCalDataTx(calData);
- *
- *  SpiritCmdStrobeReady();
- *  SpiritCalibrationVco(S_DISABLE);
- *
- * @endcode
- *
- * Similar operations can be done for the RCO calibrator.
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_CALIBRATION_H
-#define __SPIRIT_CALIBRATION_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Calibration Calibration
- * @brief Configuration and management of SPIRIT VCO-RCO calibration.
- * @details See the file <i>@ref SPIRIT_Calibration.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Calibration_Exported_Types Calibration Exported Types
- * @{
- */
-
-
-/**
- * @brief  VCO / RCO calibration window.
- */
-typedef enum
-{
-
-  CALIB_TIME_7_33_US_24MHZ = 0x00,	/*!< calibration window of 7.33 us with XTAL=24MHz */
-  CALIB_TIME_14_67_US_24MHZ,		/*!< calibration window of 14.67 us with XTAL=24MHz */
-  CALIB_TIME_29_33_US_24MHZ,		/*!< calibration window of 29.33 us with XTAL=24MHz */
-  CALIB_TIME_58_67_US_24MHZ,		/*!< calibration window of 58.67 us with XTAL=24MHz */
-
-  CALIB_TIME_6_77_US_26MHZ = 0x00,	/*!< calibration window of 6.77 us with XTAL=26MHz */
-  CALIB_TIME_13_54_US_26MHZ,		/*!< calibration window of 13.54 us with XTAL=26MHz */
-  CALIB_TIME_27_08_US_26MHZ,		/*!< calibration window of 27.08 us with XTAL=26MHz */
-  CALIB_TIME_54_15_US_26MHZ		/*!< calibration window of 54.15 us with XTAL=26MHz */
-
-} VcoWin;
-
-
-#define IS_VCO_WIN(REF)   (REF == CALIB_TIME_7_33_US_24MHZ  ||\
-                           REF == CALIB_TIME_14_67_US_24MHZ ||\
-                           REF == CALIB_TIME_29_33_US_24MHZ ||\
-                           REF == CALIB_TIME_58_67_US_24MHZ ||\
-                           REF == CALIB_TIME_6_77_US_26MHZ  ||\
-                           REF == CALIB_TIME_13_54_US_26MHZ ||\
-                           REF == CALIB_TIME_27_08_US_26MHZ ||\
-                           REF == CALIB_TIME_54_15_US_26MHZ \
-                           )
-
-/**
- * @brief  VCO_H / VCO_L selection.
- */
-typedef enum
-{
-
-  VCO_L = 0x00,	        /*!< VCO lower */
-  VCO_H,		/*!< VCO higher */
-} VcoSel;
-
-
-#define IS_VCO_SEL(REF)   (REF == VCO_L  ||\
-                           REF == VCO_H \
-                           )
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Calibration_Exported_Constants     Calibration Exported Constants
- * @{
- */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup VCO_Calibration   VCO Calibration
- * @{
- */
-
-/**
- * @}
- */
-
-
-
-
-/**
- * @defgroup Calibration_Exported_Macros        Calibration Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Calibration_Exported_Functions     Calibration Exported Functions
- * @{
- */
-
-void SpiritCalibrationRco(SpiritFunctionalState xNewState);
-void SpiritCalibrationVco(SpiritFunctionalState xNewState);
-void SpiritCalibrationSetRcoCalWords(uint8_t cRwt, uint8_t cRfb);
-void SpiritCalibrationGetRcoCalWords(uint8_t* pcRwt, uint8_t* pcRfb);
-uint8_t SpiritCalibrationGetVcoCalData(void);
-void SpiritCalibrationSetVcoCalDataTx(uint8_t cVcoCalData);
-uint8_t SpiritCalibrationGetVcoCalDataTx(void);
-void SpiritCalibrationSetVcoCalDataRx(uint8_t cVcoCalData);
-uint8_t SpiritCalibrationGetVcoCalDataRx(void);
-void SpiritCalibrationSetVcoWindow(VcoWin xRefWord);
-VcoWin SpiritCalibrationGetVcoWindow(void);
-VcoSel SpiritCalibrationGetVcoSelecttion(void);
-void SpiritCalibrationSelectVco(VcoSel xVco);
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Commands.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Commands.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Commands.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Management of SPIRIT Commands.
-  *
- * @details
- *
- * In this module can be found all the API used to strobe commands to
- * Spirit.
- * Every command strobe is an SPI transaction with a specific command code.
- *
- * <b>Example:</b>
- * @code
- *   ...
- *
- *   SpiritCmdStrobeRx();
- *
- *   ...
- * @endcode
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_COMMANDS_H
-#define __SPIRIT_COMMANDS_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Commands    Commands
- * @brief Management of SPIRIT Commands.
- * @details See the file <i>@ref SPIRIT_Commands.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Commands_Exported_Types    Commands Exported Types
- * @{
- */
-
-/**
-  * @brief  SPIRIT Commands codes enumeration
-  */
-typedef enum
-{
-  CMD_TX =  COMMAND_TX,                           /*!< Start to transmit; valid only from READY */
-  CMD_RX =  COMMAND_RX,                           /*!< Start to receive; valid only from READY */
-  CMD_READY =  COMMAND_READY,                     /*!< Go to READY; valid only from STANDBY or SLEEP or LOCK */
-  CMD_STANDBY =  COMMAND_STANDBY,                 /*!< Go to STANDBY; valid only from READY */
-  CMD_SLEEP = COMMAND_SLEEP,                      /*!< Go to SLEEP; valid only from READY */
-  CMD_LOCKRX = COMMAND_LOCKRX,                    /*!< Go to LOCK state by using the RX configuration of the synth; valid only from READY */
-  CMD_LOCKTX = COMMAND_LOCKTX,                    /*!< Go to LOCK state by using the TX configuration of the synth; valid only from READY */
-  CMD_SABORT = COMMAND_SABORT,                    /*!< Force exit form TX or RX states and go to READY state; valid only from TX or RX */
-  CMD_LDC_RELOAD = COMMAND_LDC_RELOAD,            /*!< LDC Mode: Reload the LDC timer with the value stored in the  LDC_PRESCALER / COUNTER  registers; valid from all states  */
-  CMD_SEQUENCE_UPDATE =  COMMAND_SEQUENCE_UPDATE, /*!< Autoretransmission: Reload the Packet sequence counter with the value stored in the PROTOCOL[2] register valid from all states */
-  CMD_AES_ENC = COMMAND_AES_ENC,                  /*!< Commands: Start the encryption routine; valid from all states; valid from all states */
-  CMD_AES_KEY = COMMAND_AES_KEY,                  /*!< Commands: Start the procedure to compute the key for the decryption; valid from all states */
-  CMD_AES_DEC = COMMAND_AES_DEC,                  /*!< Commands: Start the decryption routine using the current key; valid from all states */
-  CMD_AES_KEY_DEC = COMMAND_AES_KEY_DEC,          /*!< Commands: Compute the key and start the decryption; valid from all states */
-  CMD_SRES = COMMAND_SRES,                        /*!< Reset of all digital part, except SPI registers */
-  CMD_FLUSHRXFIFO = COMMAND_FLUSHRXFIFO,          /*!< Clean the RX FIFO; valid from all states */
-  CMD_FLUSHTXFIFO = COMMAND_FLUSHTXFIFO,          /*!< Clean the TX FIFO; valid from all states */
-} SpiritCmd;
-
-#define IS_SPIRIT_CMD(CMD)  (CMD == CMD_TX || \
-                             CMD == CMD_RX || \
-                             CMD == CMD_READY || \
-                             CMD == CMD_STANDBY || \
-                             CMD == CMD_SLEEP || \
-                             CMD == CMD_LOCKRX || \
-                             CMD == CMD_LOCKTX || \
-                             CMD == CMD_SABORT || \
-                             CMD == CMD_LDC_RELOAD || \
-                             CMD == CMD_SEQUENCE_UPDATE || \
-                             CMD == CMD_AES_ENC || \
-                             CMD == CMD_AES_KEY || \
-                             CMD == CMD_AES_DEC || \
-                             CMD == CMD_AES_KEY_DEC || \
-                             CMD == CMD_SRES || \
-                             CMD == CMD_FLUSHRXFIFO || \
-                             CMD == CMD_FLUSHTXFIFO \
-                            )
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Commands_Exported_Constants        Commands Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Commands_Exported_Macros   Commands Exported Macros
- * @{
- */
-
-/**
- * @brief  Sends the TX command to SPIRIT. Start to transmit.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeTx()      {SpiritManagementWaCmdStrobeTx(); \
-                                  SpiritCmdStrobeCommand(CMD_TX);} 
-
-
-/**
- * @brief  Sends the RX command to SPIRIT. Start to receive.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeRx()      {SpiritManagementWaCmdStrobeRx(); \
-                                  SpiritCmdStrobeCommand(CMD_RX); \
-                                  } 
-
-
-/**
- * @brief  Sends the Ready state command to SPIRIT. Go to READY.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeReady()          SpiritCmdStrobeCommand(CMD_READY)
-
-
-
-/**
- * @brief  Sends the Standby command to SPIRIT. Go to STANDBY.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeStandby()        SpiritCmdStrobeCommand(CMD_STANDBY)
-
-
-
-/**
- * @brief  Sends the Sleep command to SPIRIT. Go to SLEEP.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeSleep()          SpiritCmdStrobeCommand(CMD_SLEEP)
-
-
-
-/**
- * @brief  Sends the LOCK_RX command to SPIRIT. Go to the LOCK state by using the RX configuration of the synthesizer.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeLockRx()         SpiritCmdStrobeCommand(CMD_LOCKRX)
-
-
-
-/**
- * @brief  Sends the LOCK_TX command to SPIRIT. Go to the LOCK state by using the TX configuration of the synthesizer.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeLockTx()         SpiritCmdStrobeCommand(CMD_LOCKTX)
-
-
-
-/**
- * @brief  Sends the SABORT command to SPIRIT. Exit from TX or RX states and go to READY state.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeSabort()         SpiritCmdStrobeCommand(CMD_SABORT)
-
-
-/**
- * @brief  Sends the LDC_RELOAD command to SPIRIT. Reload the LDC timer with the value stored in the LDC_PRESCALER / COUNTER registers.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeLdcReload()      SpiritCmdStrobeCommand(CMD_LDC_RELOAD)
-
-
-
-/**
- * @brief  Sends the SEQUENCE_UPDATE command to SPIRIT. Reload the Packet sequence counter with the value stored in the PROTOCOL[2] register.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeSequenceUpdate() SpiritCmdStrobeCommand(CMD_SEQUENCE_UPDATE)
-
-
-
-/**
- * @brief  Sends the AES_ENC command to SPIRIT. Starts the encryption routine.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeAesEnc()         SpiritCmdStrobeCommand(CMD_AES_ENC)
-
-
-
-/**
- * @brief  Sends the AES_KEY command to SPIRIT. Starts the procedure to compute the key for the decryption.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeAesKey()         SpiritCmdStrobeCommand(CMD_AES_KEY)
-
-
-
-/**
- * @brief  Sends the AES_DEC command to SPIRIT. Starts the decryption using the current key.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeAesDec()         SpiritCmdStrobeCommand(CMD_AES_DEC)
-
-
-
-/**
- * @brief  Sends the KEY_DEC command to SPIRIT. Computes the key derivation and start the decryption.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeAesKeyDec()     SpiritCmdStrobeCommand(CMD_AES_KEY_DEC)
-
-/**
- * @brief  Sends the SRES command to SPIRIT. Partial reset: all digital circuit will be reset (exception for SPI only).
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeSres()          SpiritCmdStrobeCommand(CMD_SRES)  
-  
-
-/**
- * @brief  Sends the FLUSHRXFIFO command to SPIRIT. Clean the RX FIFO.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeFlushRxFifo()    SpiritCmdStrobeCommand(CMD_FLUSHRXFIFO)
-
-
-
-/**
- * @brief  Sends the FLUSHTXFIFO command to SPIRIT. Clean the TX FIFO.
- * @param  None.
- * @retval None.
- */
-#define SpiritCmdStrobeFlushTxFifo()    SpiritCmdStrobeCommand(CMD_FLUSHTXFIFO)
-
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Commands_Exported_Functions    Commands Exported Functions
- * @{
- */
-void SpiritCmdStrobeCommand(SpiritCmd xCommandCode);
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Config.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Config.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Config.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Spirit Configuration and useful defines 
-  * 
- * @details
- *
- * This file is used to include all or a part of the Spirit
- * libraries into the application program which will be used.
- * Moreover some important parameters are defined here and the
- * user is allowed to edit them.
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_CONFIG_H
-#define __SPIRIT_CONFIG_H
-
-
-  /* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Aes.h"
-#include "SPIRIT_Calibration.h"
-#include "SPIRIT_Commands.h"
-#include "SPIRIT_Csma.h"
-#include "SPIRIT_DirectRF.h"
-#include "SPIRIT_General.h"
-#include "SPIRIT_Gpio.h"
-#include "SPIRIT_Irq.h"
-#include "SPIRIT_Timer.h"
-#include "SPIRIT_LinearFifo.h"
-#include "SPIRIT_PktBasic.h"
-#include "SPIRIT_PktMbus.h"
-#include "SPIRIT_PktStack.h"
-
-#include "SPIRIT_Qi.h"
-#include "SPIRIT_Radio.h"
-#include "MCU_Interface.h"
-#include "SPIRIT_Types.h"
-#include "SPIRIT_Management.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** @addtogroup SPIRIT_Libraries        SPIRIT Libraries
- * @brief This firmware implements libraries which allow the user
- * to manage the features of Spirit without knowing the hardware details.
- * @details The <i>SPIRIT_Libraries</i> modules are totally platform independent. The library provides one
- * module for each device feature. Each module refers to some functions whose prototypes are located in the
- * header file <i>@ref MCU_Interface.h</i>. The user who want to use these libraries on a particular
- * platform has to implement these functions respecting them signatures.
- * @{
- */
-
-/** @defgroup SPIRIT_Configuration      Configuration
- * @brief Spirit Configuration and useful defines.
- * @details See the file <i>@ref SPIRIT_Config.h</i> for more details.
- * @{
- */
-
-
-/** @defgroup Configuration_Exported_Types      Configuration Exported Types
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Configuration_Exported_Constants  Configuration Exported Constants
- * @{
- */
-#define DOUBLE_XTAL_THR                         30000000
-
-/**
- * @}
- */
-
-
-/** @defgroup Configuration_Exported_Macros     Configuration Exported Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Configuration_Exported_Functions  Configuration Exported Functions
- * @{
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Csma.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Csma.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Csma.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT CSMA.
- * @details
- *
- * The Spirit CSMA feature, when configured and enabled, is transparent
- * for the user. It means the user has only to call the <i>@ref SpiritCsmaInit()</i>
- * function on a filled structure and then enable the CSMA policy using the <i>@ref SpiritCsma()</i>
- * function.
- *
- * <b>Example:</b>
- * @code
- *
- * CsmaInit csmaInit={
- *   S_DISABLE,         // persistent mode
- *   TBIT_TIME_64,      // Tbit time
- *   TCCA_TIME_3,       // Tcca time
- *   5,                 // max number of backoffs
- *   0xFA21,            // BU counter seed
- *   32                 // CU prescaler
- * };
- *
- * ...
- *
- * SpiritCsmaInit(&csmaInit);
- * SpiritCsma(S_ENABLE);
- *
- *
- * @endcode
- *
- * @note The CS status depends of the RSSI threshold set. Please see the Spirit_Qi
- * module for details.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_CSMA_H
-#define __SPIRIT_CSMA_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Types.h"
-#include "SPIRIT_Regs.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Csma        CSMA
- * @brief Configuration and management of SPIRIT CSMA.
- * @details See the file <i>@ref SPIRIT_Csma.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Csma_Exported_Types        CSMA Exported Types
- * @{
- */
-
-
-/**
- * @brief  Multiplier for Tcca time enumeration (Tcca = Multiplier*Tbit).
- */
-typedef enum
-{
-  TBIT_TIME_64 = CSMA_CCA_PERIOD_64TBIT,      /*!< CSMA/CA: Sets CCA period to 64*TBIT */
-  TBIT_TIME_128 = CSMA_CCA_PERIOD_128TBIT,    /*!< CSMA/CA: Sets CCA period to 128*TBIT */
-  TBIT_TIME_256 = CSMA_CCA_PERIOD_256TBIT,    /*!< CSMA/CA: Sets CCA period to 256*TBIT */
-  TBIT_TIME_512 = CSMA_CCA_PERIOD_512TBIT,    /*!< CSMA/CA: Sets CCA period to 512*TBIT */
-}CcaPeriod;
-
-#define IS_CCA_PERIOD(PERIOD)   (PERIOD == TBIT_TIME_64 || \
-				 PERIOD == TBIT_TIME_128 || \
-				 PERIOD == TBIT_TIME_256 || \
-				 PERIOD == TBIT_TIME_512)
-
-
-/**
- * @brief  Multiplier of Tcca time enumeration to obtain Tlisten (Tlisten = [1...15]*Tcca).
- */
-typedef enum
-{
-  TCCA_TIME_0   = 0x00,     /*!< CSMA/CA: Sets CCA length to 0 */
-  TCCA_TIME_1   = 0x10,     /*!< CSMA/CA: Sets CCA length to 1*TLISTEN */
-  TCCA_TIME_2   = 0x20,     /*!< CSMA/CA: Sets CCA length to 2*TLISTEN */
-  TCCA_TIME_3   = 0x30,     /*!< CSMA/CA: Sets CCA length to 3*TLISTEN */
-  TCCA_TIME_4   = 0x40,     /*!< CSMA/CA: Sets CCA length to 4*TLISTEN */
-  TCCA_TIME_5   = 0x50,     /*!< CSMA/CA: Sets CCA length to 5*TLISTEN */
-  TCCA_TIME_6   = 0x60,     /*!< CSMA/CA: Sets CCA length to 6*TLISTEN */
-  TCCA_TIME_7   = 0x70,     /*!< CSMA/CA: Sets CCA length to 7*TLISTEN */
-  TCCA_TIME_8   = 0x80,     /*!< CSMA/CA: Sets CCA length to 8*TLISTEN */
-  TCCA_TIME_9   = 0x90,     /*!< CSMA/CA: Sets CCA length to 9*TLISTEN */
-  TCCA_TIME_10  = 0xA0,     /*!< CSMA/CA: Sets CCA length to 10*TLISTEN */
-  TCCA_TIME_11  = 0xB0,     /*!< CSMA/CA: Sets CCA length to 11*TLISTEN */
-  TCCA_TIME_12  = 0xC0,     /*!< CSMA/CA: Sets CCA length to 12*TLISTEN */
-  TCCA_TIME_13  = 0xD0,     /*!< CSMA/CA: Sets CCA length to 13*TLISTEN */
-  TCCA_TIME_14  = 0xE0,     /*!< CSMA/CA: Sets CCA length to 14*TLISTEN */
-  TCCA_TIME_15  = 0xF0,     /*!< CSMA/CA: Sets CCA length to 15*TLISTEN */
-}CsmaLength;
-
-#define IS_CSMA_LENGTH(LENGTH)	(LENGTH == TCCA_TIME_0 || \
-                                 LENGTH == TCCA_TIME_1 || \
-				 LENGTH == TCCA_TIME_2 || \
-				 LENGTH == TCCA_TIME_3 || \
-				 LENGTH == TCCA_TIME_4 || \
-				 LENGTH == TCCA_TIME_5 || \
-				 LENGTH == TCCA_TIME_6 || \
-				 LENGTH == TCCA_TIME_7 || \
-				 LENGTH == TCCA_TIME_8 || \
-				 LENGTH == TCCA_TIME_9 || \
-				 LENGTH == TCCA_TIME_10 || \
-				 LENGTH == TCCA_TIME_11 || \
-				 LENGTH == TCCA_TIME_12 || \
-				 LENGTH == TCCA_TIME_13 || \
-				 LENGTH == TCCA_TIME_14 || \
-				 LENGTH == TCCA_TIME_15)
-
-
-/**
-  * @brief  SPIRIT CSMA Init structure definition
-  */
-typedef struct
-{
-  SpiritFunctionalState     xCsmaPersistentMode;          /*!< Specifies if the CSMA persistent mode has to be on or off.
-                                                               This parameter can be S_ENABLE or S_DISABLE */
-  CcaPeriod                 xMultiplierTbit;              /*!< Specifies the Tbit multiplier to obtain the Tcca.
-                                                               This parameter can be a value of @ref CcaPeriod */
-  CsmaLength                xCcaLength;                   /*!< Specifies the Tcca multiplier to determinate the Tlisten.
-                                                               This parameter can be a value of @ref CsmaLength. */
-  uint8_t                   cMaxNb;                       /*!< Specifies the max number of backoff cycles. Not used in persistent mode.
-                                                               This parameter is an uint8_t. */
-  uint16_t                  nBuCounterSeed;               /*!< Specifies the BU counter seed. Not used in persistent mode.
-                                                               This parameter can be a value of 16 bits. */
-  uint8_t                   cBuPrescaler;                 /*!< Specifies the BU prescaler. Not used in persistent mode.
-                                                               This parameter can be a value of 6 bits. */
-}CsmaInit;
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Exported_Constants    CSMA Exported Constants
- * @{
- */
-
-/**
- * @defgroup Csma_Parameters            CSMA Parameters
- * @{
- */
-
-#define IS_BU_COUNTER_SEED(SEED)	(SEED!=0)
-#define IS_BU_PRESCALER(PRESCALER)	(PRESCALER<64)
-#define IS_CMAX_NB(NB)			(NB<8)
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Exported_Macros       CSMA Exported Macros
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Exported_Functions    CSMA Exported Functions
- * @{
- */
-
-void SpiritCsmaInit(CsmaInit* pxCsmaInit);
-void SpiritCsmaGetInfo(CsmaInit* pxCsmaInit);
-void SpiritCsma(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritCsmaGetCsma(void);
-void SpiritCsmaPersistentMode(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritCsmaGetPersistentMode(void);
-void SpiritCsmaSeedReloadMode(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritCsmaGetSeedReloadMode(void);
-void SpiritCsmaSetBuCounterSeed(uint16_t nBuCounterSeed);
-uint16_t SpiritCsmaGetBuCounterSeed(void);
-void SpiritCsmaSetBuPrescaler(uint8_t cBuPrescaler);
-uint8_t SpiritCsmaGetBuPrescaler(void);
-void SpiritCsmaSetCcaPeriod(CcaPeriod xMultiplierTbit);
-CcaPeriod SpiritCsmaGetCcaPeriod(void);
-void SpiritCsmaSetCcaLength(CsmaLength xCcaLength);
-uint8_t SpiritCsmaGetCcaLength(void);
-void SpiritCsmaSetMaxNumberBackoff(uint8_t cMaxNb);
-uint8_t SpiritCsmaGetMaxNumberBackoff(void);
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_DirectRF.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_DirectRF.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_DirectRF.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT direct transmission / receive modes.
- * @details
- *
- * This module contains functions to manage the direct Tx/Rx mode.
- * The user can choose the way to send data to Spirit through the
- * enumerative types <i>@ref DirectTx</i>/<i>@ref DirectRx</i>.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT1_DIRECT_RF_H
-#define __SPIRIT1_DIRECT_RF_H
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_DirectRf    Direct RF
- * @brief Configuration and management of SPIRIT direct transmission / receive modes.
- * @details See the file <i>@ref SPIRIT_DirectRF.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup DirectRf_Exported_Types    Direct RF Exported Types
- * @{
- */
-
-/**
- * @brief  Direct transmission mode enumeration for SPIRIT.
- */
-typedef enum
-{
-  NORMAL_TX_MODE = 0x00,          /*!< Normal mode, no direct transmission is used */
-  DIRECT_TX_FIFO_MODE = 0x04,     /*!< Source is FIFO: payload bits are continuously read from the TX FIFO */
-  DIRECT_TX_GPIO_MODE = 0x08,     /*!< Source is GPIO: payload bits are continuously read from one of the GPIO ports and transmitted without any processing */
-  PN9_TX_MODE = 0x0C              /*!< A pseudorandom binary sequence is generated internally */
-}DirectTx;
-
-#define IS_DIRECT_TX(MODE)  (((MODE) == NORMAL_TX_MODE) || \
-			     ((MODE) == DIRECT_TX_FIFO_MODE) || \
-                             ((MODE) == DIRECT_TX_GPIO_MODE)  || \
-                             ((MODE) == PN9_TX_MODE))
-
-/**
- * @brief  Direct receive mode enumeration for SPIRIT.
- */
-typedef enum
-{
-  NORMAL_RX_MODE = 0x00,          /*!< Normal mode, no direct reception is used */
-  DIRECT_RX_FIFO_MODE = 0x10,     /*!< Destination is FIFO: payload bits are continuously written to the RX FIFO and not subjected to any processing*/
-  DIRECT_RX_GPIO_MODE = 0x20      /*!< Destination is GPIO: payload bits are continuously written to one of the GPIO ports and not subjected to any processing*/
-}DirectRx;
-
-#define IS_DIRECT_RX(MODE)  (((MODE) == NORMAL_RX_MODE) || \
-		             ((MODE) == DIRECT_RX_FIFO_MODE) || \
-		             ((MODE) == DIRECT_RX_GPIO_MODE))
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Exported_Constants        Direct RF Exported Constants
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Exported_Macros           Direct RF Exported Macros
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Exported_Functions        Direct RF Exported Functions
- * @{
- */
-
-void SpiritDirectRfSetRxMode(DirectRx xDirectRx);
-DirectRx SpiritDirectRfGetRxMode(void);
-void SpiritDirectRfSetTxMode(DirectTx xDirectTx);
-DirectTx SpiritDirectRfGetTxMode(void);
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_General.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_General.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_General.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT General functionalities.
- * @details
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_GENERAL_H
-#define __SPIRIT_GENERAL_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_General     General
- * @brief Configuration and management of SPIRIT General functionalities.
- * @details See the file <i>@ref SPIRIT_General.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup General_Exported_Types     General Exported Types
- * @{
- */
-
-
-/**
- * @brief  SPIRIT ModeExtRef enumeration
- */
-
-typedef enum
-{
-  MODE_EXT_XO = 0,
-  MODE_EXT_XIN = !MODE_EXT_XO
-} ModeExtRef;
-
-#define IS_MODE_EXT(MODE)   (MODE == MODE_EXT_XO || \
-                             MODE == MODE_EXT_XIN)
-
-
-/**
- * @brief  SPIRIT BatteryLevel enumeration
- */
-
-typedef enum
-{
-  BLD_LVL_2_7_V = 0,
-  BLD_LVL_2_5_V = 1,
-  BLD_LVL_2_3_V = 2,
-  BLD_LVL_2_1_V = 3
-} BatteryLevel;
-
-#define IS_BLD_LVL(MODE)  (MODE == BLD_LVL_2_7_V || \
-                           MODE == BLD_LVL_2_5_V || \
-                           MODE == BLD_LVL_2_3_V || \
-                           MODE == BLD_LVL_2_1_V)
-
-
-/**
- * @brief  SPIRIT GmConf enumeration
- */
-
-typedef enum
-{
-  GM_SU_13_2 = 0,
-  GM_SU_18_2,
-  GM_SU_21_5,
-  GM_SU_25_6,
-  GM_SU_28_8,
-  GM_SU_33_9,
-  GM_SU_38_5,
-  GM_SU_43_0
-} GmConf;
-
-#define IS_GM_CONF(MODE)    (MODE == GM_SU_13_2 || \
-                             MODE == GM_SU_18_2 || \
-                             MODE == GM_SU_21_5 || \
-                             MODE == GM_SU_25_6 || \
-                             MODE == GM_SU_28_8 || \
-                             MODE == GM_SU_33_9 || \
-                             MODE == GM_SU_38_5 || \
-                             MODE == GM_SU_43_0)
-
-
-/**
- * @brief  SPIRIT packet type enumeration
- */
-
-typedef enum
-{
-  PKT_BASIC = 0x00,
-  PKT_MBUS = 0x02,
-  PKT_STACK
-
-} PacketType;
-
-#define IS_PKT_TYPE(TYPE)    (TYPE == PKT_BASIC || \
-                             TYPE == PKT_MBUS || \
-                             TYPE == PKT_STACK || \
-                             )
-
-
-/**
- * @brief  SPIRIT version type enumeration
- */
-
-typedef enum
-{
-  SPIRIT_VERSION_2_1 = 0x01,    /* Deprecated */
-  SPIRIT_VERSION_3_0,           /* The only version of SPIRIT1 */
-} SpiritVersion;
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup General_Exported_Constants         General Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup General_Exported_Macros            General Exported Macros
- * @{
- */
-#define SpiritGeneralLibraryVersion() "Spirit1_Libraries_v.3.2.0"
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup General_Exported_Functions         General Exported Functions
- * @{
- */
-
-
-void SpiritGeneralBatteryLevel(SpiritFunctionalState xNewState);
-void SpiritGeneralSetBatteryLevel(BatteryLevel xBatteryLevel);
-BatteryLevel SpiritGeneralGetBatteryLevel(void);
-void SpiritGeneralBrownOut(SpiritFunctionalState xNewState);
-void SpiritGeneralHighPwr(SpiritFunctionalState xNewState);
-void SpiritGeneralSetExtRef(ModeExtRef xExtMode);
-ModeExtRef SpiritGeneralGetExtRef(void);
-void SpiritGeneralSetXoGm(GmConf xGm);
-GmConf SpiritGeneralGetXoGm(void);
-PacketType SpiritGeneralGetPktType(void);
-uint16_t SpiritGeneralGetDevicePartNumber(void);
-uint8_t SpiritGeneralGetSpiritVersion(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Gpio.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Gpio.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Gpio.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   This file provides all the low level API to manage SPIRIT GPIO.
-  * 
- * @details
- *
- * This module can be used to configure the Spirit GPIO pins to perform
- * specific functions.
- * The structure <i>@ref gpioIRQ</i> can be used to specify these features for
- * one of the four Spirit Gpio pin.
- * The following example shows how to configure a pin (GPIO 3) to be used as an IRQ source
- * for a microcontroller using the <i>@ref SpiritGpioInit()</i> function.
- *
- * <b>Example:</b>
- * @code
- *
- * SGpioInit gpioIRQ={
- *   SPIRIT_GPIO_3,
- *   SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP,
- *   SPIRIT_GPIO_DIG_OUT_IRQ
- * };
- *
- * ...
- *
- * SpiritGpioInit(&gpioIRQ);
- *
- * @endcode
- *
- * @note Please read the functions documentation for the other GPIO features.
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_GPIO_H
-#define __SPIRIT_GPIO_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/** @defgroup SPIRIT_Gpio       GPIO
- * @brief Configuration and management of SPIRIT GPIO.
- * @details See the file <i>@ref SPIRIT_Gpio.h</i> for more details.
- * @{
- */
-
-
-
-/** @defgroup Gpio_Exported_Types       GPIO Exported Types
- * @{
- */
-
-/**
- * @brief  SPIRIT GPIO pin enumeration.
- */
-typedef enum
-{
-  SPIRIT_GPIO_0  = GPIO0_CONF_BASE, /*!< GPIO_0 selected */
-  SPIRIT_GPIO_1  = GPIO1_CONF_BASE, /*!< GPIO_1 selected */
-  SPIRIT_GPIO_2  = GPIO2_CONF_BASE, /*!< GPIO_2 selected */
-  SPIRIT_GPIO_3  = GPIO3_CONF_BASE  /*!< GPIO_3 selected */
-}SpiritGpioPin;
-
-
-#define IS_SPIRIT_GPIO(PIN)  ((PIN == SPIRIT_GPIO_0) || \
-                              (PIN == SPIRIT_GPIO_1) || \
-                              (PIN == SPIRIT_GPIO_2) || \
-                              (PIN == SPIRIT_GPIO_3))
-
-
-/**
- * @brief  SPIRIT GPIO mode enumeration.
- */
-typedef enum
-{
-  SPIRIT_GPIO_MODE_DIGITAL_INPUT      = 0x01, /*!< Digital Input on GPIO */
-  SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP  = 0x02, /*!< Digital Output on GPIO (low current) */
-  SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP  = 0x03  /*!< Digital Output on GPIO (high current) */
-}SpiritGpioMode;
-
-#define IS_SPIRIT_GPIO_MODE(MODE)   ((MODE == SPIRIT_GPIO_MODE_DIGITAL_INPUT) || \
-                                     (MODE == SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP) || \
-                                     (MODE == SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP))
-
-
-
-/**
- * @brief  SPIRIT I/O selection enumeration.
- */
-typedef enum
-{
-  SPIRIT_GPIO_DIG_OUT_IRQ                               = 0x00, /*!< nIRQ (Interrupt Request, active low) , default configuration after POR */
-  SPIRIT_GPIO_DIG_OUT_POR_INV                           = 0x08, /*!< POR inverted (active low) */
-  SPIRIT_GPIO_DIG_OUT_WUT_EXP                           = 0x10, /*!< Wake-Up Timer expiration: "1" when WUT has expired */
-  SPIRIT_GPIO_DIG_OUT_LBD                               = 0x18, /*!< Low battery detection: "1" when battery is below threshold setting */
-  SPIRIT_GPIO_DIG_OUT_TX_DATA                           = 0x20, /*!< TX data internal clock output (TX data are sampled on the rising edge of it) */
-  SPIRIT_GPIO_DIG_OUT_TX_STATE                          = 0x28, /*!< TX state indication: "1" when Spirit1 is passing in the TX state */
-  SPIRIT_GPIO_DIG_OUT_TX_FIFO_ALMOST_EMPTY              = 0x30, /*!< TX FIFO Almost Empty Flag */
-  SPIRIT_GPIO_DIG_OUT_TX_FIFO_ALMOST_FULL               = 0x38, /*!< TX FIFO Almost Full Flag */
-  SPIRIT_GPIO_DIG_OUT_RX_DATA                           = 0x40, /*!< RX data output */
-  SPIRIT_GPIO_DIG_OUT_RX_CLOCK                          = 0x48, /*!< RX clock output (recovered from received data) */
-  SPIRIT_GPIO_DIG_OUT_RX_STATE                          = 0x50, /*!< RX state indication: "1" when Spirit1 is passing in the RX state */
-  SPIRIT_GPIO_DIG_OUT_RX_FIFO_ALMOST_FULL               = 0x58, /*!< RX FIFO Almost Full Flag */
-  SPIRIT_GPIO_DIG_OUT_RX_FIFO_ALMOST_EMPTY              = 0x60, /*!< RX FIFO Almost Empty Flag */
-  SPIRIT_GPIO_DIG_OUT_ANTENNA_SWITCH                    = 0x68, /*!< Antenna switch used for antenna diversity  */
-  SPIRIT_GPIO_DIG_OUT_VALID_PREAMBLE                    = 0x70, /*!< Valid Preamble Detected Flag */
-  SPIRIT_GPIO_DIG_OUT_SYNC_DETECTED                     = 0x78, /*!< Sync WordSync Word Detected Flag */
-  SPIRIT_GPIO_DIG_OUT_RSSI_THRESHOLD                    = 0x80, /*!< RSSI above threshold */
-  SPIRIT_GPIO_DIG_OUT_MCU_CLOCK                         = 0x88, /*!< MCU Clock */
-  SPIRIT_GPIO_DIG_OUT_TX_RX_MODE                        = 0x90, /*!< TX or RX mode indicator (to enable an external range extender) */
-  SPIRIT_GPIO_DIG_OUT_VDD                               = 0x98, /*!< VDD (to emulate an additional GPIO of the MCU, programmable by SPI) */
-  SPIRIT_GPIO_DIG_OUT_GND                               = 0xA0, /*!< GND (to emulate an additional GPIO of the MCU, programmable by SPI) */
-  SPIRIT_GPIO_DIG_OUT_SMPS_EXT                          = 0xA8, /*!< External SMPS enable signal (active high) */
-  SPIRIT_GPIO_DIG_OUT_SLEEP_OR_STANDBY                  = 0xB0,
-  SPIRIT_GPIO_DIG_OUT_READY                             = 0xB8,
-  SPIRIT_GPIO_DIG_OUT_LOCK                              = 0xC0,
-  SPIRIT_GPIO_DIG_OUT_WAIT_FOR_LOCK_SIG                 = 0xC8,
-  SPIRIT_GPIO_DIG_OUT_WAIT_FOR_TIMER_FOR_LOCK           = 0xD0,
-  SPIRIT_GPIO_DIG_OUT_WAIT_FOR_READY2_SIG               = 0xD8,
-  SPIRIT_GPIO_DIG_OUT_WAIT_FOR_TIMER_FOR_PM_SET         = 0xE0,
-  SPIRIT_GPIO_DIG_OUT_WAIT_VCO_CALIBRATION              = 0xE8,
-  SPIRIT_GPIO_DIG_OUT_ENABLE_SYNTH_FULL_CIRCUIT         = 0xF0,
-  SPIRIT_GPIO_DIG_OUT_WAIT_FOR_RCCAL_OK_SIG             = 0xFF,
-
-  SPIRIT_GPIO_DIG_IN_TX_COMMAND                         = 0x00,
-  SPIRIT_GPIO_DIG_IN_RX_COMMAND                         = 0x08,
-  SPIRIT_GPIO_DIG_IN_TX_DATA_INPUT_FOR_DIRECTRF         = 0x10,
-  SPIRIT_GPIO_DIG_IN_DATA_WAKEUP                        = 0x18,
-  SPIRIT_GPIO_DIG_IN_EXT_CLOCK_AT_34_7KHZ               = 0x20
-
-}SpiritGpioIO;
-
-#define IS_SPIRIT_GPIO_IO(IO_SEL)        ((IO_SEL == SPIRIT_GPIO_DIG_OUT_IRQ) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_POR_INV) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WUT_EXP) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_LBD) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_TX_DATA) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_TX_STATE) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_TX_FIFO_ALMOST_EMPTY) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_TX_FIFO_ALMOST_FULL) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RX_DATA) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RX_CLOCK) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RX_STATE) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RX_FIFO_ALMOST_FULL) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RX_FIFO_ALMOST_EMPTY) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_ANTENNA_SWITCH) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_VALID_PREAMBLE) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_SYNC_DETECTED) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_RSSI_THRESHOLD) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_MCU_CLOCK) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_TX_RX_MODE) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_VDD) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_GND) || \
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_SMPS_EXT) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_SLEEP_OR_STANDBY) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_READY) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_LOCK) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_FOR_LOCK_SIG) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_FOR_TIMER_FOR_LOCK) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_FOR_READY2_SIG) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_FOR_TIMER_FOR_PM_SET) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_VCO_CALIBRATION) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_ENABLE_SYNTH_FULL_CIRCUIT) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_OUT_WAIT_FOR_RCCAL_OK_SIG) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_IN_TX_COMMAND) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_IN_RX_COMMAND) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_IN_TX_DATA_INPUT_FOR_DIRECTRF) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_IN_DATA_WAKEUP) ||\
-                                          (IO_SEL == SPIRIT_GPIO_DIG_IN_EXT_CLOCK_AT_34_7KHZ))
-
-/**
- * @brief  SPIRIT OutputLevel enumeration.
- */
-
-typedef enum
-{
-  LOW = 0,
-  HIGH = !LOW
-}OutputLevel;
-
-#define IS_SPIRIT_GPIO_LEVEL(LEVEL)      ((LEVEL == LOW) || \
-                                          (LEVEL == HIGH))
-
-
-/**
- * @brief  SPIRIT GPIO Init structure definition.
- */
-typedef struct
-{
-  SpiritGpioPin xSpiritGpioPin;    /*!< Specifies the GPIO pins to be configured.
-                                        This parameter can be any value of @ref SpiritGpioPin */
-
-  SpiritGpioMode xSpiritGpioMode;  /*!< Specifies the operating mode for the selected pins.
-                                        This parameter can be a value of @ref SpiritGpioMode */
-
-  SpiritGpioIO xSpiritGpioIO;      /*!< Specifies the I/O selection for the selected pins.
-                                        This parameter can be a value of @ref SpiritGpioIO */
-
-}SGpioInit;
-
-
-
-/**
- * @brief  SPIRIT clock output XO prescaler enumeration.
- */
-
-typedef enum
-{
- XO_RATIO_1     = 0x00, /*!< XO Clock signal available on the GPIO divided by 1     */
- XO_RATIO_2_3	= 0x02, /*!< XO Clock signal available on the GPIO divided by 2/3   */
- XO_RATIO_1_2	= 0x04, /*!< XO Clock signal available on the GPIO divided by 1/2   */
- XO_RATIO_1_3	= 0x06, /*!< XO Clock signal available on the GPIO divided by 1/3   */
- XO_RATIO_1_4	= 0x08, /*!< XO Clock signal available on the GPIO divided by 1/4   */
- XO_RATIO_1_6	= 0x0A, /*!< XO Clock signal available on the GPIO divided by 1/6   */
- XO_RATIO_1_8	= 0x0C, /*!< XO Clock signal available on the GPIO divided by 1/8   */
- XO_RATIO_1_12	= 0x0E, /*!< XO Clock signal available on the GPIO divided by 1/12  */
- XO_RATIO_1_16	= 0x10, /*!< XO Clock signal available on the GPIO divided by 1/16  */
- XO_RATIO_1_24	= 0x12, /*!< XO Clock signal available on the GPIO divided by 1/24  */
- XO_RATIO_1_36	= 0x14, /*!< XO Clock signal available on the GPIO divided by 1/36  */
- XO_RATIO_1_48	= 0x16, /*!< XO Clock signal available on the GPIO divided by 1/48  */
- XO_RATIO_1_64	= 0x18, /*!< XO Clock signal available on the GPIO divided by 1/64  */
- XO_RATIO_1_96	= 0x1A, /*!< XO Clock signal available on the GPIO divided by 1/96  */
- XO_RATIO_1_128	= 0x1C, /*!< XO Clock signal available on the GPIO divided by 1/128 */
- XO_RATIO_1_192	= 0x1E  /*!< XO Clock signal available on the GPIO divided by 1/196 */
-}ClockOutputXOPrescaler;
-
-#define IS_SPIRIT_CLOCK_OUTPUT_XO(RATIO) ((RATIO == XO_RATIO_1) || \
-                                           (RATIO == XO_RATIO_2_3) || \
-                                           (RATIO == XO_RATIO_1_2) || \
-                                           (RATIO == XO_RATIO_1_3) || \
-                                           (RATIO == XO_RATIO_1_4) || \
-                                           (RATIO == XO_RATIO_1_6) || \
-                                           (RATIO == XO_RATIO_1_8) || \
-                                           (RATIO == XO_RATIO_1_12) || \
-                                           (RATIO == XO_RATIO_1_16) || \
-                                           (RATIO == XO_RATIO_1_24) || \
-                                           (RATIO == XO_RATIO_1_36) || \
-                                           (RATIO == XO_RATIO_1_48) || \
-                                           (RATIO == XO_RATIO_1_64) || \
-                                           (RATIO == XO_RATIO_1_96) || \
-                                           (RATIO == XO_RATIO_1_128) || \
-                                           (RATIO == XO_RATIO_1_192))
-
-/**
- * @brief  SPIRIT Clock Output RCO prescaler enumeration.
- */
-
-typedef enum
-{
- RCO_RATIO_1              = 0x00, /*!< RCO Clock signal available on the GPIO divided by 1     */
- RCO_RATIO_1_128	  = 0x01  /*!< RCO Clock signal available on the GPIO divided by 1/128   */
-}ClockOutputRCOPrescaler;
-
-#define IS_SPIRIT_CLOCK_OUTPUT_RCO(RATIO) ((RATIO == RCO_RATIO_1) || \
-                                           (RATIO == RCO_RATIO_1_128))
-
-/**
- * @brief  SPIRIT ExtraClockCycles enumeration.
- */
-
-typedef enum
-{
-EXTRA_CLOCK_CYCLES_0	= 0x00, /*!< 0   extra clock cycles provided to the MCU before switching to STANDBY state */
-EXTRA_CLOCK_CYCLES_64	= 0x20, /*!< 64  extra clock cycles provided to the MCU before switching to STANDBY state */
-EXTRA_CLOCK_CYCLES_256	= 0x40, /*!< 256 extra clock cycles provided to the MCU before switching to STANDBY state */
-EXTRA_CLOCK_CYCLES_512	= 0x60  /*!< 512 extra clock cycles provided to the MCU before switching to STANDBY state */
-}ExtraClockCycles;
-
-#define IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(CYCLES) ((CYCLES == EXTRA_CLOCK_CYCLES_0) || \
-                                                      (CYCLES == EXTRA_CLOCK_CYCLES_64) || \
-                                                      (CYCLES == EXTRA_CLOCK_CYCLES_256) || \
-                                                      (CYCLES == EXTRA_CLOCK_CYCLES_512))
-
-
-/**
- * @brief  SPIRIT Clock Output initialization structure definition.
- */
-typedef struct
-{
-  ClockOutputXOPrescaler   xClockOutputXOPrescaler;  /*!< Specifies the XO Ratio as clock output.
-                                                          This parameter can be any value of @ref ClockOutputXOPrescaler */
-
-  ClockOutputRCOPrescaler  xClockOutputRCOPrescaler; /*!< Specifies the RCO Ratio as clock output.
-                                                          This parameter can be a value of @ref ClockOutputRCOPrescaler */
-
-  ExtraClockCycles         xExtraClockCycles;       /*!< Specifies the Extra Clock Cycles provided before entering in Standby State.
-                                                          This parameter can be a value of @ref ExtraClockCycles */
-
-}ClockOutputInit;
-
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Exported_Constants   GPIO Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Exported_Macros      GPIO Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Exported_Functions   GPIO Exported Functions
- * @{
- */
-
-void SpiritGpioInit(SGpioInit* pxGpioInitStruct);
-void SpiritGpioTemperatureSensor(SpiritFunctionalState xNewState);
-void SpiritGpioSetLevel(SpiritGpioPin xGpioX, OutputLevel xLevel);
-OutputLevel SpiritGpioGetLevel(SpiritGpioPin xGpioX);
-void SpiritGpioClockOutput(SpiritFunctionalState xNewState);
-void SpiritGpioClockOutputInit(ClockOutputInit* pxClockOutputInitStruct);
-void SpiritGpioSetXOPrescaler(ClockOutputXOPrescaler xXOPrescaler);
-ClockOutputXOPrescaler SpiritGpioGetXOPrescaler(void);
-void SpiritGpioSetRCOPrescaler(ClockOutputRCOPrescaler xRCOPrescaler);
-ClockOutputRCOPrescaler SpiritGpioGetRCOPrescaler(void);
-void SpiritGpioSetExtraClockCycles(ExtraClockCycles xExtraCycles);
-ExtraClockCycles SpiritGpioGetExtraClockCycles(void);
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,357 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Irq.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT IRQs.
-  * 
- * @details
- *
- * On the Spirit side specific IRQs can be enabled by setting a specific bitmask.
- * The Spirit libraries allow the user to do this in two different ways:
- * <ul>
- *
- * <li>The first enables the IRQs one by one, i.e. using an SPI transaction for each
- * IRQ to enable.
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritIrqDeInit(NULL);                // this call is used to reset the IRQ mask registers
- *  SpiritIrq(RX_DATA_READY , S_ENABLE);
- *  SpiritIrq(VALID_SYNC , S_ENABLE);
- *  SpiritIrq(RX_TIMEOUT , S_ENABLE);
- *
- * @endcode
- *
- * </li>
- *
- * <li>The second strategy is to set the IRQ bitfields structure. So, during the initialization the user
- * has to fill the @ref SpiritIrqs structure setting to one the single field related to the IRQ he
- * wants to enable, and to zero the single field related to all the IRQs he wants to disable.
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritIrqs irqMask;
- *
- *  ...
- *
- *  SpiritIrqDeInit(&irqMask);                // this call is used to reset the IRQ mask registers
- *                                            // and to set to 0x00000000 the irq mask in order to disable
- *                                            // all IRQs (disabled by default on startup)
- *  irqMask.IRQ_RX_DATA_READY = 1;
- *  irqMask.IRQ_VALID_SYNC = 1;
- *  irqMask.IRQ_RX_TIMEOUT = 1;
- *
- *  ...
- * @endcode
- * </li>
- * </ul>
- *
- * The most applications will require a Spirit IRQ notification on an microcontroller EXTI line.
- * Then, the user can check which IRQ has been raised using two different ways.
- *
- * On the ISR of the EXTI line phisically linked to the Spirit pin configured for IRQ:
- *
- * <ul>
- * <li> Check <b>only one</b> Spirit IRQ (because the Spirit IRQ status register automatically blanks itself
- * after an SPI reading) into the ISR.
- *
- * <b>Example:</b>
- * @code
- *
- *  if(SpiritIrqCheckFlag(RX_DATA_READY))
- *  {
- *          // do something...
- *  }
- *
- * @endcode
- * </li>
- *
- * <li> Check more than one Spirit IRQ status by storing the entire IRQ status registers into a bitfields <i>@ref SpiritIrqs</i> structure
- * and then check the interested bits.
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritIrqGetStatus(&irqStatus);
- *
- *  if(irqStatus.IRQ_RX_DATA_READY)
- *  {
- *          // do something...
- *  }
- *  if(irqStatus.IRQ_VALID_SYNC)
- *  {
- *         // do something...
- *  }
- *  if(irqStatus.RX_TIMEOUT)
- *  {
- *         // do something...
- *  }
- *
- * @endcode
- * </li>
- * </ul>
- *
-
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT1_IRQ_H
-#define __SPIRIT1_IRQ_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Irq IRQ
- * @brief Configuration and management of SPIRIT IRQs.
- * @details See the file <i>@ref SPIRIT_Irq.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Irq_Exported_Types IRQ Exported Types
- * @{
- */
-
-
-/**
- * @brief IRQ bitfield structure for SPIRIT. This structure is used to read or write the single IRQ bit.
- *        During the initialization the user has to fill this structure setting to one the single field related
- *        to the IRQ he wants to enable, and to zero the single field related to all the IRQs he wants to disable.
- *        The same structure can be used to retrieve all the IRQ events from the IRQ registers IRQ_STATUS[3:0],
- *        and read if one or more specific IRQ raised.
- * @note  The fields order in the structure depends on used endianness (little or big
- *        endian). The actual definition is valid ONLY for LITTLE ENDIAN mode. Be sure to
- *        change opportunely the fields order when use a different endianness.
- */
-typedef struct
-{
-	  SpiritFlagStatus  IRQ_SYNTH_LOCK_TIMEOUT:1;       /*!< IRQ: only for debug; LOCK state timeout */
-	  SpiritFlagStatus  IRQ_SYNTH_LOCK_STARTUP:1;       /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
-	  SpiritFlagStatus  IRQ_SYNTH_CAL_TIMEOUT:1;        /*!< IRQ: only for debug; SYNTH calibration timeout */
-	  SpiritFlagStatus  IRQ_TX_START_TIME:1;            /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
-	  SpiritFlagStatus  IRQ_RX_START_TIME:1;            /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
-	  SpiritFlagStatus  IRQ_RX_TIMEOUT:1;               /*!< IRQ: RX operation timeout */
-	  SpiritFlagStatus  IRQ_AES_END:1;                  /*!< IRQ: AES End of operation */
-	  SpiritFlagStatus  reserved:1;                     /*!< Reserved bit */
-
-	  SpiritFlagStatus  IRQ_READY:1;                    /*!< IRQ: READY state */
-	  SpiritFlagStatus  IRQ_STANDBY_DELAYED:1;          /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
-	  SpiritFlagStatus  IRQ_LOW_BATT_LVL:1;             /*!< IRQ: Battery level below threshold*/
-	  SpiritFlagStatus  IRQ_POR:1;                      /*!< IRQ: Power On Reset */
-	  SpiritFlagStatus  IRQ_BOR:1;                      /*!< IRQ: Brown out event (both accurate and inaccurate)*/
-	  SpiritFlagStatus  IRQ_LOCK:1;                     /*!< IRQ: LOCK state */
-	  SpiritFlagStatus  IRQ_PM_COUNT_EXPIRED:1;         /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
-	  SpiritFlagStatus  IRQ_XO_COUNT_EXPIRED:1;         /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */
-
-	  SpiritFlagStatus  IRQ_TX_FIFO_ALMOST_EMPTY:1;     /*!< IRQ: TX FIFO almost empty */
-	  SpiritFlagStatus  IRQ_RX_FIFO_ALMOST_FULL:1;      /*!< IRQ: RX FIFO almost full */
-	  SpiritFlagStatus  IRQ_RX_FIFO_ALMOST_EMPTY:1;     /*!< IRQ: RX FIFO almost empty  */
-	  SpiritFlagStatus  IRQ_MAX_BO_CCA_REACH:1;         /*!< IRQ: Max number of back-off during CCA */
-	  SpiritFlagStatus  IRQ_VALID_PREAMBLE:1;           /*!< IRQ: Valid preamble detected */
-	  SpiritFlagStatus  IRQ_VALID_SYNC:1;               /*!< IRQ: Sync word detected */
-	  SpiritFlagStatus  IRQ_RSSI_ABOVE_TH:1;            /*!< IRQ: RSSI above threshold */
-	  SpiritFlagStatus  IRQ_WKUP_TOUT_LDC:1;            /*!< IRQ: Wake-up timeout in LDC mode */
-
-	  SpiritFlagStatus  IRQ_RX_DATA_READY:1;            /*!< IRQ: RX data ready */
-	  SpiritFlagStatus  IRQ_RX_DATA_DISC:1;             /*!< IRQ: RX data discarded (upon filtering) */
-	  SpiritFlagStatus  IRQ_TX_DATA_SENT:1;             /*!< IRQ: TX data sent */
-	  SpiritFlagStatus  IRQ_MAX_RE_TX_REACH:1;          /*!< IRQ: Max re-TX reached */
-	  SpiritFlagStatus  IRQ_CRC_ERROR:1;                /*!< IRQ: CRC error */
-	  SpiritFlagStatus  IRQ_TX_FIFO_ERROR:1;            /*!< IRQ: TX FIFO underflow/overflow error */
-	  SpiritFlagStatus  IRQ_RX_FIFO_ERROR:1;            /*!< IRQ: RX FIFO underflow/overflow error */
-	  SpiritFlagStatus  IRQ_TX_FIFO_ALMOST_FULL:1;      /*!< IRQ: TX FIFO almost full */
-} SpiritIrqs;
-
-// betzw: uint32_t masks
-#define IRQ_TX_FIFO_ALMOST_EMPTY_MASK	(0x00010000) /* (1<<16) */
-#define IRQ_RX_FIFO_ALMOST_FULL_MASK	(0x00020000) /* (1<<17) */
-#define IRQ_VALID_SYNC_MASK				(0x00200000) /* (1<<21) */
-#define IRQ_RX_DATA_READY_MASK			(0x01000000) /* (1<<24) */
-#define IRQ_RX_DATA_DISC_MASK			(0x02000000) /* (1<<25) */
-#define IRQ_TX_DATA_SENT_MASK			(0x04000000) /* (1<<26) */
-#define IRQ_TX_FIFO_ERROR_MASK			(0x20000000) /* (1<<29) */
-#define IRQ_RX_FIFO_ERROR_MASK			(0x40000000) /* (1<<30) */
-
-/**
- * @brief  IRQ list enumeration for SPIRIT. This enumeration type can be used to address a
- *         specific IRQ.
- */
-typedef enum
-{
-  RX_DATA_READY = 0x00000001,           /*!< IRQ: RX data ready */
-  RX_DATA_DISC = 0x00000002,            /*!< IRQ: RX data discarded (upon filtering) */
-  TX_DATA_SENT = 0x00000004,            /*!< IRQ: TX data sent */
-  MAX_RE_TX_REACH = 0x00000008,         /*!< IRQ: Max re-TX reached */
-  CRC_ERROR = 0x00000010,               /*!< IRQ: CRC error */
-  TX_FIFO_ERROR = 0x00000020,           /*!< IRQ: TX FIFO underflow/overflow error */
-  RX_FIFO_ERROR = 0x00000040,           /*!< IRQ: RX FIFO underflow/overflow error */
-  TX_FIFO_ALMOST_FULL = 0x00000080,     /*!< IRQ: TX FIFO almost full */
-  TX_FIFO_ALMOST_EMPTY = 0x00000100,    /*!< IRQ: TX FIFO almost empty */
-  RX_FIFO_ALMOST_FULL = 0x00000200,     /*!< IRQ: RX FIFO almost full */
-  RX_FIFO_ALMOST_EMPTY = 0x00000400,    /*!< IRQ: RX FIFO almost empty  */
-  MAX_BO_CCA_REACH = 0x00000800,        /*!< IRQ: Max number of back-off during CCA */
-  VALID_PREAMBLE = 0x00001000,          /*!< IRQ: Valid preamble detected */
-  VALID_SYNC = 0x00002000,              /*!< IRQ: Sync word detected */
-  RSSI_ABOVE_TH = 0x00004000,           /*!< IRQ: RSSI above threshold */
-  WKUP_TOUT_LDC = 0x00008000,           /*!< IRQ: Wake-up timeout in LDC mode */
-  READY = 0x00010000,                   /*!< IRQ: READY state */
-  STANDBY_DELAYED = 0x00020000,         /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
-  LOW_BATT_LVL = 0x00040000,            /*!< IRQ: Battery level below threshold*/
-  POR = 0x00080000,                     /*!< IRQ: Power On Reset */
-  BOR = 0x00100000,                     /*!< IRQ: Brown out event (both accurate and inaccurate)*/
-  LOCK = 0x00200000,                    /*!< IRQ: LOCK state */
-  PM_COUNT_EXPIRED = 0x00400000,        /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
-  XO_COUNT_EXPIRED = 0x00800000,        /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */
-  SYNTH_LOCK_TIMEOUT = 0x01000000,      /*!< IRQ: only for debug; LOCK state timeout */
-  SYNTH_LOCK_STARTUP = 0x02000000,      /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
-  SYNTH_CAL_TIMEOUT = 0x04000000,       /*!< IRQ: only for debug; SYNTH calibration timeout */
-  TX_START_TIME = 0x08000000,	        /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
-  RX_START_TIME = 0x10000000,	        /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
-  RX_TIMEOUT = 0x20000000,	        /*!< IRQ: RX operation timeout */
-  AES_END = 0x40000000,                 /*!< IRQ: AES End of operation */
-  ALL_IRQ = 0x7FFFFFFF			/*!< All the above mentioned IRQs */
-
-} IrqList;
-
-#define IS_SPIRIT_IRQ_LIST(VALUE)   ((VALUE == RX_DATA_READY) || \
-                                     (VALUE == RX_DATA_DISC)  || \
-                                     (VALUE == TX_DATA_SENT)  || \
-                                     (VALUE == MAX_RE_TX_REACH)  || \
-                                     (VALUE == CRC_ERROR)  || \
-                                     (VALUE == TX_FIFO_ERROR)  || \
-                                     (VALUE == RX_FIFO_ERROR)  || \
-                                     (VALUE == TX_FIFO_ALMOST_FULL)  || \
-                                     (VALUE == TX_FIFO_ALMOST_EMPTY)  || \
-                                     (VALUE == RX_FIFO_ALMOST_FULL)  || \
-                                     (VALUE == RX_FIFO_ALMOST_EMPTY)  || \
-                                     (VALUE == MAX_BO_CCA_REACH)  || \
-                                     (VALUE == VALID_PREAMBLE)  || \
-                                     (VALUE == VALID_SYNC)  || \
-                                     (VALUE == RSSI_ABOVE_TH)  || \
-                                     (VALUE == WKUP_TOUT_LDC)  || \
-                                     (VALUE == READY)  || \
-                                     (VALUE == STANDBY_DELAYED)  || \
-                                     (VALUE == LOW_BATT_LVL)  || \
-                                     (VALUE == POR)  || \
-                                     (VALUE == BOR)  || \
-                                     (VALUE == LOCK)  || \
-                                     (VALUE == PM_COUNT_EXPIRED)  || \
-                                     (VALUE == XO_COUNT_EXPIRED)  || \
-                                     (VALUE == SYNTH_LOCK_TIMEOUT)  || \
-                                     (VALUE == SYNTH_LOCK_STARTUP)  || \
-                                     (VALUE == SYNTH_CAL_TIMEOUT)  || \
-                                     (VALUE == TX_START_TIME)  || \
-                                     (VALUE == RX_START_TIME)  || \
-                                     (VALUE == RX_TIMEOUT)  || \
-                                     (VALUE == AES_END)   || \
-				     (VALUE == ALL_IRQ ))
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Irq_Exported_Constants     IRQ Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Irq_Exported_Macros        IRQ Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Irq_Exported_Functions     IRQ Exported Functions
- * @{
- */
-
-void SpiritIrqDeInit(SpiritIrqs* pxIrqInit);
-void SpiritIrqInit(SpiritIrqs* pxIrqInit);
-void SpiritIrq(IrqList xIrq, SpiritFunctionalState xNewState);
-void SpiritIrqGetMask(SpiritIrqs* pxIrqMask);
-void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus);
-void SpiritIrqClearStatus(void);
-SpiritBool SpiritIrqCheckFlag(IrqList xFlag);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_LinearFifo.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_LinearFifo.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_LinearFifo.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT Fifo.
- * @details
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
- *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_LINEAR_FIFO_H
-#define __SPIRIT_LINEAR_FIFO_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_LinearFifo          Linear FIFO
- * @brief Configuration and management of SPIRIT FIFO.
- * @details See the file <i>@ref SPIRIT_LinearFifo.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup LinearFifo_Exported_Types  Linear FIFO Exported Types
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup LinearFifo_Exported_Constants      Linear FIFO Exported Constants
- * @{
- */
-#define IS_FIFO_THR(VAL)  (VAL<=96)
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup LinearFifo_Exported_Macros         Linear FIFO Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup LinearFifo_Exported_Functions                      Linear FIFO Exported Functions
- * @{
- */
-
-uint8_t SpiritLinearFifoReadNumElementsRxFifo(void);
-uint8_t SpiritLinearFifoReadNumElementsTxFifo(void);
-void SpiritLinearFifoSetAlmostFullThresholdRx(uint8_t cThrRxFifo);
-uint8_t SpiritLinearFifoGetAlmostFullThresholdRx(void);
-void SpiritLinearFifoSetAlmostEmptyThresholdRx(uint8_t cThrRxFifo);
-uint8_t SpiritLinearFifoGetAlmostEmptyThresholdRx(void);
-void SpiritLinearFifoSetAlmostFullThresholdTx(uint8_t cThrTxFifo);
-uint8_t SpiritLinearFifoGetAlmostFullThresholdTx(void);
-void SpiritLinearFifoSetAlmostEmptyThresholdTx(uint8_t cThrTxFifo);
-uint8_t SpiritLinearFifoGetAlmostEmptyThresholdTx(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Management.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Management.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Management.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   The management layer for SPIRIT1 library.
- * @details
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef SPIRIT_MANAGEMENT_H_
-#define SPIRIT_MANAGEMENT_H_
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Config.h"
-
-#ifdef __cplusplus
-  extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_MANAGEMENT          Management
- * @brief Workarounds for Spirit1.
- * @details See the file <i>@ref SPIRIT_Management.h</i> for more details.
- * @{
- */
-
-
-/**
- * @addgroup SPIRIT_MANAGEMENT_FUNCTIONS
- * @{
- */
-
-   
-
-
-uint8_t SpiritManagementWaVcoCalibration(void);
-void SpiritManagementWaCmdStrobeTx(void);
-void SpiritManagementWaCmdStrobeRx(void);
-void SpiritManagementWaTRxFcMem(uint32_t nDesiredFreq);
-void SpiritManagementWaExtraCurrent(void);
-
-/**
-* @}
-*/
-
-/**
-* @}
-*/
-
-/**
-* @}
-*/
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
-
-
- /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
-
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktBasic.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktBasic.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,696 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_PktBasic.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT Basic packets.
-  * 
- * @details
- *
- * This module can be used to manage the configuration of Spirit Basic
- * packets.
- * The user can obtain a packet configuration filling the structure
- * <i>@ref PktBasicInit</i>, defining in it some general parameters
- * for the Spirit Basic packet format.
- * Another structure the user can fill is <i>@ref PktBasicAddressesInit</i>
- * to define the addresses which will be used during the communication.
- * Moreover, functions to set the payload length and the destination address
- * are provided.
- *
- * <b>Example:</b>
- * @code
- *
- * PktBasicInit basicInit={
- *   PKT_PREAMBLE_LENGTH_08BYTES,       // preamble length in bytes
- *   PKT_SYNC_LENGTH_4BYTES,            // sync word length in bytes
- *   0x1A2635A8,                        // sync word
- *   PKT_LENGTH_VAR,                    // variable or fixed payload length
- *   7,                                 // length field width in bits (used only for variable length)
- *   PKT_NO_CRC,                        // CRC mode
- *   PKT_CONTROL_LENGTH_0BYTES,         // control field length
- *   S_ENABLE,                          // address field
- *   S_DISABLE,                         // FEC
- *   S_ENABLE                           // whitening
- * };
- *
- * PktBasicAddressesInit addressInit={
- *   S_ENABLE,                          // enable/disable filtering on my address
- *   0x34,                              // my address (address of the current node)
- *   S_DISABLE,                         // enable/disable filtering on multicast address
- *   0xEE,                              // multicast address
- *   S_DISABLE,                         // enable/disable filtering on broadcast address
- *   0xFF                               // broadcast address
- * };
- *
- * ...
- *
- * SpiritPktBasicInit(&basicInit);
- * SpiritPktBasicAddressesInit(&addressInit);
- *
- * ...
- *
- * SpiritPktBasicSetPayloadLength(20);
- * SpiritPktBasicSetDestinationAddress(0x44);
- *
- * ...
- *
- * @endcode
- *
- * The module provides some other functions that can be used to modify
- * or read only some configuration parameters.
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_PKT_BASIC_H
-#define __SPIRIT_PKT_BASIC_H
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-#include "SPIRIT_PktCommon.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_PktBasic    Pkt Basic
- * @brief Configuration and management of SPIRIT Basic packets.
- * @details See the file <i>@ref SPIRIT_PktBasic.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup PktBasic_Exported_Types    Pkt Basic Exported Types
- * @{
- */
-
-
-/**
- * @brief  Preamble length in bytes enumeration.
- */
-typedef PktPreambleLength                  BasicPreambleLength;
-
-#define IS_BASIC_PREAMBLE_LENGTH           IS_PKT_PREAMBLE_LENGTH
-
-/**
- * @brief  Sync length in bytes enumeration.
- */
-typedef PktSyncLength                      BasicSyncLength;
-
-#define IS_BASIC_SYNC_LENGTH               IS_PKT_SYNC_LENGTH
-
-
-
-/**
- * @brief  CRC length in bytes enumeration.
- */
-typedef PktCrcMode                         BasicCrcMode;
-
-#define IS_BASIC_CRC_MODE                  IS_PKT_CRC_MODE
-
-
-/**
- * @brief  Fixed or variable payload length enumeration.
- */
-typedef PktFixVarLength                    BasicFixVarLength;
-
-#define IS_BASIC_FIX_VAR_LENGTH            IS_PKT_FIX_VAR_LENGTH
-
-/**
- * @brief  Control length in bytes enumeration.
- */
-typedef PktControlLength                   BasicControlLength;
-
-#define IS_BASIC_CONTROL_LENGTH            IS_PKT_CONTROL_LENGTH
-
-/**
- * @brief  Sync words enumeration.
- */
-typedef PktSyncX                           BasicSyncX;
-
-#define IS_BASIC_SYNCx                     IS_PKT_SYNCx
-
-
-/**
- * @brief  SPIRIT Basic Packet Init structure definition. This structure allows users to set the main options
- *         for the Basic packet.
- */
-typedef struct
-{
-
-  BasicPreambleLength           xPreambleLength;        /*!< Specifies the preamble length.
-                                                             This parameter can be any value of @ref BasicPreambleLength */
-  BasicSyncLength               xSyncLength;            /*!< Specifies the sync word length. The 32bit word passed (lSyncWords) will be stored in the SYNCx registers from the MSb
-                                                             until the number of bytes in xSyncLength has been stored.
-                                                             This parameter can be any value of @ref BasicSyncLength */
-  uint32_t                      lSyncWords;             /*!< Specifies the sync words.
-                                                             This parameter is a uint32_t word with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4| */
-  BasicFixVarLength             xFixVarLength;          /*!< Specifies if a fixed length of packet has to be used.
-                                                             This parameter can be any value of @ref BasicFixVarLength */
-  uint8_t                       cPktLengthWidth;        /*!< Specifies the size of the length of packet in bits. This field is useful only if
-                                                             the field xFixVarLength is set to BASIC_LENGTH_VAR. For Basic packets the length width
-                                                             is log2( max payload length + control length (0 to 4) + address length (0 or 1)).
-                                                             This parameter is an uint8_t */
-  BasicCrcMode                  xCrcMode;               /*!< Specifies the CRC word length of packet.
-                                                             This parameter can be any value of @ref BasicCrcMode */
-  BasicControlLength            xControlLength;         /*!< Specifies the length of a control field to be sent.
-                                                             This parameter can be any value of @ref BasicControlLength */
-  SpiritFunctionalState         xAddressField;          /*!< Specifies if the destination address has to be sent.
-                                                             This parameter can be S_ENABLE or S_DISABLE */
-  SpiritFunctionalState         xFec;                   /*!< Specifies if FEC has to be enabled.
-                                                             This parameter can be S_ENABLE or S_DISABLE */
-  SpiritFunctionalState         xDataWhitening;         /*!< Specifies if data whitening has to be enabled.
-                                                             This parameter can be S_ENABLE or S_DISABLE */
-}PktBasicInit;
-
-
-/**
- * @brief  SPIRIT Basic Packet address structure definition. This structure allows users to specify
- *         the node/multicast/broadcast addresses and the correspondent filtering options.
- */
-typedef struct
-{
-
-  SpiritFunctionalState         xFilterOnMyAddress;             /*!< If set RX packet is accepted if its destination address matches with cMyAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cMyAddress;                     /*!< Specifies the TX packet source address (address of this node).
-                                                                     This parameter is an uint8_t */
-  SpiritFunctionalState         xFilterOnMulticastAddress;      /*!< If set RX packet is accepted if its destination address matches with cMulticastAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cMulticastAddress;              /*!< Specifies the Multicast group address for this node.
-                                                                     This parameter is an uint8_t */
-  SpiritFunctionalState         xFilterOnBroadcastAddress;      /*!< If set RX packet is accepted if its destination address matches with cBroadcastAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cBroadcastAddress;              /*!< Specifies the Broadcast address for this node.
-                                                                     This parameter is an uint8_t */
-}PktBasicAddressesInit;
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Exported_Constants        Pkt Basic Exported Constants
- * @{
- */
-
-#define IS_BASIC_LENGTH_WIDTH_BITS                      IS_PKT_LENGTH_WIDTH_BITS
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Exported_Macros   Pkt Basic Exported Macros
- * @{
- */
-
-/**
- * @brief  Macro used to compute per lower part of the packet length
- *         for Spirit Basic packets, to write in the PCKTLEN0 register.
- * @param  nLength Length of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define BASIC_BUILD_PCKTLEN0(nLength)                                            BUILD_PCKTLEN0(nLength)
-
-
-/**
- * @brief  Macro used to compute per upper part of the packet length
- *         for Spirit Basic packets, to write the PCKTLEN1 register.
- * @param  nLengthLength of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define BASIC_BUILD_PCKTLEN1(nLength)                                            BUILD_PCKTLEN1(nLength)
-
-/**
- * @brief  Sets the CONTROL field length for SPIRIT Basic packets.
- * @param  xControlLength length of CONTROL field in bytes.
- *         This parameter can be any value of @ref PktControlLength.
- * @retval None.
- */
-#define SpiritPktBasicSetControlLength(xControlLength)                  SpiritPktCommonSetControlLength(xControlLength)
-
-
-/**
- * @brief  Returns the CONTROL field length for SPIRIT Basic packets.
- * @param  None.
- * @retval uint8_t Control field length.
- */
-#define SpiritPktBasicGetControlLength()                                SpiritPktCommonGetControlLength()
-
-
-/**
- * @brief  Sets the PREAMBLE field length for SPIRIT Basic packets.
- * @param  xPreambleLength length of PREAMBLE field in bytes.
- *         This parameter can be any value of @ref BasicPreambleLength.
- * @retval None.
- */
-#define SpiritPktBasicSetPreambleLength(xPreambleLength)                SpiritPktCommonSetPreambleLength((PktPreambleLength)xPreambleLength)
-
-
-/**
- * @brief  Returns the PREAMBLE field length mode for SPIRIT Basic packets.
- * @param  None.
- * @retval uint8_t Preamble field length in bytes.
- */
-#define SpiritPktBasicGetPreambleLength()                               SpiritPktCommonGetPreambleLength()
-
-
-/**
- * @brief  Sets the SYNC field length for SPIRIT Basic packets.
- * @param  xSyncLength length of SYNC field in bytes.
- *         This parameter can be any value of @ref BasicSyncLength.
- * @retval None.
- */
-#define SpiritPktBasicSetSyncLength(xSyncLength)                         SpiritPktCommonSetSyncLength((PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns the SYNC field length for SPIRIT Basic packets.
- * @param  None.
- * @retval uint8_t SYNC field length in bytes.
- */
-#define SpiritPktBasicGetSyncLength()                                   SpiritPktCommonGetSyncLength()
-
-
-/**
- * @brief  Sets fixed or variable payload length mode for SPIRIT packets.
- * @param  xFixVarLength variable or fixed length.
- *         BASIC_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
- *         BASIC_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
- * @retval None.
- */
-#define SpiritPktBasicSetFixVarLength(xFixVarLength)                    SpiritPktCommonSetFixVarLength((PktFixVarLength)xFixVarLength)
-
-
-/**
- * @brief  Enables or Disables the CRC filtering.
- * @param  xNewState new state for CRC_CHECK.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicFilterOnCrc(xNewState)                            SpiritPktCommonFilterOnCrc(xNewState)
-
-
-/**
- * @brief  Returns the CRC filtering bit.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktBasicGetFilterOnCrc()                                  SpiritPktCommonGetFilterOnCrc()
-
-
-/**
- * @brief  Sets the CRC mode for SPIRIT Basic packets.
- * @param  xCrcMode CRC mode.
- *         This parameter can be any value of @ref BasicCrcMode.
- * @retval None.
- */
-#define SpiritPktBasicSetCrcMode(xCrcMode)                              SpiritPktCommonSetCrcMode((PktCrcMode)xCrcMode)
-
-
-/**
- * @brief  Returns the CRC mode for SPIRIT Basic packets.
- * @param  None.
- * @retval BasicCrcMode Crc mode.
- */
-#define SpiritPktBasicGetCrcMode()                                      (BasicCrcMode)SpiritPktCommonGetCrcMode()
-
-
-/**
- * @brief  Enables or Disables WHITENING for SPIRIT packets.
- * @param  xNewState new state for WHITENING mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicWhitening(xNewState)                               SpiritPktCommonWhitening(xNewState)
-
-
-/**
- * @brief  Enables or Disables FEC for SPIRIT Basic packets.
- * @param  xNewState new state for FEC mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicFec(xNewState)                                     SpiritPktCommonFec(xNewState)
-
-
-/**
- * @brief  Sets a specific SYNC word for SPIRIT Basic packets.
- * @param  xSyncX SYNC word number to be set.
- *         This parameter can be any value of @ref BasicSyncX.
- * @param  cSyncWord SYNC word.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktBasicSetSyncxWord(xSyncX, cSyncWord)                   SpiritPktCommonSetSyncxWord((PktSyncX)xSyncX, cSyncWord)
-
-
-/**
- * @brief  Returns a specific SYNC words for SPIRIT Basic packets.
- * @param  xSyncX SYNC word number to be get.
- *         This parameter can be any value of @ref BasicSyncX.
- * @retval uint8_t Sync word x.
- */
-#define SpiritPktBasicGetSyncxWord(xSyncX)                              SpiritPktCommonGetSyncxWord(xSyncX)
-
-
-/**
- * @brief  Sets multiple SYNC words for SPIRIT Basic packets.
- * @param  lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- *         This parameter is a uint32_t.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a @ref BasicSyncLength.
- * @retval None.
- */
-#define SpiritPktBasicSetSyncWords(lSyncWords, xSyncLength)              SpiritPktCommonSetSyncWords(lSyncWords, (PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns multiple SYNC words for SPIRIT Basic packets.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a pointer to @ref BasicSyncLength.
- * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- */
-#define SpiritPktBasicGetSyncWords(xSyncLength)                         SpiritPktCommonGetSyncWords((PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns the SPIRIT variable length width (in number of bits).
- * @param  None.
- * @retval Variable length width in bits.
- */
-#define SpiritPktBasicGetVarLengthWidth()                               SpiritPktCommonGetVarLengthWidth()
-
-
-/**
- * @brief  Sets the destination address for the Tx packet.
- * @param  cAddress destination address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktBasicSetDestinationAddress(cAddress)                   SpiritPktCommonSetDestinationAddress(cAddress)
-
-
-/**
- * @brief  Returns the settled destination address.
- * @param  None.
- * @retval uint8_t Transmitted destination address.
- */
-#define SpiritPktBasicGetTransmittedDestAddress()                       SpiritPktCommonGetTransmittedDestAddress()
-
-
-/**
- * @brief  Sets the node address. When the filtering on my address is on, if the destination address extracted from the received packet is equal to the content of the
- *         my address, then the packet is accepted (this is the address of the node).
- * @param  cAddress Address of the present node.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktBasicSetMyAddress(cAddress)                            SpiritPktCommonSetMyAddress(cAddress)
-
-
-/**
- * @brief  Returns the address of the present node.
- * @param  None.
- * @retval uint8_t My address (address of this node).
- */
-#define SpiritPktBasicGetMyAddress()                                    SpiritPktCommonGetMyAddress()
-
-
-/**
- * @brief  Sets the broadcast address. When the broadcast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- *         BROADCAST_ADDR register, then the packet is accepted.
- * @param  cAddress Broadcast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktBasicSetBroadcastAddress(cAddress)                     SpiritPktCommonSetBroadcastAddress(cAddress)
-
-
-/**
- * @brief  Returns the broadcast address.
- * @param  None.
- * @retval uint8_t Broadcast address.
- */
-#define SpiritPktBasicGetBroadcastAddress()                             SpiritPktCommonGetBroadcastAddress()
-
-
-/**
- * @brief  Sets the multicast address. When the multicast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- *         MULTICAST_ADDR register, then the packet is accepted.
- * @param  cAddress Multicast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktBasicSetMulticastAddress(cAddress)                     SpiritPktCommonSetMulticastAddress(cAddress)
-
-
-/**
- * @brief  Returns the multicast address.
- * @param  None.
- * @retval uint8_t Multicast address.
- */
-#define SpiritPktBasicGetMulticastAddress()                             SpiritPktCommonGetMulticastAddress()
-
-
-/**
- * @brief  Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  lMask Control mask.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktBasicSetCtrlMask(lMask)                                SpiritPktCommonSetCtrlMask(lMask)
-
-
-/**
- * @brief  Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  None.
- * @retval uint32_t Control mask.
- */
-#define SpiritPktBasicGetCtrlMask()                                     SpiritPktCommonGetCtrlMask()
-
-
-/**
- * @brief  Sets the control field reference. If the bits enabled by the
- *         CONTROL_MASK match the ones of the control fields extracted from the received packet
- *         then the packet is accepted.
- * @param  lReference Control reference.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktBasicSetCtrlReference(lReference)                      SpiritPktCommonSetCtrlReference(lReference)
-
-
-/**
- * @brief  Returns the control field reference.
- * @param  None.
- * @retval uint32_t Control reference.
- */
-#define SpiritPktBasicGetCtrlReference()                                SpiritPktCommonGetCtrlReference()
-
-
-/**
- * @brief  Sets the TX control field.
- * @param  lField Tx control field.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktBasicSetTransmittedCtrlField(lField)                   SpiritPktCommonSetTransmittedCtrlField(lField)
-
-
-/**
- * @brief  Returns the TX control field.
- * @param  None.
- * @retval uint32_t Control field of the transmitted packet.
- */
-#define SpiritPktBasicGetTransmittedCtrlField()                         SpiritPktCommonGetTransmittedCtrlField()
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with My address.
- * @param  xNewState new state for DEST_VS_SOURCE_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicFilterOnMyAddress(xNewState)                      SpiritPktCommonFilterOnMyAddress(xNewState)
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with multicast address.
- * @param  xNewState new state for DEST_VS_MULTICAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicFilterOnMulticastAddress(xNewState)               SpiritPktCommonFilterOnMulticastAddress(xNewState)
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with broadcast address.
- * @param  xNewState new state for DEST_VS_BROADCAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktBasicFilterOnBroadcastAddress(xNewState)               SpiritPktCommonFilterOnBroadcastAddress(xNewState)
-
-
-/**
- * @brief  Returns the enable bit of the my address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktBasicGetFilterOnMyAddress()                            SpiritPktCommonGetFilterOnMyAddress();
-
-
-/**
- * @brief  Returns the enable bit of the multicast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktBasicGetFilterOnMulticastAddress()                     SpiritPktCommonGetFilterOnMulticastAddress();
-
-
-/**
- * @brief  Returns the enable bit of the broadcast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktBasicGetFilterOnBroadcastAddress()                     SpiritPktCommonGetFilterOnBroadcastAddress();
-
-
-/**
- * @brief  Returns the destination address of the received packet.
- * @param  None.
- * @retval uint8_t Destination address of the received packet.
- */
-#define SpiritPktBasicGetReceivedDestAddress()                          SpiritPktCommonGetReceivedDestAddress()
-
-
-/**
- * @brief  Returns the control field of the received packet.
- * @param  None.
- * @retval uint32_t Received control field.
- */
-#define SpiritPktBasicGetReceivedCtrlField()                            SpiritPktCommonGetReceivedCtrlField()
-
-
-/**
- * @brief  Returns the CRC field of the received packet.
- * @param  cCrcFieldVect array in which the CRC field has to be stored.
- *         This parameter is an uint8_t array of 3 elements.
- * @retval None.
- */
-#define SpiritPktBasicGetReceivedCrcField(cCrcFieldVect)                SpiritPktCommonGetReceivedCrcField(cCrcFieldVect)
-
-
-/**
- * @brief  If enabled RX packet is accepted only if the masked control field matches the
- *         masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
- * @param  xNewState new state for Control filtering enable bit.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- * @note   This filtering control is enabled by default but the control mask is by default set to 0.
- *         As a matter of fact the user has to enable the control filtering bit after the packet initialization
- *         because the PktInit routine disables it.
- */
-#define SpiritPktBasicFilterOnControlField(xNewState)                           SpiritPktCommonFilterOnControlField(xNewState)
-
-
-/**
- * @brief  Returns the enable bit of the control field filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktBasicGetFilterOnControlField()                                 SpiritPktCommonGetFilterOnControlField();
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Exported_Functions        Pkt Basic Exported Functions
- * @{
- */
-
-void SpiritPktBasicInit(PktBasicInit* pxPktBasicInit);
-void SpiritPktBasicGetInfo(PktBasicInit* pxPktBasicInit);
-void SpiritPktBasicAddressesInit(PktBasicAddressesInit* pxPktBasicAddresses);
-void SpiritPktBasicGetAddressesInfo(PktBasicAddressesInit* pxPktBasicAddresses);
-void SpiritPktBasicSetFormat(void);
-void SpiritPktBasicAddressField(SpiritFunctionalState xAddressField);
-SpiritFunctionalState SpiritPktBasicGetAddressField(void);
-void SpiritPktBasicSetPayloadLength(uint16_t nPayloadLength);
-uint16_t SpiritPktBasicGetPayloadLength(void);
-uint16_t SpiritPktBasicGetReceivedPktLength(void);
-void SpiritPktBasicSetVarLengthWidth(uint16_t nMaxPayloadLength,SpiritFunctionalState xAddressField, BasicControlLength xControlLength);
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktCommon.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktCommon.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,432 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_PktCommon.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of the common features of SPIRIT packets.
-  * 
- * @details
- *
- * This module provides all the common functions and definitions used by the
- * packets modules.
- * Here are also defined all the generic enumeration types that are redefined
- * in the specific packets modules, but every enumeration value is referred
- * to this module. So the user who wants to configure the preamble of a Basic,
- * or a STack packet has to use the enumeration values defined here.
- *
- * <b>Example:</b>
- * @code
- *
- *   ...
- *
- *   SpiritPktBasicSetPreambleLength(PKT_PREAMBLE_LENGTH_18BYTES);
- *
- *   ...
- *
- * @endcode
- *
- * @note Is recommended for the user to not use these API directly
- * importing this module in his application.
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_PKT_COMMON_H
-#define __SPIRIT_PKT_COMMON_H
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_PktCommon           Pkt Common
- * @brief Configuration and management of the common features of SPIRIT packets.
- * @details See the file <i>@ref SPIRIT_PktCommon.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup PktCommon_Exported_Types   Pkt Common Exported Types
- * @{
- */
-
-
-/**
- * @brief  Preamble length in bytes enumeration.
- */
-typedef enum
-{
-  PKT_PREAMBLE_LENGTH_01BYTE            = 0x00, /*!< Preamble length 1 byte*/
-  PKT_PREAMBLE_LENGTH_02BYTES           = 0x08, /*!< Preamble length 2 bytes */
-  PKT_PREAMBLE_LENGTH_03BYTES           = 0x10, /*!< Preamble length 3 bytes */
-  PKT_PREAMBLE_LENGTH_04BYTES           = 0x18, /*!< Preamble length 4 bytes */
-  PKT_PREAMBLE_LENGTH_05BYTES           = 0x20, /*!< Preamble length 5 bytes */
-  PKT_PREAMBLE_LENGTH_06BYTES           = 0x28, /*!< Preamble length 6 bytes */
-  PKT_PREAMBLE_LENGTH_07BYTES           = 0x30, /*!< Preamble length 7 bytes */
-  PKT_PREAMBLE_LENGTH_08BYTES           = 0x38, /*!< Preamble length 8 bytes */
-  PKT_PREAMBLE_LENGTH_09BYTES           = 0x40, /*!< Preamble length 9 bytes */
-  PKT_PREAMBLE_LENGTH_10BYTES           = 0x48, /*!< Preamble length 10 bytes */
-  PKT_PREAMBLE_LENGTH_11BYTES           = 0x50, /*!< Preamble length 11 bytes */
-  PKT_PREAMBLE_LENGTH_12BYTES           = 0x58, /*!< Preamble length 12 bytes */
-  PKT_PREAMBLE_LENGTH_13BYTES           = 0x60, /*!< Preamble length 13 bytes */
-  PKT_PREAMBLE_LENGTH_14BYTES           = 0x68, /*!< Preamble length 14 bytes */
-  PKT_PREAMBLE_LENGTH_15BYTES           = 0x70, /*!< Preamble length 15 bytes */
-  PKT_PREAMBLE_LENGTH_16BYTES           = 0x78, /*!< Preamble length 16 bytes */
-  PKT_PREAMBLE_LENGTH_17BYTES           = 0x80, /*!< Preamble length 17 bytes */
-  PKT_PREAMBLE_LENGTH_18BYTES           = 0x88, /*!< Preamble length 18 bytes */
-  PKT_PREAMBLE_LENGTH_19BYTES           = 0x90, /*!< Preamble length 19 bytes */
-  PKT_PREAMBLE_LENGTH_20BYTES           = 0x98, /*!< Preamble length 20 bytes */
-  PKT_PREAMBLE_LENGTH_21BYTES           = 0xA0, /*!< Preamble length 21 bytes */
-  PKT_PREAMBLE_LENGTH_22BYTES           = 0xA8, /*!< Preamble length 22 bytes */
-  PKT_PREAMBLE_LENGTH_23BYTES           = 0xB0, /*!< Preamble length 23 bytes */
-  PKT_PREAMBLE_LENGTH_24BYTES           = 0xB8, /*!< Preamble length 24 bytes */
-  PKT_PREAMBLE_LENGTH_25BYTES           = 0xC0, /*!< Preamble length 25 bytes */
-  PKT_PREAMBLE_LENGTH_26BYTES           = 0xC8, /*!< Preamble length 26 bytes */
-  PKT_PREAMBLE_LENGTH_27BYTES           = 0xD0, /*!< Preamble length 27 bytes */
-  PKT_PREAMBLE_LENGTH_28BYTES           = 0xD8, /*!< Preamble length 28 bytes */
-  PKT_PREAMBLE_LENGTH_29BYTES           = 0xE0, /*!< Preamble length 29 bytes */
-  PKT_PREAMBLE_LENGTH_30BYTES           = 0xE8, /*!< Preamble length 30 bytes */
-  PKT_PREAMBLE_LENGTH_31BYTES           = 0xF0, /*!< Preamble length 31 bytes */
-  PKT_PREAMBLE_LENGTH_32BYTES           = 0xF8  /*!< Preamble length 32 bytes */
-
-}PktPreambleLength;
-
-#define IS_PKT_PREAMBLE_LENGTH(LENGTH)  ((LENGTH == PKT_PREAMBLE_LENGTH_01BYTE) || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_02BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_03BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_04BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_05BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_06BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_07BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_08BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_09BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_10BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_11BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_12BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_13BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_14BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_15BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_16BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_17BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_18BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_19BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_20BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_21BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_22BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_23BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_24BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_25BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_26BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_27BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_28BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_29BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_30BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_31BYTES)  || \
-                                           (LENGTH == PKT_PREAMBLE_LENGTH_32BYTES))
-
-
-
-/**
- * @brief  Sync length in bytes enumeration.
- */
-typedef enum
-{
-  PKT_SYNC_LENGTH_1BYTE            = 0x00, /*!< Sync length 1 byte*/
-  PKT_SYNC_LENGTH_2BYTES           = 0x02, /*!< Sync length 2 bytes*/
-  PKT_SYNC_LENGTH_3BYTES           = 0x04, /*!< Sync length 3 bytes */
-  PKT_SYNC_LENGTH_4BYTES           = 0x06 , /*!< Sync length 4 bytes */
-
-}PktSyncLength;
-
-#define IS_PKT_SYNC_LENGTH(LENGTH)     ((LENGTH == PKT_SYNC_LENGTH_1BYTE) || \
-                                          (LENGTH == PKT_SYNC_LENGTH_2BYTES)|| \
-                                          (LENGTH == PKT_SYNC_LENGTH_3BYTES)|| \
-                                          (LENGTH == PKT_SYNC_LENGTH_4BYTES))
-
-
-
-/**
- * @brief  CRC length in bytes enumeration.
- */
-typedef enum
-{
-  PKT_NO_CRC               = 0x00, /*!< No CRC                              */
-  PKT_CRC_MODE_8BITS       = 0x20, /*!< CRC length 8 bits  - poly: 0x07     */
-  PKT_CRC_MODE_16BITS_1    = 0x40, /*!< CRC length 16 bits - poly: 0x8005   */
-  PKT_CRC_MODE_16BITS_2    = 0x60, /*!< CRC length 16 bits - poly: 0x1021   */
-  PKT_CRC_MODE_24BITS      = 0x80, /*!< CRC length 24 bits - poly: 0x864CFB */
-
-}PktCrcMode;
-
-#define IS_PKT_CRC_MODE(MODE)   ((MODE == PKT_NO_CRC) || \
-                                   (MODE == PKT_CRC_MODE_8BITS)  || \
-                                   (MODE == PKT_CRC_MODE_16BITS_1)  || \
-                                   (MODE == PKT_CRC_MODE_16BITS_2) || \
-                                   (MODE == PKT_CRC_MODE_24BITS))
-
-
-
-/**
- * @brief  Fixed or variable payload length enumeration.
- */
-typedef enum
-{
-  PKT_LENGTH_FIX  = 0x00,    /*!< Fixed payload length     */
-  PKT_LENGTH_VAR  = 0x01     /*!< Variable payload length  */
-
-}PktFixVarLength;
-
-#define IS_PKT_FIX_VAR_LENGTH(LENGTH)   ((LENGTH == PKT_LENGTH_FIX) || \
-                                           (LENGTH == PKT_LENGTH_VAR))
-
-
-/**
- * @brief  Control length in bytes enumeration for SPIRIT packets.
- */
-typedef enum
-{
-  PKT_CONTROL_LENGTH_0BYTES = 0x00,     /*!< Control length 0 byte*/
-  PKT_CONTROL_LENGTH_1BYTE,             /*!< Control length 1 byte*/
-  PKT_CONTROL_LENGTH_2BYTES,            /*!< Control length 2 bytes*/
-  PKT_CONTROL_LENGTH_3BYTES,            /*!< Control length 3 bytes*/
-  PKT_CONTROL_LENGTH_4BYTES             /*!< Control length 4 bytes*/
-
-}PktControlLength;
-
-#define IS_PKT_CONTROL_LENGTH(LENGTH) ((LENGTH == PKT_CONTROL_LENGTH_0BYTES) || \
-                                         (LENGTH == PKT_CONTROL_LENGTH_1BYTE)   || \
-                                         (LENGTH == PKT_CONTROL_LENGTH_2BYTES)  || \
-                                         (LENGTH == PKT_CONTROL_LENGTH_3BYTES)  || \
-                                         (LENGTH == PKT_CONTROL_LENGTH_4BYTES))
-
-/**
- * @brief  Sync words enumeration for SPIRIT packets.
- */
-typedef enum
-{
-  PKT_SYNC_WORD_1=0x01,  /*!< Index of the 1st sync word*/
-  PKT_SYNC_WORD_2,       /*!< Index of the 2nd sync word*/
-  PKT_SYNC_WORD_3,       /*!< Index of the 3rd sync word*/
-  PKT_SYNC_WORD_4        /*!< Index of the 4th sync word*/
-
-}PktSyncX;
-
-#define IS_PKT_SYNCx(WORD)    ((WORD == PKT_SYNC_WORD_1) || \
-                                 (WORD == PKT_SYNC_WORD_2) || \
-                                 (WORD == PKT_SYNC_WORD_3) || \
-                                 (WORD == PKT_SYNC_WORD_4))
-
-
-
-/**
- * @brief  Max retransmissions number enumeration for SPIRIT packets.
- */
-typedef enum
-{
-  PKT_DISABLE_RETX    = 0x00,   /*!< No retrasmissions*/
-  PKT_N_RETX_1        = 0x10,   /*!< Max retrasmissions 1*/
-  PKT_N_RETX_2        = 0x20,   /*!< Max retrasmissions 2*/
-  PKT_N_RETX_3        = 0x30,   /*!< Max retrasmissions 3*/
-  PKT_N_RETX_4        = 0x40,   /*!< Max retrasmissions 4*/
-  PKT_N_RETX_5        = 0x50,   /*!< Max retrasmissions 5*/
-  PKT_N_RETX_6        = 0x60,   /*!< Max retrasmissions 6*/
-  PKT_N_RETX_7        = 0x70,   /*!< Max retrasmissions 7*/
-  PKT_N_RETX_8        = 0x80,   /*!< Max retrasmissions 8*/
-  PKT_N_RETX_9        = 0x90,   /*!< Max retrasmissions 9*/
-  PKT_N_RETX_10       = 0xA0,   /*!< Max retrasmissions 10*/
-  PKT_N_RETX_11       = 0xB0,   /*!< Max retrasmissions 11*/
-  PKT_N_RETX_12       = 0xC0,   /*!< Max retrasmissions 12*/
-  PKT_N_RETX_13       = 0xD0,   /*!< Max retrasmissions 13*/
-  PKT_N_RETX_14       = 0xE0,   /*!< Max retrasmissions 14*/
-  PKT_N_RETX_15       = 0xF0    /*!< Max retrasmissions 15*/
-
-}PktNMaxReTx;
-
-#define IS_PKT_NMAX_RETX(N_RETX)    ((N_RETX == PKT_DISABLE_RETX) || \
-                                       (N_RETX == PKT_N_RETX_1) || \
-                                       (N_RETX == PKT_N_RETX_2) || \
-                                       (N_RETX == PKT_N_RETX_3) || \
-                                       (N_RETX == PKT_N_RETX_4) || \
-                                       (N_RETX == PKT_N_RETX_5) || \
-                                       (N_RETX == PKT_N_RETX_6) || \
-                                       (N_RETX == PKT_N_RETX_7) || \
-                                       (N_RETX == PKT_N_RETX_8) || \
-                                       (N_RETX == PKT_N_RETX_9) || \
-                                       (N_RETX == PKT_N_RETX_10) || \
-                                       (N_RETX == PKT_N_RETX_11) || \
-                                       (N_RETX == PKT_N_RETX_12) || \
-                                       (N_RETX == PKT_N_RETX_13) || \
-                                       (N_RETX == PKT_N_RETX_14) || \
-                                       (N_RETX == PKT_N_RETX_15))
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Exported_Constants               Pkt Common Exported Constants
- * @{
- */
-
-#define IS_PKT_LENGTH_WIDTH_BITS(BITS)                (BITS<=16)
-#define IS_PKT_SEQ_NUMBER_RELOAD(SEQN)                (SEQN<=3)
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Exported_Macros                  Pkt Common Exported Macros
- * @{
- */
-
-
-/**
- * @brief  Macro used to compute the lower part of the packet length, to write in the PCKTLEN0 register
- * @param  nLength Length of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define BUILD_PCKTLEN0(nLength) ((nLength) & 0xFF)
-
-
-/**
- * @brief  Macro used to compute the upper part of the packet length, to write the PCKTLEN1 register
- * @param  nLength Length of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define BUILD_PCKTLEN1(nLength) ((nLength) >> 8)
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Exported_Functions               Pkt Common Exported Functions
- * @{
- */
-
-void SpiritPktCommonSetControlLength(PktControlLength xControlLength);
-uint8_t SpiritPktCommonGetControlLength(void);
-void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength);
-uint8_t SpiritPktCommonGetPreambleLength(void);
-void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength);
-uint8_t SpiritPktCommonGetSyncLength(void);
-void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength);
-void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void);
-void SpiritPktCommonSetCrcMode(PktCrcMode xCrcLength);
-PktCrcMode SpiritPktCommonGetCrcMode(void);
-void SpiritPktCommonWhitening(SpiritFunctionalState xNewState);
-void SpiritPktCommonFec(SpiritFunctionalState xNewState);
-void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX,  uint8_t cSyncWord);
-uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX);
-void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength);
-uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength);
-uint8_t SpiritPktCommonGetVarLengthWidth(void);
-void SpiritPktCommonSetDestinationAddress(uint8_t cAddress);
-uint8_t SpiritPktCommonGetTransmittedDestAddress(void);
-void SpiritPktCommonSetMyAddress(uint8_t cAddress);
-uint8_t SpiritPktCommonGetMyAddress(void);
-void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress);
-uint8_t SpiritPktCommonGetBroadcastAddress(void);
-SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void);
-void SpiritPktCommonSetMulticastAddress(uint8_t cAddress);
-uint8_t SpiritPktCommonGetMulticastAddress(void);
-void SpiritPktCommonSetCtrlMask(uint32_t lMask);
-uint32_t SpiritPktCommonGetCtrlMask(void);
-void SpiritPktCommonSetCtrlReference(uint32_t lReference);
-uint32_t SpiritPktCommonGetCtrlReference(void);
-void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField);
-uint32_t SpiritPktCommonGetTransmittedCtrlField(void);
-void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState);
-void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState);
-void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void);
-SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void);
-SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void);
-uint8_t SpiritPktCommonGetReceivedDestAddress(void);
-uint32_t SpiritPktCommonGetReceivedCtrlField(void);
-void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect);
-void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck,SpiritFunctionalState xPiggybacking);
-void SpiritPktCommonRequireAck(SpiritFunctionalState xRequireAck);
-void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload);
-void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx);
-uint8_t SpiritPktCommonGetNMaxReTx(void);
-uint8_t SpiritPktCommonGetReceivedDestAddress(void);
-uint8_t SpiritPktCommonGetReceivedSourceAddress(void);
-uint8_t SpiritPktCommonGetReceivedSeqNumber(void);
-uint8_t SpiritPktCommonGetReceivedNackRx(void);
-uint8_t SpiritPktCommonGetTransmittedSeqNumber(void);
-uint8_t SpiritPktCommonGetNReTx(void);
-void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void);
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktMbus.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktMbus.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_PktMbus.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT MBUS packets.
-  * 
- * @details
- *
- * This module can be used to manage the configuration of Spirit MBUS
- * packets.
- * The user can obtain a packet configuration filling the structure
- * <i>@ref PktMbusInit</i>, defining in it some general parameters
- * for the Spirit MBUS packet format.
- * Since the MBUS protocol is a standard, the configuration of a MBUS
- * packet is very simple to do.
- *
- * <b>Example:</b>
- * @code
- *
- * PktMbusInit mbusInit={
- *   MBUS_SUBMODE_S1_S2_LONG_HEADER,    // MBUS submode selection
- *   36,                                // added "01" chips on preamble
- *   16                                 // postamble length in "01" chips
- * };
- *
- * ...
- *
- * SpiritPktMbusInit(&mbusInit);
- *
- * ...
- *
- * @endcode
- *
- * The module provides some other functions that can be used to modify
- * or read only some configuration parameters.
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_PACKET_MBUS_H
-#define __SPIRIT_PACKET_MBUS_H
-
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-#include "SPIRIT_PktCommon.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_PktMbus     Pkt MBUS
- * @brief Configuration and management of SPIRIT MBUS packets.
- * @details See the file <i>@ref SPIRIT_PktMbus.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup PktMbus_Exported_Types     Pkt MBUS Exported Types
- * @{
- */
-
-
-
-/**
- * @brief  MBUS submode enumeration.
- */
-
-typedef enum
-{
-  MBUS_SUBMODE_S1_S2_LONG_HEADER            = MBUS_CTRL_MBUS_SUBMODE_S1_S2L,                /*!< MBUS submode S1, S2 (long header) - Header length = mbus_prmbl_ctrl + 279 (in "01" bit pairs) , Sync word = 0x7696 (length 18 bits) */
-  MBUS_SUBMODE_S1_M_S2_T2_OTHER_TO_METER    = MBUS_CTRL_MBUS_SUBMODE_S2_S1M_T2_OTHER,       /*!< MBUS submode S1-m, S2, T2 (other to meter) - Header length = mbus_prmbl_ctrl + 15 (in "01" bit pairs) , Sync word = 0x7696 (length 18 bits)*/
-  MBUS_SUBMODE_T1_T2_METER_TO_OTHER         = MBUS_CTRL_MBUS_SUBMODE_T1_T2_METER,           /*!< MBUS submode T1, T2 (meter to other) - Header length = mbus_prmbl_ctrl + 19 (in "01" bit pairs) ,  Sync word = 0x3D (length 10 bits)*/
-  MBUS_SUBMODE_R2_SHORT_HEADER              = MBUS_CTRL_MBUS_SUBMODE_R2,                    /*!< MBUS submode R2, short header - Header length = mbus_prmbl_ctrl + 39 (in "01" bit pairs) , Sync word = 0x7696 (length 18 bits)*/
-
-}MbusSubmode;
-
-#define IS_MBUS_SUBMODE(MODE)   (((MODE) == MBUS_SUBMODE_S1_S2_LONG_HEADER) || \
-                                 ((MODE) == MBUS_SUBMODE_S1_M_S2_T2_OTHER_TO_METER) || \
-                                 ((MODE) == MBUS_SUBMODE_T1_T2_METER_TO_OTHER) || \
-                                 ((MODE) == MBUS_SUBMODE_R2_SHORT_HEADER))
-
-
-/**
- * @brief  SPIRIT MBUS Packet Init structure definition
- */
-typedef struct
-{
-  MbusSubmode  	    xMbusSubmode;              /*!< Specifies the SUBMODE to be configured.
-                                                    This parameter can be a value of @ref MbusSubmode */
-
-  uint8_t           cPreambleLength;           /*!< Specifies the PREAMBLE length.
-                                                    This parameter can be any value between 0 and 255 chip sequence '01' */
-
-  uint8_t           cPostambleLength;          /*!< Specifies the POSTAMBLE length.
-                                                    This parameter can be any value between 0 and 255 chip sequence '01' */
-
-}PktMbusInit;
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Exported_Constants         Pkt MBUS Exported Constants
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Exported_Macros            Pkt MBUS Exported Macros
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Exported_Functions                 Pkt MBUS Exported Functions
- * @{
- */
-void SpiritPktMbusInit(PktMbusInit* pxPktMbusInit);
-void SpiritPktMbusGetInfo(PktMbusInit* pxPktMbusInit);
-void SpiritPktMbusSetFormat(void);
-void SpiritPktMbusSetPreamble(uint8_t cPreamble);
-uint8_t SpiritPktMbusGetPreamble(void);
-void SpiritPktMbusSetPostamble(uint8_t cPostamble);
-uint8_t SpiritPktMbusGetPostamble(void);
-void SpiritPktMbusSetSubmode(MbusSubmode xMbusSubmode);
-MbusSubmode SpiritPktMbusGetSubmode(void);
-void SpiritPktMbusSetPayloadLength(uint16_t nPayloadLength);
-uint16_t SpiritPktMbusGetPayloadLength(void);
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktStack.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktStack.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,849 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_PktStack.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT STack packets.
-  * 
- * @details
- *
- * This module can be used to manage the configuration of Spirit STack
- * packets, and it is quite similar to the Basic packets one since the
- * STack packets can be considered an extension of Basic.
- * The user can obtain a packet configuration filling the structure
- * <i>@ref PktStackInit</i>, defining in it some general parameters
- * for the Spirit STack packet format.
- * Another structure the user can fill is <i>@ref PktStackAddressesInit</i>
- * to define the addresses which will be used during the communication.
- * The structure <i>@ref PktStackLlpInit</i> is provided in order to configure
- * the link layer protocol features like autoack, autoretransmission
- * or piggybacking.
- * Moreover, functions to set the payload length and the destination address
- * are provided.
- *
- * <b>Example:</b>
- * @code
- *
- * PktStackInit stackInit={
- *   PKT_PREAMBLE_LENGTH_08BYTES,       // preamble length in bytes
- *   PKT_SYNC_LENGTH_4BYTES,            // sync word length in bytes
- *   0x1A2635A8,                        // sync word
- *   PKT_LENGTH_VAR,                    // variable or fixed payload length
- *   7,                                 // length field width in bits (used only for variable length)
- *   PKT_NO_CRC,                        // CRC mode
- *   PKT_CONTROL_LENGTH_0BYTES,         // control field length
- *   S_DISABLE,                         // FEC
- *   S_ENABLE                           // whitening
- * };
- *
- * PktStackAddressesInit addressInit={
- *   S_ENABLE,                          // enable/disable filtering on my address
- *   0x34,                              // my address (address of the current node)
- *   S_DISABLE,                         // enable/disable filtering on multicast address
- *   0xEE,                              // multicast address
- *   S_DISABLE,                         // enable/disable filtering on broadcast address
- *   0xFF                               // broadcast address
- * };
- *
- * PktStackLlpInit stackLLPInit ={
- *   S_DISABLE,                         // enable/disable the autoack feature
- *   S_DISABLE,                         // enable/disable the piggybacking feature
- *   PKT_DISABLE_RETX                   // set the max number of retransmissions or disable them
- * };
- * ...
- *
- * SpiritPktStackInit(&stackInit);
- * SpiritPktStackAddressesInit(&addressInit);
- * SpiritPktStackLlpInit(&stackLLPInit);
- *
- * ...
- *
- * SpiritPktStackSetPayloadLength(20);
- * SpiritPktStackSetDestinationAddress(0x44);
- *
- * ...
- *
- * @endcode
- *
- * The module provides some other functions that can be used to modify
- * or read only some configuration parameters.
- *
- *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_PKT_STACK_H
-#define __SPIRIT_PKT_STACK_H
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-#include "SPIRIT_PktCommon.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_PktStack    Pkt STack
- * @brief Configuration and management of SPIRIT STack packets.
- * @details See the file <i>@ref SPIRIT_PktStack.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup PktStack_Exported_Types    Pkt STack Exported Types
- * @{
- */
-
-/**
- * @brief  Preamble length in bytes enumeration.
- */
-typedef PktPreambleLength                  StackPreambleLength;
-
-#define IS_STACK_PREAMBLE_LENGTH           IS_PKT_PREAMBLE_LENGTH
-
-/**
- * @brief  Sync length in bytes enumeration.
- */
-typedef PktSyncLength                      StackSyncLength;
-
-#define IS_STACK_SYNC_LENGTH               IS_PKT_SYNC_LENGTH
-
-
-
-/**
- * @brief  CRC length in bytes enumeration.
- */
-typedef PktCrcMode                         StackCrcMode;
-
-#define IS_STACK_CRC_MODE                  IS_PKT_CRC_MODE
-
-
-/**
- * @brief  Fixed or variable payload length enumeration.
- */
-typedef PktFixVarLength                    StackFixVarLength;
-
-#define IS_STACK_FIX_VAR_LENGTH            IS_PKT_FIX_VAR_LENGTH
-
-/**
- * @brief  Control length in bytes enumeration for SPIRIT.
- */
-typedef PktControlLength                   StackControlLength;
-
-#define IS_STACK_CONTROL_LENGTH            IS_PKT_CONTROL_LENGTH
-
-/**
- * @brief  Sync words enumeration for SPIRIT.
- */
-typedef PktSyncX                           StackSyncX;
-
-#define IS_STACK_SYNCx                     IS_PKT_SYNCx
-
-/**
- * @brief  Max retransmission number enumeration for SPIRIT.
- */
-typedef PktNMaxReTx                        StackNMaxReTx;
-
-#define IS_STACK_NMAX_RETX                 IS_PKT_NMAX_RETX
-
-
-/**
- * @brief  SPIRIT STack Packet Init structure definition. This structure allows users to set the main options
- *         for the STack packet.
- */
-typedef struct
-{
-
-  StackPreambleLength           xPreambleLength;         /*!< Specifies the preamble length of packet.
-                                                              This parameter can be any value of @ref StackPreambleLength */
-  StackSyncLength               xSyncLength;             /*!< Specifies the sync word length of packet.
-                                                              This parameter can be any value of @ref StackSyncLength */
-  uint32_t                      lSyncWords;	         /*!< Specifies the sync words.
-                                                              This parameter is a uint32_t word with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4| */
-  StackFixVarLength             xFixVarLength;           /*!< Specifies if a fixed length of packet has to be used.
-                                                              This parameter can be any value of @ref StackFixVarLength */
-  uint8_t            	        cPktLengthWidth;         /*!< Specifies the size of the length of packet in bits. This field is useful only if
-                                                              the field xFixVarLength is set to STACK_LENGTH_VAR. For STack packets the length width
-                                                               is log2( max payload length + control length (0 to 4) + address length (always 2)).
-                                                              This parameter is an uint8_t */
-  StackCrcMode                	xCrcMode;              	 /*!< Specifies the CRC word length of packet.
-                                                              This parameter can be any value of @ref StackCrcMode */
-  StackControlLength            xControlLength;          /*!< Specifies the length of a control field to be sent.
-                                                              This parameter can be any value of @ref StackControlLength */
-  SpiritFunctionalState         xFec;                    /*!< Specifies if FEC has to be enabled.
-                                                              This parameter can be any value of @ref SpiritFunctionalState */
-  SpiritFunctionalState         xDataWhitening;          /*!< Specifies if data whitening has to be enabled.
-                                                              This parameter can be any value of @ref SpiritFunctionalState */
-
-}PktStackInit;
-
-
-/**
- * @brief  SPIRIT STack packet address structure definition. This structure allows users to specify
- *         the node/multicast/broadcast addresses and the correspondent filtering options.
- */
-typedef struct
-{
-
-  SpiritFunctionalState         xFilterOnMyAddress;             /*!< If set RX packet is accepted if its destination address matches with cMyAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cMyAddress;                     /*!< Specifies the TX packet source address (address of this node).
-                                                                     This parameter is an uint8_t */
-  SpiritFunctionalState         xFilterOnMulticastAddress;      /*!< If set RX packet is accepted if its destination address matches with cMulticastAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cMulticastAddress;              /*!< Specifies the Multicast group address for this node.
-                                                                     This parameter is an uint8_t */
-  SpiritFunctionalState         xFilterOnBroadcastAddress;      /*!< If set RX packet is accepted if its destination address matches with cBroadcastAddress.
-                                                                     This parameter can be S_ENABLE or S_DISABLE */
-  uint8_t                       cBroadcastAddress;              /*!< Specifies the Broadcast address for this node.
-                                                                     This parameter is an uint8_t */
-}PktStackAddressesInit;
-
-
-/**
- * @brief  SPIRIT STack packet LLP structure definition. This structure allows users to configure
- *         all the LLP options for STack packets.
- */
-typedef struct
-{
-
-  SpiritFunctionalState         xAutoAck;                /*!< Specifies if the auto ACK feature is used or not.
-                                                              This parameter can be a value of @ref SpiritFunctionalState */
-  SpiritFunctionalState         xPiggybacking;           /*!< Specifies if the piggybacking feature is used or not.
-                                                              This parameter can be a value of @ref SpiritFunctionalState */
-  StackNMaxReTx                 xNMaxRetx;               /*!< Specifies the number of MAX-Retransmissions.
-                                                              This parameter can be a value of @ref StackNMaxReTx */
-}PktStackLlpInit;
-
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Exported_Constants        Pkt STack Exported Constants
- * @{
- */
-
-#define IS_STACK_LENGTH_WIDTH_BITS                      IS_PKT_LENGTH_WIDTH_BITS
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Exported_Macros   Pkt STack Exported Macros
- * @{
- */
-
-/**
- * @brief  Macro used to compute the lower part of the packet length
- *         for Spirit STack packets, to write in the PCKTLEN0 register.
- * @param  nLength length of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define STACK_BUILD_PCKTLEN0(nLength)                                    BUILD_PCKTLEN0(nLength)
-
-
-/**
- * @brief  Macro used to compute the upper part of the packet length
- *         for Spirit STack packets, to write the PCKTLEN1 register.
- * @param  nLength length of the packet payload.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-#define STACK_BUILD_PCKTLEN1(nLength)                                    BUILD_PCKTLEN1(nLength)
-
-
-/**
- * @brief  Sets the CONTROL length for SPIRIT STack packets.
- * @param  xControlLength length of CONTROL field in bytes.
- *         This parameter can be any value of @ref StackControlLength.
- * @retval None.
- */
-#define SpiritPktStackSetControlLength(xControlLength)                          SpiritPktCommonSetControlLength(xControlLength)
-
-
-/**
- * @brief  Returns the CONTROL length for SPIRIT STack packets.
- * @param  None.
- * @retval Control length.
- */
-#define SpiritPktStackGetControlLength()                                       SpiritPktCommonGetControlLength()
-
-
-/**
- * @brief  Sets the PREAMBLE Length mode for SPIRIT STack packets.
- * @param  xPreambleLength length of PREAMBLE field in bytes.
- *         This parameter can be any value of @ref StackPreambleLength.
- * @retval None.
- */
-#define SpiritPktStackSetPreambleLength(xPreambleLength)                        SpiritPktCommonSetPreambleLength((PktPreambleLength)xPreambleLength)
-
-
-/**
- * @brief  Returns the PREAMBLE Length mode for SPIRIT STack packets.
- * @param  None.
- * @retval uint8_t Preamble length in bytes.
- */
-#define SpiritPktStackGetPreambleLength()                                      SpiritPktCommonGetPreambleLength()
-
-
-/**
- * @brief  Sets the SYNC Length for SPIRIT STack packets.
- * @param  xSyncLength length of SYNC field in bytes.
- *         This parameter can be any value of @ref StackSyncLength.
- * @retval None.
- */
-#define SpiritPktStackSetSyncLength(xSyncLength)                                SpiritPktCommonSetSyncLength((PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns the SYNC Length for SPIRIT STack packets.
- * @param  None.
- * @retval uint8_t Sync length in bytes.
- */
-#define SpiritPktStackGetSyncLength()                                           SpiritPktCommonGetSyncLength()
-
-
-/**
- * @brief  Sets fixed or variable payload length mode for SPIRIT STack packets.
- * @param  xFixVarLength variable or fixed length.
- *         PKT_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
- *         PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
- * @retval None.
- */
-#define SpiritPktStackSetFixVarLength(xFixVarLength)                            SpiritPktCommonSetFixVarLength((PktFixVarLength)xFixVarLength)
-
-
-/**
- * @brief  Enables or Disables the CRC filtering.
- * @param  xNewState new state for CRC_CHECK.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackFilterOnCrc(xNewState)                                    SpiritPktCommonFilterOnCrc(xNewState)
-
-
-/**
- * @brief  Returns the CRC filtering bit.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktStackGetFilterOnCrc()                                          SpiritPktCommonGetFilterOnCrc()
-
-
-/**
- * @brief  Sets the CRC mode for SPIRIT STack packets.
- * @param  xCrcMode CRC mode.
- *         This parameter can be any value of @ref StackCrcMode.
- * @retval None.
- */
-#define SpiritPktStackSetCrcMode(xCrcMode)                                      SpiritPktCommonSetCrcMode((PktCrcMode)xCrcMode)
-
-
-/**
- * @brief  Returns the CRC mode for SPIRIT packets.
- * @param  None.
- * @retval StackCrcMode Crc mode.
- */
-#define SpiritPktStackGetCrcMode()                                             (StackCrcMode)SpiritPktCommonGetCrcMode()
-
-
-/**
- * @brief  Enables or Disables WHITENING for SPIRIT STack packets.
- * @param  xNewState new state for WHITENING mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackWhitening(xNewState)                                     SpiritPktCommonWhitening(xNewState)
-
-
-/**
- * @brief  Enables or Disables FEC for SPIRIT STack packets.
- * @param  xNewState new state for FEC mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackFec(xNewState)                                            SpiritPktCommonFec(xNewState)
-
-
-/**
- * @brief  Sets a specific SYNC word for SPIRIT STack packets.
- * @param  xSyncX SYNC word number to be set.
- *         This parameter can be any value of @ref StackSyncX.
- * @param  cSyncWord SYNC word.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetSyncxWord(xSyncX, cSyncWord)                          SpiritPktCommonSetSyncxWord((PktSyncX)xSyncX,cSyncWord)
-
-
-/**
- * @brief  Returns a specific SYNC word for SPIRIT STack packets.
- * @param  xSyncX SYNC word number to be get.
- *         This parameter can be any value of @ref StackSyncX.
- * @retval uint8_t Sync word x.
- */
-#define SpiritPktStackGetSyncxWord(xSyncX)                                     SpiritPktCommonGetSyncxWord(xSyncX)
-
-
-/**
- * @brief  Sets multiple SYNC words for SPIRIT STack packets.
- * @param  lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- *         This parameter is a uint32_t.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a @ref StackSyncLength.
- * @retval None.
- */
-#define SpiritPktStackSetSyncWords(lSyncWords, xSyncLength)                    SpiritPktCommonSetSyncWords(lSyncWords,(PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns multiple SYNC words for SPIRIT packets.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a pointer to @ref StackSyncLength.
- * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- */
-#define SpiritPktStackGetSyncWords(xSyncLength)                                 SpiritPktCommonGetSyncWords((PktSyncLength)xSyncLength)
-
-
-/**
- * @brief  Returns the SPIRIT variable length width (in number of bits).
- * @param  None.
- * @retval uint8_t Variable length width in bits.
- */
-#define SpiritPktStackGetVarLengthWidth()                                       SpiritPktCommonGetVarLengthWidth()
-
-
-/**
- * @brief  Sets the destination address for the Tx packet.
- * @param  cAddress destination address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetDestinationAddress(cAddress)                           SpiritPktCommonSetDestinationAddress(cAddress)
-
-
-/**
- * @brief  Sets the Rx packet reference source address. The source address extracted from the received packet is masked
- *         with the source reference mask and then compared to the masked reference value.
- * @param  cAddress Reference source address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetSourceReferenceAddress(cAddress)                       SpiritPktCommonSetDestinationAddress(cAddress)
-
-
-/**
- * @brief  Returns the Rx packet reference source address. The source address extracted from the received packet is masked
- *         with the source reference mask and then compared to the masked reference value.
- * @param  cAddress Reference source address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackGetSourceReferenceAddress()                               SpiritPktCommonGetTransmittedDestAddress()
-
-
-/**
- * @brief  Returns the settled destination address.
- * @param  None.
- * @retval uint8_t Transmitted destination address.
- */
-#define SpiritPktStackGetTransmittedDestAddress()                               SpiritPktCommonGetTransmittedDestAddress()
-
-
-/**
- * @brief  Sets the node address. When the filtering on my address is on, if the destination address extracted from the received packet is equal to the content of the
- *         my address, then the packet is accepted (this is the address of the node).
- * @param  cAddress Address of the present node.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetMyAddress(cAddress)                                    SpiritPktCommonSetMyAddress(cAddress)
-
-
-/**
- * @brief  Returns the address of the present node.
- * @param  None.
- * @retval uint8_t My address (address of this node).
- */
-#define SpiritPktStackGetMyAddress()                                            SpiritPktCommonGetMyAddress()
-
-
-/**
- * @brief  Sets the broadcast address. When the broadcast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- *         BROADCAST_ADDR register, then the packet is accepted.
- * @param  cAddress Broadcast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetBroadcastAddress(cAddress)                             SpiritPktCommonSetBroadcastAddress(cAddress)
-
-
-/**
- * @brief  Returns the broadcast address.
- * @param  None.
- * @retval uint8_t Broadcast address.
- */
-#define SpiritPktStackGetBroadcastAddress()                                     SpiritPktCommonGetBroadcastAddress()
-
-
-/**
- * @brief  Sets the multicast address. When the multicast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- *         MULTICAST_ADDR register, then the packet is accepted.
- * @param  cAddress Multicast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-#define SpiritPktStackSetMulticastAddress(cAddress)                             SpiritPktCommonSetMulticastAddress(cAddress)
-
-
-/**
- * @brief  Returns the multicast address.
- * @param  None.
- * @retval uint8_t Multicast address.
- */
-#define SpiritPktStackGetMulticastAddress()                                     SpiritPktCommonGetMulticastAddress()
-
-
-/**
- * @brief  Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  lMask Control mask.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktStackSetCtrlMask(lMask)                                        SpiritPktCommonSetCtrlMask(lMask)
-
-
-/**
- * @brief  Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  None.
- * @retval uint32_t Control mask.
- */
-#define SpiritPktStackGetCtrlMask()                                             SpiritPktCommonGetCtrlMask()
-
-
-/**
- * @brief  Sets the control field reference. If the bits enabled by the
- *         CONTROL_MASK match the ones of the control fields extracted from the received packet
- *         then the packet is accepted.
- * @param  lReference Control reference.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktStackSetCtrlReference(lReference)                              SpiritPktCommonSetCtrlReference(lReference)
-
-
-/**
- * @brief  Returns the control field reference.
- * @param  None.
- * @retval uint32_t Control reference.
- */
-#define SpiritPktStackGetCtrlReference()                                        SpiritPktCommonGetCtrlReference()
-
-
-/**
- * @brief  Sets the TX control field.
- * @param  lField TX CONTROL FIELD.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-#define SpiritPktStackSetTransmittedCtrlField(lField)                           SpiritPktCommonSetTransmittedCtrlField(lField)
-
-
-/**
- * @brief  Returns the TX control field.
- * @param  None.
- * @retval uint32_t Control field of the transmitted packet.
- */
-#define SpiritPktStackGetTransmittedCtrlField()                                 SpiritPktCommonGetTransmittedCtrlField()
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with TX_SOURCE_ADDRESS.
- * @param  xNewState new state for DEST_VS_SOURCE_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackFilterOnMyAddress(xNewState)                               SpiritPktCommonFilterOnMyAddress(xNewState)
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with MULTICAST_ADDRESS.
- * @param  xNewState new state for DEST_VS_MULTICAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackFilterOnMulticastAddress(xNewState)                        SpiritPktCommonFilterOnMulticastAddress(xNewState)
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with BROADCAST_ADDRESS.
- * @param  xNewState new state for DEST_VS_BROADCAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackFilterOnBroadcastAddress(xNewState)                        SpiritPktCommonFilterOnBroadcastAddress(xNewState)
-
-
-/**
- * @brief  Returns the enable bit of the my address filtering.
- * @param  None.
- * @retval SpiritFunctionalStateThis parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktStackGetFilterOnMyAddress()                                    SpiritPktCommonGetFilterOnMyAddress();
-
-
-/**
- * @brief  Returns the enable bit of the multicast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktStackGetFilterOnMulticastAddress()                             SpiritPktCommonGetFilterOnMulticastAddress();
-
-
-/**
- * @brief  Returns the enable bit of the broadcast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktStackGetFilterOnBroadcastAddress()                             SpiritPktCommonGetFilterOnBroadcastAddress();
-
-
-/**
- * @brief  Returns the control field of the received packet.
- * @param  None.
- * @retval uint32_t Received control field.
- */
-#define SpiritPktStackGetReceivedCtrlField()                                     SpiritPktCommonGetReceivedCtrlField()
-
-
-/**
- * @brief  Returns the CRC field of the received packet.
- * @param  cCrcFieldVect array in which the CRC field has to be stored.
- *         This parameter is an uint8_t array of 3 elements.
- * @retval None.
- */
-#define SpiritPktStackGetReceivedCrcField(cCrcFieldVect)                         SpiritPktCommonGetReceivedCrcField(cCrcFieldVect)
-
-/**
- * @brief  Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature is enabled and
- *         a data packet has been correctly received, then an acknowledgement packet is sent back to the originator of the received
- *         packet. If the PIGGYBACKING bit is also set, payload data will be read from the FIFO; otherwise an empty packet is sent
- *         only containing the source and destination addresses and the sequence number of the packet being acknowledged.
- * @param  xAutoAck new state for autoack.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @param  xPiggybacking new state for autoack.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackAutoAck(xAutoAck, xPiggybacking)                          SpiritPktCommonAutoAck(xAutoAck, xPiggybacking)
-
-
-/**
- * @brief  Sets the AUTO ACKNOLEDGEMENT mechanism on the transmitter. On the transmitter side, the NACK_TX field can be used to require or not an acknowledgment for each individual packet: if
- *         NACK_TX is set to "1" then acknowledgment will not be required; if NACK_TX is set to "0" then acknowledgment will be
- *         required.
- * @param  xNewState new state for TX_AUTOACK.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackRequireAck(xNewState)                                     SpiritPktCommonRequireAck(xNewState)
-
-
-/**
- * @brief  Sets the TX sequence number to be used to start counting.
- * @param  cSeqNumberReload new value for Tx seq number reload.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-#define SpiritPktStackSetTransmittedSeqNumberReload(cSeqNumberReload)           SpiritPktCommonSetTransmittedSeqNumberReload(cSeqNumberReload)
-
-
-/**
- * @brief  Sets the max number of automatic retransmission.
- * @param  xNMaxReTx max number of retransmission.
- *         This parameter can be any value of @ref PktNMaxReTx.
- * @retval None.
- */
-#define SpiritPktStackSetNMaxReTx(xNMaxReTx)                                    SpiritPktCommonSetNMaxReTx((PktNMaxReTx)xNMaxReTx)
-
-
-/**
- * @brief  Returns the max number of automatic retransmission.
- * @param  None.
- * @retval uint8_t Max number of retransmissions.
- */
-#define SpiritPktStackGetNMaxReTx()                                             SpiritPktCommonGetNMaxReTx()
-
-
-/**
- * @brief  Returns the TX ACK request.
- * @param  None.
- * @retval SpiritFunctionalState.
- */
-#define SpiritPktStackGetGetTxAckRequest()                                       SpiritPktCommonGetTxAckRequest()
-
-/**
- * @brief  Returns the destination address of the received packet.
- * @param  None.
- * @retval uint8_t Destination address of the received packet.
- */
-#define SpiritPktStackGetReceivedDestAddress()                                  SpiritPktCommonGetReceivedDestAddress()
-
-
-/**
- * @brief  Returns the source address of the received packet.
- * @param  None.
- * @retval uint8_t Source address of the received packet.
- */
-#define SpiritPktStackGetReceivedSourceAddress()                                SpiritPktCommonGetReceivedSourceAddress()
-
-
-/**
- * @brief  Returns the sequence number of the received packet.
- * @param  None.
- * @retval uint8_t Received Sequence number.
- */
-#define SpiritPktStackGetReceivedSeqNumber()                                    SpiritPktCommonGetReceivedSeqNumber()
-
-
-/**
- * @brief  Returns the Nack bit of the received packet
- * @param  None.
- * @retval uint8_t Value of the NAck bit.
- */
-#define SpiritPktStackGetReceivedNackRx()                                       SpiritPktCommonGetReceivedNackRx()
-
-
-/**
- * @brief  Returns the sequence number of the transmitted packet.
- * @param  None.
- * @retval uint8_t Sequence number of the transmitted packet.
- */
-#define SpiritPktStackGetTransmittedSeqNumber()                                 SpiritPktCommonGetTransmittedSeqNumber()
-
-
-/**
- * @brief  Returns the number of retransmission done on the transmitted packet.
- * @param  None.
- * @retval uint8_t Number of retransmissions done until now.
- */
-#define SpiritPktStackGetNReTx()                                                SpiritPktCommonGetNReTx()
-
-
-/**
- * @brief  If enabled RX packet is accepted only if the masked control field matches the
- *         masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
- * @param  xNewState new state for Control filtering enable bit.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- * @note   This filtering control is enabled by default but the control mask is by default set to 0.
- *         As a matter of fact the user has to enable the control filtering bit after the packet initialization
- *         because the PktInit routine disables it.
- */
-#define SpiritPktStackFilterOnControlField(xNewState)                           SpiritPktCommonFilterOnControlField(xNewState)
-
-
-/**
- * @brief  Returns the enable bit of the control field filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-#define SpiritPktStackGetFilterOnControlField()                                 SpiritPktCommonGetFilterOnControlField();
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Exported_Functions        Pkt STack Exported Functions
- * @{
- */
-
-void SpiritPktStackInit(PktStackInit* pxPktStackInit);
-void SpiritPktStackGetInfo(PktStackInit* pxPktStackInit);
-void SpiritPktStackAddressesInit(PktStackAddressesInit* pxPktStackAddresses);
-void SpiritPktStackGetAddressesInfo(PktStackAddressesInit* pxPktStackAddresses);
-void SpiritPktStackLlpInit(PktStackLlpInit* pxPktStackLlpInit);
-void SpiritPktStackLlpGetInfo(PktStackLlpInit* pxPktStackLlpInit);
-void SpiritPktStackSetFormat(void);
-void SpiritPktStackSetPayloadLength(uint16_t nPayloadLength);
-uint16_t SpiritPktStackGetPayloadLength(void);
-void SpiritPktStackSetVarLengthWidth(uint16_t nMaxPayloadLength, StackControlLength xControlLength);
-void SpiritPktStackSetRxSourceMask(uint8_t cMask);
-uint8_t SpiritPktStackGetRxSourceMask(void);
-uint16_t SpiritPktStackGetReceivedPktLength(void);
-void SpiritPktStackFilterOnSourceAddress(SpiritFunctionalState xNewState);
-void SpiritPktStackSetAddressLength(void);
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Qi.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Qi.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Qi.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT QI.
- * @details
- *
- * This module can be used to configure and read some quality indicators
- * used by Spirit.
- * API to set thresholds and to read values in raw mode or in dBm are
- * provided.
- *
- * <b>Example:</b>
- * @code
- *
- *   float rssiValuedBm;
- *   uint8_t pqiValue, sqiValue;
- *
- *   SpiritQiPqiCheck(S_ENABLE);
- *   SpiritQiSqiCheck(S_ENABLE);
- *
- *   ...
- *
-  *   rssiValueDbm = SpiritQiGetRssidBm();
- *   pqiValue = SpiritQiGetPqi();
- *   sqiValue = SpiritQiGetSqi();
- *
- *   ...
- *
- * @endcode
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_QI_H
-#define __SPIRIT_QI_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Qi          QI
- * @brief Configuration and management of SPIRIT QI.
- * @details See the file <i>@ref SPIRIT_Qi.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Qi_Exported_Types  QI Exported Types
- * @{
- */
-
-
-/**
- * @brief  PQI threshold value enumeration.
- */
-typedef enum
-{
-   PQI_TH_0=0x00,
-   PQI_TH_1=0x04,
-   PQI_TH_2=0x08,
-   PQI_TH_3=0x0C,
-   PQI_TH_4=0x10,
-   PQI_TH_5=0x14,
-   PQI_TH_6=0x18,
-   PQI_TH_7=0x1C,
-   PQI_TH_8=0x20,
-   PQI_TH_9=0x24,
-   PQI_TH_10=0x28,
-   PQI_TH_11=0x2C,
-   PQI_TH_12=0x30,
-   PQI_TH_13=0x34,
-   PQI_TH_14=0x38,
-   PQI_TH_15=0x3C
-
-} PqiThreshold;
-
-#define IS_PQI_THR(VALUE)   (VALUE==PQI_TH_0 ||\
-                             VALUE==PQI_TH_1 ||\
-                             VALUE==PQI_TH_2 ||\
-                             VALUE==PQI_TH_3 ||\
-                             VALUE==PQI_TH_4 ||\
-                             VALUE==PQI_TH_5 ||\
-                             VALUE==PQI_TH_6 ||\
-                             VALUE==PQI_TH_7 ||\
-                             VALUE==PQI_TH_8 ||\
-                             VALUE==PQI_TH_9 ||\
-                             VALUE==PQI_TH_10 ||\
-                             VALUE==PQI_TH_11 ||\
-                             VALUE==PQI_TH_12 ||\
-                             VALUE==PQI_TH_13 ||\
-                             VALUE==PQI_TH_14 ||\
-                             VALUE==PQI_TH_15)
-
-/**
- * @brief  SQI threshold value enumeration.
- */
-typedef enum
-{
-   SQI_TH_0=0x00,
-   SQI_TH_1=0x40,
-   SQI_TH_2=0x80,
-   SQI_TH_3=0xC0
-
-} SqiThreshold;
-
-#define IS_SQI_THR(VALUE)   (VALUE==SQI_TH_0 ||\
-                             VALUE==SQI_TH_1 ||\
-                             VALUE==SQI_TH_2 ||\
-                             VALUE==SQI_TH_3)
-
-
-/**
- * @brief  RSSI filter gain value enumeration.
- */
-typedef enum
-{
-   RSSI_FG_0=0x00,
-   RSSI_FG_1=0x10,
-   RSSI_FG_2=0x20,
-   RSSI_FG_3=0x30,
-   RSSI_FG_4=0x40,
-   RSSI_FG_5=0x50,
-   RSSI_FG_6=0x60,
-   RSSI_FG_7=0x70,
-   RSSI_FG_8=0x80,
-   RSSI_FG_9=0x90,
-   RSSI_FG_10=0xA0,
-   RSSI_FG_11=0xB0,
-   RSSI_FG_12=0xC0,
-   RSSI_FG_13=0xD0,
-   RSSI_FG_14=0xE0,     /*<! recommended value */
-   RSSI_FG_15=0xF0
-
-} RssiFilterGain;
-
-#define IS_RSSI_FILTER_GAIN(VALUE)  (VALUE==RSSI_FG_0 ||\
-                                     VALUE==RSSI_FG_1 ||\
-                                     VALUE==RSSI_FG_2 ||\
-                                     VALUE==RSSI_FG_3 ||\
-                                     VALUE==RSSI_FG_4 ||\
-                                     VALUE==RSSI_FG_5 ||\
-                                     VALUE==RSSI_FG_6 ||\
-                                     VALUE==RSSI_FG_7 ||\
-                                     VALUE==RSSI_FG_8 ||\
-                                     VALUE==RSSI_FG_9 ||\
-                                     VALUE==RSSI_FG_10 ||\
-                                     VALUE==RSSI_FG_11 ||\
-                                     VALUE==RSSI_FG_12 ||\
-                                     VALUE==RSSI_FG_13 ||\
-                                     VALUE==RSSI_FG_14 ||\
-                                     VALUE==RSSI_FG_15)
-
-/**
- * @brief  CS mode enumeration.
- */
-typedef enum
-{
-   CS_MODE_STATIC_3DB=0x00,
-   CS_MODE_DYNAMIC_6DB=0x04,
-   CS_MODE_DYNAMIC_12DB=0x08,
-   CS_MODE_DYNAMIC_18DB=0x0C
-
-} CSMode;
-
-#define IS_CS_MODE(MODE)    (MODE==CS_MODE_STATIC_3DB ||\
-                             MODE==CS_MODE_DYNAMIC_6DB ||\
-                             MODE==CS_MODE_DYNAMIC_12DB ||\
-                             MODE==CS_MODE_DYNAMIC_18DB)
-
-/**
-  *@}
-  */
-
-
-/**
- * @defgroup Qi_Exported_Constants      QI Exported Constants
- * @{
- */
-
-/*  range for the RSSI Threshold in dBm  */
-#define IS_RSSI_THR_DBM(VALUE)  (VALUE>=-130 && VALUE<=-2)
-
-/**
-  *@}
-  */
-
-
-/**
- * @defgroup Qi_Exported_Macros         QI Exported Macros
- * @{
- */
-
-/**
- * @brief  Macro to obtain the RSSI value in dBm
- * @param  None.
- * @retval RSSI in dBm.
- *         This parameter is a float.
- */
-#define SpiritQiGetRssidBm()            (-120.0+((float)(SpiritQiGetRssi()-20))/2)
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Exported_Functions       QI Exported Functions
- * @{
- */
-
-void SpiritQiPqiCheck(SpiritFunctionalState xNewState);
-void SpiritQiSqiCheck(SpiritFunctionalState xNewState);
-void SpiritQiSetPqiThreshold(PqiThreshold xPqiThr);
-PqiThreshold SpiritQiGetPqiThreshold(void);
-void SpiritQiSetSqiThreshold(SqiThreshold xSqiThr);
-SqiThreshold SpiritQiGetSqiThreshold(void);
-void SpiritQiSetRssiThreshold(uint8_t cRssiThr);
-uint8_t SpiritQiGetRssiThreshold(void);
-uint8_t SpiritQiComputeRssiThreshold(int cDbmValue);
-void SpiritQiSetRssiThresholddBm(int nDbmValue);
-uint8_t SpiritQiGetPqi(void);
-uint8_t SpiritQiGetSqi(void);
-uint8_t SpiritQiGetLqi(void);
-SpiritFlagStatus SpiritQiGetCs(void);
-uint8_t SpiritQiGetRssi(void);
-void SpiritQiSetRssiFilterGain(RssiFilterGain xRssiFg);
-RssiFilterGain SpiritQiGetRssiFilterGain(void);
-void SpiritQiSetCsMode(CSMode xCsMode);
-CSMode SpiritQiGetCsMode(void);
-void SpiritQiCsTimeoutMask(SpiritFunctionalState xNewState);
-void SpiritQiPqiTimeoutMask(SpiritFunctionalState xNewState);
-void SpiritQiSqiTimeoutMask(SpiritFunctionalState xNewState);
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Radio.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Radio.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,636 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Radio.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   This file provides all the low level API to manage Analog and Digital
-  *          radio part of SPIRIT.
- * @details
- *
- * In order to configure the Radio main parameters, the user can
- * fit <i>SRadioInit</i> structure the and call the <i>SpiritRadioInit()</i>
- * function passing its pointer as an argument.
- *
- * <b>Example:</b>
- * @code
- *
- * SRadioInit radioInit = {
- *     0,                       // Xtal offset in ppm
- *     433.4e6,                 // base frequency
- *     20e3,                    // channel space
- *     0,                       // channel number
- *     FSK,                     // modulation select
- *     38400,                   // datarate
- *     20e3,                    // frequency deviation
- *     100.5e3                  // channel filter bandwidth
- * };
- *
- * ...
- *
- * SpiritRadioInit(&radioInit);
- * @endcode
- *
- * Another important parameter for the radio configuration is the
- * transmission power.
- * The user is allowed to configure it using the function <i>SpiritRadioSetPALeveldBm()</i>
- * which sets the PA LEVEL specified by the first argument to the
- * power expressed in dBm by the second parameter.
- *
- * <b>Example:</b>
- * @code
- *
- *  SpiritRadioSetPALeveldBm(0 , 10.0);
- *
- * @endcode
- *
- *
- * @note The effective power that is set can be a little different from the
- * passed argument in dBm because the function performs an approximation.
- *
-
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_RADIO_H
-#define __SPIRIT_RADIO_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-#include "SPIRIT_Config.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/** @defgroup SPIRIT_Radio          Radio
- * @brief Configuration and management of SPIRIT RF Analog and Digital part.
- * @details See the file <i>@ref SPIRIT_Radio.h</i> for more details.
- * @{
- */
-
-
-
-/** @defgroup Radio_Exported_Types      Radio Exported Types
- * @{
- */
-
-
-/**
- * @brief  SPIRIT XTAL frequency enumeration
- */
-typedef enum
-{
-  XTAL_FLAG_24_MHz     = 0x00, /*!< 24 MHz Xtal selected */
-  XTAL_FLAG_26_MHz     = 0x01  /*!< 26 MHz Xtal selected */
-
-}XtalFlag;
-
-
-#define IS_XTAL_FLAG(FLAG) (((FLAG) == XTAL_FLAG_24_MHz) || \
-                            ((FLAG) == XTAL_FLAG_26_MHz))
-
-/**
- * @brief  SPIRIT Band enumeration
- */
-typedef enum
-{
-  HIGH_BAND     = 0x00, /*!< High_Band selected: from 779 MHz to 915 MHz */
-  MIDDLE_BAND   = 0x01, /*!< Middle Band selected: from 387 MHz to 470 MHz */
-  LOW_BAND      = 0x02,  /*!< Low Band selected: from 300 MHz to 348 MHz */
-  VERY_LOW_BAND = 0x03  /*!< Vary low Band selected: from 150 MHz to 174 MHz */
-}BandSelect;
-
-
-#define IS_BAND_SELECTED(BAND) ((BAND == HIGH_BAND) || \
-                                (BAND == MIDDLE_BAND) || \
-                                (BAND == LOW_BAND) || \
-                                (BAND == VERY_LOW_BAND))
-
-/**
- * @brief  SPIRIT Modulation enumeration
- */
-typedef enum
-{
-  FSK         = 0x00, /*!< 2-FSK modulation selected */
-  GFSK_BT05   = 0x50, /*!< GFSK modulation selected with BT=0.5 */
-  GFSK_BT1    = 0x10, /*!< GFSK modulation selected with BT=1 */
-  ASK_OOK     = 0x20, /*!< ASK or OOK modulation selected. ASK will use power ramping */
-  MSK         = 0x30  /*!< MSK modulation selected */
-
-}ModulationSelect;
-
-
-#define IS_MODULATION_SELECTED(MOD) (((MOD) == FSK) || \
-                                     ((MOD) == GFSK_BT05) || \
-                                     ((MOD) == GFSK_BT1) || \
-                                     ((MOD) == ASK_OOK) || \
-                                     ((MOD) == MSK))
-
-
-/**
- * @brief  SPIRIT PA additional load capacitors bank enumeration
- */
-typedef enum
-{
-  LOAD_0_PF    = PA_POWER0_CWC_0,    /*!< No additional PA load capacitor */
-  LOAD_1_2_PF  = PA_POWER0_CWC_1_2P, /*!< 1.2pF additional PA load capacitor */
-  LOAD_2_4_PF  = PA_POWER0_CWC_2_4P, /*!< 2.4pF additional PA load capacitor */
-  LOAD_3_6_PF  = PA_POWER0_CWC_3_6P  /*!< 3.6pF additional PA load capacitor */
-
-}PALoadCapacitor;
-
-#define IS_PA_LOAD_CAP(CWC) (((CWC) == LOAD_0_PF) || \
-                             ((CWC) == LOAD_1_2_PF) || \
-                             ((CWC) == LOAD_2_4_PF) || \
-                             ((CWC) == LOAD_3_6_PF))
-
-
-/**
- * @brief  SPIRIT AFC Mode selection
- */
-typedef enum
-{
-  AFC_SLICER_CORRECTION  = AFC2_AFC_MODE_SLICER,    /*!< AFC loop closed on slicer */
-  AFC_2ND_IF_CORRECTION  = AFC2_AFC_MODE_MIXER      /*!< AFC loop closed on 2nd conversion stage */
-
-}AFCMode;
-
-#define IS_AFC_MODE(MODE)   ((MODE) == AFC_SLICER_CORRECTION || (MODE) == AFC_2ND_IF_CORRECTION)
-
-
-/**
- * @brief  SPIRIT AGC Mode selection
- */
-typedef enum
-{
-  AGC_LINEAR_MODE  = AGCCTRL0_AGC_MODE_LINEAR,    /*!< AGC works in linear mode */
-  AGC_BINARY_MODE  = AGCCTRL0_AGC_MODE_BINARY     /*!< AGC works in binary mode */
-
-}AGCMode;
-
-#define IS_AGC_MODE(MODE)   ((MODE) == AGC_LINEAR_MODE || (MODE) == AGC_BINARY_MODE)
-
-
-/**
- * @brief  SPIRIT Clock Recovery Mode selection
- */
-typedef enum
-{
-  CLK_REC_PLL  = FDEV0_CLOCK_REG_ALGO_SEL_PLL,    /*!< PLL alogrithm for clock recovery */
-  CLK_REC_DLL  = FDEV0_CLOCK_REG_ALGO_SEL_DLL     /*!< DLL alogrithm for clock recovery */
-
-}ClkRecMode;
-
-#define IS_CLK_REC_MODE(MODE)   ((MODE) == CLK_REC_PLL || (MODE) == CLK_REC_DLL)
-
-
-/**
- * @brief  SPIRIT Postfilter length
- */
-typedef enum
-{
-  PSTFLT_LENGTH_8   = 0x00,    /*!< Postfilter length is 8 symbols */
-  PSTFLT_LENGTH_16  = 0x10     /*!< Postfilter length is 16 symbols */
-
-}PstFltLength;
-
-#define IS_PST_FLT_LENGTH(LENGTH)   ((LENGTH) == PSTFLT_LENGTH_8 || (LENGTH) == PSTFLT_LENGTH_16)
-
-
-/**
- * @brief  SPIRIT OOK Peak Decay
- */
-typedef enum
-{
-  FAST_DECAY   = 0x00,        /*!< Peak decay control for OOK: fast decay */
-  MEDIUM_FAST_DECAY  = 0x01,  /*!< Peak decay control for OOK: medium_fast decay */
-  MEDIUM_SLOW_DECAY = 0x02,   /*!< Peak decay control for OOK: medium_fast decay */
-  SLOW_DECAY = 0x03           /*!< Peak decay control for OOK: slow decay */
-
-}OokPeakDecay;
-
-#define IS_OOK_PEAK_DECAY(DECAY)   (((DECAY) == FAST_DECAY) ||\
-                                    ((DECAY) == MEDIUM_FAST_DECAY) ||\
-                                    ((DECAY) == MEDIUM_SLOW_DECAY) ||\
-                                    ((DECAY) == SLOW_DECAY))
-
-
-/**
- * @brief  SPIRIT Radio Init structure definition
- */
-typedef struct
-{
-  int16_t           nXtalOffsetPpm;     /*!< Specifies the offset frequency (in ppm)
-                                             to compensate crystal inaccuracy expressed
-                                             as signed value.*/
-
-  uint32_t          lFrequencyBase;     /*!< Specifies the base carrier frequency (in Hz),
-                                             i.e. the carrier frequency of channel #0.
-                                             This parameter can be in one of the following ranges:
-                                             High_Band: from 779 MHz to 915 MHz
-                                             Middle Band: from 387 MHz to 470 MHz
-                                             Low Band: from 300 MHz to 348 MHz */
-  uint32_t          nChannelSpace;      /*!< Specifies the channel spacing expressed in Hz.
-                                             The channel spacing is expressed as:
-                                             NxFREQUENCY_STEPS, where FREQUENCY STEPS
-                                             is F_Xo/2^15.
-                                             This parameter can be in the range: [0, F_Xo/2^15*255] Hz */
-  uint8_t           cChannelNumber;      /*!< Specifies the channel number. This value
-                                             is multiplied by the channel spacing and
-                                             added to synthesizer base frequency to
-                                             generate the actual RF carrier frequency */
-  ModulationSelect  xModulationSelect;   /*!< Specifies the modulation. This
-                                             parameter can be any value of
-                                             @ref ModulationSelect */
-  uint32_t          lDatarate;          /*!< Specifies the datarate expressed in bps.
-                                             This parameter can be in the range between
-                                             100 bps and 500 kbps */
-  uint32_t          lFreqDev;           /*!< Specifies the frequency deviation expressed in Hz.
-                                             This parameter can be in the range: [F_Xo*8/2^18, F_Xo*7680/2^18] Hz */
-  uint32_t          lBandwidth;          /*!< Specifies the channel filter bandwidth
-                                             expressed in Hz. This parameter can be
-                                             in the range between 1100 and 800100 Hz */
-
-}SRadioInit;
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Radio_Exported_Constants       Radio Exported Constants
- * @{
- */
-
-/** @defgroup Radio_Band
- * @{
- */
-
-#define FBASE_DIVIDER           262144           /*!< 2^18 factor dividing fxo in fbase formula */
-
-#define HIGH_BAND_FACTOR      6       /*!< Band select factor for high band. Factor B in the equation 2 */
-#define MIDDLE_BAND_FACTOR    12      /*!< Band select factor for middle band. Factor B in the equation 2 */
-#define LOW_BAND_FACTOR       16      /*!< Band select factor for low band. Factor B in the equation 2 */
-#define VERY_LOW_BAND_FACTOR  32      /*!< Band select factor for very low band. Factor B in the equation 2 */
-
-#define HIGH_BAND_LOWER_LIMIT         778000000   /*!< Lower limit of the high band: 779 MHz */
-#define HIGH_BAND_UPPER_LIMIT         957100000   /*!< Upper limit of the high band: 956 MHz */
-#define MIDDLE_BAND_LOWER_LIMIT       386000000   /*!< Lower limit of the middle band: 387 MHz */
-#define MIDDLE_BAND_UPPER_LIMIT       471100000   /*!< Upper limit of the middle band: 470 MHz */
-#define LOW_BAND_LOWER_LIMIT          299000000   /*!< Lower limit of the low band: 300 MHz */
-#define LOW_BAND_UPPER_LIMIT          349100000   /*!< Upper limit of the low band: 348 MHz */
-#define VERY_LOW_BAND_LOWER_LIMIT     149000000   /*!< Lower limit of the very low band: 150 MHz */
-#define VERY_LOW_BAND_UPPER_LIMIT     175100000   /*!< Upper limit of the very low band: 174 MHz */
-
-#define IS_FREQUENCY_BAND_HIGH(FREQUENCY) ((FREQUENCY)>=HIGH_BAND_LOWER_LIMIT && \
-                                           (FREQUENCY)<=HIGH_BAND_UPPER_LIMIT)
-
-#define IS_FREQUENCY_BAND_MIDDLE(FREQUENCY) ((FREQUENCY)>=MIDDLE_BAND_LOWER_LIMIT && \
-                                             (FREQUENCY)<=MIDDLE_BAND_UPPER_LIMIT)
-
-#define IS_FREQUENCY_BAND_LOW(FREQUENCY) ((FREQUENCY)>=LOW_BAND_LOWER_LIMIT && \
-                                          (FREQUENCY)<=LOW_BAND_UPPER_LIMIT)
-
-#define IS_FREQUENCY_BAND_VERY_LOW(FREQUENCY) ((FREQUENCY)>=VERY_LOW_BAND_LOWER_LIMIT && \
-                                          (FREQUENCY)<=VERY_LOW_BAND_UPPER_LIMIT)
-
-#define IS_FREQUENCY_BAND(FREQUENCY) (IS_FREQUENCY_BAND_HIGH(FREQUENCY)|| \
-                                      IS_FREQUENCY_BAND_MIDDLE(FREQUENCY)|| \
-                                      IS_FREQUENCY_BAND_LOW(FREQUENCY)|| \
-                                      IS_FREQUENCY_BAND_VERY_LOW(FREQUENCY))
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_IF_Offset           Radio IF Offset
- * @{
- */
-#define IF_OFFSET_ANA(F_Xo) (lroundf(480140.0/(F_Xo)*12288-64.0))      /*!< It represents the IF_OFFSET_ANA in order
-                                                                               to have an intermediate frequency of 480 kHz */
-/**
- * @}
- */
-
-
-/** @defgroup Radio_FC_Offset                   Radio FC Offset
- * @{
- */
-#define F_OFFSET_DIVIDER           262144             /*!< 2^18 factor dividing fxo in foffset formula */
-#define PPM_FACTOR                 1000000            /*!< 10^6 factor to use with Xtal_offset_ppm */
-
-
-#define F_OFFSET_LOWER_LIMIT(F_Xo)			((-(int32_t)F_Xo)/F_OFFSET_DIVIDER*2048)
-#define F_OFFSET_UPPER_LIMIT(F_Xo)			((int32_t)(F_Xo/F_OFFSET_DIVIDER*2047))
-
-#define IS_FREQUENCY_OFFSET(OFFSET, F_Xo) (OFFSET>=F_OFFSET_LOWER_LIMIT(F_Xo) && OFFSET<=F_OFFSET_UPPER_LIMIT(F_Xo))
-
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Channel_Space          Radio Channel Space
- * @{
- */
-
-
-#define CHSPACE_DIVIDER         32768              /*!< 2^15 factor dividing fxo in channel space formula */
-
-#define IS_CHANNEL_SPACE(CHANNELSPACE, F_Xo)    (CHANNELSPACE<=(F_Xo/32768*255))
-
-
-
-
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Datarate                    Radio Datarate
- * @{
- */
-#define MINIMUM_DATARATE                 100  /*!< Minimum datarate supported by SPIRIT1 100 bps */
-#define MAXIMUM_DATARATE                 510000  /*!< Maximum datarate supported by SPIRIT1 500 kbps */
-
-#define IS_DATARATE(DATARATE)           (DATARATE>=MINIMUM_DATARATE && DATARATE<=MAXIMUM_DATARATE)
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Frequency_Deviation         Radio Frequency Deviation
- * @{
- */
-#define F_DEV_MANTISSA_UPPER_LIMIT      7  /*!< Maximum value for the mantissa in frequency deviation formula */
-#define F_DEV_EXPONENT_UPPER_LIMIT      9  /*!< Maximum value for the exponent in frequency deviation formula */
-
-#define F_DEV_LOWER_LIMIT(F_Xo)		(F_Xo>>16)
-#define F_DEV_UPPER_LIMIT(F_Xo)		((F_Xo*15)>>10)
-
-#define IS_F_DEV(FDEV,F_Xo)             (FDEV>=F_DEV_LOWER_LIMIT(F_Xo) && FDEV<=F_DEV_UPPER_LIMIT(F_Xo))
-
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Channel_Bandwidth           Radio Channel Bandwidth
- * @{
- */
-#define CH_BW_LOWER_LIMIT(F_Xo)      1100*(F_Xo/1000000)/26  /*!< Minimum value of the channel filter bandwidth */
-#define CH_BW_UPPER_LIMIT(F_Xo)    800100*(F_Xo/1000000)/26  /*!< Maximum value of the channel filter bandwidth */
-
-#define IS_CH_BW(BW,F_Xo)         ((BW)>=CH_BW_LOWER_LIMIT(F_Xo) && (BW)<=CH_BW_UPPER_LIMIT(F_Xo))
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Power_Amplifier                     Radio Power Amplifier
- * @{
- */
-
-#define IS_PA_MAX_INDEX(INDEX)       ((INDEX)<=7)
-#define IS_PAPOWER_DBM(PATABLE)      ((PATABLE)>= (-31) && (PATABLE)<=(12))
-#define IS_PAPOWER(PATABLE)          ((PATABLE)<=90)
-#define IS_PA_STEP_WIDTH(WIDTH)      ((WIDTH)>=1 && (WIDTH)<=4)
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Automatic_Frequency_Correction              Radio Automatic Frequency Correction
- * @{
- */
-
-#define IS_AFC_FAST_GAIN(GAIN)      	((GAIN)<=15)
-#define IS_AFC_SLOW_GAIN(GAIN)      	((GAIN)<=15)
-#define IS_AFC_PD_LEAKAGE(LEAKAGE)      ((LEAKAGE)<=31)
-
-/**
- * @}
- */
-
-/** @defgroup Radio_Automatic_Gain_Control                      Radio Automatic Gain Control
- * @{
- */
-
-#define AGC_MEASURE_TIME_UPPER_LIMIT_US(F_Xo)		(393216.0/F_Xo)
-
-#define IS_AGC_MEASURE_TIME_US(TIME, F_Xo)              (TIME<=AGC_MEASURE_TIME_UPPER_LIMIT_US(F_Xo))
-
-#define IS_AGC_MEASURE_TIME(TIME)                       (TIME<=15)
-
-#define AGC_HOLD_TIME_UPPER_LIMIT_US(F_Xo)		(756.0/F_Xo)
-
-#define IS_AGC_HOLD_TIME_US(TIME,F_Xo)                  (TIME<=AGC_HOLD_TIME_UPPER_LIMIT_US(F_Xo))
-
-
-#define IS_AGC_HOLD_TIME(TIME)                          (TIME<=63)
-
-#define IS_AGC_THRESHOLD(THRESHOLD)                     (THRESHOLD<=15)
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Clock_Recovery                      Radio Clock Recovery
- * @{
- */
-
-#define IS_CLK_REC_P_GAIN(GAIN)       ((GAIN)<=7)
-#define IS_CLK_REC_I_GAIN(GAIN)       ((GAIN)<=15)
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Radio_Exported_Macros                             Radio Exported Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-/** @defgroup Radio_Exported_Functions                          Radio Exported Functions
- * @{
- */
-
-uint8_t SpiritRadioInit(SRadioInit* pxSRadioInitStruct);
-void SpiritRadioGetInfo(SRadioInit* pxSRadioInitStruct);
-void SpiritRadioSetXtalFlag(XtalFlag xXtal);
-XtalFlag SpiritRadioGetXtalFlag(void);
-uint8_t SpiritRadioSearchWCP(uint32_t lFc);
-void SpiritRadioSetSynthWord(uint32_t lSynthWord);
-uint32_t SpiritRadioGetSynthWord(void);
-void SpiritRadioSetBand(BandSelect xBand);
-BandSelect SpiritRadioGetBand(void);
-void SpiritRadioSetChannel(uint8_t cChannel);
-uint8_t SpiritRadioGetChannel(void);
-void SpiritRadioSetChannelSpace(uint32_t lChannelSpace);
-uint32_t SpiritRadioGetChannelSpace(void);
-void SpiritRadioSetFrequencyOffsetPpm(int16_t nXtalPpm);
-void SpiritRadioSetFrequencyOffset(int32_t lFOffset);
-int32_t SpiritRadioGetFrequencyOffset(void);
-void SpiritRadioVcoCalibrationWAFB(SpiritFunctionalState xNewstate);
-uint8_t SpiritRadioSetFrequencyBase(uint32_t lFBase);
-uint32_t SpiritRadioGetFrequencyBase(void);
-uint32_t SpiritRadioGetCenterFrequency(void);
-void SpiritRadioSearchDatarateME(uint32_t lDatarate, uint8_t* pcM, uint8_t* pcE);
-void SpiritRadioSearchFreqDevME(uint32_t lFDev, uint8_t* pcM, uint8_t* pcE);
-void SpiritRadioSearchChannelBwME(uint32_t lBandwidth, uint8_t* pcM, uint8_t* pcE);
-void SpiritRadioSetDatarate(uint32_t lDatarate);
-uint32_t SpiritRadioGetDatarate(void);
-void SpiritRadioSetFrequencyDev(uint32_t lFDev);
-uint32_t SpiritRadioGetFrequencyDev(void);
-void SpiritRadioSetChannelBW(uint32_t lBandwidth);
-uint32_t SpiritRadioGetChannelBW(void);
-void SpiritRadioSetModulation(ModulationSelect xModulation);
-ModulationSelect SpiritRadioGetModulation(void);
-void SpiritRadioCWTransmitMode(SpiritFunctionalState xNewState);
-void SpiritRadioSetOokPeakDecay(OokPeakDecay xOokDecay);
-OokPeakDecay SpiritRadioGetOokPeakDecay(void);
-uint8_t SpiritRadioGetdBm2Reg(uint32_t lFBase, float fPowerdBm);
-float SpiritRadioGetReg2dBm(uint32_t lFBase, uint8_t cPowerReg);
-void SpiritRadioSetPATabledBm(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, float* pfPAtabledBm);
-void SpiritRadioGetPATabledBm(uint8_t* pcPALevelMaxIndex, float* pfPAtabledBm);
-void SpiritRadioSetPATable(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, uint8_t* pcPAtable);
-void SpiritRadioGetPATable(uint8_t* pcPALevelMaxIndex, uint8_t* pcPAtable);
-void SpiritRadioSetPALeveldBm(uint8_t cIndex, float fPowerdBm);
-float SpiritRadioGetPALeveldBm(uint8_t cIndex);
-void SpiritRadioSetPALevel(uint8_t cIndex, uint8_t cPower);
-uint8_t SpiritRadioGetPALevel(uint8_t cIndex);
-void SpiritRadioSetPACwc(PALoadCapacitor xCLoad);
-PALoadCapacitor SpiritRadioGetPACwc(void);
-void SpiritRadioSetPALevelMaxIndex(uint8_t cIndex);
-uint8_t SpiritRadioGetPALevelMaxIndex(void);
-void SpiritRadioSetPAStepWidth(uint8_t cWidth);
-uint8_t SpiritRadioGetPAStepWidth(void);
-void SpiritRadioPARamping(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritRadioGetPARamping(void);
-void SpiritRadioAFC(SpiritFunctionalState xNewState);
-void SpiritRadioAFCFreezeOnSync(SpiritFunctionalState xNewState);
-void SpiritRadioSetAFCMode(AFCMode xMode);
-AFCMode SpiritRadioGetAFCMode(void);
-void SpiritRadioSetAFCPDLeakage(uint8_t cLeakage);
-uint8_t SpiritRadioGetAFCPDLeakage(void);
-void SpiritRadioSetAFCFastPeriod(uint8_t cLength);
-uint8_t SpiritRadioGetAFCFastPeriod(void);
-void SpiritRadioSetAFCFastGain(uint8_t cGain);
-uint8_t SpiritRadioGetAFCFastGain(void);
-void SpiritRadioSetAFCSlowGain(uint8_t cGain);
-uint8_t SpiritRadioGetAFCSlowGain(void);
-int8_t SpiritRadioGetAFCCorrectionReg(void);
-int32_t SpiritRadioGetAFCCorrectionHz(void);
-void SpiritRadioAGC(SpiritFunctionalState xNewState);
-void SpiritRadioSetAGCMode(AGCMode xMode);
-AGCMode SpiritRadioGetAGCMode(void);
-void SpiritRadioAGCFreezeOnSteady(SpiritFunctionalState xNewState);
-void SpiritRadioAGCFreezeOnSync(SpiritFunctionalState xNewState);
-void SpiritRadioAGCStartMaxAttenuation(SpiritFunctionalState xNewState);
-void SpiritRadioSetAGCMeasureTimeUs(uint16_t nTime);
-uint16_t SpiritRadioGetAGCMeasureTimeUs(void);
-void SpiritRadioSetAGCMeasureTime(uint8_t cTime);
-uint8_t SpiritRadioGetAGCMeasureTime(void);
-void SpiritRadioSetAGCHoldTimeUs(uint8_t cTime);
-uint8_t SpiritRadioGetAGCHoldTimeUs(void);
-void SpiritRadioSetAGCHoldTime(uint8_t cTime);
-uint8_t SpiritRadioGetAGCHoldTime(void);
-void SpiritRadioSetAGCHighThreshold(uint8_t cHighThreshold);
-uint8_t SpiritRadioGetAGCHighThreshold(void);
-void SpiritRadioSetAGCLowThreshold(uint8_t cLowThreshold);
-uint8_t SpiritRadioGetAGCLowThreshold(void);
-void SpiritRadioSetClkRecMode(ClkRecMode xMode);
-ClkRecMode SpiritRadioGetClkRecMode(void);
-void SpiritRadioSetClkRecPGain(uint8_t cPGain);
-uint8_t SpiritRadioGetClkRecPGain(void);
-void SpiritRadioSetClkRecIGain(uint8_t cIGain);
-uint8_t SpiritRadioGetClkRecIGain(void);
-void SpiritRadioSetClkRecPstFltLength(PstFltLength xLength);
-PstFltLength SpiritRadioGetClkRecPstFltLength(void);
-void SpiritRadioCsBlanking(SpiritFunctionalState xNewState);
-void SpiritRadioPersistenRx(SpiritFunctionalState xNewState);
-uint32_t SpiritRadioGetXtalFrequency(void);
-void SpiritRadioSetXtalFrequency(uint32_t lXtalFrequency);
-void SpiritRadioSetRefDiv(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritRadioGetRefDiv(void);
-void SpiritRadioSetDigDiv(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritRadioGetDigDiv(void);
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Regs.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Regs.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3244 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Regs.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   This file contains all the SPIRIT registers address and masks.
- * @details
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT1_REGS_H
-#define __SPIRIT1_REGS_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/**
- * @addtogroup SPIRIT_Registers         SPIRIT Registers
- * @brief Header file containing all the SPIRIT registers address and masks.
- * @details See the file <i>@ref SPIRIT_Regs.h</i> for more details.
- * @{
- */
-
-/** @defgroup General_Configuration_Registers
-  * @{
-  */
-
-/** @defgroup ANA_FUNC_CONF_1_Register
-  * @{
-  */
-
-/**
- *  \brief ANA_FUNC_CONF register 1
- *  \code
- *   Read Write
- *   Default value: 0x0C
- *   7:5 NUM_EN_PIPES: Number of enabled pipes (starting from Data Pipe 0).
- *   4:2 GM_CONF[2:0]: Sets the driver gm of the XO at start-up:
- *       GM_CONF2 | GM_CONF1 | GM_CONF0 | GM [mS]
- *       ------------------------------------------
- *           0    |    0     |     0    |  13.2
- *           0    |    0     |     1    |  18.2
- *           0    |    1     |     0    |  21.5
- *           0    |    1     |     1    |  25.6
- *           1    |    0     |     0    |  28.8
- *           1    |    0     |     1    |  33.9
- *           1    |    1     |     0    |  38.5
- *           1    |    1     |     1    |  43.0
- *   1:0 SET_BLD_LVL[1:0]: Sets the Battery Level Detector threshold:
- *       SET_BLD_LVL1 | SET_BLD_LVL0 | Threshold [V]
- *       ------------------------------------------
- *             0      |      0       |     2.7
- *             0      |      1       |     2.5
- *             1      |      0       |     2.3
- *             1      |      1       |     2.1
- *   \endcode
- */
-
-#define ANA_FUNC_CONF1_BASE					((uint8_t)0x00) /*!< ANA_FUNC_CONF1 Address (R/W) */
-
-#define ANA_FUNC_CONF1_NUM_PIPES_MASK                           ((uint8_t)0xE0) /*!< Mask for number of enabled pipes*/
-
-#define ANA_FUNC_CONF1_GMCONF_MASK		        	((uint8_t)0x1C) /*!< Mask of the GmConf field of ANA_FUNC_CONF1 register (R/W) */
-
-#define GM_13_2				                        ((uint8_t)0x00) /*!< Transconducatance Gm at start-up 13.2 mS */
-#define GM_18_2				                        ((uint8_t)0x04) /*!< Transconducatance Gm at start-up 18.2 mS */
-#define GM_21_5				                        ((uint8_t)0x08) /*!< Transconducatance Gm at start-up 21.5 mS */
-#define GM_25_6				                        ((uint8_t)0x0C) /*!< Transconducatance Gm at start-up 25.6 mS */
-#define GM_28_8				                        ((uint8_t)0x10) /*!< Transconducatance Gm at start-up 28.8 mS */
-#define GM_33_9				                        ((uint8_t)0x14) /*!< Transconducatance Gm at start-up 33.9 mS */
-#define GM_38_5				                        ((uint8_t)0x18) /*!< Transconducatance Gm at start-up 38.5 mS */
-#define GM_43_0				                        ((uint8_t)0x1C) /*!< Transconducatance Gm at start-up 43.0 mS */
-
-#define ANA_FUNC_CONF1_SET_BLD_LVL_MASK		        	((uint8_t)0x03) /*!< Mask of the SET_BLD_LV field of ANA_FUNC_CONF1 register (R/W) */
-
-#define BLD_LVL_2_7				                ((uint8_t)0x00) /*!< Sets the Battery Level Detector threshold to 2.7V */
-#define BLD_LVL_2_5				                ((uint8_t)0x01) /*!< Sets the Battery Level Detector threshold to 2.5V */
-#define BLD_LVL_2_3				                ((uint8_t)0x02) /*!< Sets the Battery Level Detector threshold to 2.3V */
-#define BLD_LVL_2_1				                ((uint8_t)0x03) /*!< Sets the Battery Level Detector threshold to 2.1V */
-
-/**
- * @}
- */
-
-
-/** @defgroup ANA_FUNC_CONF_0_Register
- * @{
- */
-
-/**
- *  \brief ANA_FUNC_CONF register 0
- *  \code
- *   Read Write
- *   Default value: 0xC0
- *   7 Reserved.
- *   6 24_26_MHz_SELECT: 1 - 26 MHz configuration
- *                       0 - 24 MHz configuration
- *   5 AES_ON:           1 - AES engine enabled
- *                       0 - AES engine disabled
- *   4 EXT_REF:          1 - Reference signal from XIN pin
- *                       0 - Reference signal from XO circuit
- *   3 HIGH_POWER_MODE:  1 - SET_SMPS_LEVEL word will be set to the value to
- *                           PM_TEST register in RX state, while in TX state it
- *                           will be fixed to 111 (which programs the SMPS output
- *                           at max value 1.8V)
- *                       0 - SET_SMPS_LEVEL word will hold the value written in the
- *                           PM_TEST register both in RX and TX state
- *   2 BROWN_OUT:        1 - Brown_Out Detection enabled
- *                       0 - Brown_Out Detection disabled
- *   1 BATTERY_LEVEL:    1 - Battery level detector enabled
- *                       0 - Battery level detector disabled
- *   0 TS:               1 - Enable the "Temperature Sensor" function
- *                       0 - Disable the "Temperature Sensor" function
- *   \endcode
- */
-
-
-#define ANA_FUNC_CONF0_BASE					((uint8_t)0x01) /*!< ANA_FUNC_CONF0 Address (R/W) */
-
-#define SELECT_24_26_MHZ_MASK              			((uint8_t)0x40) /*!< Configure the RCO if using 26 MHz or 24 MHz master clock/reference signal */
-#define AES_MASK                				((uint8_t)0x20) /*!< AES engine on/off */
-#define EXT_REF_MASK          				        ((uint8_t)0x10) /*!< Reference signal from XIN pin (oscillator external) or from XO circuit (oscillator internal)*/
-#define HIGH_POWER_MODE_MASK	                		((uint8_t)0x08) /*!< SET_SMPS_LEVEL word will be set to the value to PM_TEST register
-                                                                                     in RX state, while in TX state it will be fixed to 111
-                                                                                     (which programs the SMPS output at max value, 1.8V) */
-#define BROWN_OUT_MASK  			          	((uint8_t)0x04) /*!< Accurate Brown-Out detection on/off */
-#define BATTERY_LEVEL_MASK  	                		((uint8_t)0x02) /*!< Battery level detector circuit on/off */
-#define TEMPERATURE_SENSOR_MASK 	        		((uint8_t)0x01) /*!< The Temperature Sensor (available on GPIO0) on/off */
-
-/**
- * @}
- */
-
-/** @defgroup ANT_SELECT_CONF_Register
- * @{
- */
-
-/**
- *  \brief ANT_SELECT_CONF register
- *  \code
- *   Read Write
- *   Default value: 0x05
- *
- *   7:5   Reserved.
- *
- *   4   CS_BLANKING: Blank received data if signal is below the CS threshold
- *
- *   3   AS_ENABLE: Enable antenna switching
- *                       1 - Enable
- *                       0 - Disable
- *
- *   2:0 AS_MEAS_TIME[2:0]: Measurement time according to the formula Tmeas = 24*2^(EchFlt)*2^AS_MEAS_TIME/fxo
- *   \endcode
- */
-#define	ANT_SELECT_CONF_BASE					((uint8_t)0x27) /*!< Antenna diversity (works only in static carrier sense mode) */
-#define ANT_SELECT_CS_BLANKING_MASK                             ((uint8_t)0x10) /*!< CS data blanking on/off */
-#define ANT_SELECT_CONF_AS_MASK           			((uint8_t)0x08) /*!< Antenna diversity on/off */
-
-/**
- * @}
- */
-
-/** @defgroup DEVICE_INFO1_Register
- * @{
- */
-
-/**
- *  \brief DEVICE_INFO1[7:0]  registers
- *  \code
- *   Default value: 0x01
- *   Read
- *
- *   7:0       PARTNUM[7:0]:   Device part number
- *   \endcode
- */
-#define	DEVICE_INFO1_PARTNUM					((uint8_t)(0xF0)) /*!< Device part number [7:0] */
-
-/**
- * @}
- */
-
-/** @defgroup DEVICE_INFO0_Register
- * @{
- */
-
-/**
- *  \brief DEVICE_INFO0[7:0]  registers
- *  \code
- *   Read
- *
- *   7:0       VERSION[7:0]:  Device version number
- *   \endcode
- */
-#define	DEVICE_INFO0_VERSION					((uint8_t)(0xF1)) /*!< Device version [7:0]; (0x55 in CUT1.0) */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/** @defgroup GPIO_Registers
- * @{
- */
-
-/** @defgroup GPIOx_CONF_Registers
- * @{
- */
-
-/**
- *  \brief GPIOx registers
- *  \code
- *   Read Write
- *   Default value: 0x03
- *   7:3 GPIO_SELECT[4:0]: Specify the I/O signal.
- *       GPIO_SELECT[4:0] |    I/O    |      Signal
- *       ------------------------------------------------
- *               0        |  Output   |  nIRQ
- *               0        |  Input    |  TX command
- *               1        |  Output   |  POR inverted
- *               1        |  Input    |  RX command
- *               2        |  Output   |  Wake-Up timer expiration
- *               2        |  Input    |  TX data for direct modulation
- *               3        |  Output   |  Low Battery Detection
- *               3        |  Input    |  Wake-up from external input
- *               4        |  Output   |  TX clock output
- *               5        |  Output   |  TX state
- *               6        |  Output   |  TX FIFO Almost Empty Flag
- *               7        |  Output   |  TX FIFO ALmost Full Flag
- *               8        |  Output   |  RX data output
- *               9        |  Output   |  RX clock output
- *               10       |  Output   |  RX state
- *               11       |  Output   |  RX FIFO Almost Full Flag
- *               12       |  Output   |  RX FIFO Almost Empty Flag
- *               13       |  Output   |  Antenna switch
- *               14       |  Output   |  Valid preamble detected
- *               15       |  Output   |  Sync word detected
- *               16       |  Output   |  RSSI above threshold
- *               17       |  Output   |  MCU clock
- *               18       |  Output   |  TX or RX mode indicator
- *               19       |  Output   |  VDD
- *               20       |  Output   |  GND
- *               21       |  Output   |  External SMPS enable signal
- *               22-31    |  Not Used |  Not Used
- *   2 Reserved
- *   1:0 GpioMode[1:0]: Specify the mode:
- *        GPIO_MODE1  |  GPIO_MODE0  |               MODE
- *       ------------------------------------------------------------
- *             0      |      0       |    Analog (valid only for GPIO_0)
- *             0      |      1       |    Digital Input
- *             1      |      0       |    Digital Output Low Power
- *             1      |      1       |    Digital Output High Power
- *
- *   Note: The Analog mode is used only for temperature sensor indication. This is available only
- *         on GPIO_0 by setting the TS bit in the ANA_FUNC_CONF_0_Register.
- *   \endcode
- */
-
-
-#define GPIO3_CONF_BASE						((uint8_t)0x02) /*!< GPIO_3 register address */
-#define GPIO2_CONF_BASE						((uint8_t)0x03) /*!< GPIO_3 register address */
-#define GPIO1_CONF_BASE						((uint8_t)0x04) /*!< GPIO_3 register address */
-#define GPIO0_CONF_BASE						((uint8_t)0x05) /*!< GPIO_3 register address */
-
-#define CONF_GPIO_IN_TX_Command				        ((uint8_t)0x00) /*!< TX command direct from PIN (rising edge, width min=50ns) */
-#define CONF_GPIO_IN_RX_Command				        ((uint8_t)0x08) /*!< RX command direct from PIN (rising edge, width min=50ns)*/
-#define CONF_GPIO_IN_TX_Data				        ((uint8_t)0x10) /*!< TX data input for direct modulation */
-#define CONF_GPIO_IN_WKUP_Ext				        ((uint8_t)0x18) /*!< Wake up from external input */
-
-#define CONF_GPIO_OUT_nIRQ				        ((uint8_t)0x00) /*!< nIRQ (Interrupt Request, active low) , default configuration after POR */
-#define CONF_GPIO_OUT_POR_Inv				        ((uint8_t)0x08) /*!< POR inverted (active low) */
-#define CONF_GPIO_OUT_WUT_Exp				        ((uint8_t)0x10) /*!< Wake-Up Timer expiration: ‘1’ when WUT has expired */
-#define CONF_GPIO_OUT_LBD				        ((uint8_t)0x18) /*!< Low battery detection: ‘1’ when battery is below threshold setting */
-#define CONF_GPIO_OUT_TX_Data				        ((uint8_t)0x20) /*!< TX data internal clock output (TX data are sampled on the rising edge of it) */
-#define CONF_GPIO_OUT_TX_State				        ((uint8_t)0x28) /*!< TX state indication: ‘1’ when Spirit1 is transiting in the TX state */
-#define CONF_GPIO_OUT_TX_FIFO_Almost_Empty			((uint8_t)0x30) /*!< TX FIFO Almost Empty Flag */
-#define CONF_GPIO_OUT_TX_FIFO_Amost_Full			((uint8_t)0x38) /*!< TX FIFO Almost Full Flag */
-#define CONF_GPIO_OUT_RX_Data				        ((uint8_t)0x40) /*!< RX data output */
-#define CONF_GPIO_OUT_RX_Clock				        ((uint8_t)0x48) /*!< RX clock output (recovered from received data) */
-#define CONF_GPIO_OUT_RX_State				        ((uint8_t)0x50) /*!< RX state indication: ‘1’ when Spirit1 is transiting in the RX state */
-#define CONF_GPIO_OUT_RX_FIFO_Almost_Full			((uint8_t)0x58) /*!< RX FIFO Almost Full Flag */
-#define CONF_GPIO_OUT_RX_FIFO_Almost_Empty			((uint8_t)0x60) /*!< RX FIFO Almost Empty Flag */
-#define CONF_GPIO_OUT_Antenna_Switch				((uint8_t)0x68) /*!< Antenna switch used for antenna diversity */
-#define CONF_GPIO_OUT_Valid_Preamble				((uint8_t)0x70) /*!< Valid Preamble Detected Flag */
-#define CONF_GPIO_OUT_Sync_Detected				((uint8_t)0x78) /*!< Sync WordSync Word Detected Flag */
-#define CONF_GPIO_OUT_RSSI_Threshold				((uint8_t)0x80) /*!< CCA Assessment Flag */
-#define CONF_GPIO_OUT_MCU_Clock				        ((uint8_t)0x88) /*!< MCU Clock */
-#define CONF_GPIO_OUT_TX_RX_Mode				((uint8_t)0x90) /*!< TX or RX mode indicator (to enable an external range extender) */
-#define CONF_GPIO_OUT_VDD				        ((uint8_t)0x98) /*!< VDD (to emulate an additional GPIO of the MCU, programmable by SPI) */
-#define CONF_GPIO_OUT_GND				        ((uint8_t)0xA0) /*!< GND (to emulate an additional GPIO of the MCU, programmable by SPI) */
-#define CONF_GPIO_OUT_SMPS_Ext				        ((uint8_t)0xA8) /*!< External SMPS enable signal (active high) */
-
-#define CONF_GPIO_MODE_ANALOG				        ((uint8_t)0x00) /*!< Analog test BUS on GPIO; used only in test mode (except for temperature sensor) */
-#define CONF_GPIO_MODE_DIG_IN				        ((uint8_t)0x01) /*!< Digital Input on GPIO */
-#define CONF_GPIO_MODE_DIG_OUTL				        ((uint8_t)0x02) /*!< Digital Output on GPIO (low current) */
-#define CONF_GPIO_MODE_DIG_OUTH				        ((uint8_t)0x03) /*!< Digital Output on GPIO (high current) */
-
-/**
- * @}
- */
-
-
-/** @defgroup MCU_CK_CONF_Register
- * @{
- */
-
-/**
- *  \brief MCU_CK_CONF  register
- *  \code
- *   Read Write
- *   Default value: 0x00
- *   7   Reserved.
- *   6:5 CLOCK_TAIL[1:0]: Specifies the number of extra cylces provided before entering in STANDBY state.
- *       CLOCK_TAIL1   |   CLOCK_TAIL0    |  Number of Extra Cycles
- *       ------------------------------------------------------------
- *            0        |        0         |           0
- *            0        |        1         |           64
- *            1        |        0         |           256
- *            1        |        1         |           512
- *   4:1 XO_RATIO[3:0]: Specifies the division ratio when XO oscillator is the clock source
- *       XO_RATIO[3:0] |   Division Ratio
- *       -----------------------------------
- *               0     |        1
- *               1     |       2/3
- *               2     |       1/2
- *               3     |       1/3
- *               4     |       1/4
- *               5     |       1/6
- *               6     |       1/8
- *               7     |       1/12
- *               8     |       1/16
- *               9     |       1/24
- *               10    |       1/36
- *               11    |       1/48
- *               12    |       1/64
- *               13    |       1/96
- *               14    |       1/128
- *               15    |       1/256
- *   0   RCO_RATIO: Specifies the divsion ratio when RC oscillator is the clock source
- *                0 - Division Ratio equal to 0
- *                1 - Division Ratio equal to 1/128
- *   \endcode
- */
-
-
-#define MCU_CK_CONF_BASE					((uint8_t)0x06) /*!< MCU Clock Config register address */
-
-#define MCU_CK_ENABLE                                           ((uint8_t)0x80) /*!< MCU clock enable bit */
-
-#define MCU_CK_CONF_CLOCK_TAIL_0				((uint8_t)0x00) /*!< 0   extra clock cycles provided to the MCU before switching to STANDBY state */
-#define MCU_CK_CONF_CLOCK_TAIL_64				((uint8_t)0x20) /*!< 64  extra clock cycles provided to the MCU before switching to STANDBY state */
-#define MCU_CK_CONF_CLOCK_TAIL_256				((uint8_t)0x40) /*!< 256 extra clock cycles provided to the MCU before switching to STANDBY state */
-#define MCU_CK_CONF_CLOCK_TAIL_512				((uint8_t)0x60) /*!< 512 extra clock cycles provided to the MCU before switching to STANDBY state */
-#define MCU_CK_CONF_XO_RATIO_1					((uint8_t)0x00) /*!< XO Clock signal available on the GPIO divided by 1     */
-#define MCU_CK_CONF_XO_RATIO_2_3				((uint8_t)0x02) /*!< XO Clock signal available on the GPIO divided by 2/3   */
-#define MCU_CK_CONF_XO_RATIO_1_2				((uint8_t)0x04) /*!< XO Clock signal available on the GPIO divided by 1/2   */
-#define MCU_CK_CONF_XO_RATIO_1_3				((uint8_t)0x06) /*!< XO Clock signal available on the GPIO divided by 1/3   */
-#define MCU_CK_CONF_XO_RATIO_1_4				((uint8_t)0x08) /*!< XO Clock signal available on the GPIO divided by 1/4   */
-#define MCU_CK_CONF_XO_RATIO_1_6				((uint8_t)0x0A) /*!< XO Clock signal available on the GPIO divided by 1/6   */
-#define MCU_CK_CONF_XO_RATIO_1_8				((uint8_t)0x0C) /*!< XO Clock signal available on the GPIO divided by 1/8   */
-#define MCU_CK_CONF_XO_RATIO_1_12				((uint8_t)0x0E) /*!< XO Clock signal available on the GPIO divided by 1/12  */
-#define MCU_CK_CONF_XO_RATIO_1_16				((uint8_t)0x10) /*!< XO Clock signal available on the GPIO divided by 1/16  */
-#define MCU_CK_CONF_XO_RATIO_1_24				((uint8_t)0x12) /*!< XO Clock signal available on the GPIO divided by 1/24  */
-#define MCU_CK_CONF_XO_RATIO_1_36				((uint8_t)0x14) /*!< XO Clock signal available on the GPIO divided by 1/36  */
-#define MCU_CK_CONF_XO_RATIO_1_48				((uint8_t)0x16) /*!< XO Clock signal available on the GPIO divided by 1/48  */
-#define MCU_CK_CONF_XO_RATIO_1_64				((uint8_t)0x18) /*!< XO Clock signal available on the GPIO divided by 1/64  */
-#define MCU_CK_CONF_XO_RATIO_1_96				((uint8_t)0x1A) /*!< XO Clock signal available on the GPIO divided by 1/96  */
-#define MCU_CK_CONF_XO_RATIO_1_128				((uint8_t)0x1C) /*!< XO Clock signal available on the GPIO divided by 1/128 */
-#define MCU_CK_CONF_XO_RATIO_1_192				((uint8_t)0x1E) /*!< XO Clock signal available on the GPIO divided by 1/196 */
-#define MCU_CK_CONF_RCO_RATIO_1					((uint8_t)0x00) /*!< RCO Clock signal available on the GPIO divided by 1    */
-#define MCU_CK_CONF_RCO_RATIO_1_128				((uint8_t)0x01) /*!< RCO Clock signal available on the GPIO divided by 1/128*/
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Radio_Configuration_Registers
- * @{
- */
-
-
-
-/** @defgroup SYNT3_Register
- * @{
- */
-
-/**
- *  \brief SYNT3  register
- *  \code
- *   Read Write
- *   Default value: 0x0C
- *
- *   7:5 WCP[2:0]: Set the charge pump current according to the VCO frequency in RX mode.
- *
- *         VCO Frequency    |        WCP2      |       WCP1       |       WCP0        |    Charge Pump Current (uA)
- *       ------------------------------------------------------------------------------------------------------------
- *          4644-4678       |         0        |        0         |        0          |             378.4
- *          4708-4772       |         0        |        0         |        1          |             368.9
- *          4772-4836       |         0        |        1         |        0          |             359.5
- *          4836-4902       |         0        |        1         |        1          |             350
- *          4902-4966       |         1        |        0         |        0          |             340.5
- *          4966-5030       |         1        |        0         |        1          |             331.1
- *          5030-5095       |         1        |        1         |        0          |             321.6
- *          5095-5161       |         1        |        1         |        1          |             312.2
- *          5161-5232       |         0        |        0         |        0          |             378.4
- *          5232-5303       |         0        |        0         |        1          |             368.9
- *          5303-5375       |         0        |        1         |        0          |             359.5
- *          5375-5448       |         0        |        1         |        1          |             350
- *          5448-5519       |         1        |        0         |        0          |             340.5
- *          5519-5592       |         1        |        0         |        1          |             331.1
- *          5592-5663       |         1        |        1         |        0          |             321.6
- *          5663-5736       |         1        |        1         |        1          |             312.2
- *
- *
- *   4:0  SYNT[25:21]: highest 5 bits of the PLL programmable divider
- *                     The valid range depends on fXO and REFDIV settings; for
- *                     fXO=26MHz
- *                     REFDIV = 0 - SYNT[25:21] = 11...13
- *                     REFDIV = 1 - SYNT[25:21] = 22…27
- *
- *
- *   \endcode
- */
-#define	SYNT3_BASE						((uint8_t)0x08) /*!< [4:0] -> SYNT[25:21], highest 5 bits of the PLL programmable divider */
-
-#define WCP_CONF_WCP_378UA                                      ((uint8_t)0x00) /*!< Charge pump current nominal value = 378uA [VCO 4644-4708]&[VCO 5161-5232] */
-#define WCP_CONF_WCP_369UA                                      ((uint8_t)0x01) /*!< Charge pump current nominal value = 369uA [VCO 4708-4772]&[VCO 5232-5303] */
-#define WCP_CONF_WCP_359UA                                      ((uint8_t)0x02) /*!< Charge pump current nominal value = 359uA [VCO 4772-4836]&[VCO 5303-5375] */
-#define WCP_CONF_WCP_350UA                                      ((uint8_t)0x03) /*!< Charge pump current nominal value = 350uA [VCO 4836-4902]&[VCO 5375-5448] */
-#define WCP_CONF_WCP_340UA                                      ((uint8_t)0x04) /*!< Charge pump current nominal value = 340uA [VCO 4902-4966]&[VCO 5448-5519] */
-#define WCP_CONF_WCP_331UA                                      ((uint8_t)0x05) /*!< Charge pump current nominal value = 331uA [VCO 4966-5030]&[VCO 5519-5592] */
-#define WCP_CONF_WCP_321UA                                      ((uint8_t)0x06) /*!< Charge pump current nominal value = 321uA [VCO 5030-5095]&[VCO 5592-5563] */
-#define WCP_CONF_WCP_312UA                                      ((uint8_t)0x07) /*!< Charge pump current nominal value = 312uA [VCO 5095-5160]&[VCO 5563-5736] */
-
-
-/**
- * @}
- */
-
-
-/** @defgroup SYNT2_Register
- * @{
- */
-
-/**
- *  \brief SYNT2  register
- *  \code
- *   Read Write
- *   Default value: 0x84
- *   7:0  SYNT[20:13]: intermediate bits of the PLL programmable divider.
- *
- *   \endcode
- */
-
-#define	SYNT2_BASE						((uint8_t)0x09) /*!< SYNT[20:13], intermediate bits of the PLL programmable divider */
-
-/**
- * @}
- */
-
-/** @defgroup SYNT1_Register
- * @{
- */
-
-/**
- *  \brief SYNT1  register
- *  \code
- *   Read Write
- *   Default value: 0xEC
- *   7:0  SYNT[12:5]: intermediate bits of the PLL programmable divider.
- *
- *   \endcode
- */
-
-#define	SYNT1_BASE						((uint8_t)0x0A) /*!< SYNT[12:5], intermediate bits of the PLL programmable divider */
-
-/**
- * @}
- */
-
-/** @defgroup SYNT0_Register
- * @{
- */
-
-/**
- *  \brief SYNT0  register
- *  \code
- *   Read Write
- *   Default value: 0x51
- *   7:3  SYNT[4:0]: lowest bits of the PLL programmable divider.
- *   2:0  BS[2:0]:   Synthesizer band select. This parameter selects the out-of-loop divide factor of the synthesizer
- *                   according to the formula fxo/(B/2)/D*SYNT/2^18
- *
- *              BS2        |       BS1       |       BS0        |     value of B
- *       ---------------------------------------------------------------------------
- *               0         |        0        |        1         |       6
- *               0         |        1        |        0         |       8
- *               0         |        1        |        1         |       12
- *               1         |        0        |        0         |       16
- *               1         |        0        |        1         |       32
- *
- *   \endcode
- */
-#define	SYNT0_BASE						((uint8_t)0x0B) /*!< [7:3] -> SYNT[4:0], lowest bits of the PLL programmable divider */
-
-#define	SYNT0_BS_6						((uint8_t)0x01) /*!< Synthesizer band select (out-of-loop divide factor of the synthesizer)=6  (779-956MHz) */
-#define	SYNT0_BS_8						((uint8_t)0x02) /*!< Synthesizer band select (out-of-loop divide factor of the synthesizer)=8  (387-470MHz)*/
-#define	SYNT0_BS_12						((uint8_t)0x03) /*!< Synthesizer band select (out-of-loop divide factor of the synthesizer)=12 (387-470MHz)*/
-#define	SYNT0_BS_16						((uint8_t)0x04) /*!< Synthesizer band select (out-of-loop divide factor of the synthesizer)=16 (300-348MHz)*/
-#define	SYNT0_BS_32						((uint8_t)0x05) /*!< Synthesizer band select (out-of-loop divide factor of the synthesizer)=32 (150-174MHz)*/
-
-/**
- * @}
- */
-
-/** @defgroup CHSPACE_Register
- * @{
- */
-
-/**
- *  \brief CHSPACE  register
- *  \code
- *   Read Write
- *   Default value: 0xFC
- *   7:0  CH_SPACING[7:0]: Channel spacing. From ~793Hz to ~200KHz in 793Hz steps
- *                         (in general, frequency step is fXO/215=26MHz/215~793Hz).
- *
- *   \endcode
- */
-
-#define	CHSPACE_BASE						((uint8_t)0x0C) /*!< Channel spacing. From ~0.8KHz to ~200KHz in (fXO/2^15)Hz (793Hz for 26MHz XO) steps */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup IF_OFFSET_DIG_Register
- * @{
- */
-
-/**
- *  \brief IF_OFFSET_DIG  register
- *  \code
- *   Read Write
- *   Default value: 0xA3
- *   7:0  IF_OFFSET_DIG[7:0]: Intermediate frequency setting for the digital shift-to-baseband circuits. According to the formula: fIF=fXO*(IF_OFFSET_ANA+64)/(12*2^10)=fCLK*(IF_OFFSET_DIG+64)/(12*2^10) Hz.
- *
- *   \endcode
- */
-#define	IF_OFFSET_DIG_BASE						((uint8_t)0x0D) /*!< Intermediate frequency fIF=fXO*(IF_OFFSET_ANA+64)/(12*2^10)=fCLK*(IF_OFFSET_DIG+64)/(12*2^10) Hz */
-
-/**
- * @}
- */
-
-/** @defgroup IF_OFFSET_ANA_Register
- * @{
- */
-
-/**
- *  \brief IF_OFFSET_ANA  register
- *  \code
- *   Read Write
- *   Default value: 0xA3
- *   7:0  IF_OFFSET_ANA[7:0]: Intermediate frequency setting for the digital shift-to-baseband circuits. According to the formula: fIF=fXO*(IF_OFFSET_ANA+64)/(12*2^10)=fCLK*(IF_OFFSET_DIG+64)/(12*2^10) Hz.
- *
- *   \endcode
- */
-#define	IF_OFFSET_ANA_BASE						((uint8_t)0x07) /*!< Intermediate frequency fIF=fXO*(IF_OFFSET_ANA+64)/(12*2^10)=fCLK*(IF_OFFSET_DIG+64)/(12*2^10) Hz */
-
-
-/**
- * @}
- */
-
-/** @defgroup FC_OFFSET1_Register
- * @{
- */
-
-/**
- *  \brief FC_OFFSET1  registers
- *  \code
- *   Read Write
- *   Default value: 0xA3
- *   7:4  Reserved.
- *   3:0  FC_OFFSET[11:8]: Carrier offset. This value is the higher part of a 12-bit 2’s complement integer
- *                         representing an offset in 99Hz(2) units added/subtracted to the
- *                         carrier frequency set by registers SYNT3…SYNT0.
- *                         This register can be used to set a fixed correction value
- *                         obtained e.g. from crystal measurements.
- *
- *   \endcode
- */
-#define	FC_OFFSET1_BASE						((uint8_t)0x0E) /*!< [3:0] -> [11:8] Carrier offset (upper part) */
-
-/**
- * @}
- */
-
-
-/** @defgroup FC_OFFSET0_Register
- * @{
- */
-
-/**
- *  \brief FC_OFFSET0  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0  FC_OFFSET[7:0]: Carrier offset. This value is the lower part of a 12-bit 2’s complement integer
- *                         representing an offset in 99Hz(2) units added/subtracted to the
- *                         carrier frequency set by registers SYNT3…SYNT0.
- *                         This register can be used to set a fixed correction value
- *                         obtained e.g. from crystal measurements.
- *
- *   \endcode
- */
-#define	FC_OFFSET0_BASE						((uint8_t)0x0F) /*!< [7:0] -> [7:0] Carrier offset (lower part). This value is a 12-bit 2’s complement integer
-																	representing an offset in fXO/2^18 (99Hz for 26 MHz XO) units added/subtracted to the carrier frequency
-															set by registers SYNT3…SYNT0. Range is +/-200kHz with 26 MHz XO */
-/**
- * @}
- */
-
-
-/** @defgroup PA_LEVEL_x_Registers
- * @{
- */
-
-/**
- *  \brief PA_POWER_x[8:1]  registers
- *  \code
- *   Default values from 8 to 1: [0x03, 0x0E, 0x1A, 0x25, 0x35, 0x40, 0x4E, 0x00]
- *   Read Write
- *
- *   7    Reserved.
- *   6:0  PA_LEVEL_(x-1)[6:0]: Output power level for x-th slot.
- *   \endcode
- */
-
-#define	PA_POWER8_BASE						((uint8_t)0x10) /*!< PA Power level for 8th slot of PA ramping or ASK modulation */
-#define	PA_POWER7_BASE						((uint8_t)0x11) /*!< PA Power level for 7th slot of PA ramping or ASK modulation */
-#define	PA_POWER6_BASE						((uint8_t)0x12) /*!< PA Power level for 6th slot of PA ramping or ASK modulation */
-#define	PA_POWER5_BASE						((uint8_t)0x13) /*!< PA Power level for 5th slot of PA ramping or ASK modulation */
-#define	PA_POWER4_BASE						((uint8_t)0x14) /*!< PA Power level for 4th slot of PA ramping or ASK modulation */
-#define	PA_POWER3_BASE						((uint8_t)0x15) /*!< PA Power level for 3rd slot of PA ramping or ASK modulation */
-#define	PA_POWER2_BASE						((uint8_t)0x16) /*!< PA Power level for 2nd slot of PA ramping or ASK modulation */
-#define	PA_POWER1_BASE						((uint8_t)0x17) /*!< PA Power level for 1st slot of PA ramping or ASK modulation */
-
-/**
- * @}
- */
-
-/** @defgroup PA_POWER_CONF_Registers
- * @{
- */
-
-/**
- *  \brief PA_POWER_CONF_Registers
- *  \code
- *   Default value:0x07
- *   Read Write
- *
- *   7:6  CWC[1:0]: Output stage additional load capacitors bank (to be used to
- *                      optimize the PA for different sub-bands).
- *
- *         CWC1       |        CWC0      |     Total capacity in pF
- *       ---------------------------------------------------------
- *          0         |         0        |        0
- *          0         |         1        |        1.2
- *          1         |         0        |        2.4
- *          1         |         1        |        3.6
- *
- *   5   PA_RAMP_ENABLE:
- *                       1 - Enable the power ramping
- *                       0 - Disable the power ramping
- *   4:3 PA_RAMP_STEP_WIDTH[1:0]: Step width in bit period
- *
- *         PA_RAMP_STEP_WIDTH1       |        PA_RAMP_STEP_WIDTH0       |     PA ramping time step
- *       -------------------------------------------------------------------------------------------
- *                 0                 |                0                 |        1/8 Bit period
- *                 0                 |                1                 |        2/8 Bit period
- *                 1                 |                0                 |        3/8 Bit period
- *                 1                 |                1                 |        4/8 Bit period
- *
- *   2:0 PA_LEVEL_MAX_INDEX[2:0]: Fixes the MAX PA LEVEL in PA ramping or ASK modulation
- *
- *   \endcode
- */
-#define	PA_POWER0_BASE						((uint8_t)0x18) /*!< PA ramping settings and additional load capacitor banks used
-																	for PA optimization in different sub bands*/
-#define PA_POWER0_CWC_MASK                                      ((uint8_t)0x20) /*!< Output stage additional load capacitors bank */
-#define PA_POWER0_CWC_0						((uint8_t)0x00) /*!< No additional PA load capacitor */
-#define PA_POWER0_CWC_1_2P					((uint8_t)0x40) /*!< 1.2pF additional PA load capacitor */
-#define PA_POWER0_CWC_2_4P					((uint8_t)0x80) /*!< 2.4pF additional PA load capacitor */
-#define PA_POWER0_CWC_3_6P					((uint8_t)0xC0) /*!< 3.6pF additional PA load capacitor */
-#define PA_POWER0_PA_RAMP_MASK  				((uint8_t)0x20) /*!< The PA power ramping */
-#define PA_POWER0_PA_RAMP_STEP_WIDTH_MASK                       ((uint8_t)0x20) /*!< The step width */
-#define PA_POWER0_PA_RAMP_STEP_WIDTH_TB_8			((uint8_t)0x00) /*!< PA ramping time step = 1/8 Bit period*/
-#define PA_POWER0_PA_RAMP_STEP_WIDTH_TB_4			((uint8_t)0x08) /*!< PA ramping time step = 2/8 Bit period*/
-#define PA_POWER0_PA_RAMP_STEP_WIDTH_3TB_8			((uint8_t)0x10) /*!< PA ramping time step = 3/8 Bit period*/
-#define PA_POWER0_PA_RAMP_STEP_WIDTH_TB_2			((uint8_t)0x18) /*!< PA ramping time step = 4/8 Bit period*/
-#define PA_POWER0_PA_LEVEL_MAX_INDEX                            ((uint8_t)0x20) /*!< Final level for power ramping */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_0				((uint8_t)0x00) /*!<                                                           */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_1				((uint8_t)0x01) /*!<  Fixes the MAX PA LEVEL in PA ramping or ASK modulation   */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_2				((uint8_t)0x02) /*!<                                                           */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_3				((uint8_t)0x03) /*!<                     _________                             */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_4				((uint8_t)0x04) /*!<     PA_LVL2       _|                 <--|                 */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_5				((uint8_t)0x05) /*!<                 _|                      |                 */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_6				((uint8_t)0x06) /*!<     PA_LVL1   _|                        |                 */
-#define PA_POWER0_PA_LEVEL_MAX_INDEX_7				((uint8_t)0x07) /*!<     PA_LVL0 _|                 MAX_INDEX-                 */
-
-
-
-/**
- * @}
- */
-
-
-/** @defgroup MOD1_Register
- * @{
- */
-
-/**
- *  \brief MOD1 register
- *  \code
- *   Read Write
- *   Default value: 0x83
- *   7:0  DATARATE_M[7:0]: The Mantissa of the specified data rate
- *
- *   \endcode
- */
-#define	MOD1_BASE					        ((uint8_t)0x1A) /*!< The Mantissa of the specified data rate */
-
-/**
- * @}
- */
-
-/** @defgroup MOD0_Register
- * @{
- */
-
-/**
- *  \brief MOD0 register
- *  \code
- *   Read Write
- *   Default value: 0x1A
- *   7  CW:              1 - CW Mode enabled - enables the generation of a continous wave carrier without any modulation
- *                       0 - CW Mode disabled
- *
- *   6 BT_SEL:  Select BT value for GFSK
- *                       1 - BT=0.5
- *                       0 - BT=1
- *
- *   5:4 MOD_TYPE[1:0]: Modulation type
- *
- *
- *         MOD_TYPE1       |        MOD_TYPE0      |     Modulation
- *       ---------------------------------------------------------
- *             0           |           0           |        2-FSK,MSK
- *             0           |           1           |        GFSK,GMSK
- *             1           |           0           |        ASK/OOK
- *
- *   3:0  DATARATE_E[3:0]: The Exponent of the specified data rate
- *
- *   \endcode
- */
-#define	MOD0_BASE						((uint8_t)0x1B) /*!< Modulation Settings, Exponent of the specified data rate, CW mode*/
-
-#define MOD0_MOD_TYPE_2_FSK					((uint8_t)0x00) /*!< Modulation type 2-FSK (MSK if the frequency deviation is identical to a quarter of the data rate) */
-#define MOD0_MOD_TYPE_GFSK					((uint8_t)0x10) /*!< Modulation type GFSK (GMSK if the frequency deviation is identical to a quarter of the data rate) */
-#define MOD0_MOD_TYPE_ASK					((uint8_t)0x20) /*!< Modulation type ASK (OOK the PA is switched off for symbol "0") */
-#define MOD0_MOD_TYPE_MSK					((uint8_t)0x00) /*!< Modulation type MSK (the frequency deviation must be identical to a quarter of the data rate) */
-#define MOD0_MOD_TYPE_GMSK					((uint8_t)0x10) /*!< Modulation type GMSK (the frequency deviation must be identical to a quarter of the data rate) */
-#define MOD0_BT_SEL_BT_MASK       				((uint8_t)0x00) /*!< Select the BT = 1 or BT = 0.5 valid only for GFSK or GMSK modulation*/
-#define MOD0_CW							((uint8_t)0x80) /*!< Set the Continous Wave (no modulation) transmit mode */
-
-/**
- * @}
- */
-
-
-/** @defgroup FDEV0_Register
- * @{
- */
-
-/**
- *  \brief FDEV0 register
- *  \code
- *   Read Write
- *   Default value: 0x45
- *   7:4  FDEV_E[3:0]:       Exponent of the frequency deviation (allowed values from 0 to 9)
- *
- *   3 CLOCK_REC_ALGO_SEL:  Select PLL or DLL mode for clock recovery
- *                       1 - DLL mode
- *                       0 - PLL mode
- *
- *   2:0 FDEV_M[1:0]: Mantissa of the frequency deviation (allowed values from 0 to 7)
- *
- *
- *   \endcode
- */
-#define	FDEV0_BASE						((uint8_t)0x1C) /*!< Sets the Mantissa and exponent of frequency deviation (frequency separation/2)
-																and PLL or DLL alogrithm from clock recovery in RX digital demod*/
-#define FDEV0_CLOCK_REG_ALGO_SEL_MASK			        ((uint8_t)0x08) /*!< Can be DLL or PLL algorithm for clock recovery in RX digital demod (see CLOCKREC reg) */
-#define FDEV0_CLOCK_REG_ALGO_SEL_PLL				((uint8_t)0x00) /*!< Sets PLL alogrithm for clock recovery in RX digital demod (see CLOCKREC reg) */
-#define FDEV0_CLOCK_REG_ALGO_SEL_DLL				((uint8_t)0x08) /*!< Sets DLL alogrithm for clock recovery in RX digital demod (see CLOCKREC reg) */
-   
-/**
- * @}
- */
-
-/** @defgroup CHFLT_Register
- * @{
- */
-
-/**
- *  \brief CHFLT register
- *  \code
- *   Read Write
- *   Default value: 0x23
- *   7:4  CHFLT_M[3:0]:       Mantissa of the channel filter BW (allowed values from 0 to 8)
- *
- *   3:0  CHFLT_E[3:0]:       Exponent of the channel filter BW (allowed values from 0 to 9)
- *
- *         M\E |   0   |   1   |   2   |   3   |   4  |   5  |  6   |   7 |  8  |  9  |
- *        -----+-------+-------+-------+-------+------+------+------+-----+-----+-----+
- *         0   | 800.1 | 450.9 | 224.7 | 112.3 | 56.1 | 28.0 | 14.0 | 7.0 | 3.5 | 1.8 |
- *         1   | 795.1 | 425.9 | 212.4 | 106.2 | 53.0 | 26.5 | 13.3 | 6.6 | 3.3 | 1.7 |
- *         2   | 768.4 | 403.2 | 201.1 | 100.5 | 50.2 | 25.1 | 12.6 | 6.3 | 3.1 | 1.6 |
- *         3   | 736.8 | 380.8 | 190.0 | 95.0  | 47.4 | 23.7 | 11.9 | 5.9 | 3.0 | 1.5 |
- *         4   | 705.1 | 362.1 | 180.7 | 90.3  | 45.1 | 22.6 | 11.3 | 5.6 | 2.8 | 1.4 |
- *         5   | 670.9 | 341.7 | 170.6 | 85.3  | 42.6 | 21.3 | 10.6 | 5.3 | 2.7 | 1.3 |
- *         6   | 642.3 | 325.4 | 162.4 | 81.2  | 40.6 | 20.3 | 10.1 | 5.1 | 2.5 | 1.3 |
- *         7   | 586.7 | 294.5 | 147.1 | 73.5  | 36.7 | 18.4 | 9.2  | 4.6 | 2.3 | 1.2 |
- *         8   | 541.4 | 270.3 | 135.0 | 67.5  | 33.7 | 16.9 | 8.4  | 4.2 | 2.1 | 1.1 |
- *
- *   \endcode
- */
-#define	CHFLT_BASE						((uint8_t)0x1D) /*!< RX Channel Filter Bandwidth */
-
-#define CHFLT_800_1						((uint8_t)0x00) /*!< RX Channel Filter Bandwidth = 800.1 kHz */
-#define CHFLT_795_1						((uint8_t)0x10) /*!< RX Channel Filter Bandwidth = 795.1 kHz */
-#define CHFLT_768_4						((uint8_t)0x20) /*!< RX Channel Filter Bandwidth = 768.4 kHz */
-#define CHFLT_736_8						((uint8_t)0x30) /*!< RX Channel Filter Bandwidth = 736.8 kHz */
-#define CHFLT_705_1						((uint8_t)0x40) /*!< RX Channel Filter Bandwidth = 705.1 kHz */
-#define CHFLT_670_9						((uint8_t)0x50) /*!< RX Channel Filter Bandwidth = 670.9 kHz */
-#define CHFLT_642_3						((uint8_t)0x60) /*!< RX Channel Filter Bandwidth = 642.3 kHz */
-#define CHFLT_586_7						((uint8_t)0x70) /*!< RX Channel Filter Bandwidth = 586.7 kHz */
-#define CHFLT_541_4						((uint8_t)0x80) /*!< RX Channel Filter Bandwidth = 541.4 kHz */
-#define CHFLT_450_9						((uint8_t)0x01) /*!< RX Channel Filter Bandwidth = 450.9 kHz */
-#define CHFLT_425_9						((uint8_t)0x11) /*!< RX Channel Filter Bandwidth = 425.9 kHz */
-#define CHFLT_403_2						((uint8_t)0x21) /*!< RX Channel Filter Bandwidth = 403.2 kHz */
-#define CHFLT_380_8						((uint8_t)0x31) /*!< RX Channel Filter Bandwidth = 380.8 kHz */
-#define CHFLT_362_1						((uint8_t)0x41) /*!< RX Channel Filter Bandwidth = 362.1 kHz */
-#define CHFLT_341_7						((uint8_t)0x51) /*!< RX Channel Filter Bandwidth = 341.7 kHz */
-#define CHFLT_325_4						((uint8_t)0x61) /*!< RX Channel Filter Bandwidth = 325.4 kHz */
-#define CHFLT_294_5						((uint8_t)0x71) /*!< RX Channel Filter Bandwidth = 294.5 kHz */
-#define CHFLT_270_3						((uint8_t)0x81) /*!< RX Channel Filter Bandwidth = 270.3 kHz */
-#define CHFLT_224_7						((uint8_t)0x02) /*!< RX Channel Filter Bandwidth = 224.7 kHz */
-#define CHFLT_212_4						((uint8_t)0x12) /*!< RX Channel Filter Bandwidth = 212.4 kHz */
-#define CHFLT_201_1						((uint8_t)0x22) /*!< RX Channel Filter Bandwidth = 201.1 kHz */
-#define CHFLT_190						((uint8_t)0x32) /*!< RX Channel Filter Bandwidth = 190.0 kHz */
-#define CHFLT_180_7						((uint8_t)0x42) /*!< RX Channel Filter Bandwidth = 180.7 kHz */
-#define CHFLT_170_6						((uint8_t)0x52) /*!< RX Channel Filter Bandwidth = 170.6 kHz */
-#define CHFLT_162_4						((uint8_t)0x62) /*!< RX Channel Filter Bandwidth = 162.4 kHz */
-#define CHFLT_147_1						((uint8_t)0x72) /*!< RX Channel Filter Bandwidth = 147.1 kHz */
-#define CHFLT_135						((uint8_t)0x82) /*!< RX Channel Filter Bandwidth = 135.0 kHz */
-#define CHFLT_112_3						((uint8_t)0x03) /*!< RX Channel Filter Bandwidth = 112.3 kHz */
-#define CHFLT_106_2						((uint8_t)0x13) /*!< RX Channel Filter Bandwidth = 106.2 kHz */
-#define CHFLT_100_5						((uint8_t)0x23) /*!< RX Channel Filter Bandwidth = 100.5 kHz */
-#define CHFLT_95						((uint8_t)0x33) /*!< RX Channel Filter Bandwidth = 95.0 kHz */
-#define CHFLT_90_3						((uint8_t)0x43) /*!< RX Channel Filter Bandwidth = 90.3 kHz */
-#define CHFLT_85_3						((uint8_t)0x53) /*!< RX Channel Filter Bandwidth = 85.3 kHz */
-#define CHFLT_81_2						((uint8_t)0x63) /*!< RX Channel Filter Bandwidth = 81.2 kHz */
-#define CHFLT_73_5						((uint8_t)0x73) /*!< RX Channel Filter Bandwidth = 73.5 kHz */
-#define CHFLT_67_5						((uint8_t)0x83) /*!< RX Channel Filter Bandwidth = 67.5 kHz */
-#define CHFLT_56_1						((uint8_t)0x04) /*!< RX Channel Filter Bandwidth = 56.1 kHz */
-#define CHFLT_53						((uint8_t)0x14) /*!< RX Channel Filter Bandwidth = 53.0 kHz */
-#define CHFLT_50_2						((uint8_t)0x24) /*!< RX Channel Filter Bandwidth = 50.2 kHz */
-#define CHFLT_47_4						((uint8_t)0x34) /*!< RX Channel Filter Bandwidth = 47.4 kHz */
-#define CHFLT_45_1						((uint8_t)0x44) /*!< RX Channel Filter Bandwidth = 45.1 kHz */
-#define CHFLT_42_6						((uint8_t)0x54) /*!< RX Channel Filter Bandwidth = 42.6 kHz */
-#define CHFLT_40_6						((uint8_t)0x64) /*!< RX Channel Filter Bandwidth = 40.6 kHz */
-#define CHFLT_36_7						((uint8_t)0x74) /*!< RX Channel Filter Bandwidth = 36.7 kHz */
-#define CHFLT_33_7						((uint8_t)0x84) /*!< RX Channel Filter Bandwidth = 33.7 kHz */
-#define CHFLT_28						((uint8_t)0x05) /*!< RX Channel Filter Bandwidth = 28.0 kHz */
-#define CHFLT_26_5						((uint8_t)0x15) /*!< RX Channel Filter Bandwidth = 26.5 kHz */
-#define CHFLT_25_1						((uint8_t)0x25) /*!< RX Channel Filter Bandwidth = 25.1 kHz */
-#define CHFLT_23_7						((uint8_t)0x35) /*!< RX Channel Filter Bandwidth = 23.7 kHz */
-#define CHFLT_22_6						((uint8_t)0x45) /*!< RX Channel Filter Bandwidth = 22.6 kHz */
-#define CHFLT_21_3						((uint8_t)0x55) /*!< RX Channel Filter Bandwidth = 21.3 kHz */
-#define CHFLT_20_3						((uint8_t)0x65) /*!< RX Channel Filter Bandwidth = 20.3 kHz */
-#define CHFLT_18_4						((uint8_t)0x75) /*!< RX Channel Filter Bandwidth = 18.4 kHz */
-#define CHFLT_16_9						((uint8_t)0x85) /*!< RX Channel Filter Bandwidth = 16.9 kHz */
-#define CHFLT_14						((uint8_t)0x06) /*!< RX Channel Filter Bandwidth = 14.0 kHz */
-#define CHFLT_13_3						((uint8_t)0x16) /*!< RX Channel Filter Bandwidth = 13.3 kHz */
-#define CHFLT_12_6						((uint8_t)0x26) /*!< RX Channel Filter Bandwidth = 12.6 kHz */
-#define CHFLT_11_9						((uint8_t)0x36) /*!< RX Channel Filter Bandwidth = 11.9 kHz */
-#define CHFLT_11_3						((uint8_t)0x46) /*!< RX Channel Filter Bandwidth = 11.3 kHz */
-#define CHFLT_10_6						((uint8_t)0x56) /*!< RX Channel Filter Bandwidth = 10.6 kHz */
-#define CHFLT_10_1						((uint8_t)0x66) /*!< RX Channel Filter Bandwidth = 10.1 kHz */
-#define CHFLT_9_2						((uint8_t)0x76) /*!< RX Channel Filter Bandwidth = 9.2 kHz */
-#define CHFLT_8_4						((uint8_t)0x86) /*!< RX Channel Filter Bandwidth = 8.4 kHz */
-#define CHFLT_7							((uint8_t)0x07) /*!< RX Channel Filter Bandwidth = 7.0 kHz */
-#define CHFLT_6_6						((uint8_t)0x17) /*!< RX Channel Filter Bandwidth = 6.6 kHz */
-#define CHFLT_6_3						((uint8_t)0x27) /*!< RX Channel Filter Bandwidth = 6.3 kHz */
-#define CHFLT_5_9						((uint8_t)0x37) /*!< RX Channel Filter Bandwidth = 5.9 kHz */
-#define CHFLT_5_6						((uint8_t)0x47) /*!< RX Channel Filter Bandwidth = 5.6 kHz */
-#define CHFLT_5_3						((uint8_t)0x57) /*!< RX Channel Filter Bandwidth = 5.3 kHz */
-#define CHFLT_5_1						((uint8_t)0x67) /*!< RX Channel Filter Bandwidth = 5.1 kHz */
-#define CHFLT_4_6						((uint8_t)0x77) /*!< RX Channel Filter Bandwidth = 4.6 kHz */
-#define CHFLT_4_2						((uint8_t)0x87) /*!< RX Channel Filter Bandwidth = 4.2 kHz */
-#define CHFLT_3_5						((uint8_t)0x08) /*!< RX Channel Filter Bandwidth = 3.5 kHz */
-#define CHFLT_3_3						((uint8_t)0x18) /*!< RX Channel Filter Bandwidth = 3.3 kHz */
-#define CHFLT_3_1						((uint8_t)0x28) /*!< RX Channel Filter Bandwidth = 3.1 kHz */
-#define CHFLT_3							((uint8_t)0x38) /*!< RX Channel Filter Bandwidth = 3.0 kHz */
-#define CHFLT_2_8						((uint8_t)0x48) /*!< RX Channel Filter Bandwidth = 2.8 kHz */
-#define CHFLT_2_7						((uint8_t)0x58) /*!< RX Channel Filter Bandwidth = 2.7 kHz */
-#define CHFLT_2_5						((uint8_t)0x68) /*!< RX Channel Filter Bandwidth = 2.5 kHz */
-#define CHFLT_2_3						((uint8_t)0x78) /*!< RX Channel Filter Bandwidth = 2.3 kHz */
-#define CHFLT_2_1						((uint8_t)0x88) /*!< RX Channel Filter Bandwidth = 2.1 kHz */
-#define CHFLT_1_8						((uint8_t)0x09) /*!< RX Channel Filter Bandwidth = 1.8 kHz */
-#define CHFLT_1_7						((uint8_t)0x19) /*!< RX Channel Filter Bandwidth = 1.7 kHz */
-#define CHFLT_1_6						((uint8_t)0x29) /*!< RX Channel Filter Bandwidth = 1.6 kHz */
-#define CHFLT_1_5						((uint8_t)0x39) /*!< RX Channel Filter Bandwidth = 1.5 kHz */
-#define CHFLT_1_4						((uint8_t)0x49) /*!< RX Channel Filter Bandwidth = 1.4 kHz */
-#define CHFLT_1_3a						((uint8_t)0x59) /*!< RX Channel Filter Bandwidth = 1.3 kHz */
-#define CHFLT_1_3						((uint8_t)0x69) /*!< RX Channel Filter Bandwidth = 1.3 kHz */
-#define CHFLT_1_2						((uint8_t)0x79) /*!< RX Channel Filter Bandwidth = 1.2 kHz */
-#define CHFLT_1_1						((uint8_t)0x89) /*!< RX Channel Filter Bandwidth = 1.1 kHz */
-
-/**
- * @}
- */
-
-/** @defgroup AFC2_Register
- * @{
- */
-
-/**
- *  \brief AFC2 register
- *  \code
- *   Read Write
- *   Default value: 0x48
- *   7  AFC Freeze on Sync: Freeze AFC correction upon sync word detection.
- *                       1 - AFC Freeze enabled
- *                       0 - AFC Freeze disabled
- *
- *   6  AFC Enabled:  Enable AFC
- *                       1 - AFC enabled
- *                       0 - AFC disabled
- *
- *   5  AFC Mode:    Select AFC mode
- *                       1 - AFC Loop closed on 2nd conversion stage.
- *                       0 - AFC Loop closed on slicer
- *
- *   4:0  AFC PD leakage[4:0]: Peak detector leakage. This parameter sets the decay speed of the min/max frequency peak detector (AFC2 register),
- *                             the range allowed is 0..31 (0 - no leakage, 31 - high leakage). The recommended value for this parameter is 4.
- *
- *   \endcode
- */
-#define	AFC2_BASE						((uint8_t)0x1E) /*!< Automatic frequency compensation algorithm parameters (FSK/GFSK/MSK)*/
-
-#define AFC2_AFC_FREEZE_ON_SYNC_MASK				((uint8_t)0x80) /*!< The frequency correction value is frozen when SYNC word is detected */
-#define AFC2_AFC_MASK			        		((uint8_t)0x40) /*!< Mask of Automatic Frequency Correction */
-#define AFC2_AFC_MODE_MASK					((uint8_t)0x20) /*!< Automatic Frequency Correction can be in Main MODE or Auxiliary MODE*/
-#define AFC2_AFC_MODE_SLICER					((uint8_t)0x00) /*!< Automatic Frequency Correction Main MODE */
-#define AFC2_AFC_MODE_MIXER					((uint8_t)0x20) /*!< Automatic Frequency Correction Auxiliary MODE */
-   
-/**
- * @}
- */
-
-/** @defgroup AFC1_Register
- * @{
- */
-
-/**
- *  \brief AFC1 register
- *  \code
- *   Read Write
- *   Default value: 0x18
- *   7:0  AFC_FAST_PERIOD: Length of the AFC fast period. this parameter sets the length of the fast period in number of samples (AFC1 register), the range allowed
- *                         is 0..255. The recommended setting for this parameter is such that the fast period equals the preamble length. Since the
- *                         algorithm operates typically on 2 samples per symbol, the programmed value should be twice the number of preamble
- *                         symbols.
- *
- *   \endcode
- */
-#define	AFC1_BASE						((uint8_t)0x1F) /*!< Length of the AFC fast period */
-
-/**
- * @}
- */
-
-/** @defgroup AFC0_Register
- * @{
- */
-
-/**
- *  \brief AFC0 register
- *  \code
- *   Read Write
- *   Default value: 0x25
- *   7:4  AFC_FAST_GAIN_LOG2[3:0]: AFC loop gain in fast mode (2's log)
- *
- *   3:0  AFC_SLOW_GAIN_LOG2[3:0]: AFC loop gain in slow mode (2's log)
- *
- *   \endcode
- */
-#define	AFC0_BASE						((uint8_t)0x20) /*!< AFC loop gain in fast and slow modes (2's log) */
-
-/**
- * @}
- */
-
-/** @defgroup CLOCKREC_Register
- * @{
- */
-
-/**
- *  \brief CLOCKREC register
- *  \code
- *   Read Write
- *   Default value: 0x58
- *
- *   7:5 CLK_REC_P_GAIN [2:0]: Clock recovery loop gain (log2)
- *
- *   4   PSTFLT_LEN: Set Postfilter length
- *                       1 - 16 symbols
- *                       0 - 8 symbols
- *
- *   3:0 CLK_REC_I_GAIN[3:0]: Integral gain for the clock recovery loop
- *   \endcode
- */
-
-#define	CLOCKREC_BASE						((uint8_t)0x23) /*!< Gain of clock recovery loop - Postfilter length 0-8 symbols, 1-16 symbols */
-
-/**
- * @}
- */
-
-/** @defgroup AGCCTRL2_Register
- * @{
- */
-
-/**
- *  \brief AGCCTRL2 register
- *  \code
- *   Read Write
- *   Default value: 0x22
- *
- *   7   Reserved
- *
- *   6   FREEZE_ON_STEADY: Enable freezing on steady state
- *                       1 - Enable
- *                       0 - Disable
- *
- *   5   FREEZE_ON_SYNC: Enable freezing on sync detection
- *                       1 - Enable
- *                       0 - Disable
- *
- *   4   START_MAX_ATTENUATION: Start with max attenuation
- *                       1 - Enable
- *                       0 - Disable
- *
- *   3:0  MEAS_TIME[3:0]: Measure time during which the signal peak is detected (according to the formula 12/fxo*2^MEAS_TIME)
- *   \endcode
- */
-#define	AGCCTRL2_BASE						((uint8_t)0x24) /*!< AGC freeze strategy, AGC attenuation  strategy, AGC measure time */
-
-#define AGCCTRL2_FREEZE_ON_STEADY_MASK			        ((uint8_t)0x40) /*!< The attenuation settings will be frozen as soon as signal level
-										     is betweeen min and max treshold (see AGCCTRL1) */
-#define AGCCTRL2_FREEZE_ON_SYNC_MASK				((uint8_t)0x20) /*!< The attenuation settings will be frozen as soon sync word is detected */
-#define AGCCTRL2_START_MAX_ATTENUATION_MASK			((uint8_t)0x10) /*!< The AGC algorithm can start with MAX attenuation or MIN attenuation */
-
-/**
- * @}
- */
-
-/** @defgroup AGCCTRL1_Register
- * @{
- */
-
-/**
- *  \brief AGCCTRL1 register
- *  \code
- *   Read Write
- *   Default value: 0x65
- *
- *   7:4   THRESHOLD_HIGH[3:0]: High threshold for the AGC
- *
- *   3:0   THRESHOLD_LOW[3:0]: Low threshold for the AGC
- *   \endcode
- */
-#define	AGCCTRL1_BASE						((uint8_t)0x25) /*!< Sets low and high threshold for AGC */
-
-/**
- * @}
- */
-
-/** @defgroup AGCCTRL0_Register
- * @{
- */
-
-/**
- *  \brief AGCCTRL0 register
- *  \code
- *   Read Write
- *   Default value: 0x8A
- *
- *   7   AGC S_ENABLE: Enable AGC
- *                       1 - Enable
- *                       0 - Disable
- *
- *   6   AGC_MODE: Set linear-Binary AGC mode
- *                       1 - Enable
- *                       0 - Disable
- *
- *   5:0 HOLD_TIME[5:0]: Hold time after gain adjustment according to formula 12/fxo*HOLD_TIME
- *   \endcode
- */
-#define	AGCCTRL0_BASE						((uint8_t)0x26) /*!< Enables AGC, set AGC algo between linear/binary mode, set hold time
-																	to account signal propagation through RX chain */
-#define AGCCTRL0_AGC_MASK				        ((uint8_t)0x80) /*!< AGC on/off */
-#define AGCCTRL0_AGC_MODE_MASK  				((uint8_t)0x40) /*!< AGC search correct attenuation in binary mode or sequential mode */
-#define AGCCTRL0_AGC_MODE_LINEAR				((uint8_t)0x00) /*!< AGC search correct attenuation in sequential mode (recommended) */
-#define AGCCTRL0_AGC_MODE_BINARY				((uint8_t)0x40) /*!< AGC search correct attenuation in binary mode */
-
-/**
- * @}
- */
-
-/** @defgroup CHNUM_Register
- * @{
- */
-
-/**
- *  \brief CHNUM  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0     CH_NUM[7:0]: Channel number. This value is multiplied by the channel spacing and added to the
- *                        synthesizer base frequency to generate the actual RF carrier frequency.
- *   \endcode
- */
-#define	CHNUM_BASE						((uint8_t)0x6C) /*!< Channel number. This value is multiplied by the channel
-										spacing and added to the synthesizer base frequency to generate the actual RF carrier frequency */
-/**
- * @}
- */
-
-/** @defgroup AFC_CORR_Register
- * @{
- */
-
-/**
- *  \brief AFC_CORR  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   AFC_CORR[7:0]: AFC word of the received packet
- *   \endcode
- */
-#define	AFC_CORR_BASE						((uint8_t)(0xC4)) /*!< AFC word of the received packet */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Packet_Configuration_Registers
- * @{
- */
-
-/** @defgroup PCKTCTRL4_Register
- * @{
- */
-
-/**
- *  \brief PCKTCTRL4 register
- *  \code
- *   Read Write
- *   Default value: 0x00
- *
- *   7:5   NOT_USED.
- *
- *   4:3   ADDRESS_LEN[1:0]: length of address field in bytes
- *
- *   2:0   control_len[2:0]: length of control field in bytes
- *   \endcode
- */
-#define	PCKTCTRL4_BASE						((uint8_t)0x30) /*!< lenghts of address and control field */
-
-#define PCKTCTRL4_ADDRESS_LEN_MASK                              ((uint8_t)0x18)
-#define PCKTCTRL4_CONTROL_LEN_MASK                              ((uint8_t)0x07)
-
-/**
- * @}
- */
-
-/** @defgroup PCKTCTRL3_Register
- * @{
- */
-
-/**
- *  \brief PCKTCTRL3 register
- *  \code
- *   Read Write
- *   Default value: 0x07
- *
- *   7:6   PCKT_FRMT[1:0]: format of packet
- *
- *          PCKT_FRMT1       |        PCKT_FRMT0       |        Format
- *       ----------------------------------------------------------------------
- *             0             |           0             |        BASIC
- *             1             |           0             |        MBUS
- *             1             |           1             |        STACK
- *
- *   5:4   RX_MODE[1:0]: length of address 0x30 field in bytes
- *
- *          RX_MODE1       |        RX_MODE0       |            Rx Mode
- *       --------------------------------------------------------------------
- *             0           |           0           |              normal
- *             0           |           1           |       direct through FIFO
- *             1           |           0           |       direct through GPIO
- *
- *   3:0   LEN_WID[3:0]: length of length field in bits
- *   \endcode
- */
-#define	PCKTCTRL3_BASE						((uint8_t)0x31) /*!< packet format, RX mode, lenght of length field */
-
-#define	PCKTCTRL3_PCKT_FRMT_BASIC				((uint8_t)0x00) /*!< Basic Packet Format */
-#define	PCKTCTRL3_PCKT_FRMT_MBUS				((uint8_t)0x80) /*!< Wireless M-BUS Packet Format */
-#define	PCKTCTRL3_PCKT_FRMT_STACK				((uint8_t)0xC0) /*!< STack Packet Format */
-
-#define	PCKTCTRL3_RX_MODE_NORMAL				((uint8_t)0x00) /*!< Normal RX Mode */
-#define	PCKTCTRL3_RX_MODE_DIRECT_FIFO				((uint8_t)0x10) /*!< RX Direct Mode; data available through FIFO */
-#define	PCKTCTRL3_RX_MODE_DIRECT_GPIO				((uint8_t)0x20) /*!< RX Direct Mode; data available through selected GPIO */
-
-#define PCKTCTRL3_PKT_FRMT_MASK                                 ((uint8_t)0xC0)
-#define PCKTCTRL3_RX_MODE_MASK                                  ((uint8_t)0x30)
-#define PCKTCTRL3_LEN_WID_MASK                                  ((uint8_t)0x0F)
-
-/**
- * @}
- */
-
-/** @defgroup PCKTCTRL2_Register
- * @{
- */
-
-/**
- *  \brief PCKTCTRL2 register
- *  \code
- *   Read Write
- *   Default value: 0x1E
- *
- *   7:3   PREAMBLE_LENGTH[4:0]: length of preamble field in bytes (0..31)
- *
- *
- *   2:1   SYNC_LENGTH[1:0]: length of sync field in bytes
- *
- *
- *   0     FIX_VAR_LEN: fixed/variable packet length
- *                       1 - Variable
- *                       0 - Fixed
- *   \endcode
- */
-#define	PCKTCTRL2_BASE						((uint8_t)0x32) /*!< length of preamble and sync fields (in bytes), fix or variable packet length */
-   
-#define	PCKTCTRL2_FIX_VAR_LEN_MASK				((uint8_t)0x01) /*!< Enable/disable the length mode */
-#define PCKTCTRL2_PREAMBLE_LENGTH_MASK                          ((uint8_t)0xF8)
-#define PCKTCTRL2_SYNC_LENGTH_MASK                              ((uint8_t)0x06)
-
-/**
- * @}
- */
-
-/** @defgroup PCKTCTRL1_Register
- * @{
- */
-
-/**
- *  \brief PCKTCTRL1 register
- *  \code
- *   Read Write
- *   Default value: 0x20
- *
- *   7:5   CRC_MODE[2:0]: CRC type (0, 8, 16, 24 bits)
- *
- *          CRC_MODE2     |       CRC_MODE1     |        CRC_MODE0     |       CRC Mode  (n. bits - poly)
- *       -------------------------------------------------------------------------------------------------
- *             0           |         0          |          1           |       8 - 0x07
- *             0           |         1          |          0           |       16 -  0x8005
- *             0           |         1          |          1           |       16 - 0x1021
- *             1           |         0          |          0           |       24 - 0x864CBF
- *
- *   4     WHIT_EN[0]: Enable Whitening
- *                       1 - Enable
- *                       0 - Disable
- *
- *   3:2   TX_SOURCE[1:0]: length of sync field in bytes
- *
- *          TX_SOURCE1     |        TX_SOURCE0     |        Tx Mode
- *       --------------------------------------------------------------------
- *             0           |           0           |       normal
- *             0           |           1           |       direct through FIFO
- *             1           |           0           |       direct through GPIO
- *             1           |           1           |       pn9
- *
- *   1   NOT_USED
- *
- *   0   FEC_EN: enable FEC
- *                       1 - FEC in TX , Viterbi decoding in RX
- *                       0 - Disabled
- *   \endcode
- */
-#define	PCKTCTRL1_BASE						((uint8_t)0x33) /*!< CRC type, whitening enable, TX mode */
-
-#define	PCKTCTRL1_FEC_MASK					((uint8_t)0x01) /*!< Enable/disable the Forward Error Correction */
-#define PCKTCTRL1_TX_SOURCE_MASK                                ((uint8_t)0x0C) /*!< TX source mode */
-#define PCKTCTRL1_CRC_MODE_MASK                                 ((uint8_t)0xE0) /*!< CRC type */
-#define PCKTCTRL1_WHIT_MASK                                     ((uint8_t)0x10) /*!< Enable/disable the Whitening */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup PCKTLEN1_Register
- * @{
- */
-
-/**
- *  \brief PCKTLEN1 register
- *  \code
- *   Read Write
- *   Default value: 0x00
- *
- *   7:0   pktlen1[7:0]: lenght of packet in bytes (upper field) LENGHT/256
- *   \endcode
- */
-#define	PCKTLEN1_BASE						((uint8_t)0x34) /*!< lenght of packet in bytes (upper field) */
-
-/**
- * @}
- */
-
-/** @defgroup PCKTLEN0_Register
- * @{
- */
-
-/**
- *  \brief PCKTLEN0 register
- *  \code
- *   Read Write
- *   Default value: 0x14
- *
- *   7:0   pktlen0[7:0]: lenght of packet in bytes (lower field) LENGHT%256
- *   \endcode
- */
-#define	PCKTLEN0_BASE						((uint8_t)0x35) /*!< lenght of packet in bytes (lower field) [PCKTLEN=PCKTLEN1x256+PCKTLEN0]*/
-
-/**
- * @}
- */
-
-/** @defgroup SYNCx_Registers
- * @{
- */
-/**
- *  \brief SYNCx[4:1] Registers
- *  \code
- *   Read Write
- *   Default value: 0x88
- *
- *   7:0   SYNCx[7:0]: xth sync word
- *   \endcode
- */
-#define	SYNC4_BASE						((uint8_t)0x36) /*!< Sync word 4 */
-#define	SYNC3_BASE						((uint8_t)0x37) /*!< Sync word 3 */
-#define	SYNC2_BASE						((uint8_t)0x38) /*!< Sync word 2 */
-#define	SYNC1_BASE						((uint8_t)0x39) /*!< Sync word 1 */
-
-/**
- * @}
- */
-
-
-/** @defgroup MBUS_PRMBL_Register
- * @{
- */
-
-/**
- *  \brief MBUS_PRMBL register
- *  \code
- *   Read Write
- *   Default value: 0x20
- *
- *   7:0 MBUS_PRMBL[7:0]: MBUS preamble control
- *   \endcode
- */
-#define	MBUS_PRMBL_BASE						((uint8_t)0x3B) /*!< MBUS preamble lenght (in 01 bit pairs) */
-
-/**
- * @}
- */
-
-
-/** @defgroup MBUS_PSTMBL_Register
- * @{
- */
-
-/**
- *  \brief MBUS_PSTMBL register
- *  \code
- *   Read Write
- *   Default value: 0x20
- *
- *   7:0 MBUS_PSTMBL[7:0]: MBUS postamble control
- *   \endcode
- */
-#define	MBUS_PSTMBL_BASE					((uint8_t)0x3C) /*!< MBUS postamble length (in 01 bit pairs) */
-
-/**
- * @}
- */
-
-/** @defgroup MBUS_CTRL_Register
- * @{
- */
-
-/**
- *  \brief MBUS_CTRL register
- *  \code
- *   Read Write
- *   Default value: 0x00
- *
- *   7:4   NOT_USED
- *
- *   3:1   MBUS_SUBMODE[2:0]: MBUS submode (allowed values are 0,1,3,5)
- *
- *   0     NOT_USED
- *   \endcode
- */
-#define	MBUS_CTRL_BASE						((uint8_t)0x3D) /*!< MBUS sub-modes (S1, S2 short/long header, T1, T2, R2) */
-
-#define	MBUS_CTRL_MBUS_SUBMODE_S1_S2L				((uint8_t)0x00) /*!< MBUS sub-modes S1 & S2L, header lenght min 279, sync 0x7696, Manchester */
-#define	MBUS_CTRL_MBUS_SUBMODE_S2_S1M_T2_OTHER			((uint8_t)0x02) /*!< MBUS sub-modes S2, S1-m, T2 (only other to meter) short header, header lenght min 15, sync 0x7696, Manchester */
-#define	MBUS_CTRL_MBUS_SUBMODE_T1_T2_METER			((uint8_t)0x06) /*!< MBUS sub-modes T1, T2 (only meter to other), header lenght min 19, sync 0x3D, 3 out of 6 */
-#define	MBUS_CTRL_MBUS_SUBMODE_R2				((uint8_t)0x0A) /*!< MBUS sub-mode R2, header lenght min 39, sync 0x7696, Manchester */
-
-/**
- * @}
- */
-
-
-
-/** @defgroup PCKT_FLT_GOALS_CONTROLx_MASK_Registers
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_CONTROLx_MASK  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    CONTROLx_MASK[7:0]:   All 0s - no filtering
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_CONTROL0_MASK_BASE			((uint8_t)0x42) /*!< Packet control field #3 mask, all 0s -> no filtering */
-
-#define	PCKT_FLT_GOALS_CONTROL1_MASK_BASE			((uint8_t)0x43) /*!< Packet control field #2 mask, all 0s -> no filtering */
-
-#define	PCKT_FLT_GOALS_CONTROL2_MASK_BASE			((uint8_t)0x44) /*!< Packet control field #1 mask, all 0s -> no filtering */
-
-#define	PCKT_FLT_GOALS_CONTROL3_MASK_BASE			((uint8_t)0x45) /*!< Packet control field #0 mask, all 0s -> no filtering */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_CONTROLx_FIELD_Registers
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_CONTROLx_FIELD  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    CONTROLx_FIELD[7:0]:   Control field (byte x) to be used as reference
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_CONTROL0_FIELD_BASE			((uint8_t)0x46) /*!< Control field (byte #3) */
-
-#define	PCKT_FLT_GOALS_CONTROL1_FIELD_BASE			((uint8_t)0x47) /*!< Control field (byte #2) */
-
-#define	PCKT_FLT_GOALS_CONTROL2_FIELD_BASE			((uint8_t)0x48) /*!< Control field (byte #1) */
-
-#define	PCKT_FLT_GOALS_CONTROL3_FIELD_BASE			((uint8_t)0x49) /*!< Control field (byte #0) */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_SOURCE_MASK_Register
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_SOURCE_MASK  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    RX_SOURCE_MASK[7:0]:   For received packet only: all 0s - no filtering
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_SOURCE_MASK_BASE				((uint8_t)0x4A) /*!< Source address mask, valid in RX mode */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_SOURCE_ADDR_Register
- * @{
- */
-/**
- *  \brief PCKT_FLT_GOALS_SOURCE_ADDR  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    RX_SOURCE_ADDR[7:0]:  RX packet source / TX packet destination fields
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_SOURCE_ADDR_BASE				((uint8_t)0x4B) /*!< Source address */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_BROADCAST_Register
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_BROADCAST  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    BROADCAST[7:0]:  Address shared for broadcast communication link
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_BROADCAST_BASE				((uint8_t)0x4C) /*!< Address shared for broadcast communication links */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_MULTICAST_Register
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_MULTICAST  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    MULTICAST[7:0]:  Address shared for multicast communication links
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_MULTICAST_BASE				((uint8_t)0x4D) /*!< Address shared for multicast communication links */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_GOALS_TX_SOURCE_ADDR_Register
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_GOALS_TX_SOURCE_ADDR  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0    TX_SOURCE_ADDR[7:0]:  TX packet source / RX packet destination fields
- *
- *   \endcode
- */
-#define	PCKT_FLT_GOALS_TX_ADDR_BASE				((uint8_t)0x4E) /*!< Address of the destination (also device own address) */
-
-/**
- * @}
- */
-
-/** @defgroup PCKT_FLT_OPTIONS_Register
- * @{
- */
-
-/**
- *  \brief PCKT_FLT_OPTIONS  register
- *  \code
- *   Default value: 0x70
- *   Read Write
- *   7   Reserved.
- *
- *   6   RX_TIMEOUT_AND_OR_SELECT[0]:  1 - ‘OR’ logical function applied to CS/SQI/PQI
- *                                     values (masked by 7:5 bits in PROTOCOL register)
- *   5   CONTROL_FILTERING[0]:         1 - RX packet accepted if its control fields matches
- *                                     with masked CONTROLx_FIELD registers.
- *   4   SOURCE_FILTERING[0]:          1 - RX packet accepted if its source field
- *                                     matches w/ masked RX_SOURCE_ADDR register.
- *   3   DEST_VS_ SOURCE _ADDR[0]:   1 - RX packet accepted if its destination
- *                                   address matches with TX_SOURCE_ADDR reg.
- *   2   DEST_VS_MULTICAST_ADDR[0]:  1 - RX packet accepted if its destination
- *                                   address matches with MULTICAST register
- *   1   DEST_VS_BROADCAST_ADDR[0]:  1 - RX packet accepted if its destination
- *                                   address matches with BROADCAST register.
- *   0   CRC_CHECK[0]:               1 - packet discarded if CRC not valid.
- *
- *   \endcode
- */
-#define	PCKT_FLT_OPTIONS_BASE					((uint8_t)0x4F) /*!< Options relative to packet filtering */
-
-#define	PCKT_FLT_OPTIONS_CRC_CHECK_MASK 			((uint8_t)0x01) /*!< Enable/disable of CRC check: packet is discarded if CRC is not valid [RX] */
-#define	PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK		((uint8_t)0x02) /*!< Packet discarded if destination address differs from BROADCAST register [RX] */
-#define	PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK		((uint8_t)0x04) /*!< Packet discarded if destination address differs from MULTICAST register [RX] */
-#define	PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK			((uint8_t)0x08) /*!< Packet discarded if destination address differs from TX_ADDR register [RX] */
-#define	PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK		        ((uint8_t)0x10) /*!< Packet discarded if source address (masked by the SOURCE_MASK register)
-                                                                                     differs from SOURCE_ADDR register [RX] */
-#define	PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK		        ((uint8_t)0x20) /*!< Packet discarded if the x-byte (x=1¸4) control field  (masked by the CONTROLx_MASK register)
-                                                                                     differs from CONTROLx_FIELD register [RX] */
-#define	PCKT_FLT_OPTIONS_RX_TIMEOUT_AND_OR_SELECT		((uint8_t)0x40) /*!< Logical function applied to CS/SQI/PQI values (masked by [7:5] bits in PROTOCOL[2]
-                                                                                     register) */
-
-/**
- * @}
- */
-
-/** @defgroup TX_CTRL_FIELD_Registers
- * @{
- */
-
-/**
- *  \brief TX_CTRL_FIELDx  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0     TX_CTRLx[7:0]: Control field value to be used in TX packet as byte n.x
- *   \endcode
- */
-#define	TX_CTRL_FIELD3_BASE					((uint8_t)0x68) /*!< Control field value to be used in TX packet as byte n.3 */
-
-#define	TX_CTRL_FIELD2_BASE					((uint8_t)0x69) /*!< Control field value to be used in TX packet as byte n.2 */
-
-#define	TX_CTRL_FIELD1_BASE					((uint8_t)0x6A) /*!< Control field value to be used in TX packet as byte n.1 */
-
-#define	TX_CTRL_FIELD0_BASE					((uint8_t)0x6B) /*!< Control field value to be used in TX packet as byte n.0 */
-
-/**
- * @}
- */
-
-
-/** @defgroup TX_PCKT_INFO_Register
- * @{
- */
-
-/**
- *  \brief TX_PCKT_INFO  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:6     Not used.
- *
- *   5:4     TX_SEQ_NUM:   Current TX packet sequence number
- *
- *   0       N_RETX[3:0]:  Number of retransmissions done on the
- *                        last TX packet
- *   \endcode
- */
-#define	TX_PCKT_INFO_BASE					((uint8_t)(0xC2)) /*!< Current TX packet sequence number [5:4];
-                                                                                        Number of retransmissions done on the last TX packet [3:0]*/
-/**
- * @}
- */
-
-/** @defgroup RX_PCKT_INFO_Register
- * @{
- */
-
-/**
- *  \brief RX_PCKT_INFO  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:3     Not used.
- *
- *   2       NACK_RX:   NACK field of the received packet
- *
- *   1:0     RX_SEQ_NUM[1:0]:  Sequence number of the received packet
- *   \endcode
- */
-#define	RX_PCKT_INFO_BASE					((uint8_t)(0xC3)) /*!< NO_ACK field of the received packet [2];
-                                                                                       sequence number of the received packet [1:0]*/
-
-#define	TX_PCKT_INFO_NACK_RX					((uint8_t)(0x04)) /*!< NACK field of the received packet */
-
-/**
- * @}
- */
-
-/** @defgroup RX_PCKT_LEN1
- * @{
- */
-
-/**
- *  \brief RX_PCKT_LEN1  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   RX_PCKT_LEN1[7:0]:  Length (number of bytes) of the received packet: RX_PCKT_LEN=RX_PCKT_LEN1 × 256 + RX_PCKT_LEN0
- *                             This value is packet_length/256
- *   \endcode
- */
-#define	RX_PCKT_LEN1_BASE					((uint8_t)(0xC9)) /*!< Length (number of  bytes) of the received packet: */
-
-/**
- * @}
- */
-
-/** @defgroup RX_PCKT_LEN0
- * @{
- */
-
-/**
- *  \brief RX_PCKT_LEN0  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   RX_PCKT_LEN0[7:0]:  Length (number of bytes) of the received packet: RX_PCKT_LEN=RX_PCKT_LEN1 × 256 + RX_PCKT_LEN0
- *                             This value is packet_length%256
- *   \endcode
- */
-#define	RX_PCKT_LEN0_BASE					((uint8_t)(0xCA)) /*!< RX_PCKT_LEN=RX_PCKT_LEN1 × 256 + RX_PCKT_LEN0 */
-
-/**
- * @}
- */
-
-
-/** @defgroup CRC_FIELD_Register
- * @{
- */
-
-/**
- *  \brief CRC_FIELD[2:0]  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   CRC_FIELDx[7:0]:    upper(x=2), middle(x=1) and lower(x=0) part of the crc field of the received packet
- *  \endcode
- */
-#define	CRC_FIELD2_BASE						((uint8_t)(0xCB)) /*!< CRC2 field of the received packet */
-
-#define	CRC_FIELD1_BASE						((uint8_t)(0xCC)) /*!< CRC1 field of the received packet */
-
-#define	CRC_FIELD0_BASE						((uint8_t)(0xCD)) /*!< CRC0 field of the received packet */
-
-/**
- * @}
- */
-
-/** @defgroup RX_CTRL_FIELD_Register
- * @{
- */
-
-/**
- *  \brief RX_CTRL_FIELD[3:0]  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   RX_CTRL_FIELDx[7:0]:    upper(x=3), middle(x=2), middle(x=1) and lower(x=0) part of the control field of the received packet
- *   \endcode
- */
-#define	RX_CTRL_FIELD0_BASE					((uint8_t)(0xCE)) /*!< CRTL3 Control field of the received packet */
-
-#define	RX_CTRL_FIELD1_BASE					((uint8_t)(0xCF)) /*!< CRTL2 Control field of the received packet */
-
-#define	RX_CTRL_FIELD2_BASE					((uint8_t)(0xD0)) /*!< CRTL1 Control field of the received packet */
-
-#define	RX_CTRL_FIELD3_BASE					((uint8_t)(0xD1)) /*!< CRTL0 Control field of the received packet */
-
-/**
- * @}
- */
-
-/** @defgroup RX_ADDR_FIELD_Register
- * @{
- */
-
-/**
- *  \brief RX_ADDR_FIELD[1:0]  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   RX_ADDR_FIELDx[7:0]:    source(x=1) and destination(x=0) address field of the received packet
- *   \endcode
- */
-#define	RX_ADDR_FIELD1_BASE					((uint8_t)(0xD2)) /*!< ADDR1 Address field of the received packet */
-
-#define	RX_ADDR_FIELD0_BASE					((uint8_t)(0xD3)) /*!< ADDR0 Address field of the received packet */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Protocol_Registers
- * @{
- */
-
-/** @defgroup PROTOCOL2_Register
- * @{
- */
-
-/**
- *  \brief PROTOCOL2  register
- *  \code
- *   Default value: 0x06
- *   Read Write
- *   7   CS_TIMEOUT_MASK:              1 - CS value contributes to timeout disabling
- *
- *   6   SQI_TIMEOUT_MASK:             1 - SQI value contributes to timeout disabling
- *
- *   5   PQI_TIMEOUT_MASK:             1 - PQI value contributes to timeout disabling
- *
- *   4:3  TX_SEQ_NUM_RELOAD[1:0]:      TX sequence number to be used when counting reset is required using the related command.
- *
- *   2   RCO_CALIBRATION[0]:           1 - Enables the automatic RCO calibration
- *
- *   1   VCO_CALIBRATION[0]:           1 - Enables the automatic VCO calibration
- *
- *   0   LDCR_MODE[0]:                 1 - LDCR mode enabled
- *
- *   \endcode
- */
-#define	PROTOCOL2_BASE						((uint8_t)0x50) /*!< Protocol2 regisetr address */
-
-#define	PROTOCOL2_LDC_MODE_MASK				        ((uint8_t)0x01) /*!< Enable/disable Low duty Cycle mode */
-#define	PROTOCOL2_VCO_CALIBRATION_MASK			        ((uint8_t)0x02) /*!< Enable/disable VCO automatic calibration */
-#define	PROTOCOL2_RCO_CALIBRATION_MASK			        ((uint8_t)0x04) /*!< Enable/disable RCO automatic calibration */
-#define	PROTOCOL2_PQI_TIMEOUT_MASK			        ((uint8_t)0x20) /*!< PQI value contributes to timeout disabling */
-#define	PROTOCOL2_SQI_TIMEOUT_MASK			        ((uint8_t)0x40) /*!< SQI value contributes to timeout disabling */
-#define	PROTOCOL2_CS_TIMEOUT_MASK			        ((uint8_t)0x80) /*!< CS value contributes to timeout disabling */
-  
-/**
- * @}
- */
-
-/** @defgroup PROTOCOL1_Register
- * @{
- */
-
-/**
- *  \brief PROTOCOL1  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7   LDCR_RELOAD_ON_SYNC:          1 - LDCR timer will be reloaded with the value stored in the LDCR_RELOAD registers
- *
- *   6   PIGGYBACKING:                 1 - PIGGYBACKING enabled
- *
- *   5:4   Reserved.
- *
- *   3   SEED_RELOAD[0]:               1 - Reload the back-off random generator
- *                                        seed using the value written in the
- *                                        BU_COUNTER_SEED_MSByte / LSByte registers
- *
- *   2   CSMA_ON   [0]:                1 - CSMA channel access mode enabled
- *
- *   1   CSMA_PERS_ON[0]:              1 - CSMA persistent (no back-off) enabled
- *
- *   0   AUTO_PCKT_FLT[0]:             1 - automatic packet filtering mode enabled
- *
- *   \endcode
- */
-#define	PROTOCOL1_BASE						((uint8_t)0x51) /*!< Protocol1 regisetr address */
-
-#define	PROTOCOL1_AUTO_PCKT_FLT_MASK				((uint8_t)0x01) /*!< Enable/disable automatic packet filtering mode */
-#define	PROTOCOL1_CSMA_PERS_ON_MASK				((uint8_t)0x02) /*!< Enable/disable CSMA persistent (no back-off)  */
-#define	PROTOCOL1_CSMA_ON_MASK				        ((uint8_t)0x04) /*!< Enable/disable CSMA channel access mode */
-#define	PROTOCOL1_SEED_RELOAD_MASK				((uint8_t)0x08) /*!< Reloads the seed of the PN generator for CSMA procedure */
-#define	PROTOCOL1_PIGGYBACKING_MASK				((uint8_t)0x40) /*!< Enable/disable Piggybacking */
-#define	PROTOCOL1_LDC_RELOAD_ON_SYNC_MASK			((uint8_t)0x80) /*!< LDC timer will be reloaded with the value stored in the LDC_RELOAD registers */
-
-/**
- * @}
- */
-
-/** @defgroup PROTOCOL0_Register
- * @{
- */
-
-/**
- *  \brief PROTOCOL0  register
- *  \code
- *   Default value: 0x08
- *   Read Write
- *   7:4   NMAX_RETX[3:0]:             Max number of re-TX.  0 - re-transmission is not performed
- *
- *   3     NACK_TX[0]:                 1 - field NO_ACK=1 on transmitted packet
- *
- *   2     AUTO_ACK[0]:                1 - automatic ack after RX
- *
- *   1     PERS_RX[0]:                 1 - persistent reception enabled
- *
- *   0     PERS_TX[0]:                 1 - persistent transmission enabled
- *
- *   \endcode
- */
-#define	PROTOCOL0_BASE						((uint8_t)0x52) /*!< Persistent RX/TX, autoack, Max number of retransmissions */
-
-#define	PROTOCOL0_PERS_TX_MASK				        ((uint8_t)0x01) /*!< Enables persistent transmission */
-#define	PROTOCOL0_PERS_RX_MASK				        ((uint8_t)0x02) /*!< Enables persistent reception */
-#define	PROTOCOL0_AUTO_ACK_MASK				        ((uint8_t)0x04) /*!< Enables auto acknowlegment */
-#define	PROTOCOL0_NACK_TX_MASK				        ((uint8_t)0x08) /*!< Writes field NO_ACK=1 on transmitted packet */
-#define	PROTOCOL0_NMAX_RETX_MASK                                ((uint8_t)0xF0) /*!< Retransmission mask */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS5_Register
- * @{
- */
-
-/**
- *  \brief TIMERS5  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   RX_TIMEOUT_PRESCALER[7:0] :             RX operation timeout: prescaler value
- *   \endcode
- */
-#define	TIMERS5_RX_TIMEOUT_PRESCALER_BASE			((uint8_t)0x53) /*!< RX operation timeout: prescaler value */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS4_Register
- * @{
- */
-
-/**
- *  \brief TIMERS4  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   RX_TIMEOUT_COUNTER[7:0] :               RX operation timeout: counter value
- *   \endcode
- */
-#define	TIMERS4_RX_TIMEOUT_COUNTER_BASE				((uint8_t)0x54) /*!< RX operation timeout: counter value */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS3_Register
- * @{
- */
-
-/**
- *  \brief TIMERS3  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   LDCR_PRESCALER[7:0] :                   LDC Mode: Prescaler part of the wake-up value
- *   \endcode
- */
-#define	TIMERS3_LDC_PRESCALER_BASE				((uint8_t)0x55) /*!< LDC Mode: Prescaler of the wake-up timer */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS2_Register
- * @{
- */
-
-/**
- *  \brief TIMERS2  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   LDCR_COUNTER[7:0] :                    LDC Mode: counter part of the wake-up value
- *   \endcode
- */
-#define	TIMERS2_LDC_COUNTER_BASE				((uint8_t)0x56) /*!< LDC Mode: counter of the wake-up timer */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS1_Register
- * @{
- */
-
-/**
- *  \brief TIMERS1  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   LDCR_RELOAD_PRESCALER[7:0] :           LDC Mode: Prescaler part of the reload value
- *   \endcode
- */
-#define	TIMERS1_LDC_RELOAD_PRESCALER_BASE			((uint8_t)0x57) /*!< LDC Mode: Prescaler part of the reload value */
-
-/**
- * @}
- */
-
-/** @defgroup TIMERS0_Register
- * @{
- */
-
-/**
- *  \brief TIMERS0  register
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0   LDCR_RELOAD_COUNTER[7:0] :           LDC Mode: Counter part of the reload value
- *   \endcode
- */
-#define	TIMERS0_LDC_RELOAD_COUNTER_BASE				((uint8_t)0x58) /*!< LDC Mode: Counter part of the reload value */
-
-/**
- * @}
- */
-
-
-/** @defgroup CSMA_CONFIG3_Register
- * @{
- */
-
-/**
- *  \brief CSMA_CONFIG3  registers
- *  \code
- *   Default value: 0xFF
- *   Read Write
- *   7:0     BU_COUNTER_SEED_MSByte: Seed of the random number generator used to apply the BEB (Binary Exponential Backoff) algorithm (MSB)
- *   \endcode
- */
-#define	CSMA_CONFIG3_BASE		                      ((uint8_t)0x64) /*!< CSMA/CA: Seed of the random number generator used to apply the BEB (Binary Exponential Backoff) algorithm (MSB) */
-
-/**
- * @}
- */
-
-/** @defgroup CSMA_CONFIG2_Register
- * @{
- */
-
-/**
- *  \brief CSMA_CONFIG2  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:0     BU_COUNTER_SEED_LSByte: Seed of the random number generator used to apply the BEB (Binary Exponential Backoff) algorithm (LSB)
- *   \endcode
- */
-#define	CSMA_CONFIG2_BASE		                      ((uint8_t)0x65) /*!< CSMA/CA: Seed of the random number generator used to apply the BEB (Binary Exponential Backoff) algorithm (LSB) */
-
-/**
- * @}
- */
-
-/** @defgroup CSMA_CONFIG1_Register
- * @{
- */
-
-/**
- *  \brief CSMA_CONFIG1  registers
- *  \code
- *   Default value: 0x04
- *   Read Write
- *   7:2     BU_PRESCALER[5:0]: Used to program the back-off unit BU
- *
- *   1:0     CCA_PERIOD[1:0]: Used to program the Tcca time (64 / 128 /256 / 512 × Tbit.
- *   \endcode
- */
-#define	CSMA_CONFIG1_BASE				      ((uint8_t)0x66) /*!< CSMA/CA: Prescaler of the back-off time unit (BU); CCA period */
-
-#define	CSMA_CCA_PERIOD_64TBIT				      ((uint8_t)0x00) /*!< CSMA/CA: Sets CCA period to 64*TBIT */
-#define	CSMA_CCA_PERIOD_128TBIT				      ((uint8_t)0x01) /*!< CSMA/CA: Sets CCA period to 128*TBIT */
-#define	CSMA_CCA_PERIOD_256TBIT				      ((uint8_t)0x02) /*!< CSMA/CA: Sets CCA period to 256*TBIT */
-#define	CSMA_CCA_PERIOD_512TBIT				      ((uint8_t)0x03) /*!< CSMA/CA: Sets CCA period to 512*TBIT */
-
-/**
- * @}
- */
-
-/** @defgroup CSMA_CONFIG0_Register
- * @{
- */
-
-/**
- *  \brief CSMA_CONFIG0  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *   7:4     CCA_LENGTH[3:0]: Used to program the Tlisten time
- *
- *   3       Reserved.
- *
- *   2:0     NBACKOFF_MAX[2:0]: Max number of back-off cycles.
- *   \endcode
- */
-#define	CSMA_CONFIG0_BASE				      ((uint8_t)0x67) /*!< CSMA/CA: CCA lenght; Max number of backoff cycles */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup Link_Quality_Registers
- * @{
- */
-
-/** @defgroup QI_Register
- * @{
- */
-
-/**
- *  \brief QI register
- *  \code
- *   Read Write
- *   Default value: 0x02
- *
- *   7:6   SQI_TH[1:0]: SQI threshold according to the formula: 8*SYNC_LEN - 2*SQI_TH
- *
- *   5:2   PQI_TH[3:0]: PQI threshold according to the formula: 4*PQI_THR
- *
- *
- *   1     SQI_EN[0]:  SQI enable
- *                 1 - Enable
- *                 0 - Disable
- *
- *   0     PQI_EN[0]: PQI enable
- *                 1 - Enable
- *                 0 - Disable
- *   \endcode
- */
-#define	QI_BASE							((uint8_t)0x3A) /*!< QI register */
-
-#define	QI_PQI_MASK					        ((uint8_t)0x01) /*!< PQI enable/disable  */
-#define	QI_SQI_MASK					        ((uint8_t)0x02) /*!< SQI enable/disable  */
-
-/**
- * @}
- */
-
-/** @defgroup LINK_QUALIF2
- * @{
- */
-
-/**
- *  \brief LINK_QUALIF2  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   PQI[7:0]: PQI value of the received packet
- *   \endcode
- */
-#define	LINK_QUALIF2_BASE					((uint8_t)(0xC5)) /*!< PQI value of the received packet */
-
-/**
- * @}
- */
-
-/** @defgroup LINK_QUALIF1
- * @{
- */
-
-/**
- *  \brief LINK_QUALIF1  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7 CS:  Carrier Sense indication
- *
- *   6:0   SQI[6:0]: SQI value of the received packet
- *   \endcode
- */
-#define	LINK_QUALIF1_BASE					((uint8_t)(0xC6)) /*!< Carrier sense indication [7]; SQI value of the received packet */
-
-#define	LINK_QUALIF1_CS						((uint8_t)(0x80)) /*!< Carrier sense indication [7] */
-
-/**
- * @}
- */
-
-/** @defgroup LINK_QUALIF0
- * @{
- */
-
-/**
- *  \brief LINK_QUALIF0  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:4   LQI [3:0]:  LQI value of the received packet
- *
- *   3:0   AGC_WORD[3:0]: AGC word of the received packet
- *   \endcode
- */
-#define	LINK_QUALIF0_BASE					((uint8_t)(0xC7)) /*!< LQI value of the received packet [7:4]; AGC word of the received packet [3:0] */
-
-/**
- * @}
- */
-
-/** @defgroup RSSI_LEVEL
- * @{
- */
-
-/**
- *  \brief RSSI_LEVEL  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   RSSI_LEVEL[7:0]:  RSSI level of the received packet
- *   \endcode
- */
-#define	RSSI_LEVEL_BASE						((uint8_t)(0xC8)) /*!< RSSI level of the received packet */
-
-/**
- * @}
- */
-
-/** @defgroup RSSI_FLT_Register
- * @{
- */
-
-/**
- *  \brief RSSI register
- *  \code
- *   Read Write
- *   Default value: 0xF3
- *   7:4  RSSI_FLT[3:0]: Gain of the RSSI filter
- *
- *   3:2  CS_MODE[1:0]: AFC loop gain in slow mode (2's log)
- *
- *          CS_MODE1       |        CS_MODE0       |                     CS Mode
- *       -----------------------------------------------------------------------------------------
- *             0           |           0           |        Static CS
- *             0           |           1           |        Dynamic CS with 6dB dynamic threshold
- *             1           |           0           |        Dynamic CS with 12dB dynamic threshold
- *             1           |           1           |        Dynamic CS with 18dB dynamic threshold
- *
- *   1:0   OOK_PEAK_DECAY[1:0]: Peak decay control for OOK: 3 slow decay; 0 fast decay
- *
- *   \endcode
- */
-#define	RSSI_FLT_BASE						((uint8_t)0x21) /*!< Gain of the RSSI filter; lower value is fast but inaccurate,
-																	higher value is slow and more accurate */
-#define RSSI_FLT_CS_MODE_MASK					((uint8_t)0x0C) /*!< Carrier sense mode mask */
-#define RSSI_FLT_CS_MODE_STATIC					((uint8_t)0x00) /*!< Carrier sense mode;  static carrier sensing */
-#define RSSI_FLT_CS_MODE_DYNAMIC_6				((uint8_t)0x04) /*!< Carrier sense mode;  dynamic carrier sensing with 6dB threshold */
-#define RSSI_FLT_CS_MODE_DYNAMIC_12				((uint8_t)0x08) /*!< Carrier sense mode;  dynamic carrier sensing with 12dB threshold */
-#define RSSI_FLT_CS_MODE_DYNAMIC_18				((uint8_t)0x0C) /*!< Carrier sense mode;  dynamic carrier sensing with 18dB threshold */
-#define RSSI_FLT_OOK_PEAK_DECAY_MASK			        ((uint8_t)0x03) /*!< Peak decay control for OOK mask */
-#define RSSI_FLT_OOK_PEAK_DECAY_FAST			        ((uint8_t)0x00) /*!< Peak decay control for OOK: fast decay */
-#define RSSI_FLT_OOK_PEAK_DECAY_MEDIUM_FAST		        ((uint8_t)0x01) /*!< Peak decay control for OOK: medium_fast decay */
-#define RSSI_FLT_OOK_PEAK_DECAY_MEDIUM_SLOW		        ((uint8_t)0x02) /*!< Peak decay control for OOK: medium_fast decay */
-#define RSSI_FLT_OOK_PEAK_DECAY_SLOW			        ((uint8_t)0x03) /*!< Peak decay control for OOK: slow decay */
-
-/**
- * @}
- */
-
-/** @defgroup RSSI_TH_Register
- * @{
- */
-
-/**
- *  \brief RSSI_TH register
- *  \code
- *   Read Write
- *   Default value: 0x24
- *
- *   7:0 RSSI_THRESHOLD [7:0]:    Signal detect threshold in 0.5dB.  -120dBm corresponds to 20
- *   \endcode
- */
-#define	RSSI_TH_BASE						((uint8_t)0x22) /*!< Signal detect threshold in 0.5dB stp. 20 correspond to -120 dBm */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup FIFO_Registers
- * @{
- */
-
-/** @defgroup FIFO_CONFIG3_Register
- * @{
- */
-
-/**
- *  \brief FIFO_CONFIG3  registers
- *  \code
- *   Default value: 0x30
- *   Read Write
- *   7    Reserved.
- *
- *   6:0  rxafthr [6:0]: FIFO Almost Full threshold for rx fifo.
- *
- *   \endcode
- */
-#define	FIFO_CONFIG3_RXAFTHR_BASE				((uint8_t)0x3E) /*!< FIFO Almost Full threshold for rx fifo [6:0] */
-
-/**
- * @}
- */
-
-/** @defgroup FIFO_CONFIG2_Register
- * @{
- */
-
-/**
- *  \brief FIFO_CONFIG2  registers
- *  \code
- *   Default value: 0x30
- *   Read Write
- *   7    Reserved.
- *
- *   6:0  rxaethr [6:0]: FIFO Almost Empty threshold for rx fifo.
- *
- *   \endcode
- */
-#define	FIFO_CONFIG2_RXAETHR_BASE				((uint8_t)0x3F) /*!< FIFO Almost Empty threshold for rx fifo [6:0] */
-
-/**
- * @}
- */
-
-/** @defgroup FIFO_CONFIG1_Register
- * @{
- */
-
-/**
- *  \brief FIFO_CONFIG1  registers
- *  \code
- *   Default value: 0x30
- *   Read Write
- *   7    Reserved.
- *
- *   6:0  txafthr [6:0]: FIFO Almost Full threshold for tx fifo.
- *
- *   \endcode
- */
-#define	FIFO_CONFIG1_TXAFTHR_BASE				((uint8_t)0x40) /*!< FIFO Almost Full threshold for tx fifo [6:0] */
-
-/**
- * @}
- */
-
-/** @defgroup FIFO_CONFIG0_Register
- * @{
- */
-
-/**
- *  \brief FIFO_CONFIG0  registers
- *  \code
- *   Default value: 0x30
- *   Read Write
- *   7    Reserved.
- *
- *   6:0  txaethr [6:0]: FIFO Almost Empty threshold for tx fifo.
- *
- *   \endcode
- */
-#define	FIFO_CONFIG0_TXAETHR_BASE				((uint8_t)0x41) /*!< FIFO Almost Empty threshold for tx fifo [6:0] */
-
-/**
- * @}
- */
-
-/** @defgroup LINEAR_FIFO_STATUS1_Register
- * @{
- */
-
-/**
- *  \brief LINEAR_FIFO_STATUS1  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7     Reserved.
- *
- *   6:0   elem_txfifo[6:0]:     Number of elements in the linear TXFIFO (<=96)
- *   \endcode
- */
-#define	LINEAR_FIFO_STATUS1_BASE				((uint8_t)(0xE6)) /*!< Number of elements in the linear TX FIFO [6:0] (<=96) */
-
-/**
- * @}
- */
-
-/** @defgroup LINEAR_FIFO_STATUS0_Register
- * @{
- */
-
-/**
- *  \brief LINEAR_FIFO_STATUS0  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7     Reserved.
- *
- *   6:0   elem_rxfifo[6:0]:     Number of elements in the linear RXFIFO (<=96)
- *   \endcode
- */
-#define	LINEAR_FIFO_STATUS0_BASE				((uint8_t)(0xE7)) /*!< Number of elements in the linear RX FIFO [6:0] (<=96) */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/** @defgroup Calibration_Registers
- * @{
- */
-
-/** @defgroup RCO_VCO_CALIBR_IN2_Register
- * @{
- */
-
-/**
- *  \brief RCO_VCO_CALIBR_IN2  registers
- *  \code
- *   Default value: 0x70
- *   Read Write
- *   7:4     RWT_IN[3:0]: RaWThermometric word value for the RCO [7:4]
- *
- *   3:0     RFB_IN[4:1]: ResistorFineBit word value for the RCO (first 4 bits)
- *   \endcode
- */
-#define	RCO_VCO_CALIBR_IN2_BASE					((uint8_t)0x6D) /*!< RaWThermometric word value for the RCO [7:4]; ResistorFineBit word value for the RCO [3:0] */
-
-/**
- * @}
- */
-
-/** @defgroup RCO_VCO_CALIBR_IN1_Register
- * @{
- */
-
-/**
- *  \brief RCO_VCO_CALIBR_IN1  registers
- *  \code
- *   Default value: 0x48
- *   Read Write
- *
- *   7     RFB_IN[0]: ResistorFineBit word value for the RCO (LSb)
- *
- *   6:0   VCO_CALIBR_TX[6:0]:  Word value for the VCO to be used in TX mode
- *   \endcode
- */
-#define	RCO_VCO_CALIBR_IN1_BASE					((uint8_t)0x6E) /*!< ResistorFineBit word value for the RCO [7]; Word value for the VCO to be used in TX mode  [6:0]*/
-
-/**
- * @}
- */
-
-/** @defgroup RCO_VCO_CALIBR_IN0_Register
- * @{
- */
-
-/**
- *  \brief RCO_VCO_CALIBR_IN0  registers
- *  \code
- *   Default value: 0x48
- *   Read Write
- *
- *   7     Reserved.
- *
- *   6:0   VCO_CALIBR_RX[6:0]:  Word value for the VCO to be used in RX mode
- *   \endcode
- */
-#define	RCO_VCO_CALIBR_IN0_BASE					((uint8_t)0x6F) /*!< Word value for the VCO to be used in RX mode [6:0] */
-
-/**
- * @}
- */
-
-/** @defgroup RCO_VCO_CALIBR_OUT1_Register
- * @{
- */
-
-/**
- *  \brief RCO_VCO_CALIBR_OUT1  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:4   RWT_OUT[3:0]:    RWT word from internal RCO calibrator
- *
- *   3:0   RFB_OUT[4:1]:     RFB word from internal RCO calibrator (upper part)
- *   \endcode
- */
-#define	RCO_VCO_CALIBR_OUT1_BASE				((uint8_t)(0xE4)) /*!< RaWThermometric RWT word from internal RCO calibrator [7];
-                                                                                       ResistorFineBit RFB word from internal RCO oscillator [6:0] */
-/**
- * @}
- */
-
-/** @defgroup RCO_VCO_CALIBR_OUT0_Register
- * @{
- */
-
-/**
- *  \brief RCO_VCO_CALIBR_OUT0  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7     RFB_OUT[0]:    RFB word from internal RCO calibrator (last bit LSB)
- *
- *   6:0   VCO_CALIBR_DATA[6:0]:     Output word from internal VCO calibrator
- *   \endcode
- */
-#define	RCO_VCO_CALIBR_OUT0_BASE				((uint8_t)(0xE5)) /*!< ResistorFineBit RFB word from internal RCO oscillator [0];
-                                                                                       Output word from internal calibrator [6:0]; */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup AES_Registers
- * @{
- */
-
-/** @defgroup AES_KEY_IN_Register
- * @{
- */
-
-/**
- *  \brief AES_KEY_INx  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   AES_KEY_INx[7:0]:  AES engine key input (total - 128 bits)
- *   \endcode
- */
-#define	AES_KEY_IN_15_BASE					((uint8_t)0x70) /*!< AES engine key input 15 */
-   
-#define	AES_KEY_IN_14_BASE					((uint8_t)0x71) /*!< AES engine key input 14 */
-
-#define	AES_KEY_IN_13_BASE					((uint8_t)0x72) /*!< AES engine key input 13 */
-
-#define	AES_KEY_IN_12_BASE					((uint8_t)0x73) /*!< AES engine key input 12 */
-
-#define	AES_KEY_IN_11_BASE					((uint8_t)0x74) /*!< AES engine key input 11 */
-
-#define	AES_KEY_IN_10_BASE					((uint8_t)0x75) /*!< AES engine key input 10 */
-
-#define	AES_KEY_IN_9_BASE					((uint8_t)0x76) /*!< AES engine key input 9 */
-
-#define	AES_KEY_IN_8_BASE					((uint8_t)0x77) /*!< AES engine key input 8 */
-
-#define	AES_KEY_IN_7_BASE					((uint8_t)0x78) /*!< AES engine key input 7 */
-
-#define	AES_KEY_IN_6_BASE					((uint8_t)0x79) /*!< AES engine key input 6 */
-
-#define	AES_KEY_IN_5_BASE					((uint8_t)0x7A) /*!< AES engine key input 5 */
-
-#define	AES_KEY_IN_4_BASE					((uint8_t)0x7B) /*!< AES engine key input 4 */
-
-#define	AES_KEY_IN_3_BASE					((uint8_t)0x7C) /*!< AES engine key input 3 */
-
-#define	AES_KEY_IN_2_BASE					((uint8_t)0x7D) /*!< AES engine key input 2 */
-
-#define	AES_KEY_IN_1_BASE					((uint8_t)0x7E) /*!< AES engine key input 1 */
-
-#define	AES_KEY_IN_0_BASE					((uint8_t)0x7F) /*!< AES engine key input 0 */
-
-/**
- * @}
- */
-
-/** @defgroup AES_DATA_IN_Register
- * @{
- */
-
-/**
- *  \brief AES_DATA_INx  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   AES_DATA_INx[7:0]:  AES engine data input (total - 128 bits)
- *   \endcode
- */
-#define	AES_DATA_IN_15_BASE					((uint8_t)0x80) /*!< AES engine data input 15
-                                                                                     Take care: Address is in reverse order respect data numbering; eg.: 0x81 -> AES_data14[7:0] */
-#define	AES_DATA_IN_14_BASE					((uint8_t)0x81) /*!< AES engine data input 14 */
-
-#define	AES_DATA_IN_13_BASE					((uint8_t)0x82) /*!< AES engine data input 13 */
-
-#define	AES_DATA_IN_12_BASE					((uint8_t)0x83) /*!< AES engine data input 12 */
-
-#define	AES_DATA_IN_11_BASE					((uint8_t)0x84) /*!< AES engine data input 11 */
-
-#define	AES_DATA_IN_10_BASE					((uint8_t)0x85) /*!< AES engine data input 10 */
-
-#define	AES_DATA_IN_9_BASE					((uint8_t)0x86) /*!< AES engine data input 9 */
-
-#define	AES_DATA_IN_8_BASE					((uint8_t)0x87) /*!< AES engine data input 8 */
-
-#define	AES_DATA_IN_7_BASE					((uint8_t)0x88) /*!< AES engine data input 7 */
-
-#define	AES_DATA_IN_6_BASE					((uint8_t)0x89) /*!< AES engine data input 6 */
-
-#define	AES_DATA_IN_5_BASE					((uint8_t)0x8A) /*!< AES engine data input 5 */
-
-#define	AES_DATA_IN_4_BASE					((uint8_t)0x8B) /*!< AES engine data input 4 */
-
-#define	AES_DATA_IN_3_BASE					((uint8_t)0x8C) /*!< AES engine data input 3 */
-
-#define	AES_DATA_IN_2_BASE					((uint8_t)0x8D) /*!< AES engine data input 2 */
-
-#define	AES_DATA_IN_1_BASE					((uint8_t)0x8E) /*!< AES engine data input 1 */
-
-#define	AES_DATA_IN_0_BASE					((uint8_t)0x8F) /*!< AES engine data input 0 */
-
-/**
- * @}
- */
-
-/** @defgroup AES_DATA_OUT_Register
- * @{
- */
-
-/**
- *  \brief AES_DATA_OUT[15:0]  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:0   AES_DATA_OUTx[7:0]:    AES engine data output (128 bits)
- *   \endcode
- */
-#define	AES_DATA_OUT_15_BASE					((uint8_t)(0xD4)) /*!< AES engine data output 15 */
-
-#define	AES_DATA_OUT_14_BASE					((uint8_t)(0xD5)) /*!< AES engine data output 14 */
-
-#define	AES_DATA_OUT_13_BASE					((uint8_t)(0xD6)) /*!< AES engine data output 13 */
-
-#define	AES_DATA_OUT_12_BASE					((uint8_t)(0xD7)) /*!< AES engine data output 12 */
-
-#define	AES_DATA_OUT_11_BASE					((uint8_t)(0xD8)) /*!< AES engine data output 11 */
-
-#define	AES_DATA_OUT_10_BASE					((uint8_t)(0xD9)) /*!< AES engine data output 10 */
-
-#define	AES_DATA_OUT_9_BASE					((uint8_t)(0xDA)) /*!< AES engine data output 9 */
-
-#define	AES_DATA_OUT_8_BASE					((uint8_t)(0xDB)) /*!< AES engine data output 8 */
-
-#define	AES_DATA_OUT_7_BASE					((uint8_t)(0xDC)) /*!< AES engine data output 7 */
-
-#define	AES_DATA_OUT_6_BASE					((uint8_t)(0xDD)) /*!< AES engine data output 6 */
-
-#define	AES_DATA_OUT_5_BASE					((uint8_t)(0xDE)) /*!< AES engine data output 5 */
-
-#define	AES_DATA_OUT_4_BASE					((uint8_t)(0xDF)) /*!< AES engine data output 4 */
-
-#define	AES_DATA_OUT_3_BASE					((uint8_t)(0xE0)) /*!< AES engine data output 3 */
-
-#define	AES_DATA_OUT_2_BASE					((uint8_t)(0xE1)) /*!< AES engine data output 2 */
-
-#define	AES_DATA_OUT_1_BASE					((uint8_t)(0xE2)) /*!< AES engine data output 1 */
-
-#define	AES_DATA_OUT_0_BASE					((uint8_t)(0xE3)) /*!< AES engine data output 0 */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_Registers
- * @{
- */
-
-/** @defgroup IRQ_MASK0_Register
- * @{
- */
-
-/**
- *  \brief IRQ_MASK0  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_MASK0:  IRQ mask, if the correspondent bit is set and IRQ can be generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            0   |       RX data ready
- *            1   |       RX data discarded (upon filtering)
- *            2   |       TX data sent
- *            3   |       Max re-TX reached
- *            4   |       CRC error
- *            5   |       TX FIFO underflow/overflow error
- *            6   |       RX FIFO underflow/overflow error
- *            7   |       TX FIFO almost full
- *    \endcode
- */
-
-
-#define	IRQ_MASK0_BASE						((uint8_t)0x93) /*!< IRQ_MASK is split into 4 registers*/
-
-#define IRQ_MASK0_RX_DATA_READY					((uint8_t)0x01) /*!< IRQ: RX data ready */
-#define IRQ_MASK0_RX_DATA_DISC					((uint8_t)0x02) /*!< IRQ: RX data discarded (upon filtering) */
-#define IRQ_MASK0_TX_DATA_SENT					((uint8_t)0x04) /*!< IRQ: TX data sent */
-#define IRQ_MASK0_MAX_RE_TX_REACH				((uint8_t)0x08) /*!< IRQ: Max re-TX reached */
-#define IRQ_MASK0_CRC_ERROR					((uint8_t)0x10) /*!< IRQ: CRC error */
-#define IRQ_MASK0_TX_FIFO_ERROR					((uint8_t)0x20) /*!< IRQ: TX FIFO underflow/overflow error */
-#define IRQ_MASK0_RX_FIFO_ERROR					((uint8_t)0x40) /*!< IRQ: RX FIFO underflow/overflow error */
-#define IRQ_MASK0_TX_FIFO_ALMOST_FULL				((uint8_t)0x80) /*!< IRQ: TX FIFO almost full */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_MASK1_Register
- * @{
- */
-
-/**
- *  \brief IRQ_MASK1  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_MASK1:  IRQ mask, if the correspondent bit is set and IRQ can be generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            8   |       TX FIFO almost empty
- *            9   |       RX FIFO almost full
- *            10  |       RX FIFO almost empty
- *            11  |       Max number of back-off during CCA
- *            12  |       Valid preamble detected
- *            13  |       Sync word detected
- *            14  |       RSSI above threshold (Carrier Sense)
- *            15  |       Wake-up timeout in LDCR mode13
- *     \endcode
- */
-
-#define	IRQ_MASK1_BASE						((uint8_t)0x92) /*!< IRQ_MASK is split into 4 registers*/
-
-#define IRQ_MASK1_TX_FIFO_ALMOST_EMPTY				((uint8_t)0x01) /*!< IRQ: TX FIFO almost empty */
-#define IRQ_MASK1_RX_FIFO_ALMOST_FULL				((uint8_t)0x02) /*!< IRQ: RX FIFO almost full */
-#define IRQ_MASK1_RX_FIFO_ALMOST_EMPTY				((uint8_t)0x04) /*!< IRQ: RX FIFO almost empty  */
-#define IRQ_MASK1_MAX_BO_CCA_REACH				((uint8_t)0x08) /*!< IRQ: Max number of back-off during CCA */
-#define IRQ_MASK1_VALID_PREAMBLE				((uint8_t)0x10) /*!< IRQ: Valid preamble detected */
-#define IRQ_MASK1_VALID_SYNC					((uint8_t)0x20) /*!< IRQ: Sync word detected */
-#define IRQ_MASK1_RSSI_ABOVE_TH					((uint8_t)0x40) /*!< IRQ: RSSI above threshold */
-#define IRQ_MASK1_WKUP_TOUT_LDC					((uint8_t)0x80) /*!< IRQ: Wake-up timeout in LDC mode */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_MASK2_Register
- * @{
- */
-
-/**
- *  \brief IRQ_MASK2  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_MASK2:  IRQ mask, if the correspondent bit is set and IRQ can be generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            16  |       READY state in steady condition14
- *            17  |       STANDBY state switching in progress
- *            18  |       Low battery level
- *            19  |       Power-On reset
- *            20  |       Brown-Out event
- *            21  |       LOCK state in steady condition
- *            22  |       PM start-up timer expiration
- *            23  |       XO settling timeout
- *   \endcode
- */
-#define	IRQ_MASK2_BASE						((uint8_t)0x91) /*!< IRQ_MASK is split into 4 registers*/
-
-#define IRQ_MASK2_READY						((uint8_t)0x01) /*!< IRQ: READY state */
-#define IRQ_MASK2_STANDBY_DELAYED				((uint8_t)0x02) /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
-#define IRQ_MASK2_LOW_BATT_LVL					((uint8_t)0x04) /*!< IRQ: Battery level below threshold*/
-#define IRQ_MASK2_POR						((uint8_t)0x08) /*!< IRQ: Power On Reset */
-#define IRQ_MASK2_BOR						((uint8_t)0x10) /*!< IRQ: Brown out event (both accurate and inaccurate)*/
-#define IRQ_MASK2_LOCK						((uint8_t)0x20) /*!< IRQ: LOCK state */
-#define IRQ_MASK2_PM_COUNT_EXPIRED				((uint8_t)0x40) /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
-#define IRQ_MASK2_XO_COUNT_EXPIRED				((uint8_t)0x80) /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_MASK3_Register
- * @{
- */
-
-/**
- *  \brief IRQ_MASK3  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_MASK3:  IRQ mask, if the correspondent bit is set and IRQ can be generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            24  |       SYNTH locking timeout
- *            25  |       SYNTH calibration start-up time
- *            26  |       SYNTH calibration timeout
- *            27  |       TX circuitry start-up time
- *            28  |       RX circuitry start-up time
- *            29  |       RX operation timeout
- *            30  |       Others AES End–of –Operation
- *            31  |       Reserved
- *   \endcode
- */
-#define	IRQ_MASK3_BASE						((uint8_t)0x90) /*!< IRQ_MASK is split into 4 registers*/
-
-#define IRQ_MASK3_SYNTH_LOCK_TIMEOUT			        ((uint8_t)0x01) /*!< IRQ: only for debug; LOCK state timeout */
-#define IRQ_MASK3_SYNTH_LOCK_STARTUP			        ((uint8_t)0x02) /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
-#define IRQ_MASK3_SYNTH_CAL_TIMEOUT				((uint8_t)0x04) /*!< IRQ: only for debug; SYNTH calibration timeout */
-#define IRQ_MASK3_TX_START_TIME					((uint8_t)0x08) /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
-#define IRQ_MASK3_RX_START_TIME					((uint8_t)0x10) /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
-#define IRQ_MASK3_RX_TIMEOUT					((uint8_t)0x20) /*!< IRQ: RX operation timeout */
-#define IRQ_MASK3_AES_END					((uint8_t)0x40) /*!< IRQ: AES End of operation */
-
-/**
- * @}
- */
-
-
-/** @defgroup IRQ_STATUS0_Register
- * @{
- */
-
-/**
- *  \brief IRQ_STATUS0  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_STATUS0:  IRQ status, if the correspondent bit is set and IRQ has been generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            0   |       RX data ready
- *            1   |       RX data discarded (upon filtering)
- *            2   |       TX data sent
- *            3   |       Max re-TX reached
- *            4   |       CRC error
- *            5   |       TX FIFO underflow/overflow error
- *            6   |       RX FIFO underflow/overflow error
- *            7   |       TX FIFO almost full
- *   \endcode
- */
-
-#define IRQ_STATUS0_BASE					((uint8_t)(0xFD)) /*!< IRQ Events(RR, split into 4 registers) */
-
-#define IRQ_STATUS0_SYNTH_LOCK_TIMEOUT				((uint8_t)(0x01)) /*!< IRQ: LOCK state timeout */
-#define IRQ_STATUS0_SYNTH_LOCK_STARTUP				((uint8_t)(0x02)) /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
-#define IRQ_STATUS0_SYNTH_CAL_TIMEOUT				((uint8_t)(0x04)) /*!< IRQ: SYNTH locking timeout */
-#define IRQ_STATUS0_TX_START_TIME				((uint8_t)(0x08)) /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
-#define IRQ_STATUS0_RX_START_TIME				((uint8_t)(0x10)) /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
-#define IRQ_STATUS0_RX_TIMEOUT					((uint8_t)(0x20)) /*!< IRQ: RX operation timeout expiration */
-#define IRQ_STATUS0_AES_END					((uint8_t)(0x40)) /*!< IRQ: AES End of operation */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_STATUS1_Register
- * @{
- */
-
-/**
- *  \brief IRQ_STATUS1  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_STATUS1:  IRQ status, if the correspondent bit is set and IRQ has been generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            8   |       TX FIFO almost empty
- *            9   |       RX FIFO almost full
- *            10  |       RX FIFO almost empty
- *            11  |       Max number of back-off during CCA
- *            12  |       Valid preamble detected
- *            13  |       Sync word detected
- *            14  |       RSSI above threshold (Carrier Sense)
- *            15  |       Wake-up timeout in LDCR mode13
- *   \endcode
- */
-
-#define IRQ_STATUS1_BASE					((uint8_t)(0xFC)) /*!< IRQ Events(RR, split into 4 registers) */
-
-#define IRQ_STATUS1_READY					((uint8_t)(0x01)) /*!< IRQ: READY state in steady condition*/
-#define IRQ_STATUS1_STANDBY_DELAYED				((uint8_t)(0x02)) /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
-#define IRQ_STATUS1_LOW_BATT_LVL				((uint8_t)(0x04)) /*!< IRQ: Battery level below threshold*/
-#define IRQ_STATUS1_POR						((uint8_t)(0x08)) /*!< IRQ: Power On Reset */
-#define IRQ_STATUS1_BOR						((uint8_t)(0x10)) /*!< IRQ: Brown out event (both accurate and inaccurate)*/
-#define IRQ_STATUS1_LOCK					((uint8_t)(0x20)) /*!< IRQ: LOCK state in steady condition */
-#define IRQ_STATUS1_PM_COUNT_EXPIRED				((uint8_t)(0x40)) /*!< IRQ: Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
-#define IRQ_STATUS1_XO_COUNT_EXPIRED				((uint8_t)(0x80)) /*!< IRQ: Crystal oscillator settling time counter expired */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_STATUS2_Register
- * @{
- */
-
-/**
- *  \brief IRQ_STATUS2  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_STATUS2:  IRQ status, if the correspondent bit is set and IRQ has been generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            16  |       READY state in steady condition14
- *            17  |       STANDBY state switching in progress
- *            18  |       Low battery level
- *            19  |       Power-On reset
- *            20  |       Brown-Out event
- *            21  |       LOCK state in steady condition
- *            22  |       PM start-up timer expiration
- *            23  |       XO settling timeout
- *   \endcode
- */
-
-#define IRQ_STATUS2_BASE					((uint8_t)0xFB) /*!< IRQ Events(RR, split into 4 registers) */
-
-#define IRQ_STATUS2_TX_FIFO_ALMOST_EMPTY			((uint8_t)0x01) /*!< IRQ: TX FIFO almost empty */
-#define IRQ_STATUS2_RX_FIFO_ALMOST_FULL				((uint8_t)0x02) /*!< IRQ: RX FIFO almost full */
-#define IRQ_STATUS2_RX_FIFO_ALMOST_EMPTY			((uint8_t)0x04) /*!< IRQ: RX FIFO almost empty */
-#define IRQ_STATUS2_MAX_BO_CCA_REACH				((uint8_t)0x08) /*!< IRQ: Max number of back-off during CCA */
-#define IRQ_STATUS2_VALID_PREAMBLE				((uint8_t)0x10) /*!< IRQ: Valid preamble detected */
-#define IRQ_STATUS2_VALID_SYNC					((uint8_t)0x20) /*!< IRQ: Sync word detected */
-#define IRQ_STATUS2_RSSI_ABOVE_TH				((uint8_t)(0x40)) /*!< IRQ: RSSI above threshold */
-#define IRQ_STATUS2_WKUP_TOUT_LDC				((uint8_t)(0x80)) /*!< IRQ: Wake-up timeout in LDC mode */
-
-/**
- * @}
- */
-
-/** @defgroup IRQ_STATUS3_Register
- * @{
- */
-
-/**
- *  \brief IRQ_STATUS3  registers
- *  \code
- *   Default value: 0x00
- *   Read Write
- *
- *   7:0   INT_STATUS3:  IRQ status, if the correspondent bit is set and IRQ has been generated (according to the next table)
- *
- *            Bit |     Events Group Interrupt Event
- *           -------------------------------------------------------
- *            24  |       SYNTH locking timeout
- *            25  |       SYNTH calibration start-up time
- *            26  |       SYNTH calibration timeout
- *            27  |       TX circuitry start-up time
- *            28  |       RX circuitry start-up time
- *            29  |       RX operation timeout
- *            30  |       Others AES End–of –Operation
- *            31  |       Reserved
- *    \endcode
- */
-#define IRQ_STATUS3_BASE					((uint8_t)0xFA) /*!< IRQ Events(RR, split into 4 registers) */
-
-#define IRQ_STATUS3_RX_DATA_READY				((uint8_t)0x01) /*!< IRQ: RX data ready */
-#define IRQ_STATUS3_RX_DATA_DISC				((uint8_t)0x02) /*!< IRQ: RX data discarded (upon filtering) */
-#define IRQ_STATUS3_TX_DATA_SENT				((uint8_t)0x04) /*!< IRQ: TX data sent */
-#define IRQ_STATUS3_MAX_RE_TX_REACH				((uint8_t)0x08) /*!< IRQ: Max re-TX reached */
-#define IRQ_STATUS3_CRC_ERROR					((uint8_t)0x10) /*!< IRQ: CRC error */
-#define IRQ_STATUS3_TX_FIFO_ERROR				((uint8_t)0x20) /*!< IRQ: TX FIFO underflow/overflow error */
-#define IRQ_STATUS3_RX_FIFO_ERROR				((uint8_t)0x40) /*!< IRQ: RX FIFO underflow/overflow error */
-#define IRQ_STATUS3_TX_FIFO_ALMOST_FULL				((uint8_t)0x80) /*!< IRQ: TX FIFO almost full */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup MC_STATE_Registers
- * @{
- */
-
-/** @defgroup MC_STATE1_Register
- * @{
- */
-
-/**
- *  \brief MC_STATE1  registers
- *  \code
- *   Default value: 0x50
- *   Read
- *
- *   7:4     Reserved.
- *
- *   3       ANT_SELECT:  Currently selected antenna
- *
- *   2       TX_FIFO_Full:     1 - TX FIFO is full
- *
- *   1       RX_FIFO_Empty:    1 - RX FIFO is empty
- *
- *   0       ERROR_LOCK:       1 - RCO calibrator error
- *   \endcode
- */
-#define	MC_STATE1_BASE						((uint8_t)(0xC0)) /*!< MC_STATE1 register address (see the SpiritStatus struct */
-
-
-/**
- * @}
- */
-
-
-/** @defgroup MC_STATE0_Register
- * @{
- */
-
-/**
- *  \brief MC_STATE0  registers
- *  \code
- *   Default value: 0x00
- *   Read
- *
- *   7:1     STATE[6:0]: Current MC state.
- *
- *      REGISTER VALUE |         STATE
- *   --------------------------------------------
- *            0x40     |         STANDBY
- *            0x36     |         SLEEP
- *            0x03     |         READY
- *            0x3B     |         PM setup
- *            0x23     |         XO settling
- *            0x53     |         SYNTH setup
- *            0x1F     |         PROTOCOL
- *            0x4F     |         SYNTH calibration
- *            0x0F     |         LOCK
- *            0x33     |         RX
- *            0x5F     |         TX
- *
- *   0       XO_ON:       1 - XO is operating
- *   \endcode
- */
-#define	MC_STATE0_BASE						((uint8_t)(0xC1)) /*!< MC_STATE0 register address. In this version ALL existing states have been inserted
-                                                                                       and are still to be verified */
-/**
- * @}
- */
-
-/**
- * @}
- */
-   
-/** @defgroup Engineering-Test_Registers
- * @{
- */
-
-#define	SYNTH_CONFIG1_BASE					((uint8_t)(0x9E)) /*!< Synthesizier registers: M, A, K data sync on positive/negative clock edges [4],
-                                                                                       Enable Linearization of the charge pump [3], split time 1.75/3.45ns [2], VCO calibration window 16,32,64,128 clock cycles [1:0]*/
-#define	SYNTH_CONFIG0_BASE					((uint8_t)(0x9F)) /*!< Enable DSM randomizer [7], Window width 1.2-7.5ns (Down-up) of lock detector*/
-#define	VCOTH_BASE						((uint8_t)(0xA0)) /*!< Controls the threshold frequency between VCO low and VCO high [7:0]
-                                                                                       VCOth frequency=2*fXO*(96+VCO_TH/16), fmin=4992 MHz, fmax=5820 MHz*/
-#define	PM_CONFIG2_BASE						((uint8_t)(0xA4)) /*!< Enables high current buffer on Temperature sensor, sets SMPS options */
-#define	PM_CONFIG1_BASE						((uint8_t)(0xA5)) /*!< Set SMPS options */
-#define	PM_CONFIG0_BASE						((uint8_t)(0xA6)) /*!< Set SMPS options */
-#define	VCO_CONFIG_BASE						((uint8_t)(0xA1)) /*!< Set VCO current [5:2]part and [1:0] part */
-#define	XO_CONFIG_BASE						((uint8_t)(0xA7)) /*!< Clock management options from XO to digital part */
-
-#define	XO_RCO_TEST_BASE					((uint8_t)(0xB4)) /*!< Test of XO and RCO */
-
-/**
- * @}
- */
-
-
-/** @addtogroup Commands
- * @{
- */
-
-#define	COMMAND_TX						((uint8_t)(0x60)) /*!< Start to transmit; valid only from READY */
-#define	COMMAND_RX						((uint8_t)(0x61)) /*!< Start to receive; valid only from READY */
-#define	COMMAND_READY					        ((uint8_t)(0x62)) /*!< Go to READY; valid only from STANDBY or SLEEP or LOCK */
-#define	COMMAND_STANDBY					        ((uint8_t)(0x63)) /*!< Go to STANDBY; valid only from READY */
-#define	COMMAND_SLEEP					        ((uint8_t)(0x64)) /*!< Go to SLEEP; valid only from READY */
-#define	COMMAND_LOCKRX					        ((uint8_t)(0x65)) /*!< Go to LOCK state by using the RX configuration of the synth; valid only from READY */
-#define	COMMAND_LOCKTX					        ((uint8_t)(0x66)) /*!< Go to LOCK state by using the TX configuration of the synth; valid only from READY */
-#define	COMMAND_SABORT					        ((uint8_t)(0x67)) /*!< Force exit form TX or RX states and go to READY state; valid only from TX or RX */
-#define	COMMAND_LDC_RELOAD				        ((uint8_t)(0x68)) /*!< LDC Mode: Reload the LDC timer with the value stored in the  LDC_PRESCALER / COUNTER
-                                                                                       registers; valid from all states  */
-#define	COMMAND_SEQUENCE_UPDATE			                ((uint8_t)(0x69)) /*!< Autoretransmission: Reload the Packet sequence counter with the value stored in the PROTOCOL[2] register
-                                                                                       valid from all states */
-#define	COMMAND_AES_ENC					        ((uint8_t)(0x6A)) /*!< AES: Start the encryption routine; valid from all states; valid from all states */
-#define	COMMAND_AES_KEY					        ((uint8_t)(0x6B)) /*!< AES: Start the procedure to compute the key for the decryption; valid from all states */
-#define	COMMAND_AES_DEC					        ((uint8_t)(0x6C)) /*!< AES: Start the decryption routine using the current key; valid from all states */
-#define	COMMAND_AES_KEY_DEC				        ((uint8_t)(0x6D)) /*!< AES: Compute the key and start the decryption; valid from all states */
-#define	COMMAND_SRES					        ((uint8_t)(0x70)) /*!< Reset of all digital part, except SPI registers */
-#define	COMMAND_FLUSHRXFIFO				        ((uint8_t)(0x71)) /*!< Clean the RX FIFO; valid from all states */
-#define	COMMAND_FLUSHTXFIFO				        ((uint8_t)(0x72)) /*!< Clean the TX FIFO; valid from all states */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Timer.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Timer.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Timer.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT timers.
- * @details
- *
- * This module provides API to configure the Spirit timing mechanisms.
- * They allow the user to set the timer registers using raw values or
- * compute them since the desired timer value is expressed in ms.
- * Moreover the management of the Spirit LDCR mode can be done using
- * these API.
- *
- * <b>Example:</b>
- * @code
- *   ...
- *
- *   SpiritTimerSetRxTimeoutMs(50.0);
- *   SpiritTimerSetWakeUpTimerMs(150.0);
- *
- *   // IRQ configuration for RX_TIMEOUT and WAKEUP_TIMEOUT
- *   ...
- *
- *   SpiritTimerLdcrMode(S_ENABLE);
- *
- *   ...
- *
- * @endcode
- *
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT1_TIMER_H
-#define __SPIRIT1_TIMER_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "SPIRIT_Regs.h"
-#include "SPIRIT_Types.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Timer               Timer
- * @brief Configuration and management of SPIRIT Timers.
- * @details See the file <i>@ref SPIRIT_Timer.h</i> for more details.
- * @{
- */
-
-
-/**
- * @defgroup Timer_Exported_Types       Timer Exported Types
- * @{
- */
-
-/**
- * @brief  All the possible RX timeout stop conditions enumeration.
- */
-typedef enum{
-
-     NO_TIMEOUT_STOP = 0x00,                /*!< Timeout never stopped */
-     TIMEOUT_ALWAYS_STOPPED = 0x08,         /*!< Timeout always stopped (default) */
-     RSSI_ABOVE_THRESHOLD = 0x04,           /*!< Timeout stopped on RSSI above threshold */
-     SQI_ABOVE_THRESHOLD = 0x02,            /*!< Timeout stopped on SQI above threshold */
-     PQI_ABOVE_THRESHOLD = 0x01,            /*!< Timeout stopped on PQI above threshold */
-     RSSI_AND_SQI_ABOVE_THRESHOLD = 0x06,   /*!< Timeout stopped on both RSSI and SQI above threshold */
-     RSSI_AND_PQI_ABOVE_THRESHOLD = 0x05,   /*!< Timeout stopped on both RSSI and PQI above threshold */
-     SQI_AND_PQI_ABOVE_THRESHOLD = 0x03,    /*!< Timeout stopped on both SQI and PQI above threshold */
-     ALL_ABOVE_THRESHOLD = 0x07,            /*!< Timeout stopped only if RSSI, SQI and PQI are above threshold */
-     RSSI_OR_SQI_ABOVE_THRESHOLD = 0x0E,    /*!< Timeout stopped if one between RSSI or SQI are above threshold */
-     RSSI_OR_PQI_ABOVE_THRESHOLD = 0x0D,    /*!< Timeout stopped if one between RSSI or PQI are above threshold */
-     SQI_OR_PQI_ABOVE_THRESHOLD = 0x0B,     /*!< Timeout stopped if one between SQI or PQI are above threshold */
-     ANY_ABOVE_THRESHOLD = 0x0F             /*!< Timeout stopped if one among RSSI, SQI or SQI are above threshold */
-
-} RxTimeoutStopCondition;
-
-
-#define IS_RX_TIMEOUT_STOP_CONDITION(COND)  ( COND == NO_TIMEOUT_STOP || \
-                                                COND == TIMEOUT_ALWAYS_STOPPED || \
-                                                COND == RSSI_ABOVE_THRESHOLD || \
-                                                COND == SQI_ABOVE_THRESHOLD || \
-                                                COND == PQI_ABOVE_THRESHOLD || \
-                                                COND == RSSI_AND_SQI_ABOVE_THRESHOLD || \
-                                                COND == RSSI_AND_PQI_ABOVE_THRESHOLD || \
-                                                COND == SQI_AND_PQI_ABOVE_THRESHOLD || \
-                                                COND == ALL_ABOVE_THRESHOLD || \
-                                                COND == RSSI_OR_SQI_ABOVE_THRESHOLD || \
-                                                COND == RSSI_OR_PQI_ABOVE_THRESHOLD || \
-                                                COND == SQI_OR_PQI_ABOVE_THRESHOLD || \
-                                                COND == ANY_ABOVE_THRESHOLD )
-
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Timer_Exported_Constants   Timer Exported Constants
- * @{
- */
-
-/**
- * @brief  It represents the Time Step for RX_Timeout timer in case of 24 MHz Crystal, expressed in us.
- *         It is equal to 1210/(24*10^6). With this time step it is possible to fix the RX_Timeout to
- *         a minimum value of 50.417us to a maximum value of about 3.278 s.
- *         Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter and/or RX_Timeout_Prescaler registers.
- */
-#define      RX_TCLK_24MHz           50.417f
-#define      IS_RX_TIMEOUT_24MHz(TIMEOUT)        (TIMEOUT*1000)>=RX_TCLK_24MHz
-
-/**
- * @brief  It represents the Time Step for RX_Timeout timer in case of 26 MHz Crystal, expressed in us.
- *         It is equal to 1210/(26*10^6). With this time step it is possible to fix the RX_Timeout to
- *         a minimum value of 46.538us to a maximum value of about 3.026 s.
- *         Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter register.
- */
-#define      RX_TCLK_26MHz           46.538f
-#define      IS_RX_TIMEOUT_26MHz(TIMEOUT)        (TIMEOUT*1000)>=RX_TCLK_26MHz
-
-/**
- * @brief  It represents the Time Step for RX_Wakeup timer expressed in us. This timer is based on RCO (about 34.7 kHZ).
- *         With this time step it is possible to fix the Wakeup_Timeout to a minimum value of 28.818us to a maximum
- *         value of about 1.888 s.
- */
-#define      WAKEUP_TCLK            28.818f
-#define      IS_WKUP_TIMEOUT(TIMEOUT)        (TIMEOUT*1000)>=WAKEUP_TCLK
-
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Timer_Exported_Macros              Timer Exported Macros
- * @{
- */
-
-#define SET_INFINITE_RX_TIMEOUT()     SpiritTimerSetRxTimeoutCounter(0)
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Timer_Exported_Functions           Timer Exported Functions
- * @{
- */
-
-void SpiritTimerLdcrMode(SpiritFunctionalState xNewState);
-void SpiritTimerLdcrAutoReload(SpiritFunctionalState xNewState);
-SpiritFunctionalState SpiritTimerLdcrGetAutoReload(void);
-void SpiritTimerSetRxTimeout(uint8_t cCounter , uint8_t cPrescaler);
-void SpiritTimerSetRxTimeoutMs(float fDesiredMsec);
-void SpiritTimerSetRxTimeoutCounter(uint8_t cCounter);
-void SpiritTimerSetRxTimeoutPrescaler(uint8_t cPrescaler);
-void SpiritTimerGetRxTimeout(float* pfTimeoutMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
-void SpiritTimerSetWakeUpTimer(uint8_t cCounter , uint8_t cPrescaler);
-void SpiritTimerSetWakeUpTimerMs(float fDesiredMsec);
-void SpiritTimerSetWakeUpTimerCounter(uint8_t cCounter);
-void SpiritTimerSetWakeUpTimerPrescaler(uint8_t cPrescaler);
-void SpiritTimerSetWakeUpTimerReloadMs(float fDesiredMsec);
-void SpiritTimerGetWakeUpTimer(float* pfWakeUpMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
-void SpiritTimerSetWakeUpTimerReload(uint8_t cCounter , uint8_t cPrescaler);
-void SpiritTimerSetWakeUpTimerReloadCounter(uint8_t cCounter);
-void SpiritTimerSetWakeUpTimerReloadPrescaler(uint8_t cPrescaler);
-void SpiritTimerGetWakeUpTimerReload(float* pfWakeUpReloadMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
-void SpiritTimerComputeWakeUpValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler);
-void SpiritTimerComputeRxTimeoutValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler);
-void SpiritTimerSetRxTimeoutStopCondition(RxTimeoutStopCondition xStopCondition);
-void SpiritTimerReloadStrobe(void);
-uint16_t SpiritTimerGetRcoFrequency(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
-
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Types.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Types.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,276 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Types.h
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Header file for SPIRIT types.
- * @details
- *
- * This module provide some types definitions which will be used in
- * all the modules of this library. Here is defined also the global
- * variable @ref g_xStatus which contains the status of Spirit and
- * is updated every time an SPI transaction occurs.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SPIRIT_GENERICTYPES_H
-#define __SPIRIT_GENERICTYPES_H
-
-
-/* Includes ------------------------------------------------------------------*/
-
-/* Include all integer types definitions */
-#include <stdint.h>
-#include <stdio.h>
-#include "SPIRIT_Regs.h"
-
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @defgroup SPIRIT_Types       Types
- * @brief Module for SPIRIT types definition.
- * * @details See the file <i>@ref SPIRIT_Types.h</i> for more details.
- * @{
- */
-
-/**
- * @defgroup Types_Exported_Types       Types Exported Types
- * @{
- */
-
-/**
- * @brief  Spirit Functional state. Used to enable or disable a specific option.
- */
-typedef enum
-{
-  S_DISABLE = 0,
-  S_ENABLE = !S_DISABLE
-
-} SpiritFunctionalState;
-
-#define IS_SPIRIT_FUNCTIONAL_STATE(STATE)   (STATE == S_DISABLE || STATE == S_ENABLE)
-
-/**
- * @brief  Spirit Flag status. Used to control the state of a flag.
- */
-typedef enum
-{
-  S_RESET = 0,
-  S_SET = !S_RESET
-
-} SpiritFlagStatus;
-
-#define IS_SPIRIT_FLAG_STATUS(STATUS)   (STATUS == S_RESET || STATUS == S_SET)
-
-
-/**
- * @brief  boolean type enumeration.
- */
-typedef enum
-{
-  S_FALSE = 0,
-  S_TRUE  = !S_FALSE
-
-} SpiritBool;
-
-
-/**
- * @brief  SPIRIT States enumeration.
- */
-typedef enum
-{
-  MC_STATE_STANDBY           =0x40,	/*!< STANDBY */
-  MC_STATE_SLEEP             =0x36,	/*!< SLEEP */
-  MC_STATE_READY             =0x03,	/*!< READY */
-  MC_STATE_PM_SETUP          =0x3D,	/*!< PM_SETUP */
-  MC_STATE_XO_SETTLING       =0x23,	/*!< XO_SETTLING */
-  MC_STATE_SYNTH_SETUP       =0x53,	/*!< SYNT_SETUP */
-  MC_STATE_PROTOCOL          =0x1F,	/*!< PROTOCOL */
-  MC_STATE_SYNTH_CALIBRATION =0x4F,	/*!< SYNTH */
-  MC_STATE_LOCK              =0x0F,	/*!< LOCK */
-  MC_STATE_RX                =0x33,	/*!< RX */
-  MC_STATE_TX                =0x5F	/*!< TX */
-
-} SpiritState;
-
-
-
-/**
- * @brief SPIRIT Status. This definition represents the single field of the SPIRIT
- *        status returned on each SPI transaction, equal also to the MC_STATE registers.
- *        This field-oriented structure allows user to address in simple way the single
- *        field of the SPIRIT status.
- *        The user shall define a variable of SpiritStatus type to access on SPIRIT status fields.
- * @note  The fields order in the structure depends on used endianness (little or big
- *        endian). The actual definition is valid ONLY for LITTLE ENDIAN mode. Be sure to
- *        change opportunely the fields order when use a different endianness.
- */
-
-typedef struct
-{
-  uint8_t XO_ON:1;		/*!< This one bit field notifies if XO is operating
-  	  	  	  	     (XO_ON is 1) or not (XO_On is 0) */
-  SpiritState MC_STATE: 7;	/*!< This 7 bits field indicates the state of the
-   	   	   	   	     Main Controller of SPIRIT. The possible states
-   	   	   	   	     and their corresponding values are defined in
-   	   	   	   	     @ref SpiritState */
-  uint8_t ERROR_LOCK: 1;       /*!< This one bit field notifies if there is an
-   	   	   	   	     error on RCO calibration (ERROR_LOCK is 1) or
-   	   	   	   	     not (ERROR_LOCK is 0) */
-  uint8_t RX_FIFO_EMPTY: 1;    /*!< This one bit field notifies if RX FIFO is empty
-   	   	   	   	     (RX_FIFO_EMPTY is 1) or not (RX_FIFO_EMPTY is 0) */
-  uint8_t TX_FIFO_FULL: 1;	/*!< This one bit field notifies if TX FIFO is full
-  	  	  	  	     (TX_FIFO_FULL is 1) or not (TX_FIFO_FULL is 0) */
-  uint8_t ANT_SELECT: 1;       /*!< This one bit field notifies the currently selected
-   	   	   	   	     antenna */
-  uint8_t : 4;			/*!< This 4 bits field are reserved and equal to 5 */
-
-}SpiritStatus;
-
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Types_Exported_Constants   Types Exported Constants
- * @{
- */
-
-
-/**
- * @}
- */
-
-/**
- * @defgroup Types_Exported_Variables   Types Exported Variables
- * @{
- */
-
-extern volatile SpiritStatus g_xStatus;
-
-/**
- * @}
- */
-
-/**
- * @defgroup Types_Exported_Macros              Types Exported Macros
- * @{
- */
-
-#ifdef  SPIRIT_USE_FULL_ASSERT
- /**
-   * @brief  The s_assert_param macro is used for function's parameters check.
-   * @param  expr If expr is false, it calls assert_failed function which reports
-   *         the name of the source file and the source line number of the call
-   *         that failed. If expr is true, it returns no value.
-   * @retval None
-   */
-  #define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed((uint8_t *)__FILE__, __LINE__))
-  void s_assert_failed(uint8_t* file, uint32_t line);
-#elif  SPIRIT_USE_VCOM_ASSERT
-  /**
-   * @brief  The s_assert_param macro is used for function's parameters check.
-   * @param  expr  If expr is false, it calls assert_failed function which reports
-   *         the name of the source file and the source line number of the call
-   *         that failed. If expr is true, it returns no value.
-   * @retval None
-   */
-  #define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed((uint8_t *)__FILE__, __LINE__,#expr))
-  void s_assert_failed(uint8_t* file, uint32_t line, char* expression);
-
-#elif SPIRIT_USE_FRAME_ASSERT
-   /**
-   * @brief  The s_assert_param macro is used for function's parameters check.
-   * @param  expr  If expr is false, it calls assert_failed function which reports
-   *         the name of the source file and the source line number of the call
-   *         that failed. If expr is true, it returns no value.
-   * @retval None
-   */
-#define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed(#expr))
-  void s_assert_failed(char* expression);
-#else
-#define s_assert_param(expr)        {}
-#endif
-
-/**
- * @brief  Returns the absolute value.
- */
-#define S_ABS(a) ((a)>0?(a):-(a))
-
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Types_Exported_Functions   Types Exported Functions
- * @{
- */
-
-void SpiritRefreshStatus(void);
-
-/**
- *@}
- */
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Aes.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Aes.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,319 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Aes.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT AES Engine.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Aes.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Aes
- * @{
- */
-
-
-/**
- * @defgroup Aes_Private_TypesDefinitions       AES Private Types Definitions
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Private_Defines                AES Private Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Private_Macros                 AES Private Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Private_Variables              AES Private Variables
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Private_FunctionPrototypes     AES Private Function Prototypes
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup Aes_Private_Functions              AES Private Functions
- * @{
- */
-
-
-/**
- * @brief  Enables or Disables the AES engine.
- * @param  xNewState new state for AES engine.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None
- */
-void SpiritAesMode(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Modifies the register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AES_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~AES_MASK;
-  }
-
-  /* Writes the ANA_FUNC_CONF0 register to enable or disable the AES engine */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Writes the data to encrypt or decrypt, or the encryption key for the 
- *         derive decryption key operation into the AES_DATA_IN registers.
- * @param  pcBufferDataIn pointer to the user data buffer. The first byte of the array
- * 	   shall be the MSB byte and it will be put in the AES_DATA_IN[0] register, while
- * 	   the last one shall be the LSB and it will be put in the AES_DATA_IN[cDataLength-1]
- * 	   register. If data to write are less than 16 bytes the remaining AES_DATA_IN registers
- * 	   will be filled with bytes equal to 0. This parameter is an uint8_t*.
- * @param  cDataLength length of data in bytes.
- *         This parameter is an uint8_t.
- * @retval None
- */
-void SpiritAesWriteDataIn(uint8_t* pcBufferDataIn, uint8_t cDataLength)
-{
-  uint8_t i, dataInArray[16];
-
-  /* Verifies that there are no more than 16 bytes */
-  (cDataLength>16) ? (cDataLength=16) : cDataLength;
-
-  /* Fill the dataInArray with the data buffer, using padding */
-  for(i=0;i<16;i++)
-  {
-    (i<(16 - cDataLength)) ? (dataInArray[i]=0):(dataInArray[i]=pcBufferDataIn[15-i]);
-
-  }
-
-  /* Writes the AES_DATA_IN registers */
-  g_xStatus = SpiritSpiWriteRegisters(AES_DATA_IN_15_BASE, 16, dataInArray);
-
-}
-
-
-/**
- * @brief  Returns the encrypted or decrypted data or the decription key from the AES_DATA_OUT register.
- * @param  pcBufferDataOut pointer to the user data buffer. The AES_DATA_OUT[0]
- *         register value will be put as first element of the buffer (MSB), while the
- *         AES_DAT_OUT[cDataLength-1] register value will be put as last element of the buffer (LSB).
- * 	   This parameter is a uint8_t*.
- * @param  cDataLength length of data to read in bytes.
- *         This parameter is a uint8_t.
- * @retval None
- */
-void SpiritAesReadDataOut(uint8_t* pcBufferDataOut, uint8_t cDataLength)
-{
-  uint8_t address, dataOutArray[16];
-
-  /* Verifies that there are no more than 16 bytes */
-  (cDataLength>16) ? (cDataLength=16) : cDataLength;
-
-  /* Evaluates the address of AES_DATA_OUT from which start to read */
-  address = AES_DATA_OUT_15_BASE+16-cDataLength;
-
-  /* Reads the exact number of AES_DATA_OUT registers */
-  g_xStatus = (SpiritSpiReadRegisters(address, cDataLength, dataOutArray));
-
-  /* Copy in the user buffer the read values changing the order */
-  for(int i = (cDataLength-1); i>=0; i--)
-  {
-    *pcBufferDataOut = dataOutArray[i];
-    pcBufferDataOut++;
-  }
-
-}
-
-
-/**
- * @brief  Writes the encryption key into the AES_KEY_IN register.
- * @param  pcKey pointer to the buffer of 4 words containing the AES key.
- *         The first byte of the buffer shall be the most significant byte AES_KEY_0 of the AES key.
- *         The last byte of the buffer shall be the less significant byte AES_KEY_15 of the AES key.
- * 	   This parameter is an uint8_t*.
- * @retval None
- */
-void SpiritAesWriteKey(uint8_t* pcKey)
-{
-  uint8_t pcTempKey[16]; 
-  for (uint8_t i = 0; i < 16; i++)
-  {
-    pcTempKey[15-i] = pcKey[i];
-  }
-  
-  /* Writes the AES_DATA_IN registers */
-  g_xStatus = SpiritSpiWriteRegisters(AES_KEY_IN_15_BASE, 16, pcTempKey);
-
-}
-
-/**
- * @brief  Returns the encryption/decryption key from the AES_KEY_IN register.
- * @param  pcKey  pointer to the buffer of 4 words (16 bytes) containing the AES key.
- *         The first byte of the buffer shall be the most significant byte AES_KEY_0 of the AES key.
- *         The last byte of the buffer shall be the less significant byte AES_KEY_15 of the AES key.
- *         This parameter is an uint8_t*.
- * @retval None
- */
-void SpiritAesReadKey(uint8_t* pcKey)
-{
-  uint8_t pcTempKey[16];
-
-  /* Reads the AES_DATA_IN registers */
-  g_xStatus = SpiritSpiReadRegisters(AES_KEY_IN_15_BASE, 16, pcTempKey);
-
-
-  for (uint8_t i = 0; i < 16; i++)
-    pcKey[i] = pcTempKey[15-i];
-
-}
-
-
-
-/**
- * @brief  Derives the decryption key from a given encryption key.
- * @param  None.
- * @retval None.
- */
-void SpiritAesDeriveDecKeyFromEnc(void)
-{
-  /* Sends the COMMAND_AES_KEY command */
-  g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_KEY);
-
-}
-
-
-/**
- * @brief  Executes the encryption operation.
- * @param  None.
- * @retval None.
- */
-void SpiritAesExecuteEncryption(void)
-{
-  /* Sends the COMMAND_AES_ENC command */
-  g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_ENC);
-
-}
-
-
-/**
- * @brief  Executes the decryption operation.
- * @param  None.
- * @retval None.
- */
-void SpiritAesExecuteDecryption(void)
-{
-  /* Sends the COMMAND_AES_DEC command */
-  g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_DEC);
-
-}
-
-
-/**
- * @brief  Executes the key derivation and the decryption operation.
- * @param  None.
- * @retval None.
- */
-void SpiritAesDeriveDecKeyExecuteDec(void)
-{
-  /* Sends the COMMAND_AES_KEY_DEC command */
-  g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_KEY_DEC);
-
-}
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Calibration.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Calibration.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,491 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Calibration.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Configuration and management of SPIRIT VCO-RCO calibration.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Calibration.h"
-#include "MCU_Interface.h"
-
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Calibration
- * @{
- */
-
-
-/**
- * @defgroup Calibration_Private_TypesDefinitions       Calibration Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Calibration_Private_Defines                Calibration Private Defines
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Calibration_Private_Macros                 Calibration Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Calibration_Private_Variables              Calibration Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup Calibration_Private_FunctionPrototypes     Calibration Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Calibration_Private_Functions              Calibration Private Functions
- * @{
- */
-
-/**
- * @brief  Enables or Disables the RCO calibration.
- * @param  xNewState new state for RCO calibration.
-           This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritCalibrationRco(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  /* Build new value for the register */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL2_RCO_CALIBRATION_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL2_RCO_CALIBRATION_MASK;
-  }
-
-  /* Writes register to enable or disable the RCO calibration */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables or Disables the VCO calibration.
- * @param  xNewState new state for VCO calibration.
-           This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritCalibrationVco(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-   /* Build new value for the register */
-  if(xNewState==S_ENABLE)
-    tempRegValue |= PROTOCOL2_VCO_CALIBRATION_MASK;
-  else
-    tempRegValue &= ~PROTOCOL2_VCO_CALIBRATION_MASK;
-
-  /* Writes register to enable or disable the VCO calibration */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the RCO calibration words.
- * @param  cRwt RWT word for RCO calibration.
- *         This parameter can be a value of uint8_t.
- * @param  cRfb RFB word for RCO calibration.
- *         This parameter can be a value of uint8_t.
- * @retval None.
- */
-void SpiritCalibrationSetRcoCalWords(uint8_t cRwt, uint8_t cRfb)
-{
-  uint8_t tempRegValue[2];
-
-  /* Build the value of RWT and the MSbits of the RFB word */
-  tempRegValue[0] = (cRwt << 4) | (cRfb >> 1);
-
-  /* Reads the register value to update the LSbit of RFB */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue[1]);
-
-  /* Build new value for the register */
-  tempRegValue[1] = (tempRegValue[1] & 0x7F) | (cRfb<<7);
-
-  /* Writes the new value for RCO calibration words */
-  g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN2_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the RCO calibration words.
- * @param  pcRwt pointer to the variable in which the RWT word has to be stored.
- *         This parameter is a variable of uint8_t*.
- * @param  pcRfb pointer to the variable in which the RFB word has to be stored.
- *         This parameter is a variable of uint8_t*.
- * @retval None.
- */
-void SpiritCalibrationGetRcoCalWords(uint8_t* pcRwt, uint8_t* pcRfb)
-{
-  uint8_t tempRegValue[2];
-
-  /* Reads the registers values */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_OUT1_BASE, 2, tempRegValue);
-
-  /* Build the RWT value */
-  (*pcRwt) = tempRegValue[0] >> 4;
-  /* Build the RFB value */
-  (*pcRfb) = (tempRegValue[0] & 0x0F)<<1 | (tempRegValue[1]>>7);
-
-}
-
-
-/**
- * @brief  Returns the VCO calibration data from internal VCO calibrator.
- * @param  None.
- * @retval uint8_t VCO calibration data word.
- */
-uint8_t SpiritCalibrationGetVcoCalData(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_OUT0_BASE, 1, &tempRegValue);
-
-  /* Build and returns the VCO calibration data value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the VCO calibration data to be used in TX mode.
- * @param  cVcoCalData calibration data word to be set.
- *         This parameter is a variable of uint8_t.
- * @retval None.
- */
-void SpiritCalibrationSetVcoCalDataTx(uint8_t cVcoCalData)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
-
-  /* Build the value to be written */
-  tempRegValue &= 0x80;
-  tempRegValue |= cVcoCalData;
-
-  /* Writes the new value of calibration data in TX */
-  g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the actual VCO calibration data used in TX mode.
- * @param  None.
- * @retval uint8_t Calibration data word used in TX mode.
- */
-uint8_t SpiritCalibrationGetVcoCalDataTx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register containing the calibration data word used in TX mode */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
-
-  /* Mask the VCO_CALIBR_TX field and returns the value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the VCO calibration data to be used in RX mode.
- * @param  cVcoCalData calibration data word to be set.
- *         This parameter is a variable of uint8_t.
- * @retval None.
- */
-void SpiritCalibrationSetVcoCalDataRx(uint8_t cVcoCalData)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN0_BASE, 1, &tempRegValue);
-
-  /* Build the value to be written */
-  tempRegValue &= 0x80;
-  tempRegValue |= cVcoCalData;
-
-  /* Writes the new value of calibration data in RX */
-  g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the actual VCO calibration data used in RX mode.
- * @param  None.
- * @retval uint8_t Calibration data word used in RX mode.
- */
-uint8_t SpiritCalibrationGetVcoCalDataRx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register containing the calibration data word used in TX mode */
-  g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN0_BASE, 1, &tempRegValue);
-
-  /* Mask the VCO_CALIBR_RX field and returns the value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the VCO calibration window.
- * @param  xRefWord value of REFWORD corresponding to the Ref_period according to the formula: CALIBRATION_WIN = 11*Ref_period/fxo.
-           This parameter can be a value of @ref VcoWin.
- * @retval None.
- */
-void SpiritCalibrationSetVcoWindow(VcoWin xRefWord)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_VCO_WIN(xRefWord));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-
-  /* Build the values to be written */
-  tempRegValue &= 0xFC;
-  tempRegValue |= xRefWord;
-
-  /* Writes the new value of VCO calibration window */
-  g_xStatus = SpiritSpiWriteRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the VCO calibration window.
- * @param  None.
- * @retval VcoWin Value of REFWORD corresponding to the Ref_period according to the formula: CALIBRATION_WIN = 11*Ref_period/fxo.
- *         This parameter can be a value of @ref VcoWin.
- */
-VcoWin SpiritCalibrationGetVcoWindow(void)
-{
-  uint8_t tempRegValue1, tempRegValue2;
-  VcoWin refWord;
-
-  /* Reads the register containing the REFWORD value */
-  g_xStatus = SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue1);
-
-  /* Reads the Xtal configuration */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue2);
-
-  /* Mask the REFWORD field */
-  tempRegValue1 &= 0x03;
-
-  /* Mask the 24_26_MHz_SELECT field */
-  tempRegValue2 = ((tempRegValue2 & 0x40)>>6);
-
-  /* In case of 26 MHz crystal */
-  if(tempRegValue2)
-  {
-    switch(tempRegValue1)
-    {
-    case 0:
-      refWord = CALIB_TIME_6_77_US_26MHZ;
-      break;
-    case 1:
-      refWord = CALIB_TIME_13_54_US_26MHZ;
-      break;
-    case 2:
-      refWord = CALIB_TIME_27_08_US_26MHZ;
-      break;
-    case 3:
-      refWord = CALIB_TIME_54_15_US_26MHZ;
-      break;
-    }
-  }
-
-  /* In case of 24 MHz crystal */
-  else
-  {
-    switch(tempRegValue1)
-    {
-    case 0:
-      refWord = CALIB_TIME_7_33_US_24MHZ;
-      break;
-    case 1:
-      refWord = CALIB_TIME_14_67_US_24MHZ;
-      break;
-    case 2:
-      refWord = CALIB_TIME_29_33_US_24MHZ;
-      break;
-    case 3:
-      refWord = CALIB_TIME_58_67_US_24MHZ;
-      break;
-    }
-  }
-
-  return refWord;
-
-}
-
-/**
- * @brief  Selects a VCO.
- * @param  xVco can be VCO_H or VCO_L according to which VCO select.
- *         This parameter can be a value of @ref VcoSel.
- * @retval None.
- */
-void SpiritCalibrationSelectVco(VcoSel xVco)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_VCO_SEL(xVco));
-  
-  SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-  
-  tempRegValue &= 0xF9;
-  
-  if(xVco == VCO_H)
-  {
-    tempRegValue |= 0x02;
-    
-  }
-  else
-  {
-    tempRegValue |= 0x04;
-  }
-  SpiritSpiWriteRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);  
-  
-}
-
-
-
-/**
- * @brief  Returns the VCO selected.
- * @param  void.
- * @retval VCO_H or VCO_L according to which VCO selected.
- *         This parameter can be a value of @ref VcoSel.
- */
-VcoSel SpiritCalibrationGetVcoSelecttion(void)
-{
-  uint8_t tempRegValue;
-  
-  SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-  
-  tempRegValue = (tempRegValue>>1)&0x3;
-  
-  if(tempRegValue == 0x01)
-  {
-    return VCO_H;
-    
-  }
-  else
-  {
-    return VCO_L;
-  }
-  
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Commands.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Commands.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/**
-  ******************************************************************************
- * @file    SPIRIT_Commands.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
- * @brief   Management of SPIRIT Commands.
- *
-  * @attention
- *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Commands.h"
-#include "MCU_Interface.h"
-
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Commands
- * @{
- */
-
-
-/**
- * @defgroup Commands_Private_TypesDefinitions  Commands Private TypesDefinitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Commands_Private_Defines           Commands Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-/**
- * @defgroup Commands_Private_Macros            Commands Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Commands_Private_Variables         Commands Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup Commands_Private_FunctionPrototypes        Commands Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Commands_Private_Functions                 Commands Private Functions
- * @{
- */
-
-/**
- * @brief  Sends a specific command to SPIRIT.
- * @param  xCommandCode code of the command to send.
-           This parameter can be any value of @ref SpiritCmd.
- * @retval None.
- */
-void SpiritCmdStrobeCommand(SpiritCmd xCommandCode)
-{
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_CMD(xCommandCode));
-
-  g_xStatus = SpiritSpiCommandStrobes((uint8_t) xCommandCode);
-}
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Csma.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Csma.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,600 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Csma.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT CSMA.
-  * @details
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Csma.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Csma
- * @{
- */
-
-
-/**
- * @defgroup Csma_Private_TypesDefinitions      CSMA Private TypesDefinitions
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Private_Defines               CSMA Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Private_Macros               CSMA Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Private_Variables             CSMA Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup Csma_Private_FunctionPrototypes    CSMA Private FunctionPrototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Csma_Private_Functions             CSMA Private Functions
- * @{
- */
-
-
-/**
- * @brief  Initializes the SPIRIT CSMA according to the specified parameters in the CsmaInit.
- * @param  pxCsmaInit Csma init structure.
- *         This parameter is a pointer to @ref CsmaInit.
- * @retval None.
- */
-void SpiritCsmaInit(CsmaInit* pxCsmaInit)
-{
-  uint8_t tempRegValue[5];
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxCsmaInit->xCsmaPersistentMode));
-  s_assert_param(IS_CCA_PERIOD(pxCsmaInit->xMultiplierTbit));
-  s_assert_param(IS_CSMA_LENGTH(pxCsmaInit->xCcaLength));
-  s_assert_param(IS_BU_COUNTER_SEED(pxCsmaInit->nBuCounterSeed));
-  s_assert_param(IS_BU_PRESCALER(pxCsmaInit->cBuPrescaler));
-  s_assert_param(IS_CMAX_NB(pxCsmaInit->cMaxNb));
-
-  /* CSMA BU counter seed (MSB) config */
-  tempRegValue[0] = (uint8_t)(pxCsmaInit->nBuCounterSeed >> 8);
-
-  /* CSMA BU counter seed (LSB) config */
-  tempRegValue[1] = (uint8_t) pxCsmaInit->nBuCounterSeed;
-
-  /* CSMA BU prescaler config and CCA period config */
-  tempRegValue[2] = (pxCsmaInit->cBuPrescaler << 2) | pxCsmaInit->xMultiplierTbit;
-
-  /* CSMA CCA length config and max number of back-off */
-  tempRegValue[3] = (pxCsmaInit->xCcaLength | pxCsmaInit->cMaxNb);
-
-  /* Reads the PROTOCOL1_BASE register value, to write the SEED_RELOAD and CSMA_PERS_ON fields */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
-
-  /* Writes the new value for persistent mode */
-  if(pxCsmaInit->xCsmaPersistentMode==S_ENABLE)
-  {
-    tempRegValue[4] |= PROTOCOL1_CSMA_PERS_ON_MASK;
-  }
-  else
-  {
-    tempRegValue[4] &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
-  }
-
-  /* Writes PROTOCOL1_BASE register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
-
-  /* Writes CSMA_CONFIGx_BASE registers */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
-
-}
-
-
- /**
-  * @brief  Returns the fitted structure CsmaInit starting from the registers values.
-  * @param  pxCsmaInit Csma structure to be fitted.
-  *         This parameter is a pointer to @ref CsmaInit.
-  * @retval None.
-  */
-void SpiritCsmaGetInfo(CsmaInit* pxCsmaInit)
-{
-   uint8_t tempRegValue[5];
-
-   /* Reads PROTOCOL1_BASE register */
-   g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
-
-   /* Reads CSMA_CONFIGx_BASE registers */
-   g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
-
-   /* Reads the bu counter seed */
-   pxCsmaInit->nBuCounterSeed = (uint16_t)tempRegValue[1] | ((uint16_t)(tempRegValue[0] << 8));
-
-   /* Reads the bu prescaler */
-   pxCsmaInit->cBuPrescaler = tempRegValue[2]>>2;
-
-   /* Reads the Cca period */
-   pxCsmaInit->xMultiplierTbit = (CcaPeriod)(tempRegValue[2] & 0x03);
-
-   /* Reads the Cca length */
-   pxCsmaInit->xCcaLength = (CsmaLength)(tempRegValue[3]&0xF0);
-
-   /* Reads the max number of back off */
-   pxCsmaInit->cMaxNb = tempRegValue[3] & 0x07;
-
-   /* Reads the persistent mode enable bit */
-   pxCsmaInit->xCsmaPersistentMode = (SpiritFunctionalState)((tempRegValue[4]>>1) & 0x01);
-
-}
-
-
-/**
- * @brief  Enables or Disables the CSMA.
- * @param  xNewState the state of the CSMA mode.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritCsma(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Sets or resets the CSMA enable bit */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL1_CSMA_ON_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL1_CSMA_ON_MASK;
-  }
-
-  /* Writes the new value on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-/**
- * @brief  Gets the CSMA mode. Says if it is enabled or disabled.
- * @param  None.
- * @retval SpiritFunctionalState: CSMA mode.
- */
-SpiritFunctionalState SpiritCsmaGetCsma(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Return if set or reset */
-  if(tempRegValue & PROTOCOL1_CSMA_ON_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-/**
- * @brief  Enables or Disables the persistent CSMA mode.
- * @param  xNewState the state of the persistent CSMA mode.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritCsmaPersistentMode(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Enables/disables the CSMA persistent mode */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL1_CSMA_PERS_ON_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
-  }
-
-  /* Writes the new vaue on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Gets the persistent CSMA mode.
- * @param  None.
- * @retval SpiritFunctionalState: CSMA persistent mode.
- */
-SpiritFunctionalState SpiritCsmaGetPersistentMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Return if set or reset */
-  if(tempRegValue & PROTOCOL1_CSMA_PERS_ON_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-
-/**
- * @brief  Enables or Disables the seed reload mode (if enabled it reloads the back-off generator seed using the value written in the BU_COUNTER_SEED register).
- * @param  xNewState the state of the seed reload mode.
- *	   This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritCsmaSeedReloadMode(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Enables/disables the seed reload mode */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL1_SEED_RELOAD_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL1_SEED_RELOAD_MASK;
-  }
-
-  /* Writes the new value on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Gets the seed reload mode.
- * @param  None.
- * @retval SpiritFunctionalState: CSMA seed reload mode.
- */
-SpiritFunctionalState SpiritCsmaGetSeedReloadMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Return if set or reset */
-  if(tempRegValue & PROTOCOL1_SEED_RELOAD_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-}
-
-
-/**
- * @brief  Sets the BU counter seed (BU_COUNTER_SEED register). The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
- * @param  nBuCounterSeed seed of the random number generator used to apply the BBE algorithm.
- *	   This parameter is an uint16_t.
- * @retval None.
- */
-void SpiritCsmaSetBuCounterSeed(uint16_t nBuCounterSeed)
-{
-  uint8_t tempRegValue[2];
-
-  /* Check parameters */
-  s_assert_param(IS_BU_COUNTER_SEED(nBuCounterSeed));
-
-  /* Build value (MSB)*/
-  tempRegValue[0]=(uint8_t)(nBuCounterSeed>>8);
-  /* Build value (LSB) */
-  tempRegValue[1]=(uint8_t)nBuCounterSeed;
-
-  /* Writes the CSMA_CONFIG3 registers */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
-
-}
-
-/**
- * @brief  Returns the BU counter seed (BU_COUNTER_SEED register).
- * @param  None.
- * @retval uint16_t Seed of the random number generator used to apply the BBE algorithm.
- */
-uint16_t SpiritCsmaGetBuCounterSeed(void)
-{
-  uint8_t tempRegValue[2];
-
-  /* Reads the CSMA_CONFIGx registers value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
-
-  /* Build the counter seed and return it */
-  return ((uint16_t)tempRegValue[1] + (((uint16_t)tempRegValue[0])<<8));
-
-}
-
-
-/**
- * @brief  Sets the BU prescaler. The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
- * @param  cBuPrescaler used to program the back-off unit BU.
- * 	   This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritCsmaSetBuPrescaler(uint8_t cBuPrescaler)
-{
-  uint8_t tempRegValue;
-
-  /* Check parameters */
-  s_assert_param(IS_BU_PRESCALER(cBuPrescaler));
-
-  /* Reads the CSMA_CONFIG1 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-  /* Build the new value for the BU prescaler */
-  tempRegValue &= 0x03;
-  tempRegValue |= (cBuPrescaler<<2);
-
-  /* Writes the new value on the CSMA_CONFIG1_BASE register */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the BU prescaler.
- * @param  None.
- * @retval uint8_t Value back-off unit (BU).
- */
-uint8_t SpiritCsmaGetBuPrescaler(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the CSMA_CONFIG1 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-  /* Build and return the BU prescaler value */
-  return (tempRegValue >> 2);
-
-}
-
-
-/**
- * @brief  Sets the CCA period.
- * @param  xMultiplierTbit value of CCA period to store.
- * 	   This parameter can be a value of @ref CcaPeriod.
- * @retval None.
- */
-void SpiritCsmaSetCcaPeriod(CcaPeriod xMultiplierTbit)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_CCA_PERIOD(xMultiplierTbit));
-
-  /* Reads the CSMA_CONFIG1 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-  /* Build the new value setting the the CCA period */
-  tempRegValue &= 0xFC;
-  tempRegValue |= xMultiplierTbit;
-
-  /* Writes the new value on the CSMA_CONFIG1 register */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the CCA period.
- * @param  None.
- * @retval CcaPeriod CCA period.
- */
-CcaPeriod SpiritCsmaGetCcaPeriod(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the CSMA_CONFIG1 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
-
-  /* Build and return the CCA period value */
-  return (CcaPeriod)(tempRegValue & 0x03);
-
-}
-
-
-/**
- * @brief  Sets the CCA length.
- * @param  xCcaLength the CCA length (a value between 1 and 15 that multiplies the CCA period).
- *	   This parameter can be any value of @ref CsmaLength.
- * @retval None.
- */
-void SpiritCsmaSetCcaLength(CsmaLength xCcaLength)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_CSMA_LENGTH(xCcaLength));
-
-  /* Reads the CSMA_CONFIG0 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-
-  /* Build the value of CCA length to be set */
-  tempRegValue &= 0x0F;
-  tempRegValue |= xCcaLength;
-
-  /* Writes the new value on the CSMA_CONFIG0 register */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the CCA length.
- * @param  None.
- * @retval uint8_t CCA length.
- */
-uint8_t SpiritCsmaGetCcaLength(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the CSMA_CONFIG0 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-
-  /* Build and return the CCA length */
-  return tempRegValue >> 4;
-
-}
-
-
-/**
- * @brief  Sets the max number of back-off. If reached Spirit stops the transmission.
- * @param  cMaxNb the max number of back-off.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritCsmaSetMaxNumberBackoff(uint8_t cMaxNb)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_CMAX_NB(cMaxNb));
-
-  /* Reads the CSMA_CONFIG0 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-
-  /* Build the value of max back off to be set */
-  tempRegValue &= 0xF8;
-  tempRegValue |= cMaxNb;
-
-  /* Writes the new value on the CSMA_CONFIG0 register */
-  g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-}
-
-/**
- * @brief  Returns the max number of back-off.
- * @param  None.
- * @retval uint8_t Max number of back-off.
- */
-uint8_t SpiritCsmaGetMaxNumberBackoff(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the CSMA_CONFIG0 register value */
-  g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
-
-  /* Build and return the max number of back-off */
-  return (tempRegValue & 0x07);
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_DirectRF.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_DirectRF.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_DirectRF.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT direct transmission / receive modes.
-  * @details
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_DirectRF.h"
-#include "MCU_Interface.h"
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_DirectRf
- * @{
- */
-
-
-/**
- * @defgroup DirectRf_Private_TypesDefinitions          Direct RF Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Private_Defines                   Direct RF Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Private_Macros                    Direct RF Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Private_Variables                 Direct RF Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup DirectRf_Private_FunctionPrototypes        Direct RF Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup DirectRf_Private_Functions                 Direct RF Private Functions
- * @{
- */
-
-/**
- * @brief  Sets the DirectRF RX mode of SPIRIT.
- * @param  xDirectRx code of the desired mode.
- *         This parameter can be any value of @ref DirectRx.
- * @retval None.
- */
-void SpiritDirectRfSetRxMode(DirectRx xDirectRx)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_DIRECT_RX(xDirectRx));
-
-  /* Reads the register value */
-  SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Build the value to be stored */
-  tempRegValue &= ~PCKTCTRL3_RX_MODE_MASK;
-  tempRegValue |= (uint8_t)xDirectRx;
-
-  /* Writes value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the DirectRF RX mode of SPIRIT.
- * @param  None.
- * @retval DirectRx Direct Rx mode.
- */
-DirectRx SpiritDirectRfGetRxMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value and mask the RX_Mode field */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return value */
-  return (DirectRx)(tempRegValue & 0x30);
-
-}
-
-
-/**
- * @brief  Sets the TX mode of SPIRIT.
- * @param  xDirectTx code of the desired source.
- *         This parameter can be any value of @ref DirectTx.
- * @retval None.
- */
-void SpiritDirectRfSetTxMode(DirectTx xDirectTx)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_DIRECT_TX(xDirectTx));
-
-  /* Reads the register value */
-  SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build the value to be stored */
-  tempRegValue &= ~PCKTCTRL1_TX_SOURCE_MASK;
-  tempRegValue |= (uint8_t)xDirectTx;
-
-  /* Writes value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the DirectRF TX mode of SPIRIT.
- * @param  None.
- * @retval DirectTx Direct Tx mode.
- */
-DirectTx SpiritDirectRfGetTxMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value and mask the RX_Mode field */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Returns value */
-  return (DirectTx)(tempRegValue & 0x0C);
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_General.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_General.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,449 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_General.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT General functionalities.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_General.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_General
- * @{
- */
-
-
-/**
- * @defgroup General_Private_TypesDefinitions   General Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup General_Private_Defines            General Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup General_Private_Macros             General Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup General_Private_Variables          General Private Variables
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup General_Private_FunctionPrototypes         General Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup General_Private_Functions                          General Private Functions
- * @{
- */
-
-/**
- * @brief  Enables or Disables the output of battery level detector.
- * @param  xNewState new state for battery level detector.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None
- */
-void SpiritGeneralBatteryLevel(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the ANA_FUNC_CONF0_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Build the value to be stored */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= BATTERY_LEVEL_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~BATTERY_LEVEL_MASK;
-  }
-
-  /* Writes the new value */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the battery level.
- * @param  xBatteryLevel new state for battery level.
- *         This parameter can be a value of @ref BatteryLevel.
- * @retval None.
- */
-void SpiritGeneralSetBatteryLevel(BatteryLevel xBatteryLevel)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_BLD_LVL(xBatteryLevel));
-
-  /* Reads the ANA_FUNC_CONF1_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-  /* Build the value to be stored */
-  tempRegValue &= ~ANA_FUNC_CONF1_SET_BLD_LVL_MASK;
-  switch(xBatteryLevel)
-  {
-    case BLD_LVL_2_7_V:
-      tempRegValue |= BLD_LVL_2_7;
-      break;
-    case BLD_LVL_2_5_V:
-      tempRegValue |= BLD_LVL_2_5;
-      break;
-    case BLD_LVL_2_3_V:
-      tempRegValue |= BLD_LVL_2_3;
-      break;
-    case BLD_LVL_2_1_V:
-      tempRegValue |= BLD_LVL_2_1;
-      break;
-  }
-
-  /* Writes the new value */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the settled battery level.
- * @param  None.
- * @retval BatteryLevel Settled battery level. This parameter can be a value of @ref BatteryLevel.
- */
-BatteryLevel SpiritGeneralGetBatteryLevel(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the ANA_FUNC_CONF1_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-  /* Mask the battery level field and returns the settled battery level */
-  return ((BatteryLevel)(tempRegValue & ANA_FUNC_CONF1_SET_BLD_LVL_MASK));
-
-}
-
-
-/**
- * @brief  Enables or Disables the output of brown out detector.
- * @param  xNewState new state for brown out detector.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritGeneralBrownOut(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the ANA_FUNC_CONF0_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Build the value to be stored */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= BROWN_OUT_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~BROWN_OUT_MASK;
-  }
-
-  /* Writes value on register */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets High Power Mode.
- * @param  xNewState new state for High Power Mode.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritGeneralHighPwr(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the ANA_FUNC_CONF0_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Build the value to write */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= HIGH_POWER_MODE_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~HIGH_POWER_MODE_MASK;
-  }
-
-  /* Writes the new value on register */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets External Reference.
- * @param  xExtMode new state for the external reference.
- *         This parameter can be: MODE_EXT_XO or MODE_EXT_XIN.
- * @retval None.
- */
-void SpiritGeneralSetExtRef(ModeExtRef xExtMode)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_MODE_EXT(xExtMode));
-
-  /* Reads the ANA_FUNC_CONF0_BASE register value */
-  SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Build the value to write */
-  if(xExtMode == MODE_EXT_XO)
-  {
-    tempRegValue &= ~EXT_REF_MASK;
-  }
-  else
-  {
-    tempRegValue |= EXT_REF_MASK;
-  }
-
-  /* Writes value on register */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns External Reference.
- * @param  None.
- * @retval ModeExtRef Settled external reference.
- *         This parameter can be: MODE_EXT_XO or MODE_EXT_XIN.
- */
-ModeExtRef SpiritGeneralGetExtRef(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the ANA_FUNC_CONF0_BASE register value and return the result */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Mask the EXT_REF field field and returns the settled reference signal */
-  return ((ModeExtRef)((tempRegValue & 0x10)>>4));
-
-}
-
-
-/**
- * @brief  Sets XO gm at startup.
- * @param  xGm transconductance value of XO at startup.
- *         This parameter can be a value of @ref GmConf.
- * @retval None.
- */
-void SpiritGeneralSetXoGm(GmConf xGm)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_GM_CONF(xGm));
-
-  /* Reads the ANA_FUNC_CONF1_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-  /* Build the value to write */
-  tempRegValue &= ~ANA_FUNC_CONF1_GMCONF_MASK;
-  switch(xGm)
-  {
-    case GM_SU_13_2:
-      tempRegValue |= GM_13_2;
-      break;
-    case GM_SU_18_2:
-      tempRegValue |= GM_18_2;
-      break;
-    case GM_SU_21_5:
-      tempRegValue |= GM_21_5;
-      break;
-    case GM_SU_25_6:
-      tempRegValue |= GM_25_6;
-      break;
-    case GM_SU_28_8:
-      tempRegValue |= GM_28_8;
-      break;
-    case GM_SU_33_9:
-      tempRegValue |= GM_33_9;
-      break;
-    case GM_SU_38_5:
-      tempRegValue |= GM_38_5;
-      break;
-    case GM_SU_43_0:
-      tempRegValue |= GM_43_0;
-      break;
-  }
-
-  /* Writes new value on register */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the configured XO gm at startup.
- * @param  None.
- * @retval GmConf Settled XO gm. This parameter can be a value of @ref GmConf.
- */
-GmConf SpiritGeneralGetXoGm(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the ANA_FUNC_CONF1_BASE register value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue);
-
-  /* Mask the GM_CONF field field and returns the settled transconductance of the XO at startup */
-  return ((GmConf)((tempRegValue & 0x1C)>>2));
-
-}
-
-
-/**
- * @brief  Returns the settled packet format.
- * @param  None.
- * @retval PacketType Settled packet type. This parameter can be a value of @ref PacketType.
- */
-PacketType SpiritGeneralGetPktType(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* cast and return value */
-  return (PacketType)(tempRegValue>>6);
-
-}
-
-
-
-/**
- * @brief  Returns device part number.
- * @param  None.
- * @retval uint16_t Device part number.
- */
-uint16_t SpiritGeneralGetDevicePartNumber(void)
-{
-  uint8_t tempRegValue[2];
-
-  /* Reads the register value containing the device part number */
-  g_xStatus = SpiritSpiReadRegisters(DEVICE_INFO1_PARTNUM, 2, tempRegValue);
-
-  return ((((uint16_t)tempRegValue[0])<<8) | ((uint16_t)tempRegValue[1]));
-
-}
-
-/**
- * @brief  Returns SPIRIT RF board version.
- * @param  None.
- * @retval SPIRIT RF board version: 0x30 is the only admitted value
- */
-uint8_t SpiritGeneralGetSpiritVersion(void)
-{
-  uint8_t ver; 
-  SpiritSpiReadRegisters(DEVICE_INFO0_VERSION, 1, &ver);
-  return ver;
-}
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Gpio.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Gpio.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,458 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Gpio.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   This file provides all the low level API to manage SPIRIT GPIO.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Gpio.h"
-#include "MCU_Interface.h"
-
-
-/** @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/** @addtogroup SPIRIT_Gpio
- * @{
- */
-
-
-/** @defgroup Gpio_Private_TypesDefinitions     GPIO Private Types Definitions
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-/** @defgroup Gpio_Private_Defines              GPIO Private Defines
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Private_Macros               GPIO Private Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Private_Variables            GPIO Private Variables
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Private_FunctionPrototypes   GPIO Private Function Prototypes
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Gpio_Private_Functions            GPIO Private Functions
- * @{
- */
-
-/**
- * @brief  Initializes the SPIRIT GPIOx according to the specified
- *         parameters in the pxGpioInitStruct.
- * @param  pxGpioInitStruct pointer to a SGpioInit structure that
- *         contains the configuration information for the specified SPIRIT GPIO.
- * @retval None.
- */
-void SpiritGpioInit(SGpioInit* pxGpioInitStruct)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_GPIO(pxGpioInitStruct->xSpiritGpioPin));
-  s_assert_param(IS_SPIRIT_GPIO_MODE(pxGpioInitStruct->xSpiritGpioMode));
-  s_assert_param(IS_SPIRIT_GPIO_IO(pxGpioInitStruct->xSpiritGpioIO));
-
-  tempRegValue = ((uint8_t)(pxGpioInitStruct->xSpiritGpioMode) | (uint8_t)(pxGpioInitStruct->xSpiritGpioIO));
-
-  g_xStatus = SpiritSpiWriteRegisters(pxGpioInitStruct->xSpiritGpioPin, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables or Disables the output of temperature sensor on SPIRIT GPIO_0.
- * @param  xNewState new state for temperature sensor.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritGpioTemperatureSensor(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  uint8_t gpio0tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the ANA_FUNC_CONF0 register and mask the result to enable or disable the
-     temperature sensor */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= TEMPERATURE_SENSOR_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~TEMPERATURE_SENSOR_MASK);
-    gpio0tempRegValue = 0x0A; /* Default value */
-  }
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-
-  /* Sets the SPIRIT GPIO_0 according to input request */
-  g_xStatus = SpiritSpiWriteRegisters(GPIO0_CONF_BASE, 1, &gpio0tempRegValue);
-
-}
-
-
-/**
- * @brief  Forces SPIRIT GPIO_x configured as digital output, to VDD or GND.
- * @param  xGpioX Specifies the GPIO to be configured.
- *   This parameter can be one of following parameters:
- *     @arg SPIRIT_GPIO_0: SPIRIT GPIO_0
- *     @arg SPIRIT_GPIO_1: SPIRIT GPIO_1
- *     @arg SPIRIT_GPIO_2: SPIRIT GPIO_2
- *     @arg SPIRIT_GPIO_3: SPIRIT GPIO_3
- * @param  xLevel Specifies the level.
- *   This parameter can be: HIGH or LOW.
- * @retval None.
- */
-void SpiritGpioSetLevel(SpiritGpioPin xGpioX, OutputLevel xLevel)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_GPIO(xGpioX));
-  s_assert_param(IS_SPIRIT_GPIO_LEVEL(xLevel));
-
-  /* Reads the SPIRIT_GPIOx register and mask the GPIO_SELECT field */
-  g_xStatus = SpiritSpiReadRegisters(xGpioX, 1, &tempRegValue);
-  tempRegValue &= 0x04;
-
-  /* Sets the value of the SPIRIT GPIO register according to the specified level */
-  if(xLevel == HIGH)
-  {
-    tempRegValue |= (uint8_t)SPIRIT_GPIO_DIG_OUT_VDD | (uint8_t)SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP;
-  }
-  else
-  {
-    tempRegValue |= (uint8_t)SPIRIT_GPIO_DIG_OUT_GND | (uint8_t)SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP;
-  }
-
-  /* Writes the SPIRIT GPIO register */
-  g_xStatus = SpiritSpiWriteRegisters(xGpioX, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns output value (VDD or GND) of SPIRIT GPIO_x, when it is configured as digital output.
- * @param  xGpioX Specifies the GPIO to be read.
- *         This parameter can be one of following parameters:
- *         @arg SPIRIT_GPIO_0: SPIRIT GPIO_0
- *         @arg SPIRIT_GPIO_1: SPIRIT GPIO_1
- *         @arg SPIRIT_GPIO_2: SPIRIT GPIO_2
- *         @arg SPIRIT_GPIO_3: SPIRIT GPIO_3
- * @retval OutputLevel Logical level of selected GPIO configured as digital output.
- *         This parameter can be: HIGH or LOW.
- */
-OutputLevel SpiritGpioGetLevel(SpiritGpioPin xGpioX)
-{
-  uint8_t tempRegValue = 0x00;
-  OutputLevel level;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_GPIO(xGpioX));
-
-  /* Reads the SPIRIT_GPIOx register */
-  g_xStatus = SpiritSpiReadRegisters(xGpioX, 1, &tempRegValue);
-
-  /* Mask the GPIO_SELECT field and returns the value according */
-  tempRegValue &= 0xF8;
-  if(tempRegValue == SPIRIT_GPIO_DIG_OUT_VDD)
-  {
-    level = HIGH;
-  }
-  else
-  {
-    level = LOW;
-  }
-
-  return level;
-
-}
-
-
-/**
- * @brief  Enables or Disables the MCU clock output.
- * @param  xNewState new state for the MCU clock output.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritGpioClockOutput(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the MCU_CK_CONF register and mask the result to enable or disable the clock output */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  if(xNewState)
-  {
-    tempRegValue |= MCU_CK_ENABLE;
-  }
-  else
-  {
-    tempRegValue &= (~MCU_CK_ENABLE);
-  }
-
-  /* Writes the MCU_CK_CONF register */
-  g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Initializes the SPIRIT Clock Output according to the specified
- *         parameters in the xClockOutputInitStruct.
- * @param  pxClockOutputInitStruct pointer to a ClockOutputInit structure that
- *         contains the configuration information for the SPIRIT Clock Output.
- * @retval None.
- * @note   The function SpiritGpioClockOutput() must be called in order to enable
- *         or disable the MCU clock dividers.
- */
-void SpiritGpioClockOutputInit(ClockOutputInit* pxClockOutputInitStruct)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_XO(pxClockOutputInitStruct->xClockOutputXOPrescaler));
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_RCO(pxClockOutputInitStruct->xClockOutputRCOPrescaler));
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(pxClockOutputInitStruct->xExtraClockCycles));
-
-  /* Calculates the register value to write according to the specified configuration */
-  tempRegValue = ((uint8_t)(pxClockOutputInitStruct->xClockOutputXOPrescaler) | (uint8_t)(pxClockOutputInitStruct->xClockOutputRCOPrescaler) | \
-           (uint8_t)(pxClockOutputInitStruct->xExtraClockCycles));
-
-  /* Writes the MCU_CLOCK register */
-  g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the XO ratio as clock output.
- * @param  xXOPrescaler the XO prescaler to be used as clock output.
- *         This parameter can be any value of @ref ClockOutputXOPrescaler .
- * @retval None
- */
-void SpiritGpioSetXOPrescaler(ClockOutputXOPrescaler xXOPrescaler)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_XO(xXOPrescaler));
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the XO_RATIO field and writes the new value */
-  tempRegValue &= 0x61;
-  tempRegValue |= ((uint8_t)xXOPrescaler);
-
-  /* Writes the new XO prescaler in the MCU_CLOCK register */
-  g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the settled XO prescaler as clock output.
- * @param  None.
- * @retval ClockOutputXOPrescaler Settled XO prescaler used for clock
- *         output. This parameter can be a value of @ref ClockOutputXOPrescaler .
- */
-ClockOutputXOPrescaler SpiritGpioGetXOPrescaler(void)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the XO_RATIO field and return the value */
-  return ((ClockOutputXOPrescaler)(tempRegValue & 0x1E));
-
-}
-
-
-/**
- * @brief  Sets the RCO ratio as clock output
- * @param  xRCOPrescaler the RCO prescaler to be used as clock output.
- *         This parameter can be any value of @ref ClockOutputRCOPrescaler .
- * @retval None.
- */
-void SpiritGpioSetRCOPrescaler(ClockOutputRCOPrescaler xRCOPrescaler)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_RCO(xRCOPrescaler));
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the RCO_RATIO field and writes the new value */
-  tempRegValue &= 0xFE;
-  tempRegValue |= ((uint8_t)xRCOPrescaler);
-
-  /* Writes the new RCO prescaler in the MCU_CLOCK register */
-  g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the settled RCO prescaler as clock output.
- * @param  None.
- * @retval ClockOutputRCOPrescaler Settled RCO prescaler used for clock
- *         output. This parameter can be a value of @ref ClockOutputRCOPrescaler.
- */
-ClockOutputRCOPrescaler SpiritGpioGetRCOPrescaler(void)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the RCO_RATIO field and returns the value */
-  return ((ClockOutputRCOPrescaler)(tempRegValue & 0x01));
-
-}
-
-
-/**
- * @brief  Sets the RCO ratio as clock output.
- * @param  xExtraCycles the number of extra clock cycles provided before switching
- *         to STANDBY state. This parameter can be any value of @ref ExtraClockCycles .
- * @retval None.
- */
-void SpiritGpioSetExtraClockCycles(ExtraClockCycles xExtraCycles)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(xExtraCycles));
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the CLOCK_TAIL field and writes the new value */
-  tempRegValue &= 0x9F;
-  tempRegValue |= ((uint8_t)xExtraCycles);
-
-  /* Writes the new number of extra clock cycles in the MCU_CLOCK register */
-  g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the settled RCO prescaler as clock output.
- * @param  None.
- * @retval ExtraClockCycles Settled number of extra clock cycles
- *         provided before switching to STANDBY state. This parameter can be
- *         any value of @ref ExtraClockCycles .
- */
-ExtraClockCycles SpiritGpioGetExtraClockCycles(void)
-{
-  uint8_t tempRegValue = 0x00;
-
-  /* Reads the MCU_CLK_CONFIG register */
-  g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
-
-  /* Mask the CLOCK_TAIL field and returns the value */
-  return ((ExtraClockCycles)(tempRegValue & 0x60));
-
-}
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Irq.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT IRQs.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Irq.h"
-#include "MCU_Interface.h"
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Irq
- * @{
- */
-
-
-/**
- * @defgroup Irq_Private_TypesDefinitions       IRQ Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Irq_Private_Defines                IRQ Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Irq_Private_Macros                 IRQ Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Irq_Private_Variables              IRQ Private Variables
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Irq_Private_FunctionPrototypes     IRQ Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Irq_Private_Functions              IRQ Private Functions
- * @{
- */
-
-
-/**
- * @brief  De initializate the SpiritIrqs structure setting all the bitfield to 0.
- *         Moreover, it sets the IRQ mask registers to 0x00000000, disabling all IRQs.
- * @param  pxIrqInit pointer to a variable of type @ref SpiritIrqs, in which all the
- *         bitfields will be settled to zero.
- * @retval None.
- */
-void SpiritIrqDeInit(SpiritIrqs* pxIrqInit)
-{
-  uint8_t tempRegValue[4]={0x00,0x00,0x00,0x00};
-
-  if(pxIrqInit!=NULL)
-  {
-    /* Sets the bitfields of passed structure to one */
-    *(uint32_t*)pxIrqInit = 0x0;
-  }
-
-  /* Writes the IRQ_MASK registers */
-  g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
-}
-
-
-/**
- * @brief  Enables all the IRQs according to the user defined pxIrqInit structure.
- * @param  pxIrqInit pointer to a variable of type @ref SpiritIrqs, through which the
- *         user enable specific IRQs. This parameter is a pointer to a SpiritIrqs.
- *         For example suppose to enable only the two IRQ Low Battery Level and Tx Data Sent:
- * @code
- * SpiritIrqs myIrqInit = {0};
- * myIrqInit.IRQ_LOW_BATT_LVL = 1;
- * myIrqInit.IRQ_TX_DATA_SENT = 1;
- * SpiritIrqInit(&myIrqInit);
- * @endcode
- * @retval None.
- */
-void SpiritIrqInit(SpiritIrqs* pxIrqInit)
-{
-  /* Writes the IRQ_MASK registers */
-  g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqInit);
-
-}
-
-
-/**
- * @brief  Enables or disables a specific IRQ.
- * @param  xIrq IRQ to enable or disable.
- *         This parameter can be any value of @ref IrqList.
- * @param  xNewState new state for the IRQ.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritIrq(IrqList xIrq, SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempValue = 0;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_IRQ_LIST(xIrq));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the IRQ_MASK registers */
-  g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
-
-  /* Build the IRQ mask word */
-  for(uint8_t i=0; i<4; i++)
-  {
-    tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
-  }
-  
-  /* Rebuild the new mask according to user request */
-  if(xNewState == S_DISABLE)
-  {
-    tempValue &= (~xIrq);
-  }
-  else
-  {
-    tempValue |= (xIrq);
-  }
-
-  /* Build the array of bytes to write in the IRQ_MASK registers */
-  for(uint8_t j=0; j<4; j++)
-  {
-    tempRegValue[j] = (uint8_t)(tempValue>>(8*(3-j)));
-  }
-  
-  /* Writes the new IRQ mask in the corresponding registers */
-  g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Fills a pointer to a structure of SpiritIrqs type reading the IRQ_MASK registers.
- * @param  pxIrqMask pointer to a variable of type @ref SpiritIrqs, through which the
- *         user can read which IRQs are enabled. All the bitfields equals to zero correspond
- *         to enabled IRQs, while all the bitfields equals to one correspond to disabled IRQs.
- *         This parameter is a pointer to a SpiritIrqs.
- *         For example suppose that the Power On Reset and RX Data ready are the only enabled IRQs.
- * @code
- * SpiritIrqs myIrqMask;
- * SpiritIrqGetStatus(&myIrqMask);
- * @endcode
- * Then
- * myIrqMask.IRQ_POR and myIrqMask.IRQ_RX_DATA_READY are equal to 0
- * while all the other bitfields are equal to one.
- * @retval None.
- */
-void SpiritIrqGetMask(SpiritIrqs* pxIrqMask)
-{
-  /* Reads IRQ_MASK registers */
-  g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqMask);
-}
-
-
-/**
- * @brief  Filla a pointer to a structure of SpiritIrqs type reading the IRQ_STATUS registers.
- * @param  pxIrqStatus pointer to a variable of type @ref SpiritIrqs, through which the
- *         user can read the status of all the IRQs. All the bitfields equals to one correspond
- *         to the raised interrupts. This parameter is a pointer to a SpiritIrqs.
- *         For example suppose that the XO settling timeout is raised as well as the Sync word
- *         detection.
- * @code
- * SpiritIrqs myIrqStatus;
- * SpiritIrqGetStatus(&myIrqStatus);
- * @endcode
- * Then
- * myIrqStatus.IRQ_XO_COUNT_EXPIRED and myIrqStatus.IRQ_VALID_SYNC are equals to 1
- * while all the other bitfields are equals to zero.
- * @retval None.
- */
-void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus)
-{
-  /* Reads IRQ_STATUS registers */
-  g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, (uint8_t*)pxIrqStatus);
-}
-
-
-/**
- * @brief  Clear the IRQ status registers.
- * @param  None.
- * @retval None.
- */
-void SpiritIrqClearStatus(void)
-{
-  uint8_t tempRegValue[4];
-
-  /* Reads the IRQ_STATUS registers clearing all the flags */
-  g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Verifies if a specific IRQ has been generated.
- *         The call resets all the IRQ status, so it can't be used in case of multiple raising interrupts.
- * @param  xFlag IRQ flag to be checked.
- *         This parameter can be any value of @ref IrqList.
- * @retval SpiritBool S_TRUE or S_FALSE.
- */
-SpiritBool SpiritIrqCheckFlag(IrqList xFlag)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempValue = 0;
-  SpiritBool flag;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_IRQ_LIST(xFlag));
-
-  /* Reads registers and build the status word */
-  g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
-  for(uint8_t i=0; i<4; i++)
-  {
-    tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
-  }
-  
-  if(tempValue & xFlag)
-  {
-    flag = S_TRUE;
-  }
-  else
-  {
-    flag = S_FALSE;
-  }
-
-  return flag;
-
-}
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_LinearFifo.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_LinearFifo.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,337 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_LinearFifo.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT Fifo.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_LinearFifo.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_LinearFifo
- * @{
- */
-
-
-/**
- * @defgroup LinearFifo_Private_TypesDefinitions        Linear FIFO Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup LinearFifo_Private_Defines                 Linear FIFO Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup LinearFifo_Private_Macros                  Linear FIFO Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup LinearFifo_Private_Variables               Linear FIFO Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup LinearFifo_Private_FunctionPrototypes      Linear FIFO Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup LinearFifo_Private_Functions               Linear FIFO Private Functions
- * @{
- */
-
-/**
- * @brief  Returns the number of elements in the Rx FIFO.
- * @param  None.
- * @retval uint8_t Number of elements in the Rx FIFO.
- */
-uint8_t SpiritLinearFifoReadNumElementsRxFifo(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS0_BASE, 1, &tempRegValue);
-
-  /* Build and return value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Returns the number of elements in the Tx FIFO.
- * @param  None.
- * @retval uint8_t Number of elements in the Tx FIFO.
- */
-uint8_t SpiritLinearFifoReadNumElementsTxFifo(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the number of elements in TX FIFO and return the value */
-  g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS1_BASE, 1, &tempRegValue);
-
-  /* Build and return value */
-  return (tempRegValue & 0x7F);
-}
-
-
-/**
- * @brief  Sets the almost full threshold for the Rx FIFO. When the number of elements in RX FIFO reaches this value an interrupt can be generated to the MCU.
- * @note   The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
- *         full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
- * @param  cThrRxFifo almost full threshold.
- * 	   This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritLinearFifoSetAlmostFullThresholdRx(uint8_t cThrRxFifo)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_FIFO_THR(cThrRxFifo));
-
-  /* Build the register value */
-  tempRegValue = cThrRxFifo & 0x7F;
-
-  /* Writes the Almost Full threshold for RX in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG3_RXAFTHR_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the almost full threshold for RX FIFO.
- * @note   The almost full threshold is encountered from the top of the FIFO. For example, if it is 7 the almost
- *         full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
- * @param  None.
- * @retval uint8_t Almost full threshold for Rx FIFO.
- */
-uint8_t SpiritLinearFifoGetAlmostFullThresholdRx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the almost full threshold for RX FIFO and return the value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG3_RXAFTHR_BASE, 1, &tempRegValue);
-
-  /* Build and return value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the almost empty threshold for the Rx FIFO. When the number of elements in RX FIFO reaches this value an interrupt can be generated to the MCU.
- * @param  cThrRxFifo almost empty threshold.
- * 	   This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritLinearFifoSetAlmostEmptyThresholdRx(uint8_t cThrRxFifo)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_FIFO_THR(cThrRxFifo));
-
-  /* Build the register value */
-  tempRegValue = cThrRxFifo & 0x7F;
-
-  /* Writes the Almost Empty threshold for RX in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG2_RXAETHR_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the almost empty threshold for Rx FIFO.
- * @param  None.
- * @retval uint8_t Almost empty threshold for Rx FIFO.
- */
-uint8_t SpiritLinearFifoGetAlmostEmptyThresholdRx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the almost empty threshold for RX FIFO and returns the value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG2_RXAETHR_BASE, 1, &tempRegValue);
-
-  /* Build and return value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the almost full threshold for the Tx FIFO. When the number of elements in TX FIFO reaches this value an interrupt can be generated to the MCU.
- * @note   The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
- *         full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
- * @param  cThrTxFifo almost full threshold.
- * 	   This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritLinearFifoSetAlmostFullThresholdTx(uint8_t cThrTxFifo)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_FIFO_THR(cThrTxFifo));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
-
-  /* Build the register value */
-  tempRegValue &= 0x80;
-  tempRegValue |= cThrTxFifo;
-
-  /* Writes the Almost Full threshold for Tx in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the almost full threshold for Tx FIFO.
- * @note   The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
- *         full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
- * @param  None.
- * @retval uint8_t Almost full threshold for Tx FIFO.
- */
-uint8_t SpiritLinearFifoGetAlmostFullThresholdTx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the almost full threshold for Tx FIFO and returns the value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
-
-  /* Build and returns value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Sets the almost empty threshold for the Tx FIFO. When the number of elements in Tx FIFO reaches this value an interrupt can can be generated to the MCU.
- * @param  cThrTxFifo: almost empty threshold.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritLinearFifoSetAlmostEmptyThresholdTx(uint8_t cThrTxFifo)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_FIFO_THR(cThrTxFifo));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
-
-  /* Build the register value */
-  tempRegValue &= 0x80;
-  tempRegValue |= cThrTxFifo;
-
-  /* Writes the Almost Empty threshold for Tx in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the almost empty threshold for Tx FIFO.
- * @param  None.
- * @retval uint8_t Almost empty threshold for Tx FIFO.
- */
-uint8_t SpiritLinearFifoGetAlmostEmptyThresholdTx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the almost empty threshold for TX FIFO and returns the value */
-  g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
-
-  /* Build and return value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Management.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Management.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,364 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Management.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   The management layer for SPIRIT1 library.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Management.h"
-
-/**
-* @addtogroup SPIRIT_Libraries
-* @{
-*/
-
-
-/**
-* @defgroup SPIRIT_MANAGEMENT              SPIRIT Management
-* @{
-*/
-
-/**
-* @brief  BS value to write in the SYNT0 register according to the selected band
-*/
-static const uint8_t s_vectcBandRegValue[4]={SYNT0_BS_6, SYNT0_BS_12, SYNT0_BS_16, SYNT0_BS_32};
-
-#define COMMUNICATION_STATE_TX          0
-#define COMMUNICATION_STATE_RX          1
-#define COMMUNICATION_STATE_NONE        2
-
-static uint32_t s_nDesiredFrequency;
-
-static volatile uint8_t s_cCommunicationState = COMMUNICATION_STATE_NONE;
-
-
-/**
-* @brief  Factor is: B/2 used in the formula for SYNTH word calculation
-*/
-static const uint8_t s_vectcBHalfFactor[4]={(HIGH_BAND_FACTOR/2), (MIDDLE_BAND_FACTOR/2), (LOW_BAND_FACTOR/2), (VERY_LOW_BAND_FACTOR/2)};
-
-
-/**
-* @defgroup SPIRIT_MANAGEMENT_FUNCTIONS    SPIRIT Management Functions
-* @{
-*/
-
-
-/**
-* @defgroup WORKAROUND_FUNCTIONS              SPIRIT Management Workaround Functions
-* @{
-*/
-
-/**
-* @brief  Private SpiritRadioSetFrequencyBase function only used in SpiritManagementWaVcoCalibration.
-* @param  lFBase the base carrier frequency expressed in Hz as unsigned word.
-* @retval None.
-*/
-void SpiritManagementSetFrequencyBase(uint32_t lFBase)
-{
-  uint32_t synthWord, Fc;
-  uint8_t band = 0, anaRadioRegArray[4], wcp;
-  
-  /* Check the parameter */
-  s_assert_param(IS_FREQUENCY_BAND(lFBase));
-  
-  /* Search the operating band */
-  if(IS_FREQUENCY_BAND_HIGH(lFBase))
-  {
-    band = HIGH_BAND;
-  }
-  else if(IS_FREQUENCY_BAND_MIDDLE(lFBase))
-  {
-    band = MIDDLE_BAND;
-  }
-  else if(IS_FREQUENCY_BAND_LOW(lFBase))
-  {
-    band = LOW_BAND;
-  }
-  else if(IS_FREQUENCY_BAND_VERY_LOW(lFBase))
-  {
-    band = VERY_LOW_BAND;
-  }
-  
-  int32_t FOffset  = SpiritRadioGetFrequencyOffset();
-  uint32_t lChannelSpace  = SpiritRadioGetChannelSpace();
-  uint8_t cChannelNum = SpiritRadioGetChannel();
-  
-  /* Calculates the channel center frequency */
-  Fc = lFBase + FOffset + lChannelSpace*cChannelNum;
-  
-  /* Reads the reference divider */
-  uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv()+1;
-  
-  switch(band)
-  {
-  case VERY_LOW_BAND:
-    if(Fc<161281250)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case LOW_BAND:
-    if(Fc<322562500)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case MIDDLE_BAND:
-    if(Fc<430083334)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case HIGH_BAND:
-    if(Fc<860166667)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-  }
-  
-  /* Search the VCO charge pump word and set the corresponding register */
-  wcp = SpiritRadioSearchWCP(Fc);
-  
-  synthWord = (uint32_t)(lFBase*(((double)(FBASE_DIVIDER*cRefDiv*s_vectcBHalfFactor[band]))/SpiritRadioGetXtalFrequency()));
-  
-  /* Build the array of registers values for the analog part */
-  anaRadioRegArray[0] = (uint8_t)(((synthWord>>21)&(0x0000001F))|(wcp<<5));
-  anaRadioRegArray[1] = (uint8_t)((synthWord>>13)&(0x000000FF));
-  anaRadioRegArray[2] = (uint8_t)((synthWord>>5)&(0x000000FF));
-  anaRadioRegArray[3] = (uint8_t)(((synthWord&0x0000001F)<<3)| s_vectcBandRegValue[band]);
-  
-  /* Configures the needed Analog Radio registers */
-  g_xStatus = SpiritSpiWriteRegisters(SYNT3_BASE, 4, anaRadioRegArray);
-}
-
-uint8_t SpiritManagementWaVcoCalibration(void)
-{
-  uint8_t s_cVcoWordRx;
-  uint8_t s_cVcoWordTx;
-  uint32_t nFreq;
-  uint8_t cRestore = 0;
-  uint8_t cStandby = 0;
-  uint32_t xtal_frequency = SpiritRadioGetXtalFrequency();
-  
-  /* Enable the reference divider if the XTAL is between 48 and 52 MHz */
-  if(xtal_frequency>DOUBLE_XTAL_THR)
-  {
-    if(!SpiritRadioGetRefDiv())
-    {
-      cRestore = 1;
-      nFreq = SpiritRadioGetFrequencyBase();
-      SpiritRadioSetRefDiv(S_ENABLE);
-      SpiritManagementSetFrequencyBase(nFreq);
-    }
-  }
-  nFreq = SpiritRadioGetFrequencyBase();
-  
-  /* Increase the VCO current */
-  uint8_t tmp = 0x19; SpiritSpiWriteRegisters(0xA1,1,&tmp);
-  
-  SpiritCalibrationVco(S_ENABLE);
-  
-  SpiritRefreshStatus();
-  if(g_xStatus.MC_STATE == MC_STATE_STANDBY)
-  {
-    cStandby = 1;
-    SpiritCmdStrobeReady();
-    do{
-      SpiritRefreshStatus();
-      if(g_xStatus.MC_STATE == 0x13)
-      {
-        return 1;
-      }
-    }while(g_xStatus.MC_STATE != MC_STATE_READY); 
-  }
-  
-  SpiritCmdStrobeLockTx();
-  
-  do{
-    SpiritRefreshStatus();
-    if(g_xStatus.MC_STATE == 0x13)
-    {
-      return 1;
-    }
-  }while(g_xStatus.MC_STATE != MC_STATE_LOCK);
-  
-  s_cVcoWordTx = SpiritCalibrationGetVcoCalData();
-  
-  SpiritCmdStrobeReady();
-  
-  do{
-    SpiritRefreshStatus();
-  }while(g_xStatus.MC_STATE != MC_STATE_READY); 
-  
-    
-  SpiritCmdStrobeLockRx();
-  
-  do{
-    SpiritRefreshStatus();
-    if(g_xStatus.MC_STATE == 0x13)
-    {
-      return 1;
-    }
-  }while(g_xStatus.MC_STATE != MC_STATE_LOCK);
-  
-  s_cVcoWordRx = SpiritCalibrationGetVcoCalData();
-  
-  SpiritCmdStrobeReady();
-  
-  do{
-    SpiritRefreshStatus();
-    if(g_xStatus.MC_STATE == 0x13)
-    {
-      return 1;
-    }
-  }while(g_xStatus.MC_STATE != MC_STATE_READY);
-  
-  if(cStandby == 1)
-  {
-    SpiritCmdStrobeStandby();    
-  }
-  SpiritCalibrationVco(S_DISABLE);
-  
-  /* Disable the reference divider if the XTAL is between 48 and 52 MHz */
-  if(cRestore)
-  {
-    SpiritRadioSetRefDiv(S_DISABLE);    
-    SpiritManagementSetFrequencyBase(nFreq);
-  }
-  
-  /* Restore the VCO current */
-  tmp = 0x11; SpiritSpiWriteRegisters(0xA1,1,&tmp);
-  
-  SpiritCalibrationSetVcoCalDataTx(s_cVcoWordTx);
-  SpiritCalibrationSetVcoCalDataRx(s_cVcoWordRx);
-  
-  return 0;
-}
-
-
-void SpiritManagementWaCmdStrobeTx(void)
-{
-  if(s_cCommunicationState != COMMUNICATION_STATE_TX)
-  {
-    //uint32_t xtal_frequency = SpiritRadioGetXtalFrequency();
-    
-    /* To achive the max output power */
-    if(s_nDesiredFrequency>=150000000 && s_nDesiredFrequency<=470000000)
-    {
-      /* Optimal setting for Tx mode only */
-      SpiritRadioSetPACwc(LOAD_3_6_PF);
-    }
-    else
-    {
-      /* Optimal setting for Tx mode only */
-      SpiritRadioSetPACwc(LOAD_0_PF);
-    }
-    
-    uint8_t tmp = 0x11; SpiritSpiWriteRegisters(0xa9, 1, &tmp); /* Enable VCO_L buffer */
-    tmp = 0x20; SpiritSpiWriteRegisters(PM_CONFIG1_BASE, 1, &tmp); /* Set SMPS switching frequency */
-    
-    s_cCommunicationState = COMMUNICATION_STATE_TX;
-  }
-}
-
-
-void SpiritManagementWaCmdStrobeRx(void)
-{
-  if(s_cCommunicationState != COMMUNICATION_STATE_RX)
-  {    
-    uint8_t tmp = 0x98; SpiritSpiWriteRegisters(PM_CONFIG1_BASE, 1, &tmp); /* Set SMPS switching frequency */    
-    SpiritRadioSetPACwc(LOAD_0_PF); /* Set the correct CWC parameter */
-    
-    s_cCommunicationState = COMMUNICATION_STATE_RX;
-  }
-}
-
-void SpiritManagementWaTRxFcMem(uint32_t nDesiredFreq)
-{
-  s_cCommunicationState = COMMUNICATION_STATE_NONE;
-  s_nDesiredFrequency = nDesiredFreq;
-}
-
-
-void SpiritManagementWaExtraCurrent(void)
-{          
-  uint8_t tmp= 0xCA;SpiritSpiWriteRegisters(0xB2, 1, &tmp); 
-  tmp= 0x04;SpiritSpiWriteRegisters(0xA8, 1, &tmp); 
-  /* just a read to loose some microsecs more */
-  SpiritSpiReadRegisters(0xA8, 1, &tmp);
-  tmp= 0x00;SpiritSpiWriteRegisters(0xA8, 1, &tmp); 
-}
-
-/**
-* @}
-*/
-
-
-
-/**
-* @}
-*/
-
-
-/**
-* @}
-*/
-
-/**
-* @}
-*/
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktBasic.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktBasic.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,615 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_PktBasic.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT Basic packets.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_PktBasic.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_PktBasic
- * @{
- */
-
-
-/**
- * @defgroup PktBasic_Private_TypesDefinitions  Pkt Basic Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Private_Defines           Pkt Basic Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Private_Macros            Pkt Basic Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Private_Variables          Pkt Basic Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup PktBasic_Private_FunctionPrototypes        Pkt Basic Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktBasic_Private_Functions                 Pkt Basic Private Functions
- * @{
- */
-
-/**
- * @brief  Initializes the SPIRIT Basic packet according to the specified parameters in the PktBasicInit struct.
- *         Notice that this function sets the autofiltering option on CRC if it is set to any value different from BASIC_NO_CRC.
- * @param  pxPktBasicInit Basic packet init structure.
- *         This parameter is a pointer to @ref PktBasicInit.
- * @retval None.
- */
-void SpiritPktBasicInit(PktBasicInit* pxPktBasicInit)
-{
-  uint8_t tempRegValue[4], i;
-
-  /* Check the parameters */
-  s_assert_param(IS_BASIC_PREAMBLE_LENGTH(pxPktBasicInit->xPreambleLength));
-  s_assert_param(IS_BASIC_SYNC_LENGTH(pxPktBasicInit->xSyncLength));
-  s_assert_param(IS_BASIC_CRC_MODE(pxPktBasicInit->xCrcMode));
-  s_assert_param(IS_BASIC_LENGTH_WIDTH_BITS(pxPktBasicInit->cPktLengthWidth));
-  s_assert_param(IS_BASIC_FIX_VAR_LENGTH(pxPktBasicInit->xFixVarLength));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xAddressField));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xFec));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xDataWhitening));
-  s_assert_param(IS_BASIC_CONTROL_LENGTH(pxPktBasicInit->xControlLength));
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
-
-  /* Mask a reserved bit */
-  tempRegValue[0] &= ~0x20;
-
-  /* Always set the automatic packet filtering */
-  tempRegValue[0] |= PROTOCOL1_AUTO_PCKT_FLT_MASK;
-
-  /* Writes the value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
-
-  /* Reads the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-
-  /* Always reset the control and source filtering (also if it is not present in basic) */
-  tempRegValue[0] &= ~(PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK | PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK);
-
-  /* Writes the value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-
-  if(pxPktBasicInit->xAddressField == S_ENABLE)
-  {
-    tempRegValue[0]=0x08;
-  }
-  else
-  {
-    tempRegValue[0]=0x00;
-  }
-  /* Address and control length setting */
-  tempRegValue[0] |= ((uint8_t) pxPktBasicInit->xControlLength);
-
-  /* Packet format and width length setting */
-  pxPktBasicInit->cPktLengthWidth == 0 ? pxPktBasicInit->cPktLengthWidth=1 : pxPktBasicInit->cPktLengthWidth;
-  tempRegValue[1] = ((uint8_t) PCKTCTRL3_PCKT_FRMT_BASIC) | ((uint8_t)(pxPktBasicInit->cPktLengthWidth-1));
-
-  /* Preamble, sync and fixed or variable length setting */
-  tempRegValue[2] = ((uint8_t) pxPktBasicInit->xPreambleLength) | ((uint8_t) pxPktBasicInit->xSyncLength) |
-                    ((uint8_t) pxPktBasicInit->xFixVarLength);
-
-  /* CRC length, whitening and FEC setting */
-  tempRegValue[3] = (uint8_t) pxPktBasicInit->xCrcMode;
-
-  if(pxPktBasicInit->xDataWhitening == S_ENABLE)
-  {
-     tempRegValue[3] |= PCKTCTRL1_WHIT_MASK;
-  }
-
-  if(pxPktBasicInit->xFec == S_ENABLE)
-  {
-     tempRegValue[3] |= PCKTCTRL1_FEC_MASK;
-  }
-
-  /* Writes registers */
-  SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 4, tempRegValue);
-
-  /* Sync words setting */
-  for(i=0;i<4;i++)
-  {
-    if(i<3-(pxPktBasicInit->xSyncLength >>1))
-    {
-      tempRegValue[i]=0;
-    }
-    else
-    {
-      tempRegValue[i] = (uint8_t)(pxPktBasicInit->lSyncWords>>(8*i));
-    }
-  }
-
-  /* Sets CRC check bit */
-  if(pxPktBasicInit->xCrcMode == PKT_NO_CRC)
-  {
-    SpiritPktBasicFilterOnCrc(S_DISABLE);
-  }
-  else
-  {
-    SpiritPktBasicFilterOnCrc(S_ENABLE);
-  }
-
-  
-  g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the SPIRIT Basic packet structure according to the specified parameters in the registers.
- * @param  pxPktBasicInit Basic packet init structure.
- *         This parameter is a pointer to @ref PktBasicInit.
- * @retval None.
- */
-void SpiritPktBasicGetInfo(PktBasicInit* pxPktBasicInit)
-{
-  uint8_t tempRegValue[10];
-
-  /* Reads registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 10, tempRegValue);
-
-  /* Length width */
-  pxPktBasicInit->cPktLengthWidth=(tempRegValue[1] & 0x0F)+1;
-
-  /* Address field */
-  pxPktBasicInit->xAddressField=(SpiritFunctionalState)((tempRegValue[0]>>3) & 0x01);
-
-  /* Control length */
-  pxPktBasicInit->xControlLength=(BasicControlLength)(tempRegValue[0] & 0x07);
-
-  /* CRC mode */
-  pxPktBasicInit->xCrcMode=(BasicCrcMode)(tempRegValue[3] & 0xE0);
-
-  /* Whitening */
-  pxPktBasicInit->xDataWhitening=(SpiritFunctionalState)((tempRegValue[3] >> 4) & 0x01);
-
-  /* FEC */
-  pxPktBasicInit->xFec=(SpiritFunctionalState)(tempRegValue[3] & 0x01);
-
-  /* FIX or VAR bit */
-  pxPktBasicInit->xFixVarLength=(BasicFixVarLength)(tempRegValue[2] & 0x01);
-
-  /* Preamble length */
-  pxPktBasicInit->xPreambleLength=(BasicPreambleLength)(tempRegValue[2] & 0xF8);
-
-  /* Sync length */
-  pxPktBasicInit->xSyncLength=(BasicSyncLength)(tempRegValue[2] & 0x06);
-
-  /* sync Words */
-  pxPktBasicInit->lSyncWords=0;
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-      if(i>2-(((uint8_t)pxPktBasicInit->xSyncLength) >>1))
-      {
-        pxPktBasicInit->lSyncWords |= (uint32_t)(tempRegValue[i+6])<<(8*i);
-      }
-  }
-
-}
-
-
-/**
- * @brief  Initializes the SPIRIT Basic packet addresses according to the specified
- *         parameters in the PktBasicAddressesInit struct.
- * @param  pxPktBasicAddresses Basic packet addresses init structure.
- *         This parameter is a pointer to @ref PktBasicAddresses.
- * @retval None.
- */
-void SpiritPktBasicAddressesInit(PktBasicAddressesInit* pxPktBasicAddresses)
-{
-  uint8_t tempRegValue[3];
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnMyAddress));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnMulticastAddress));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnBroadcastAddress));
-
-
-  /* Reads the PCKT_FLT_OPTIONS ragister */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-  
-  /* Enables or disables filtering on my address */
-  if(pxPktBasicAddresses->xFilterOnMyAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-  
-  /* Enables or disables filtering on multicast address */
-  if(pxPktBasicAddresses->xFilterOnMulticastAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-  
-  /* Enables or disables filtering on broadcast address */
-  if(pxPktBasicAddresses->xFilterOnBroadcastAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-  
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-  
-  /* Fills the array with the addresses passed in the structure */
-  tempRegValue[0] = pxPktBasicAddresses->cBroadcastAddress;
-  tempRegValue[1] = pxPktBasicAddresses->cMulticastAddress;
-  tempRegValue[2] = pxPktBasicAddresses->cMyAddress;
-  
-  /* Writes values on the PCKT_FLT_GOALS registers */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
-  
-  
-}
-
-
-/**
- * @brief  Returns the SPIRIT Basic packet addresses structure according to the specified
- *         parameters in the registers.
- * @param  pxPktBasicAddresses Basic packet addresses init structure.
- *         This parameter is a pointer to @ref PktBasicAddresses.
- * @retval None.
- */
-void SpiritPktBasicGetAddressesInfo(PktBasicAddressesInit* pxPktBasicAddresses)
-{
-  uint8_t tempRegValue[3];
-
-  /* Reads values on the PCKT_FLT_GOALS registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
-
-  /* Fit the structure with the read addresses */
-  pxPktBasicAddresses->cBroadcastAddress = tempRegValue[0];
-  pxPktBasicAddresses->cMulticastAddress = tempRegValue[1];
-  pxPktBasicAddresses->cMyAddress = tempRegValue[2];
-
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-
-  /* Fit the structure with the read filtering bits */
-  pxPktBasicAddresses->xFilterOnBroadcastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 1) & 0x01);
-  pxPktBasicAddresses->xFilterOnMulticastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 2) & 0x01);
-  pxPktBasicAddresses->xFilterOnMyAddress = (SpiritFunctionalState)((tempRegValue[0] >> 3) & 0x01);
-
-}
-
-
-/**
- * @brief  Configures the Basic packet format as packet used by SPIRIT.
- * @param  None.
- * @retval None.
- */
-void SpiritPktBasicSetFormat(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Build the new value. Also set to 0 the direct RX mode bits */
-  tempRegValue &= 0x0F;
-  tempRegValue |= (uint8_t)PCKTCTRL3_PCKT_FRMT_BASIC;
-
-  /* Writes the  value on the PCKTCTRL3 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Reads the PCKTCTRL1_BASE register */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build the new value. Set to 0 the direct TX mode bits */
-  tempRegValue &= 0xF3;
-
-  /* Writes the value on the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Mask a reserved bit */
-  tempRegValue &= ~0x20;
-
-  /* Writes the value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @brief  Sets the address length for SPIRIT Basic packets.
- * @param  xAddressField length of ADDRESS in bytes.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktBasicAddressField(SpiritFunctionalState xAddressField)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAddressField));
-
-  /* Reads the PCKTCTRL4 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-  /* Build the address length for the register */
-  if(xAddressField==S_ENABLE)
-  {
-    tempRegValue |= 0x08;
-  }
-  else
-  {
-    tempRegValue &= 0x07;
-  }
-
-  /* Writes the new value on the PCKTCTRL4 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Specifies if the Address field for SPIRIT Basic packets is enabled or disabled.
- * @param  None.
- * @retval SpiritFunctionalState Notifies if the address field is enabled or disabled.
- */
-SpiritFunctionalState SpiritPktBasicGetAddressField(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL4 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-  /* Returns the address field value */
-  if(tempRegValue & PCKTCTRL4_ADDRESS_LEN_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-
-/**
- * @brief  Sets the payload length for SPIRIT Basic packets. Since the packet length
- *         depends from the address and the control field size, this
- *         function reads the correspondent registers in order to determine
- *         the correct packet length to be written.
- * @param  nPayloadLength payload length in bytes.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-void SpiritPktBasicSetPayloadLength(uint16_t nPayloadLength)
-{
-  uint8_t tempRegValue[2];
-  uint16_t overSize=0;
-
-  /* Computes the oversize (address + control) size */
-  if(SpiritPktBasicGetAddressField())
-  {
-    overSize=1;
-  }
-  overSize += (uint16_t) SpiritPktBasicGetControlLength();
-
-  /* Computes PCKTLEN0 value from nPayloadLength */
-  tempRegValue[1]=BASIC_BUILD_PCKTLEN0(nPayloadLength+overSize);
-  /* Computes PCKTLEN1 value from nPayloadLength */
-  tempRegValue[0]=BASIC_BUILD_PCKTLEN1(nPayloadLength+overSize);
-
-  /* Writes data on the PCKTLEN1/0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the payload length for SPIRIT Basic packets. Since the
- *         packet length depends from the address and the control
- *         field size, this function reads the correspondent
- *         registers in order to determine the correct payload length
- *         to be returned.
- * @param  None.
- * @retval uint16_t Payload length in bytes.
- */
-uint16_t SpiritPktBasicGetPayloadLength(void)
-{
-  uint8_t tempRegValue[2];
-  uint16_t overSize=0;
-
-  /* Computes the oversize (address + control) size */
-  if(SpiritPktBasicGetAddressField())
-  {
-    overSize=1;
-  }
-  overSize += (uint16_t) SpiritPktBasicGetControlLength();
-
-  /* Reads the packet length registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-  /* Returns the packet length */
-  return ((((uint16_t)tempRegValue[0])<<8) + (uint16_t) tempRegValue[1]) - overSize;
-}
-
-/**
- * @brief  Returns the packet length field of the received packet.
- * @param  None.
- * @retval uint16_t Packet length.
- */
-uint16_t SpiritPktBasicGetReceivedPktLength(void)
-{
-  uint8_t tempRegValue[2];
-  uint16_t overSize=0;
-
-  /* Computes the oversize (address + control) size */
-  if(SpiritPktBasicGetAddressField())
-  {
-    overSize=1;
-  }
-  overSize += (uint16_t) SpiritPktBasicGetControlLength();
-  
-  /* Reads the RX_PCKT_LENx registers value */
-  g_xStatus = SpiritSpiReadRegisters(RX_PCKT_LEN1_BASE, 2, tempRegValue);
-
-  /* Rebuild and return the length field */
-  return (((((uint16_t) tempRegValue[0]) << 8) + (uint16_t) tempRegValue[1]) - overSize);
-}
-
-/**
- * @brief  Computes and sets the variable payload length for SPIRIT Basic packets.
- * @param  nMaxPayloadLength payload length in bytes.
- *         This parameter is an uint16_t.
- * @param  xAddressField Enable or Disable Address Field.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @param  xControlLength Control length in bytes.
- *         This parameter can be any value of @ref BasicControlLength.
- * @retval None.
- */
-void SpiritPktBasicSetVarLengthWidth(uint16_t nMaxPayloadLength, SpiritFunctionalState xAddressField, BasicControlLength xControlLength)
-{
-  uint8_t tempRegValue,
-          addressLength,
-          i;
-  uint32_t packetLength;
-
-  /* Sets the address length according to xAddressField */
-  if(xAddressField == S_ENABLE)
-  {
-    addressLength=1;
-  }
-  else
-  {
-    addressLength=0;
-  }
-
-  /* packet length = payload length + address length + control length */
-  packetLength=nMaxPayloadLength+addressLength+xControlLength;
-
-  /* Computes the number of bits */
-  for(i=0;i<16;i++)
-  {
-    if(packetLength == 0) break;
-    {
-    packetLength >>= 1;
-    }
-  }
-  i==0 ? i=1 : i;
-
-  /* Reads the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Build value for the length width */
-  tempRegValue &= ~PCKTCTRL3_LEN_WID_MASK;
-  tempRegValue |= (uint8_t)(i-1);
-
-  /* Writes the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-}
-
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1453 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_PktCommon.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of the common features of SPIRIT packets.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_PktCommon.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_PktCommon
- * @{
- */
-
-
-/**
- * @defgroup PktCommon_Private_TypesDefinitions         Pkt Common Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Defines                  Pkt Common Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Macros                   Pkt Common Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Variables                Pkt Common Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup PktCommon_Private_FunctionPrototypes       Pkt Common Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Functions                Pkt Common Private Functions
- * @{
- */
-
-/**
- * @brief  Sets the CONTROL field length for SPIRIT packets.
- * @param  xControlLength length of CONTROL field in bytes.
- *         This parameter can be any value of @ref PktControlLength.
- * @retval None.
- */
-void SpiritPktCommonSetControlLength(PktControlLength xControlLength)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_CONTROL_LENGTH(xControlLength));
-
-  /* Reads the PCKTCTRL4 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-  /* Set the control length */
-  tempRegValue &= ~PCKTCTRL4_CONTROL_LEN_MASK;
-  tempRegValue |= (uint8_t)xControlLength;
-
-  /* Writes the new value on the PCKTCTRL4 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @brief  Returns the CONTROL field length for SPIRIT packets.
- * @param  None.
- * @retval uint8_t Control field length.
- */
-uint8_t SpiritPktCommonGetControlLength(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL4 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return value */
-  return (tempRegValue & PCKTCTRL4_CONTROL_LEN_MASK);
-}
-
-
-/**
- * @brief  Sets the PREAMBLE field Length mode for SPIRIT packets.
- * @param  xPreambleLength length of PREAMBLE field in bytes.
- *         This parameter can be any value of @ref PktPreambleLength.
- * @retval None.
- */
-void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_PREAMBLE_LENGTH(xPreambleLength));
-
-  /* Reads the PCKTCTRL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-  /* Set the preamble length */
-  tempRegValue &= ~PCKTCTRL2_PREAMBLE_LENGTH_MASK;
-  tempRegValue |= (uint8_t)xPreambleLength;
-
-  /* Writes the new value on the PCKTCTRL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @brief  Returns the PREAMBLE field Length mode for SPIRIT packets.
- * @param  None.
- * @retval uint8_t Preamble field length in bytes.
- */
-uint8_t SpiritPktCommonGetPreambleLength(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return value */
-  return ((tempRegValue & PCKTCTRL2_PREAMBLE_LENGTH_MASK)>>3) + 1;
-
-}
-
-
-/**
- * @brief  Sets the SYNC field Length for SPIRIT packets.
- * @param  xSyncLength length of SYNC field in bytes.
- *         This parameter can be any value of @ref PktSyncLength.
- * @retval None.
- */
-void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_SYNC_LENGTH(xSyncLength));
-
-  /* Reads the PCKTCTRL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-  /* Set the sync length */
-  tempRegValue &= ~PCKTCTRL2_SYNC_LENGTH_MASK;
-  tempRegValue |= (uint8_t)xSyncLength;
-
-  /* Writes the new value on the PCKTCTRL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the SYNC field Length for SPIRIT packets.
- * @param  None.
- * @retval uint8_t Sync field length in bytes.
- */
-uint8_t SpiritPktCommonGetSyncLength(void)
-{
-  uint8_t tempRetValue;
-
-  /* Reads the PCKTCTRL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRetValue);
-
-  /* Rebuild and return value */
-  return ((tempRetValue & PCKTCTRL2_SYNC_LENGTH_MASK)>>1) + 1;
-
-}
-
-
-/**
- * @brief  Sets fixed or variable payload length mode for SPIRIT packets.
- * @param  xFixVarLength variable or fixed length.
- *         PKT_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
- *         PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
- * @retval None.
- */
-void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_FIX_VAR_LENGTH(xFixVarLength));
-
-  /* Reads the PCKTCTRL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-  /* Set fixed or variable address mode */
-  tempRegValue &= ~PCKTCTRL2_FIX_VAR_LEN_MASK;
-  tempRegValue |= (uint8_t)xFixVarLength;
-
-  /* Writes the new value on the PCKTCTRL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables or Disables the filtering on CRC.
- * @param  xNewState new state for CRC_CHECK.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PCKT_FLT_OPTIONS register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Modify the register value: enable or disable the CRC filtering */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
-  }
-
-  /* Writes the PCKT_FLT_OPTIONS register value */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the CRC filtering enable bit.
- * @param  None.
- * @retval SpiritFunctionalState CRC filtering.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void)
-{
-  uint8_t tempRegValue;
-
-
-  /* Reads the PCKT_FLT_OPTIONS register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Check the CRC filtering bit */
-  if(tempRegValue & PCKT_FLT_OPTIONS_CRC_CHECK_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-
-/**
- * @brief  Sets the CRC mode for SPIRIT packets.
- * @param  xCrcMode length of CRC field in bytes.
- *         This parameter can be any value of @ref PktCrcMode.
- * @retval None.
- */
-void SpiritPktCommonSetCrcMode(PktCrcMode xCrcMode)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_CRC_MODE(xCrcMode));
-
-  /* Reads the PCKTCTRL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build data to write setting the CRC mode */
-  tempRegValue &= ~PCKTCTRL1_CRC_MODE_MASK;
-  tempRegValue |= (uint8_t)xCrcMode;
-
-  /* Writes the new value on the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the CRC mode for SPIRIT packets.
- * @param  None.
- * @retval PktCrcMode Crc mode.
- */
-PktCrcMode SpiritPktCommonGetCrcMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return value */
-  return (PktCrcMode)(tempRegValue & 0xE0);
-
-}
-
-
-/**
- * @brief  Enables or Disables WHITENING for SPIRIT packets.
- * @param  xNewState new state for WHITENING mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonWhitening(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PCKTCTRL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build data to write: set or reset the whitening enable bit */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKTCTRL1_WHIT_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKTCTRL1_WHIT_MASK;
-  }
-
-  /* Writes the new value on the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables or Disables FEC for SPIRIT packets.
- * @param  xNewState new state for FEC mode.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFec(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PCKTCTRL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build data to write: set or reset the FEC enable bit */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKTCTRL1_FEC_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKTCTRL1_FEC_MASK;
-  }
-
-  /* Writes data on the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets a specific SYNC word for SPIRIT packets.
- * @param  xSyncX SYNC word number to be set.
- *         This parameter can be any value of @ref PktSyncX.
- * @param  cSyncWord SYNC word.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX ,  uint8_t cSyncWord)
-{
-  uint8_t tempRegAddress;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_SYNCx(xSyncX));
-
-  /* Set the specified address */
-  switch(xSyncX)
-  {
-    case PKT_SYNC_WORD_1:
-      tempRegAddress=SYNC1_BASE;
-      break;
-    case PKT_SYNC_WORD_2:
-      tempRegAddress=SYNC2_BASE;
-      break;
-    case PKT_SYNC_WORD_3:
-      tempRegAddress=SYNC3_BASE;
-      break;
-    default:
-      tempRegAddress=SYNC4_BASE;
-      break;
-  }
-
-  /* Writes value on the selected register */
-  g_xStatus = SpiritSpiWriteRegisters(tempRegAddress, 1, &cSyncWord);
-
-}
-
-
-/**
- * @brief  Returns a specific SYNC word for SPIRIT packets.
- * @param  xSyncX SYNC word number to be get.
- *         This parameter can be any value of @ref PktSyncX.
- * @retval uint8_t Sync word x.
- */
-uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX)
-{
-  uint8_t tempRegAddress, tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_SYNCx(xSyncX));
-
-  /* Set the specified address */
-  switch(xSyncX)
-  {
-    case PKT_SYNC_WORD_1:
-      tempRegAddress=SYNC1_BASE;
-      break;
-    case PKT_SYNC_WORD_2:
-      tempRegAddress=SYNC2_BASE;
-      break;
-    case PKT_SYNC_WORD_3:
-      tempRegAddress=SYNC3_BASE;
-      break;
-    default:
-      tempRegAddress=SYNC4_BASE;
-      break;
-  }
-
-  /* Reads the selected register value */
-  g_xStatus = SpiritSpiReadRegisters(tempRegAddress, 1, &tempRegValue);
-
-  /* Returns the read value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets multiple SYNC words for SPIRIT packets.
- * @param  lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- *         This parameter is a uint32_t.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a @ref PktSyncLength.
- * @retval None.
- */
-void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength)
-{
-  uint8_t tempRegValue[4];
-
-  /* Split the 32-bit value in 4 8-bit values */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-	if(i< ((3-xSyncLength) >>1) )
-    {
-      tempRegValue[i]=0;
-    }
-    else
-    {
-      tempRegValue[i]=(uint8_t)(lSyncWords>>(8*i));
-    }
-  }
-
-  /* Writes SYNC value on the SYNCx registers */
-  g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns multiple SYNC words for SPIRIT packets.
- * @param  xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- *         until the number of bytes in xSyncLength has been stored.
- *         This parameter is a pointer to @ref PktSyncLength.
- * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- */
-uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempRetValue=0;
-
-  /* Reads the SYNCx registers value */
-  g_xStatus = SpiritSpiReadRegisters(SYNC4_BASE, 4, tempRegValue);
-
-  /* Rebuild the SYNC words */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-    if(i>2-(xSyncLength >>1))
-    {
-      tempRetValue |= tempRegValue[i]<<(8*i);
-    }
-  }
-
-  /* Return SYNC words */
-  return tempRetValue;
-
-}
-
-
-/**
- * @brief  Returns the variable length width (in number of bits).
- * @param  None.
- * @retval uint8_t Variable length width in bits.
- */
-uint8_t SpiritPktCommonGetVarLengthWidth(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return value */
-  return (tempRegValue & PCKTCTRL3_LEN_WID_MASK)+1;
-
-}
-
-
-/**
- * @brief  Sets the destination address for the Tx packet.
- * @param  cAddress Destination address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetDestinationAddress(uint8_t cAddress)
-{
-  /* Writes value on PCKT_FLT_GOALS_SOURCE_ADDR register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief  Returns the settled destination address.
- * @param  None.
- * @retval uint8_t Transmitted destination address.
- */
-uint8_t SpiritPktCommonGetTransmittedDestAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads value on the PCKT_FLT_GOALS_SOURCE_ADDR register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the node my address. When the filtering on my address is on, if the destination address extracted from the received packet is equal to the content of the
- *         my address, then the packet is accepted (this is the address of the node).
- * @param  cAddress Address of the present node.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetMyAddress(uint8_t cAddress)
-{
-  /* Writes value on the PCKT_FLT_GOALS_TX_ADDR register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief  Returns the address of the present node.
- * @param  None.
- * @retval uint8_t My address (address of this node).
- */
-uint8_t SpiritPktCommonGetMyAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads value on the PCKT_FLT_GOALS_TX_ADDR register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the broadcast address. If the destination address extracted from the received packet is equal to the content of the
- *         BROADCAST_ADDR register, then the packet is accepted.
- * @param  cAddress Broadcast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress)
-{
-  /* Writes value on the PCKT_FLT_GOALS_BROADCAST register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief  Returns the broadcast address.
- * @param  None.
- * @retval uint8_t Broadcast address.
- */
-uint8_t SpiritPktCommonGetBroadcastAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads value on the PCKT_FLT_GOALS_BROADCAST register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the multicast address. When the multicast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- *         MULTICAST_ADDR register, then the packet is accepted.
- * @param  cAddress Multicast address.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetMulticastAddress(uint8_t cAddress)
-{
-  /* Writes value on the PCKT_FLT_GOALS_MULTICAST register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief  Returns the multicast address.
- * @param  None.
- * @retval uint8_t Multicast address.
- */
-uint8_t SpiritPktCommonGetMulticastAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads value on the PCKT_FLT_GOALS_MULTICAST register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  lMask Control mask.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetCtrlMask(uint32_t lMask)
-{
-  uint8_t tempRegValue[4];
-
-  /* Split the 32-bit value in 4 8-bit values */
-  tempRegValue[0] = (uint8_t) lMask;
-  tempRegValue[1] = (uint8_t)(lMask >> 8);
-  tempRegValue[2] = (uint8_t)(lMask >> 16);
-  tempRegValue[3] = (uint8_t)(lMask >> 24);
-
-  /* Writes values on the CKT_FLT_GOALS_CONTROLx_MASK registers */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
- *         bits to be used in filtering. (All 0s no filtering)
- * @param  None.
- * @retval uint32_t Control mask.
- */
-uint32_t SpiritPktCommonGetCtrlMask(void)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempRetValue=0;
-
-  /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
-
-  /* Rebuild the control mask value on a 32-bit integer variable */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-    tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
-  }
-
-  /* Return value */
-  return tempRetValue;
-}
-
-/**
- * @brief  Sets the control field reference. If the bits enabled by the CONTROL_MASK
- *         match the ones of the control fields extracted from the received packet
- *         then the packet is accepted.
- * @param  lReference Control reference.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetCtrlReference(uint32_t lReference)
-{
-  uint8_t tempRegValue[4];
-
-  /* Split the 32-bit value in 4 8-bit values */
-  tempRegValue[0] = (uint8_t) lReference;
-  tempRegValue[1] = (uint8_t)(lReference >> 8);
-  tempRegValue[2] = (uint8_t)(lReference >> 16);
-  tempRegValue[3] = (uint8_t)(lReference >> 24);
-
-  /* Writes values on the CKT_FLT_GOALS_CONTROLx_FIELD registers */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the control field reference.
- * @param  None.
- * @retval uint32_t Control reference.
- */
-uint32_t SpiritPktCommonGetCtrlReference(void)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempRetValue=0;
-
-  /* Reads the PCKT_FLT_GOALS_CONTROLx_FIELD registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
-
-  /* Rebuild the control mask value on a 32-bit integer variable */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-    tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
-  }
-
-  /* Return value */
-  return tempRetValue;
-}
-
-
-/**
- * @brief  Sets the TX control field.
- * @param  lField Tx contro field.
- *         This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField)
-{
-  uint8_t tempRegValue[4];
-
-  /* Split the 32-bit value in 4 8-bit values */
-  tempRegValue[3] = (uint8_t) lField;
-  tempRegValue[2] = (uint8_t)(lField >> 8);
-  tempRegValue[1] = (uint8_t)(lField >> 16);
-  tempRegValue[0] = (uint8_t)(lField >> 24);
-
-  /* Writes value on the TX_CTRL_FIELDx register */
-  g_xStatus = SpiritSpiWriteRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the Tx control field.
- * @param  None.
- * @retval uint32_t Control field of the transmitted packet.
- */
-uint32_t SpiritPktCommonGetTransmittedCtrlField(void)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempRetValue=0;
-
-  /* Reads the TX_CTRL_FIELDx registers */
-  g_xStatus = SpiritSpiReadRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
-
-  /* Rebuild value: build a 32-bit value from the read bytes */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-    tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*(3-i));
-  }
-
-  /* Return value */
-  return tempRetValue;
-
-}
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with My address.
- * @param  xNewState new state for DEST_VS_SOURCE_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-   /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-
-  /* Modify the register value: set or reset the TX source address control */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Set or reset the DESTINATION vs TX enabling bit */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with multicast address.
- * @param  xNewState new state for DEST_VS_MULTICAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PCKT_FLT_OPTIONS register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Enable or disable the filtering option */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  If enabled RX packet is accepted if its destination address matches with broadcast address.
- * @param  xNewState new state for DEST_VS_BROADCAST_ADDRESS.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Enable or disable the filtering option */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the enable bit of the my address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Gets the enable/disable bit in form of SpiritFunctionalState type */
-  if(tempRegValue & 0x08)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-/**
- * @brief  Returns the enable bit of the multicast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Get the enable/disable bit in form of SpiritFunctionalState type */
-  if(tempRegValue & 0x04)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-/**
- * @brief  Returns the enable bit of the broadcast address filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Get the enable/disable bit in form of SpiritFunctionalState type */
-  if(tempRegValue & 0x02)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-
-/**
- * @brief  Returns the destination address of the received packet.
- * @param  None.
- * @retval uint8_t Destination address of the received address.
- */
-uint8_t SpiritPktCommonGetReceivedDestAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RX_ADDR_FIELD0 register value */
-  g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD0_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Returns the control field of the received packet.
- * @param  None.
- * @retval uint32_t Received control field.
- */
-uint32_t SpiritPktCommonGetReceivedCtrlField(void)
-{
-  uint8_t tempRegValue[4];
-  uint32_t tempRetValue=0;
-
-  /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
-  g_xStatus = SpiritSpiReadRegisters(RX_CTRL_FIELD0_BASE, 4, tempRegValue);
-
-  /* Rebuild the control mask value on a 32-bit integer variable */
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-    tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
-  }
-
-  /* Returns value */
-  return tempRetValue;
-}
-
-
-/**
- * @brief  Returns the CRC field of the received packet.
- * @param  cCrcFieldVect array in which the CRC field has to be stored.
- *         This parameter is an uint8_t array of 3 elements.
- * @retval None.
- */
-void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect)
-{
-  uint8_t tempRegValue[3],crcLength;
-  PktCrcMode crcMode;
-  
-  /* Gets the CRC mode in PktCrcMode enum */
-  crcMode=SpiritPktCommonGetCrcMode();
-  
-  /* Cast to uint8_t */
-  crcLength = (uint8_t)crcMode;
-  
-  /* Obtains the real length: see the @ref PktCrcMode enumeration */
-  crcLength >>= 5;
-  if(crcLength>=3) crcLength--;
-  
-  /* Reads the CRC_FIELDx registers value */
-  g_xStatus = SpiritSpiReadRegisters(CRC_FIELD2_BASE, 3,tempRegValue);
-  
-  /* Sets the array to be returned */
-  for(uint8_t i=0 ; i<3 ; i++)
-  {
-    if(i<crcLength) 
-    {
-      cCrcFieldVect[i]=tempRegValue[2-i];
-    }
-    else 
-    {
-      cCrcFieldVect[i]=0;
-    }
-  }
-  
-}
-
-
-/**
- * @brief  Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature is enabled and
- *         a data packet has been correctly received, then an acknowledgement packet is sent back to the originator of the received
- *         packet. If the PIGGYBACKING bit is also set, payload data will be read from the FIFO; otherwise an empty packet is sent
- *         only containing the source and destination addresses and the sequence number of the packet being acknowledged.
- * @param  xAutoAck new state for autoack.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @param  xPiggybacking new state for autoack.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck , SpiritFunctionalState xPiggybacking)
-{
-  uint8_t tempRegValue[2];
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAutoAck));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xPiggybacking));
-  /* Check if piggybacking is enabled and autoack is disabled */
-  s_assert_param(!(xPiggybacking==S_ENABLE && xAutoAck==S_DISABLE));
-
-  /* Reads the PROTOCOL[1:0] registers value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
-  /* Sets the specified LLP option */
-  /* Autoack setting */
-  if(xAutoAck == S_ENABLE)
-  {
-    tempRegValue[1] |= PROTOCOL0_AUTO_ACK_MASK;
-  }
-  else
-  {
-    tempRegValue[1] &= (~PROTOCOL0_AUTO_ACK_MASK);
-  }
-
-  /* Piggybacking setting */
-  if(xPiggybacking == S_ENABLE)
-  {
-    tempRegValue[0] |= PROTOCOL1_PIGGYBACKING_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= (~PROTOCOL1_PIGGYBACKING_MASK);
-  }
-
-  /* Writes data on the PROTOCOL[1:0] registers */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the AUTO ACKNOLEDGEMENT mechanism on the transmitter. On the transmitter side, the NACK_TX field can be used to require or not an acknowledgment for each individual packet: if
- *         NACK_TX is set to "1" then acknowledgment will not be required; if NACK_TX is set to "0" then acknowledgment will be
- *         required.
- * @param  xNewState new state for TX_AUTOACK.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonRequireAck(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads value on the PROTOCOL0 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the ack requirement option */
-  if(xNewState == S_DISABLE)
-  {
-    tempRegValue |= PROTOCOL0_NACK_TX_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL0_NACK_TX_MASK;
-  }
-
-  /* Writes value on the PROTOCOL0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the TX sequence number to be used to start counting.
- * @param  cSeqNumberReload new value for Tx seq number reload.
- * @retval None.
- */
-void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload){
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_SEQ_NUMBER_RELOAD(cSeqNumberReload));
-
-  /* Reads value on the PROTOCOL2 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  tempRegValue &= 0xE7;
-  tempRegValue |= (cSeqNumberReload << 3);
-
-  /* Writes value on the PROTOCOL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the TX sequence number to be used to start counting.
- * @param  cSeqNumberReload new value for Tx seq number reload.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PKT_NMAX_RETX(xNMaxReTx));
-
-  /* Reads the PROTOCOL0 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-  /* Build the value to be written */
-  tempRegValue &= ~PROTOCOL0_NMAX_RETX_MASK;
-  tempRegValue |= xNMaxReTx;
-
-  /* Writes value on the PROTOCOL0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the max number of automatic retransmission.
- * @param  None.
- * @retval uint8_t Max number of retransmissions.
- *         This parameter is an uint8_t.
- */
-uint8_t SpiritPktCommonGetNMaxReTx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL0 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-  /* Build the value to be written */
-  return ((tempRegValue & PROTOCOL0_NMAX_RETX_MASK)>>4);
-
-}
-
-/**
- * @brief  Returns the TX ACK request
- * @param  None.
- * @retval uint8_t Max number of retransmissions.
- *         This parameter is an uint8_t.
- */
-SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PROTOCOL0 register value */
-  g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
-  /* Build the value to be written */
-  return (SpiritFunctionalState)((tempRegValue & TX_PCKT_INFO_NACK_RX)>>2);
-
-}
-   
-   
-/**
- * @brief  Returns the source address of the received packet.
- * @param  None.
- * @retval uint8_t Source address of the received packet.
- */
-uint8_t SpiritPktCommonGetReceivedSourceAddress(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RX_ADDR_FIELD1 register value */
-  g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD1_BASE, 1, &tempRegValue);
-
-  /* Returns value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Returns the sequence number of the received packet.
- * @param  None.
- * @retval uint8_t Received Sequence number.
- */
-uint8_t SpiritPktCommonGetReceivedSeqNumber(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RX_PCKT_INFO register value */
-  g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
-  /* Obtains and returns the sequence number */
-  return tempRegValue & 0x03;
-
-}
-
-
-/**
- * @brief  Returns the Nack bit of the received packet
- * @param  None.
- * @retval uint8_t Value of the Nack bit.
- */
-uint8_t SpiritPktCommonGetReceivedNackRx(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RX_PCKT_INFO register value */
-  g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
-  /* Obtains and returns the RX nack bit */
-  return (tempRegValue >> 2) & 0x01;
-
-}
-
-
-/**
- * @brief  Returns the sequence number of the transmitted packet.
- * @param  None.
- * @retval uint8_t Sequence number of the transmitted packet.
- */
-uint8_t SpiritPktCommonGetTransmittedSeqNumber(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the TX_PCKT_INFO register value */
-  g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRegValue);
-
-  /* Obtains and returns the TX sequence number */
-  return (tempRegValue >> 4) & 0x07;
-
-}
-
-
-/**
- * @brief  Returns the number of retransmission done on the transmitted packet.
- * @param  None.
- * @retval uint8_t Number of retransmissions done until now.
- */
-uint8_t SpiritPktCommonGetNReTx(void)
-{
-  uint8_t tempRetValue;
-
-  /* Reads the TX_PCKT_INFO register value */
-  g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRetValue);
-
-  /* Obtains and returns the number of retransmission done */
-  return (tempRetValue & 0x0F);
-
-}
-
-
-/**
- * @brief  If enabled RX packet is accepted only if the masked control field matches the
- *         masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
- * @param  xNewState new state for Control filtering enable bit.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- * @note   This filtering control is enabled by default but the control mask is by default set to 0.
- *         As a matter of fact the user has to enable the control filtering bit after the packet initialization
- *         because the PktInit routine disables it.
- */
-void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-   /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-
-  /* Modify the register value: set or reset the control bit filtering */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Set or reset the CONTROL filtering enabling bit */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
-  }
-
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the enable bit of the control field filtering.
- * @param  None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Gets the enable/disable bit in form of SpiritFunctionalState type */
-  if(tempRegValue & PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK)
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktMbus.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktMbus.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,354 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_PktMbus.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT MBUS packets.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_PktMbus.h"
-#include "SPIRIT_Radio.h"
-#include "MCU_Interface.h"
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_PktMbus
- * @{
- */
-
-
-/**
- * @defgroup PktMbus_Private_TypesDefinitions           Pkt MBUS Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Private_Defines                    Pkt MBUS Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Private_Macros                     Pkt MBUS Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Private_Variables                  Pkt MBUS Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Private_FunctionPrototypes         Pkt MBUS Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktMbus_Private_Functions                  Pkt MBUS Private Functions
- * @{
- */
-
-
-/**
- * @brief  Initializes the SPIRIT MBUS packet according to the specified parameters in the PktMbusInit struct.
- * @param  pxPktMbusInit pointer to a PktMbusInit structure that contains the configuration information for the specified SPIRIT MBUS PACKET FORMAT.
- *         This parameter is a pointer to @ref PktMbusInit.
- * @retval None.
- */
-void SpiritPktMbusInit(PktMbusInit* pxPktMbusInit)
-{
-  uint8_t tempRegValue[3];
-
-  /* Check the parameters */
-  s_assert_param(IS_MBUS_SUBMODE(pxPktMbusInit->xMbusSubmode));
-
-  /* Packet format config */
-  SpiritPktMbusSetFormat();
-  SpiritPktCommonFilterOnCrc(S_DISABLE);
-  SpiritRadioCsBlanking(S_ENABLE);
-  
-  /* Preamble, postamble and submode config */
-  tempRegValue[0] = pxPktMbusInit->cPreambleLength;
-  tempRegValue[1] = pxPktMbusInit->cPostambleLength;
-  tempRegValue[2] = (uint8_t) pxPktMbusInit->xMbusSubmode;
-
-  /* Writes the new values on the MBUS_PRMBL registers */
-  g_xStatus = SpiritSpiWriteRegisters(MBUS_PRMBL_BASE, 3, tempRegValue);
-
-}
-
-/**
- * @brief  Returns the SPIRIT MBUS packet structure according to the specified parameters in the registers.
- * @param  pxPktMbusInit MBUS packet init structure.
- *         This parameter is a pointer to @ref PktMbusInit.
- * @retval None.
- */
-void SpiritPktMbusGetInfo(PktMbusInit* pxPktMbusInit)
-{
-  uint8_t tempRegValue[3];
-
-  /* Reads the MBUS regs value */
-  g_xStatus = SpiritSpiReadRegisters(MBUS_PRMBL_BASE, 3, tempRegValue);
-
-  /* Fit the structure */
-  pxPktMbusInit->cPreambleLength = tempRegValue[0];
-  pxPktMbusInit->cPostambleLength = tempRegValue[1];
-  pxPktMbusInit->xMbusSubmode = (MbusSubmode) (tempRegValue[2]&0x0E);
-
-}
-
-
-/**
- * @brief  Configures the MBUS packet format as the one used by SPIRIT.
- * @param  None.
- * @retval None.
- */
-void SpiritPktMbusSetFormat(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Sets format bits. Also set to 0 the direct RX mode bits */
-  tempRegValue &= 0x0F;
-  tempRegValue |= ((uint8_t)PCKTCTRL3_PCKT_FRMT_MBUS);
-
-  /* Writes value on the PCKTCTRL3 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Reads the PCKTCTRL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build the new value. Set to 0 the direct TX mode bits */
-  tempRegValue &= 0xF3;
-
-  /* Writes the value on the PCKTCTRL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Mask a reserved bit */
-  tempRegValue &= ~0x20;
-
-  /* Writes the value on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets how many chip sequence “01” shall be added in the preamble
- *         respect to the minimum value as defined according to the specified sub-mode.
- * @param  cPreamble the number of chip sequence.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktMbusSetPreamble(uint8_t cPreamble)
-{
-  /* Modifies the MBUS_PRMBL register value */
-  g_xStatus = SpiritSpiWriteRegisters(MBUS_PRMBL_BASE, 1, &cPreamble);
-
-}
-
-
-/**
- * @brief  Returns how many chip sequence "01" are added in the preamble
- *         respect to the minimum value as defined according to the specified sub-mode.
- * @param  None.
- * @retval uint8_t Preable in number of "01" chip sequences.
- */
-uint8_t SpiritPktMbusGetPreamble(void)
-{
-  uint8_t tempRegValue;
-
-  /* Modifies the MBUS_PRMBL register value */
-  g_xStatus = SpiritSpiReadRegisters(MBUS_PRMBL_BASE, 1, &tempRegValue);
-
-  /* Return value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets how many chip sequence “01” will be used in postamble
- * @param  cPostamble the number of chip sequence.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktMbusSetPostamble(uint8_t cPostamble)
-{
-  /* Modifies the MBUS_PSTMBL register value */
-  g_xStatus = SpiritSpiWriteRegisters(MBUS_PSTMBL_BASE, 1, &cPostamble);
-
-}
-
-
-/**
- * @brief  Returns how many chip sequence "01" are used in the postamble
- * @param  None.
- * @retval uint8_t Postamble in number of "01" chip sequences.
- */
-uint8_t SpiritPktMbusGetPostamble(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the MBUS_PSTMBL register */
-  g_xStatus = SpiritSpiReadRegisters(MBUS_PSTMBL_BASE, 1, &tempRegValue);
-
-  /* Returns value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the MBUS submode used.
- * @param  xMbusSubmode the submode used.
- *         This parameter can be any value of @ref MbusSubmode.
- * @retval None.
- */
-void SpiritPktMbusSetSubmode(MbusSubmode xMbusSubmode)
-{
-  /* Modifies the MBUS_CTRL register value */
-  g_xStatus = SpiritSpiWriteRegisters(MBUS_CTRL_BASE, 1, (uint8_t*)xMbusSubmode);
-
-}
-
-
-/**
- * @brief  Returns the MBUS submode used.
- * @param  None.
- * @retval MbusSubmode MBUS submode.
- */
-MbusSubmode SpiritPktMbusGetSubmode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the MBUS_CTRL register value */
-  g_xStatus = SpiritSpiReadRegisters(MBUS_CTRL_BASE, 1, &tempRegValue);
-
-  /* Returns value */
-  return (MbusSubmode) tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the payload length for SPIRIT MBUS packets.
- * @param  nPayloadLength payload length in bytes.
- *         This parameter is an uint16_t.
- * @retval None.
- */
-void SpiritPktMbusSetPayloadLength(uint16_t nPayloadLength)
-{
-  uint8_t tempRegValue[2];
-
-  /* Computes PCKTLEN0 value from nPayloadLength */
-  tempRegValue[1]=BUILD_PCKTLEN0(nPayloadLength);//(uint8_t)nPayloadLength;
-  /* Computes PCKTLEN1 value from nPayloadLength */
-  tempRegValue[0]=BUILD_PCKTLEN1(nPayloadLength);//(uint8_t)(nPayloadLength>>8);
-
-  /* Writes data on the PCKTLEN1/0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the payload length for SPIRIT MBUS packets.
- * @param  None.
- * @retval uint16_t Payload length in bytes.
- */
-uint16_t SpiritPktMbusGetPayloadLength(void)
-{
-  uint8_t tempRegValue[2];
-
-  /* Reads the packet length registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-  /* Returns the packet length */
-  return ((((uint16_t)tempRegValue[0])<<8) + (uint16_t) tempRegValue[1]);
-
-}
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktStack.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktStack.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,687 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_PktStack.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT STack packets.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_PktStack.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_PktStack
- * @{
- */
-
-
-/**
- * @defgroup PktStack_Private_TypesDefinitions          Pkt STack Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Private_Defines                   Pkt STack Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Private_Macros                    Pkt STack Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Private_Variables                 Pkt STack Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Private_FunctionPrototypes        Pkt STack Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktStack_Private_Functions                 Pkt STack Private Functions
- * @{
- */
-
-
-/**
- * @brief  Initializes the SPIRIT STack packet according to the specified
- *         parameters in the PktStackInit.
- * @param  pxPktStackInit STack packet init structure.
- *         This parameter is a pointer to @ref PktStackInit.
- * @retval None.
- */
-void SpiritPktStackInit(PktStackInit* pxPktStackInit)
-{
-  uint8_t tempRegValue[4], i;
-
-  /* Check the parameters */
-  s_assert_param(IS_STACK_PREAMBLE_LENGTH(pxPktStackInit->xPreambleLength));
-  s_assert_param(IS_STACK_SYNC_LENGTH(pxPktStackInit->xSyncLength));
-  s_assert_param(IS_STACK_CRC_MODE(pxPktStackInit->xCrcMode));
-  s_assert_param(IS_STACK_LENGTH_WIDTH_BITS(pxPktStackInit->cPktLengthWidth));
-  s_assert_param(IS_STACK_FIX_VAR_LENGTH(pxPktStackInit->xFixVarLength));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackInit->xFec));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackInit->xDataWhitening));
-  s_assert_param(IS_STACK_CONTROL_LENGTH(pxPktStackInit->xControlLength));
-
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
-
-  /* Mask a reserved bit */
-  tempRegValue[0] &= ~0x20;
-
-  /* Always (!) set the automatic packet filtering */
-  tempRegValue[0] |= PROTOCOL1_AUTO_PCKT_FLT_MASK;
-
-  /* Writes the value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
-
-  /* Reads the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-
-  /* Always reset the control and source filtering */
-  tempRegValue[0] &= ~(PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK | PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK);
-
-  /* Writes the value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-
-
-  /* Address and control length setting: source and destination address are always present so ADDRESS_LENGTH=2 */
-  tempRegValue[0] = 0x10 | ((uint8_t) pxPktStackInit->xControlLength);
-
-
-  /* Packet format and width length setting */
-  pxPktStackInit->cPktLengthWidth == 0 ? pxPktStackInit->cPktLengthWidth=1 : pxPktStackInit->cPktLengthWidth;
-  tempRegValue[1] = ((uint8_t) PCKTCTRL3_PCKT_FRMT_STACK) | ((uint8_t)(pxPktStackInit->cPktLengthWidth-1));
-
-  /* Preamble, sync and fixed or variable length setting */
-  tempRegValue[2] = ((uint8_t) pxPktStackInit->xPreambleLength) | ((uint8_t) pxPktStackInit->xSyncLength) |
-                    ((uint8_t) pxPktStackInit->xFixVarLength);
-
-  /* CRC length, whitening and FEC setting */
-  tempRegValue[3] = (uint8_t) pxPktStackInit->xCrcMode;
-
-  if(pxPktStackInit->xDataWhitening == S_ENABLE)
-  {
-     tempRegValue[3] |= PCKTCTRL1_WHIT_MASK;
-  }
-
-  if(pxPktStackInit->xFec == S_ENABLE)
-  {
-     tempRegValue[3] |= PCKTCTRL1_FEC_MASK;
-  }
-  
-  /* Writes registers */
-  SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 4, tempRegValue);
-
-  /* Sync words setting */
-  for(i=0;i<4;i++)
-  {
-    if(i<3-(pxPktStackInit->xSyncLength >>1))
-    {
-      tempRegValue[i]=0;
-    }
-    else
-    {
-      tempRegValue[i] = (uint8_t)(pxPktStackInit->lSyncWords>>(8*i));
-    }
-  }
-
-  /* Enables or disables the CRC check */
-  if(pxPktStackInit->xCrcMode == PKT_NO_CRC)
-  {
-    SpiritPktStackFilterOnCrc(S_DISABLE);
-  }
-  else
-  {
-    SpiritPktStackFilterOnCrc(S_ENABLE);
-  }
-
-  /* Writes registers */
-  g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the SPIRIT STack packet structure according to the specified parameters in the registers.
- * @param  pxPktStackInit STack packet init structure.
- *         This parameter is a pointer to @ref PktStackInit.
- * @retval None.
- */
-void SpiritPktStackGetInfo(PktStackInit* pxPktStackInit)
-{
-  uint8_t tempRegValue[10];
-
-  /* Reads registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 10, tempRegValue);
-
-  /* Length width */
-  pxPktStackInit->cPktLengthWidth=(tempRegValue[1] & 0x0F)+1;
-
-  /* Control length */
-  pxPktStackInit->xControlLength=(StackControlLength)(tempRegValue[0] & 0x07);
-
-  /* CRC mode */
-  pxPktStackInit->xCrcMode=(StackCrcMode)(tempRegValue[3] & 0xE0);
-
-  /* Whitening */
-  pxPktStackInit->xDataWhitening=(SpiritFunctionalState)((tempRegValue[3] >> 4) & 0x01);
-
-  /* FEC */
-  pxPktStackInit->xFec=(SpiritFunctionalState)(tempRegValue[3] & 0x01);
-
-  /* FIX or VAR bit */
-  pxPktStackInit->xFixVarLength=(StackFixVarLength)(tempRegValue[2] & 0x01);
-
-  /* Preamble length */
-  pxPktStackInit->xPreambleLength=(StackPreambleLength)(tempRegValue[2] & 0xF8);
-
-  /* Sync length */
-  pxPktStackInit->xSyncLength=(StackSyncLength)(tempRegValue[2] & 0x06);
-
-  /* sync Words */
-  pxPktStackInit->lSyncWords=0;
-  for(uint8_t i=0 ; i<4 ; i++)
-  {
-      if(i>2-(pxPktStackInit->xSyncLength >>1))
-      {
-        pxPktStackInit->lSyncWords |= tempRegValue[i+6]<<(8*i);
-      }
-  }
-
-}
-
-
-/**
- * @brief  Initializes the SPIRIT STack packet addresses according to the specified
- *         parameters in the PktStackAddresses struct.
- * @param  pxPktStackAddresses STack packet addresses init structure.
- *         This parameter is a pointer to @ref PktStackAddressesInit .
- * @retval None.
- */
-void SpiritPktStackAddressesInit(PktStackAddressesInit* pxPktStackAddresses)
-{
-  uint8_t tempRegValue[3];
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackAddresses->xFilterOnMyAddress));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackAddresses->xFilterOnMulticastAddress));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackAddresses->xFilterOnBroadcastAddress));
-  
-  /* Reads the filtering options ragister */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-  
-  /* Enables or disables filtering on my address */
-  if(pxPktStackAddresses->xFilterOnMyAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
-  }
-  
-  /* Enables or disables filtering on multicast address */
-  if(pxPktStackAddresses->xFilterOnMulticastAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
-  }
-  
-  /* Enables or disables filtering on broadcast address */
-  if(pxPktStackAddresses->xFilterOnBroadcastAddress == S_ENABLE)
-  {
-    tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
-  }
-  
-  /* Writes value on the register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-  
-  /* Fills array with the addresses passed in the structure */
-  tempRegValue[0] = pxPktStackAddresses->cBroadcastAddress;
-  tempRegValue[1] = pxPktStackAddresses->cMulticastAddress;
-  tempRegValue[2] = pxPktStackAddresses->cMyAddress;
-  
-  /* Writes them on the addresses registers */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the SPIRIT STack packet addresses structure according to the specified
-*         parameters in the registers.
-* @param  pxPktStackAddresses STack packet addresses init structure.
-*         This parameter is a pointer to @ref PktStackAddresses.
-* @retval None.
-*/
-void SpiritPktStackGetAddressesInfo(PktStackAddressesInit* pxPktStackAddresses)
-{
-  uint8_t tempRegValue[3];
-  
-  /* Reads values on the PCKT_FLT_GOALS registers */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
-  
-  /* Fit the structure with the read addresses */
-  pxPktStackAddresses->cBroadcastAddress = tempRegValue[0];
-  pxPktStackAddresses->cMulticastAddress = tempRegValue[1];
-  pxPktStackAddresses->cMyAddress = tempRegValue[2];
-  
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
-  
-  /* Fit the structure with the read filtering bits */
-  pxPktStackAddresses->xFilterOnBroadcastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 1) & 0x01);
-  pxPktStackAddresses->xFilterOnMulticastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 2) & 0x01);
-  pxPktStackAddresses->xFilterOnMyAddress = (SpiritFunctionalState)((tempRegValue[0] >> 3) & 0x01);
-  
-}
-
-
-/**
-* @brief  Initializes the SPIRIT STack packet LLP options according to the specified
-*         parameters in the PktStackLlpInit struct.
-* @param  pxPktStackLlpInit STack packet LLP init structure.
-*         This parameter is a pointer to @ref PktStackLlpInit.
-* @retval None.
-*/
-void SpiritPktStackLlpInit(PktStackLlpInit* pxPktStackLlpInit)
-{
-  uint8_t tempRegValue[2];
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackLlpInit->xPiggybacking));
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktStackLlpInit->xAutoAck));
-  s_assert_param(IS_STACK_NMAX_RETX(pxPktStackLlpInit->xNMaxRetx));
-  /* check if piggybacking is enabled and autoack is disabled */
-  s_assert_param(!(pxPktStackLlpInit->xPiggybacking==S_ENABLE && pxPktStackLlpInit->xAutoAck==S_DISABLE));
-
-  /* Piggybacking mechanism setting on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-  if(pxPktStackLlpInit->xPiggybacking == S_ENABLE)
-  {
-    tempRegValue[0] |= PROTOCOL1_PIGGYBACKING_MASK;
-  }
-  else
-  {
-    tempRegValue[0] &= ~PROTOCOL1_PIGGYBACKING_MASK;
-  }
-
-  /* RX and TX autoack mechanisms setting on the PROTOCOL0 register */
-  if(pxPktStackLlpInit->xAutoAck == S_ENABLE)
-  {
-    tempRegValue[1] |= PROTOCOL0_AUTO_ACK_MASK;
-  }
-  else
-  {
-    tempRegValue[1] &= ~PROTOCOL0_AUTO_ACK_MASK;
-  }
-
-  /* Max number of retransmission setting */
-  tempRegValue[1] &= ~PROTOCOL0_NMAX_RETX_MASK;
-  tempRegValue[1] |= pxPktStackLlpInit->xNMaxRetx;
-
-  /* Writes registers */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the SPIRIT STack packet LLP options according to the specified
- *         values in the registers.
- * @param  pxPktStackLlpInit STack packet LLP structure.
- *         This parameter is a pointer to @ref PktStackLlpInit.
- * @retval None.
- */
-void SpiritPktStackLlpGetInfo(PktStackLlpInit* pxPktStackLlpInit)
-{
-  uint8_t tempRegValue[2];
-
-  /* Piggybacking mechanism setting on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
-  /* Fit the structure with the read values */
-  pxPktStackLlpInit->xPiggybacking = (SpiritFunctionalState)((tempRegValue[0] >> 6) & 0x01);
-  pxPktStackLlpInit->xAutoAck = (SpiritFunctionalState)((tempRegValue[1] >> 2) & 0x01);
-  pxPktStackLlpInit->xNMaxRetx = (StackNMaxReTx)(tempRegValue[1] & PROTOCOL0_NMAX_RETX_MASK);
-
-}
-
-
-/**
- * @brief  Configures the STack packet format for SPIRIT.
- * @param  None.
- * @retval None.
- */
-void SpiritPktStackSetFormat(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Build value to be written. Also set to 0 the direct RX mode bits */
-  tempRegValue &= 0x0F;
-  tempRegValue |= ((uint8_t)PCKTCTRL3_PCKT_FRMT_STACK);
-
-  /* Writes the value on the PCKTCTRL3 register. */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Reads the PCKTCTRL1 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Build the new value. Set to 0 the direct TX mode bits */
-  tempRegValue &= 0xF3;
-
-  /* Writes the PCKTCTRL1 value on register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-  /* Reads the PROTOCOL1 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Mask a reserved bit */
-  tempRegValue &= ~0x20;
-
-  /* Writes the value on the PROTOCOL1 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the address length for SPIRIT STack packets (always 2).
- * @param  None.
- * @retval None.
- */
-void SpiritPktStackSetAddressLength(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the PCKTCTRL4 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-  /* Build the new value */
-  tempRegValue &= ~PCKTCTRL4_ADDRESS_LEN_MASK;
-  tempRegValue |= ((uint8_t)0x10);
-
-  /* Writes the value on the PCKTCTRL4 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the payload length for SPIRIT STack packets. Since the packet length
- *         depends from the address (always 2 for this packet format)
- *         and the control field size, this function reads the control length register
- *         content in order to determine the correct packet length to be written.
- * @param  nPayloadLength payload length in bytes.
- *         This parameter can be any value of uint16_t.
- * @retval None.
- */
-void SpiritPktStackSetPayloadLength(uint16_t nPayloadLength)
-{
-  uint8_t tempRegValue[2];
-
-  /* Computes the oversize (address + control) size */
-  uint16_t overSize = 2 + (uint16_t) SpiritPktStackGetControlLength();
-
-  /* Computes PCKTLEN0 value from lPayloadLength */
-  tempRegValue[1]=STACK_BUILD_PCKTLEN0(nPayloadLength+overSize);
-  /* Computes PCKTLEN1 value from lPayloadLength */
-  tempRegValue[0]=STACK_BUILD_PCKTLEN1(nPayloadLength+overSize);
-
-  /* Writes the value on the PCKTLENx registers */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the payload length for SPIRIT STack packets. Since the
- *         packet length depends from the address and the control
- *         field size, this function reads the correspondent
- *         registers in order to determine the correct payload length
- *         to be returned.
- * @param  None.
- * @retval uint16_t Payload length.
- */
-uint16_t SpiritPktStackGetPayloadLength(void)
-{
-  uint8_t tempRegValue[2];
-  /* Computes the oversize (address + control) size */
-  uint16_t overSize = 2 + (uint16_t) SpiritPktStackGetControlLength();
-
-  /* Reads the PCKTLEN1 registers value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTLEN1_BASE, 2, tempRegValue);
-
-  /* Rebuild and return the payload length value */
-  return ((((uint16_t) tempRegValue[1])<<8) + (uint16_t) tempRegValue[0] - overSize);
-
-}
-
-
-/**
- * @brief  Computes and sets the variable payload length for SPIRIT STack packets.
- * @param  nMaxPayloadLength payload length in bytes.
- *         This parameter is an uint16_t.
- * @param  xControlLength control length in bytes.
- *         This parameter can be any value of @ref StackControlLength.
- * @retval None.
- */
-void SpiritPktStackSetVarLengthWidth(uint16_t nMaxPayloadLength, StackControlLength xControlLength)
-{
-  uint8_t tempRegValue,
-          i;
-  uint32_t packetLength;
-
-
-  /* packet length = payload length + address length (2) + control length */
-  packetLength=nMaxPayloadLength+2+xControlLength;
-
-  /* Computes the number of bits */
-  for(i=0;i<16;i++)
-  {
-    if(packetLength == 0) 
-    {
-      break;
-    }
-    packetLength >>= 1;
-  }
-  i==0 ? i=1 : i;
-
-  /* Reads the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-  /* Build the register value */
-  tempRegValue &= ~PCKTCTRL3_LEN_WID_MASK;
-  tempRegValue |= ((uint8_t)(i-1));
-
-  /* Writes the PCKTCTRL3 register value */
-  g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Rx packet source mask. Used to mask the address of the accepted packets. If 0 -> no filtering.
- * @param  cMask Rx source mask.
- *         This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktStackSetRxSourceMask(uint8_t cMask)
-{
-  /* Writes value on the register PCKT_FLT_GOALS_SOURCE_MASK */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_SOURCE_MASK_BASE, 1, &cMask);
-
-}
-
-
-/**
- * @brief  Returns the Rx packet source mask. Used to mask the address of the accepted packets. If 0 -> no filtering.
- * @param  None.
- * @retval uint8_t Rx source mask.
- */
-uint8_t SpiritPktStackGetRxSourceMask(void)
-{
-  uint8_t tempRegValue;
-
-  /* Writes value on the PCKT_FLT_GOALS_SOURCE_MASK register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_SOURCE_MASK_BASE, 1, &tempRegValue);
-
-  /* Return the read value */
-  return tempRegValue;
-
-}
-
-/**
- * @brief  Returns the packet length field of the received packet.
- * @param  None.
- * @retval uint16_t Packet length.
- */
-uint16_t SpiritPktStackGetReceivedPktLength(void)
-{
-  uint8_t tempRegValue[2];
-  uint16_t tempLength;
-  
-  /* Reads the RX_PCKT_LENx registers value */
-  g_xStatus = SpiritSpiReadRegisters(RX_PCKT_LEN1_BASE, 2, tempRegValue);
-
-  /* Rebuild and return the the length field */
-  tempLength = ((((uint16_t) tempRegValue[0]) << 8) + (uint16_t) tempRegValue[1]);
-  
-  /* Computes the oversize (address + control) size */
-  tempLength -= 2 + (uint16_t) SpiritPktStackGetControlLength();
-  
-  return tempLength;
-
-}
-
-
-/**
- * @brief  If enabled RX packet is accepted only if the masked source address field matches the
- *         masked source address field reference (SOURCE_MASK & SOURCE_FIELD_REF == SOURCE_MASK & RX_SOURCE_FIELD).
- * @param  xNewState new state for Source address filtering enable bit.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- * @note   This filtering control is enabled by default but the source address mask is by default set to 0.
- *         As a matter of fact the user has to enable the source filtering bit after the packet initialization
- *         because the PktInit routine disables it.
- */
-void SpiritPktStackFilterOnSourceAddress(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-   /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-
-  /* Modify the register value: set or reset the source bit filtering */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-  /* Set or reset the SOURCE ADDRESS filtering enabling bit */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK;
-  }
-
-  /* Writes the new value on the PCKT_FLT_OPTIONS register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Qi.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Qi.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,636 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Qi.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT QI.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Qi.h"
-#include "MCU_Interface.h"
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Qi
- * @{
- */
-
-
-/**
- * @defgroup Qi_Private_TypesDefinitions        QI Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Private_Defines                 QI Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Private_Macros                  QI Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Private_Variables               QI Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Private_FunctionPrototypes      QI Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Qi_Private_Functions               QI Private Functions
- * @{
- */
-
-/**
- * @brief  Enables/Disables the PQI Preamble Quality Indicator check. The running peak PQI is
- *         compared to a threshold value and the preamble valid IRQ is asserted as soon as the threshold is passed.
- * @param  xNewState new state for PQI check.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritQiPqiCheck(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the PQI Check bit on the QI_BASE register */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= QI_PQI_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~QI_PQI_MASK;
-  }
-
-  /* Writes value on the QI register */
-  g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables/Disables the Synchronization Quality Indicator check. The running peak SQI is
- *         compared to a threshold value and the sync valid IRQ is asserted as soon as the threshold is passed.
- * @param  xNewState new state for SQI check.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritQiSqiCheck(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the SQI Check bit on the QI_BASE register */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= QI_SQI_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~QI_SQI_MASK;
-  }
-
-  /* Writes value on the QI register */
-  g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
- * @param  xPqiThr parameter of the formula above.
- * 	   This variable is a @ref PqiThreshold.
- * @retval None.
- */
-void SpiritQiSetPqiThreshold(PqiThreshold xPqiThr)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_PQI_THR(xPqiThr));
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Build the PQI threshold value to be written */
-  tempRegValue &= 0xC3;
-  tempRegValue |= ((uint8_t)xPqiThr);
-
-  /* Writes value on the QI register */
-  g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
- * @param  None.
- * @retval PqiThreshold PQI threshold (PQI_TH of the formula above).
- */
-PqiThreshold SpiritQiGetPqiThreshold(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return the PQI threshold value */
-  return (PqiThreshold)(tempRegValue & 0x3C);
-
-}
-
-
-/**
- * @brief  Sets the SQI threshold. The synchronization quality
- *         threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3. When SQI_TH is 0 perfect match is required; when
- *         SQI_TH = 1, 2, 3 then 1, 2, or 3 bit errors are respectively accepted. It is recommended that the SQI check is always
- *         enabled.
- * @param  xSqiThr parameter of the formula above.
- * 	   This parameter is a @ref SqiThreshold.
- * @retval None.
- */
-void SpiritQiSetSqiThreshold(SqiThreshold xSqiThr)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SQI_THR(xSqiThr));
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Build the SQI threshold value to be written */
-  tempRegValue &= 0x3F;
-  tempRegValue |= ((uint8_t)xSqiThr);
-
-  /* Writes the new value on the QI register */
-  g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the SQI threshold. The synchronization quality threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3.
- * @param  None.
- * @retval SqiThreshold SQI threshold (SQI_TH of the formula above).
- */
-SqiThreshold SpiritQiGetSqiThreshold(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the QI register value */
-  g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return the SQI threshold value */
-  return (SqiThreshold)(tempRegValue & 0xC0);
-
-}
-
-
-/**
- * @brief  Returns the PQI value.
- * @param  None.
- * @retval uint8_t PQI value.
- */
-uint8_t SpiritQiGetPqi(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the LINK_QUALIF2 register value */
-  g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF2_BASE, 1, &tempRegValue);
-
-  /* Returns the PQI value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Returns the SQI value.
- * @param  None.
- * @retval uint8_t SQI value.
- */
-uint8_t SpiritQiGetSqi(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register LINK_QUALIF1 value */
-  g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return the SQI value */
-  return (tempRegValue & 0x7F);
-
-}
-
-
-/**
- * @brief  Returns the LQI value.
- * @param  None.
- * @retval uint8_t LQI value.
- */
-uint8_t SpiritQiGetLqi(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the LINK_QUALIF0 register value */
-  g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF0_BASE, 1, &tempRegValue);
-
-  /* Rebuild and return the LQI value */
-  return ((tempRegValue & 0xF0)>> 4);
-
-}
-
-
-/**
- * @brief  Returns the CS status.
- * @param  None.
- * @retval SpiritFlagStatus CS value (S_SET or S_RESET).
- */
-SpiritFlagStatus SpiritQiGetCs(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the LINK_QUALIF1 register value */
-  g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
-
-  /* Rebuild and returns the CS status value */
-  if((tempRegValue & 0x80) == 0)
-  {
-    return S_RESET;
-  }
-  else
-  {
-    return S_SET;
-  }
-
-}
-
-
-/**
- * @brief  Returns the RSSI value. The measured power is reported in steps of half a dB from 0 to 255 and is offset in such a way that -120 dBm corresponds
- *         to 20.
- * @param  None.
- * @retval uint8_t RSSI value.
- */
-uint8_t SpiritQiGetRssi(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RSSI_LEVEL register value */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_LEVEL_BASE, 1, &tempRegValue);
-
-  /* Returns the RSSI value */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Sets the RSSI threshold.
- * @param  cRssiThr RSSI threshold reported in steps of half a dBm with a -130 dBm offset.
- *         This parameter must be a uint8_t.
- * @retval None.
- */
-void SpiritQiSetRssiThreshold(uint8_t cRssiThr)
-{
-  /* Writes the new value on the RSSI_TH register */
-  g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &cRssiThr);
-
-}
-
-
-/**
- * @brief  Returns the RSSI threshold.
- * @param  None.
- * @retval uint8_t RSSI threshold.
- */
-uint8_t SpiritQiGetRssiThreshold(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RSSI_TH register value */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_TH_BASE, 1, &tempRegValue);
-
-  /* Returns RSSI threshold */
-  return tempRegValue;
-
-}
-
-
-/**
- * @brief  Computes the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5
- * @param  nDbmValue RSSI threshold reported in dBm.
- *         This parameter must be a sint16_t.
- * @retval uint8_t RSSI threshold corresponding to dBm value.
- */
-uint8_t SpiritQiComputeRssiThreshold(int nDbmValue)
-{
-  /* Check the parameters */
-  s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
-
-  /* Computes the RSSI threshold for register */
-  return 2*(nDbmValue+130);
-
-}
-
-/**
- * @brief  Sets the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5.
- * @param  nDbmValue RSSI threshold reported in dBm.
- *         This parameter must be a sint16_t.
- * @retval None.
- */
-void SpiritQiSetRssiThresholddBm(int nDbmValue)
-{
-  uint8_t tempRegValue=2*(nDbmValue+130);
-
-  /* Check the parameters */
-  s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
-
-  /* Writes the new value on the RSSI_TH register */
-  g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &tempRegValue);
-
-}
-
-/**
- * @brief  Sets the RSSI filter gain. This parameter sets the bandwidth of a low pass IIR filter (RSSI_FLT register, allowed values 0..15), a
- *         lower values gives a faster settling of the measurements but lower precision. The recommended value for such parameter is 14.
- * @param  xRssiFg RSSI filter gain value.
- *         This parameter can be any value of @ref RssiFilterGain.
- * @retval None.
- */
-void SpiritQiSetRssiFilterGain(RssiFilterGain xRssiFg)
-{
-  uint8_t tempRegValue;
-
-   /* Check the parameters */
-  s_assert_param(IS_RSSI_FILTER_GAIN(xRssiFg));
-
-  /* Reads the RSSI_FLT register */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-  /* Sets the specified filter gain */
-  tempRegValue &= 0x0F;
-  tempRegValue |= ((uint8_t)xRssiFg);
-
-  /* Writes the new value on the RSSI_FLT register */
-  g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the RSSI filter gain.
- * @param  None.
- * @retval RssiFilterGain RSSI filter gain.
- */
-RssiFilterGain SpiritQiGetRssiFilterGain(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RSSI_FLT register */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-  /* Rebuild and returns the filter gain value */
-  return (RssiFilterGain)(tempRegValue & 0xF0);
-
-}
-
-
-/**
- * @brief  Sets the CS Mode. When static carrier sensing is used (cs_mode = 0), the carrier sense signal is asserted when the measured RSSI is above the
- *         value specified in the RSSI_TH register and is deasserted when the RSSI falls 3 dB below the same threshold.
- *         When dynamic carrier sense is used (cs_mode = 1, 2, 3), the carrier sense signal is asserted if the signal is above the
- *         threshold and a fast power increase of 6, 12 or 18 dB is detected; it is deasserted if a power fall of the same amplitude is
- *         detected.
- * @param  xCsMode CS mode selector.
- *         This parameter can be any value of @ref CSMode.
- * @retval None.
- */
-void SpiritQiSetCsMode(CSMode xCsMode)
-{
-  uint8_t tempRegValue;
-
-   /* Check the parameters */
-  s_assert_param(IS_CS_MODE(xCsMode));
-
-  /* Reads the RSSI_FLT register */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-  /* Sets bit to select the CS mode */
-  tempRegValue &= ~0x0C;
-  tempRegValue |= ((uint8_t)xCsMode);
-
-  /* Writes the new value on the RSSI_FLT register */
-  g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the CS Mode.
- * @param  None.
- * @retval CSMode CS mode.
- */
-CSMode SpiritQiGetCsMode(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the RSSI_FLT register */
-  g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-
-  /* Rebuild and returns the CS mode value */
-  return (CSMode)(tempRegValue & 0x0C);
-
-}
-
-/**
- * @brief  Enables/Disables the CS Timeout Mask. If enabled CS value contributes to timeout disabling.
- * @param  xNewState new state for CS Timeout Mask.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritQiCsTimeoutMask(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL2 register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the CS timeout mask */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL2_CS_TIMEOUT_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL2_CS_TIMEOUT_MASK;
-  }
-
-  /* Writes the new value on the PROTOCOL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables/Disables the PQI Timeout Mask. If enabled PQI value contributes to timeout disabling.
- * @param  xNewState new state for PQI Timeout Mask.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritQiPqiTimeoutMask(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL2 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the PQI timeout mask */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL2_PQI_TIMEOUT_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL2_PQI_TIMEOUT_MASK;
-  }
-
-  /* Writes the new value on the PROTOCOL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables/Disables the SQI Timeout Mask. If enabled SQI value contributes to timeout disabling.
- * @param  xNewState new state for SQI Timeout Mask.
- *         This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritQiSqiTimeoutMask(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-  /* Reads the PROTOCOL2 register */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  /* Enables or disables the SQI timeout mask */
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL2_SQI_TIMEOUT_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL2_SQI_TIMEOUT_MASK;
-  }
-
-  /* Writes the new value on the PROTOCOL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3144 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Radio.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   This file provides all the low level API to manage Analog and Digital
-  *          radio part of SPIRIT.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Radio.h"
-#include "MCU_Interface.h"
-#include <math.h>
-
-/** @addtogroup SPIRIT_Libraries
-* @{
-*/
-
-
-/** @addtogroup SPIRIT_Radio
-* @{
-*/
-
-
-/** @defgroup Radio_Private_TypesDefinitions            Radio Private Types Definitions
-* @{
-*/
-
-
-/**
-* @}
-*/
-
-
-/** @defgroup Radio_Private_Defines                     Radio Private Defines
-* @{
-*/
-
-
-
-
-/**
-* @}
-*/
-
-
-/** @defgroup Radio_Private_Macros                      Radio Private Macros
-* @{
-*/
-#define XTAL_FLAG(xtalFrequency)               (xtalFrequency>=25e6) ? XTAL_FLAG_26_MHz:XTAL_FLAG_24_MHz
-
-#define ROUND(A)                                  (((A-(uint32_t)A)> 0.5)? (uint32_t)A+1:(uint32_t)A)
-/**
-* @}
-*/
-
-
-/** @defgroup Radio_Private_Variables                   Radio Private Variables
-* @{
-*/
-/**
-* @brief  The Xtal frequency. To be set by the user (see SetXtalFreq() function)
-*/
-static uint32_t s_lXtalFrequency;
-
-/**
-* @brief  Factor is: B/2 used in the formula for SYNTH word calculation
-*/
-static const uint8_t s_vectcBHalfFactor[4]={(HIGH_BAND_FACTOR/2), (MIDDLE_BAND_FACTOR/2), (LOW_BAND_FACTOR/2), (VERY_LOW_BAND_FACTOR/2)};
-
-/**
-* @brief  BS value to write in the SYNT0 register according to the selected band
-*/
-static const uint8_t s_vectcBandRegValue[4]={SYNT0_BS_6, SYNT0_BS_12, SYNT0_BS_16, SYNT0_BS_32};
-
-
-/**
-* @brief  It represents the available channel bandwidth times 10 for 26 Mhz xtal.
-* @note   The channel bandwidth for others xtal frequencies can be computed since this table
-*         multiplying the current table by a factor xtal_frequency/26e6.
-*/
-static const uint16_t s_vectnBandwidth26M[90]=
-{
-  8001, 7951, 7684, 7368, 7051, 6709, 6423, 5867, 5414, \
-    4509, 4259, 4032, 3808, 3621, 3417, 3254, 2945, 2703, \
-      2247, 2124, 2015, 1900, 1807, 1706, 1624, 1471, 1350, \
-        1123, 1062, 1005,  950,  903,  853,  812,  735,  675, \
-          561,  530,  502,  474,  451,  426,  406,  367,  337, \
-            280,  265,  251,  237,  226,  213,  203,  184,  169, \
-              140,  133,  126,  119,  113,  106,  101,   92,   84, \
-                70,   66,   63,   59,   56,   53,   51,   46,   42, \
-                  35,   33,   31,   30,   28,   27,   25,   23,   21, \
-                    18,   17,   16,   15,   14,   13,   13,   12,   11
-};
-
-/**
-* @brief  It represents the available VCO frequencies
-*/
-static const uint16_t s_vectnVCOFreq[16]=
-{
-  4644, 4708, 4772, 4836, 4902, 4966, 5030, 5095, \
-    5161, 5232, 5303, 5375, 5448, 5519, 5592, 5663
-};
-
-/**
-* @brief  This variable is used to enable or disable
-*  the VCO calibration WA called at the end of the SpiritRadioSetFrequencyBase fcn.
-*  Default is enabled.
-*/
-static SpiritFunctionalState xDoVcoCalibrationWA=S_ENABLE;
-
-
-/**
-* @brief  These values are used to interpolate the power curves.
-*         Interpolation curves are linear in the following 3 regions:
-*       - reg value: 1 to 13    (up region)
-*       - reg value: 13 to 40   (mid region)
-*       - reg value: 41 to 90   (low region)
-*       power_reg = m*power_dBm + q
-*       For each band the order is: {m-up, q-up, m-mid, q-mid, m-low, q-low}.
-* @note The power interpolation curves have been extracted
-*       by measurements done on the divisional evaluation boards.
-*/
-static const float fPowerFactors[5][6]={ 
-  {-2.11,25.66,-2.11,25.66,-2.00,31.28},   /* 915 */
-  {-2.04,23.45,-2.04,23.45,-1.95,27.66},   /* 868 */
-  {-3.48,38.45,-1.89,27.66,-1.92,30.23},   /* 433 */
-  {-3.27,35.43,-1.80,26.31,-1.89,29.61},   /* 315 */
-  {-4.18,50.66,-1.80,30.04,-1.86,32.22},   /* 169 */
-};
-
-/**
-* @}
-*/
-
-
-/** @defgroup Radio_Private_FunctionPrototypes          Radio Private Function Prototypes
-* @{
-*/
-
-
-/**
-* @}
-*/
-
-
-/** @defgroup Radio_Private_Functions                    Radio Private Functions
-* @{
-*/
-
-/**
-* @brief  Initializes the SPIRIT analog and digital radio part according to the specified
-*         parameters in the pxSRadioInitStruct.
-* @param  pxSRadioInitStruct pointer to a SRadioInit structure that
-*         contains the configuration information for the analog radio part of SPIRIT.
-* @retval Error code: 0=no error, 1=error during calibration of VCO.
-*/
-uint8_t SpiritRadioInit(SRadioInit* pxSRadioInitStruct)
-{
-  int32_t FOffsetTmp;
-  uint8_t anaRadioRegArray[8], digRadioRegArray[4];
-  int16_t xtalOffsetFactor;
-  uint8_t drM, drE, FdevM, FdevE, bwM, bwE;
-    
-  /* Workaround for Vtune */
-  uint8_t value = 0xA0; SpiritSpiWriteRegisters(0x9F, 1, &value);
-  
-  /* Calculates the offset respect to RF frequency and according to xtal_ppm parameter: (xtal_ppm*FBase)/10^6 */
-  FOffsetTmp = (int32_t)(((float)pxSRadioInitStruct->nXtalOffsetPpm*pxSRadioInitStruct->lFrequencyBase)/PPM_FACTOR);
-  
-  /* Check the parameters */
-  s_assert_param(IS_FREQUENCY_BAND(pxSRadioInitStruct->lFrequencyBase));
-  s_assert_param(IS_MODULATION_SELECTED(pxSRadioInitStruct->xModulationSelect));
-  s_assert_param(IS_DATARATE(pxSRadioInitStruct->lDatarate));
-  s_assert_param(IS_FREQUENCY_OFFSET(FOffsetTmp,s_lXtalFrequency));
-  s_assert_param(IS_CHANNEL_SPACE(pxSRadioInitStruct->nChannelSpace,s_lXtalFrequency));
-  s_assert_param(IS_F_DEV(pxSRadioInitStruct->lFreqDev,s_lXtalFrequency));
-  
-  /* Disable the digital, ADC, SMPS reference clock divider if fXO>24MHz or fXO<26MHz */
-  SpiritSpiCommandStrobes(COMMAND_STANDBY);    
-  do{
-    /* Delay for state transition */
-    for(volatile uint8_t i=0; i!=0xFF; i++);
-    
-    /* Reads the MC_STATUS register */
-    SpiritRefreshStatus();
-  }while(g_xStatus.MC_STATE!=MC_STATE_STANDBY);
-  
-  if(s_lXtalFrequency<DOUBLE_XTAL_THR)
-  {
-    SpiritRadioSetDigDiv(S_DISABLE);
-    s_assert_param(IS_CH_BW(pxSRadioInitStruct->lBandwidth,s_lXtalFrequency));
-  }
-  else
-  {      
-    SpiritRadioSetDigDiv(S_ENABLE);
-    s_assert_param(IS_CH_BW(pxSRadioInitStruct->lBandwidth,(s_lXtalFrequency>>1)));
-  }
-  
-  /* Goes in READY state */
-  SpiritSpiCommandStrobes(COMMAND_READY);
-  do{
-    /* Delay for state transition */
-    for(volatile uint8_t i=0; i!=0xFF; i++);
-    
-    /* Reads the MC_STATUS register */
-    SpiritRefreshStatus();
-  }while(g_xStatus.MC_STATE!=MC_STATE_READY);
-  
-  /* Calculates the FC_OFFSET parameter and cast as signed int: FOffsetTmp = (Fxtal/2^18)*FC_OFFSET */
-  xtalOffsetFactor = (int16_t)(((float)FOffsetTmp*FBASE_DIVIDER)/s_lXtalFrequency);
-  anaRadioRegArray[2] = (uint8_t)((((uint16_t)xtalOffsetFactor)>>8)&0x0F);
-  anaRadioRegArray[3] = (uint8_t)(xtalOffsetFactor);
-  
-  /* Calculates the channel space factor */
-  anaRadioRegArray[0] =((uint32_t)pxSRadioInitStruct->nChannelSpace<<9)/(s_lXtalFrequency>>6)+1;
-  
-  SpiritManagementWaTRxFcMem(pxSRadioInitStruct->lFrequencyBase);
-  
-  /* 2nd order DEM algorithm enabling */
-  uint8_t tmpreg; SpiritSpiReadRegisters(0xA3, 1, &tmpreg);
-  tmpreg &= ~0x02; SpiritSpiWriteRegisters(0xA3, 1, &tmpreg);
-  
-  /* Check the channel center frequency is in one of the possible range */
-  s_assert_param(IS_FREQUENCY_BAND((pxSRadioInitStruct->lFrequencyBase + ((xtalOffsetFactor*s_lXtalFrequency)/FBASE_DIVIDER) + pxSRadioInitStruct->nChannelSpace * pxSRadioInitStruct->cChannelNumber)));  
-  
-  /* Calculates the datarate mantissa and exponent */
-  SpiritRadioSearchDatarateME(pxSRadioInitStruct->lDatarate, &drM, &drE);
-  digRadioRegArray[0] = (uint8_t)(drM);
-  digRadioRegArray[1] = (uint8_t)(0x00 | pxSRadioInitStruct->xModulationSelect |drE);
-  
-  /* Read the fdev register to preserve the clock recovery algo bit */
-  SpiritSpiReadRegisters(0x1C, 1, &tmpreg);
-  
-  /* Calculates the frequency deviation mantissa and exponent */
-  SpiritRadioSearchFreqDevME(pxSRadioInitStruct->lFreqDev, &FdevM, &FdevE);
-  digRadioRegArray[2] = (uint8_t)((FdevE<<4) | (tmpreg&0x08) | FdevM);
-  
-  /* Calculates the channel filter mantissa and exponent */
-  SpiritRadioSearchChannelBwME(pxSRadioInitStruct->lBandwidth, &bwM, &bwE);
-  
-  digRadioRegArray[3] = (uint8_t)((bwM<<4) | bwE);
- 
-  float if_off=(3.0*480140)/(s_lXtalFrequency>>12)-64;
-  
-  uint8_t ifOffsetAna = ROUND(if_off);
-  
-  if(s_lXtalFrequency<DOUBLE_XTAL_THR)
-  {
-    /* if offset digital is the same in case of single xtal */
-    anaRadioRegArray[1] = ifOffsetAna;
-  }
-  else
-  {
-    if_off=(3.0*480140)/(s_lXtalFrequency>>13)-64;
-    
-    /* ... otherwise recompute it */
-    anaRadioRegArray[1] = ROUND(if_off);
-  }
-//  if(s_lXtalFrequency==24000000) {
-//    ifOffsetAna = 0xB6;
-//    anaRadioRegArray[1] = 0xB6;
-//  }
-//  if(s_lXtalFrequency==25000000) {
-//    ifOffsetAna = 0xAC;
-//    anaRadioRegArray[1] = 0xAC;
-//  }
-//  if(s_lXtalFrequency==26000000) {
-//    ifOffsetAna = 0xA3;
-//    anaRadioRegArray[1] = 0xA3;
-//  }
-//  if(s_lXtalFrequency==48000000) {
-//    ifOffsetAna = 0x3B;
-//    anaRadioRegArray[1] = 0xB6;
-//  }
-//  if(s_lXtalFrequency==50000000) {
-//    ifOffsetAna = 0x36;
-//    anaRadioRegArray[1] = 0xAC;
-//  }
-//  if(s_lXtalFrequency==52000000) {
-//    ifOffsetAna = 0x31;
-//    anaRadioRegArray[1] = 0xA3;
-//  }
-  
-  g_xStatus = SpiritSpiWriteRegisters(IF_OFFSET_ANA_BASE, 1, &ifOffsetAna);
-
-  
-  /* Sets Xtal configuration */
-  if(s_lXtalFrequency>DOUBLE_XTAL_THR)
-  {
-    SpiritRadioSetXtalFlag(XTAL_FLAG((s_lXtalFrequency/2)));
-  }
-  else
-  {
-    SpiritRadioSetXtalFlag(XTAL_FLAG(s_lXtalFrequency));
-  }
-  
-  /* Sets the channel number in the corresponding register */
-  SpiritSpiWriteRegisters(CHNUM_BASE, 1, &pxSRadioInitStruct->cChannelNumber);
-  
-  /* Configures the Analog Radio registers */
-  SpiritSpiWriteRegisters(CHSPACE_BASE, 4, anaRadioRegArray);
-  
-  /* Configures the Digital Radio registers */
-  g_xStatus = SpiritSpiWriteRegisters(MOD1_BASE, 4, digRadioRegArray);
-  
-  /* Enable the freeze option of the AFC on the SYNC word */
-  SpiritRadioAFCFreezeOnSync(S_ENABLE);
-  
-  /* Set the IQC correction optimal value */
-  anaRadioRegArray[0]=0x80;
-  anaRadioRegArray[1]=0xE3;
-  g_xStatus = SpiritSpiWriteRegisters(0x99, 2, anaRadioRegArray);
-  
-  return SpiritRadioSetFrequencyBase(pxSRadioInitStruct->lFrequencyBase);
-  
-}
-
-
-/**
-* @brief  Returns the SPIRIT analog and digital radio structure according to the registers value.
-* @param  pxSRadioInitStruct pointer to a SRadioInit structure that
-*         contains the configuration information for the analog radio part of SPIRIT.
-* @retval None.
-*/
-void SpiritRadioGetInfo(SRadioInit* pxSRadioInitStruct)
-{
-  uint8_t anaRadioRegArray[8], digRadioRegArray[4];
-  BandSelect band;
-  int16_t xtalOffsetFactor;
-  
-  /* Get the RF board version */
-  //SpiritVersion xSpiritVersion = SpiritGeneralGetSpiritVersion();
-  
-  /* Reads the Analog Radio registers */
-  SpiritSpiReadRegisters(SYNT3_BASE, 8, anaRadioRegArray);
-  
-  /* Reads the Digital Radio registers */
-  g_xStatus = SpiritSpiReadRegisters(MOD1_BASE, 4, digRadioRegArray);
-  
-  /* Reads the operating band masking the Band selected field */
-  if((anaRadioRegArray[3] & 0x07) == SYNT0_BS_6)
-  {
-    band = HIGH_BAND;
-  }
-  else if ((anaRadioRegArray[3] & 0x07) == SYNT0_BS_12)
-  {
-    band = MIDDLE_BAND;
-  }
-  else if ((anaRadioRegArray[3] & 0x07) == SYNT0_BS_16)
-  {
-    band = LOW_BAND;
-  }
-  else if ((anaRadioRegArray[3] & 0x07) == SYNT0_BS_32)
-  {
-    band = VERY_LOW_BAND;
-  }
-  else
-  {
-    /* if it is another value, set it to a valid one in order to avoid access violation */
-    uint8_t tmp=(anaRadioRegArray[3]&0xF8)|SYNT0_BS_6;
-    SpiritSpiWriteRegisters(SYNT0_BASE,1,&tmp);
-    band = HIGH_BAND;
-  }
-  
-  /* Computes the synth word */
-  uint32_t synthWord = (uint32_t)((((uint32_t)(anaRadioRegArray[0]&0x1F))<<21)+(((uint32_t)(anaRadioRegArray[1]))<<13)+\
-    (((uint32_t)(anaRadioRegArray[2]))<<5)+(((uint32_t)(anaRadioRegArray[3]))>>3));
-  
-  /* Calculates the frequency base */
-  uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv()+1;
-  pxSRadioInitStruct->lFrequencyBase = (uint32_t)round(synthWord*(((double)s_lXtalFrequency)/(FBASE_DIVIDER*cRefDiv*s_vectcBHalfFactor[band])));
-  
-  /* Calculates the Offset Factor */
-  uint16_t xtalOffTemp = ((((uint16_t)anaRadioRegArray[6])<<8)+((uint16_t)anaRadioRegArray[7]));
-  
-  /* If a negative number then convert the 12 bit 2-complement in a 16 bit number */
-  if(xtalOffTemp & 0x0800)
-  {
-    xtalOffTemp = xtalOffTemp | 0xF000;
-  }
-  else
-  {
-    xtalOffTemp = xtalOffTemp & 0x0FFF;
-  }
-  
-  xtalOffsetFactor = *((int16_t*)(&xtalOffTemp));
-  
-  /* Calculates the frequency offset in ppm */
-  pxSRadioInitStruct->nXtalOffsetPpm =(int16_t)((uint32_t)xtalOffsetFactor*s_lXtalFrequency*PPM_FACTOR)/((uint32_t)FBASE_DIVIDER*pxSRadioInitStruct->lFrequencyBase);
-  
-  /* Channel space */
-  pxSRadioInitStruct->nChannelSpace = anaRadioRegArray[4]*(s_lXtalFrequency>>15);
-  
-  /* Channel number */
-  pxSRadioInitStruct->cChannelNumber = SpiritRadioGetChannel();
-  
-  /* Modulation select */
-  pxSRadioInitStruct->xModulationSelect = (ModulationSelect)(digRadioRegArray[1] & 0x70);
-  
-  /* Reads the frequency deviation for mantissa and exponent */
-  uint8_t FDevM = digRadioRegArray[2]&0x07;
-  uint8_t FDevE = (digRadioRegArray[2]&0xF0)>>4;
-  
-  /* Reads the channel filter register for mantissa and exponent */
-  uint8_t bwM = (digRadioRegArray[3]&0xF0)>>4;
-  uint8_t bwE = digRadioRegArray[3]&0x0F;
-  
-  uint8_t cDivider = 0;
-  cDivider = SpiritRadioGetDigDiv();
-  
-  /* Calculates the datarate */
-  pxSRadioInitStruct->lDatarate = ((s_lXtalFrequency>>(5+cDivider))*(256+digRadioRegArray[0]))>>(23-(digRadioRegArray[1]&0x0F));
-  
-  /* Calculates the frequency deviation */
-  // (((s_lXtalFrequency>>6)*(8+FDevM))>>(12-FDevE+cCorrection));
-  pxSRadioInitStruct->lFreqDev =(uint32_t)((float)s_lXtalFrequency/(((uint32_t)1)<<18)*(uint32_t)((8.0+FDevM)/2*(1<<FDevE)));
-  
-  /* Reads the channel filter bandwidth from the look-up table and return it */
-  pxSRadioInitStruct->lBandwidth = (uint32_t)(100.0*s_vectnBandwidth26M[bwM+(bwE*9)]*((s_lXtalFrequency>>cDivider)/26e6));
-  
-}
-
-
-/**
-* @brief  Sets the Xtal configuration in the ANA_FUNC_CONF0 register.
-* @param  xXtal one of the possible value of the enum type XtalFrequency.
-*         @arg XTAL_FLAG_24_MHz:  in case of 24 MHz crystal
-*         @arg XTAL_FLAG_26_MHz:  in case of 26 MHz crystal
-* @retval None.
-*/
-void SpiritRadioSetXtalFlag(XtalFlag xXtal)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_XTAL_FLAG(xXtal));
-  
-  /* Reads the ANA_FUNC_CONF_0 register */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-  if(xXtal == XTAL_FLAG_26_MHz)
-  {
-    tempRegValue|=SELECT_24_26_MHZ_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~SELECT_24_26_MHZ_MASK);
-  }
-  
-  /* Sets the 24_26MHz_SELECT field in the ANA_FUNC_CONF_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the Xtal configuration in the ANA_FUNC_CONF0 register.
-* @param  None.
-* @retval XtalFrequency Settled Xtal configuration.
-*/
-XtalFlag SpiritRadioGetXtalFlag(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the Xtal configuration in the ANA_FUNC_CONF_0 register and return the value */
-  g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
-  
-  return (XtalFlag)((tempRegValue & 0x40)>>6);
-  
-}
-
-
-/**
-* @brief  Returns the charge pump word for a given VCO frequency.
-* @param  lFc channel center frequency expressed in Hz.
-*         This parameter can be a value in one of the following ranges:<ul>
-*         <li> High_Band: from 779 MHz to 915 MHz </li>
-*         <li> Middle Band: from 387 MHz to 470 MHz </li>
-*         <li> Low Band: from 300 MHz to 348 MHz </li>
-*         <li> Very low Band: from 150 MHz to 174 MHz </li> </ul>
-* @retval uint8_t Charge pump word.
-*/
-uint8_t SpiritRadioSearchWCP(uint32_t lFc)
-{
-  int8_t i;
-  uint32_t vcofreq;
-  uint8_t BFactor;
-  
-  /* Check the channel center frequency is in one of the possible range */
-  s_assert_param(IS_FREQUENCY_BAND(lFc));
-  
-  /* Search the operating band */
-  if(IS_FREQUENCY_BAND_HIGH(lFc))
-  {
-    BFactor = HIGH_BAND_FACTOR;
-  }
-  else if(IS_FREQUENCY_BAND_MIDDLE(lFc))
-  {
-    BFactor = MIDDLE_BAND_FACTOR;
-  }
-  else if(IS_FREQUENCY_BAND_LOW(lFc))
-  {
-    BFactor = LOW_BAND_FACTOR;
-  }
-  else
-  {
-    BFactor = VERY_LOW_BAND_FACTOR;
-  }
-  
-  /* Calculates the VCO frequency VCOFreq = lFc*B */
-  vcofreq = (lFc/1000000)*BFactor;
-  
-  /* Search in the vco frequency array the charge pump word */
-  if(vcofreq>=s_vectnVCOFreq[15])
-  {
-    i=15;
-  }
-  else
-  {
-    /* Search the value */
-    for(i=0 ; i<15 && vcofreq>s_vectnVCOFreq[i] ; i++);
-    
-    /* Be sure that it is the best approssimation */
-    if (i!=0 && s_vectnVCOFreq[i]-vcofreq>vcofreq-s_vectnVCOFreq[i-1])
-      i--;
-  }
-  
-  /* Return index */
-  return (i%8);
-  
-}
-
-/**
-* @brief  Returns the synth word.
-* @param  None.
-* @retval uint32_t Synth word.
-*/
-uint32_t SpiritRadioGetSynthWord(void)
-{
-  uint8_t regArray[4];
-  
-  /* Reads the SYNTH registers, build the synth word and return it */
-  g_xStatus = SpiritSpiReadRegisters(SYNT3_BASE, 4, regArray);
-  return ((((uint32_t)(regArray[0]&0x1F))<<21)+(((uint32_t)(regArray[1]))<<13)+\
-    (((uint32_t)(regArray[2]))<<5)+(((uint32_t)(regArray[3]))>>3));
-  
-}
-
-
-/**
-* @brief  Sets the SYNTH registers.
-* @param  lSynthWord the synth word to write in the SYNTH[3:0] registers.
-* @retval None.
-*/
-void SpiritRadioSetSynthWord(uint32_t lSynthWord)
-{
-  uint8_t tempArray[4];
-  uint8_t tempRegValue;
-  
-  /* Reads the SYNT0 register */
-  g_xStatus = SpiritSpiReadRegisters(SYNT0_BASE, 1, &tempRegValue);
-  
-  /* Mask the Band selected field */
-  tempRegValue &= 0x07;
-  
-  /* Build the array for SYNTH registers */
-  tempArray[0] = (uint8_t)((lSynthWord>>21)&(0x0000001F));
-  tempArray[1] = (uint8_t)((lSynthWord>>13)&(0x000000FF));
-  tempArray[2] = (uint8_t)((lSynthWord>>5)&(0x000000FF));
-  tempArray[3] = (uint8_t)(((lSynthWord&0x0000001F)<<3)| tempRegValue);
-  
-  /* Writes the synth word in the SYNTH registers */
-  g_xStatus = SpiritSpiWriteRegisters(SYNT3_BASE, 4, tempArray);
-  
-}
-
-
-/**
-* @brief  Sets the operating band.
-* @param  xBand the band to set.
-*         This parameter can be one of following parameters:
-*         @arg  HIGH_BAND   High_Band selected: from 779 MHz to 915 MHz
-*         @arg  MIDDLE_BAND: Middle Band selected: from 387 MHz to 470 MHz
-*         @arg  LOW_BAND:  Low Band selected: from 300 MHz to 348 MHz
-*         @arg  VERY_LOW_BAND:  Very low Band selected: from 150 MHz to 174 MHz
-* @retval None.
-*/
-void SpiritRadioSetBand(BandSelect xBand)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_BAND_SELECTED(xBand));
-  
-  /* Reads the SYNT0 register*/
-  g_xStatus = SpiritSpiReadRegisters(SYNT0_BASE, 1, &tempRegValue);
-  
-  /* Mask the SYNTH[4;0] field and write the BS value */
-  tempRegValue &= 0xF8;
-  tempRegValue |= s_vectcBandRegValue[xBand];
-  
-  /* Configures the SYNT0 register setting the operating band */
-  g_xStatus = SpiritSpiWriteRegisters(SYNT0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the operating band.
-* @param  None.
-* @retval BandSelect Settled band.
-*         This returned value can be one of the following parameters:
-*         @arg  HIGH_BAND   High_Band selected: from 779 MHz to 915 MHz
-*         @arg  MIDDLE_BAND: Middle Band selected: from 387 MHz to 470 MHz
-*         @arg  LOW_BAND:  Low Band selected: from 300 MHz to 348 MHz
-*         @arg  VERY_LOW_BAND:  Very low Band selected: from 150 MHz to 174 MHz
-*/
-BandSelect SpiritRadioGetBand(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the SYNT0 register */
-  g_xStatus = SpiritSpiReadRegisters(SYNT0_BASE, 1, &tempRegValue);
-  
-  /* Mask the Band selected field */
-  if((tempRegValue & 0x07) == SYNT0_BS_6)
-  {
-    return HIGH_BAND;
-  }
-  else if ((tempRegValue & 0x07) == SYNT0_BS_12)
-  {
-    return MIDDLE_BAND;
-  }
-  else if ((tempRegValue & 0x07) == SYNT0_BS_16)
-  {
-    return LOW_BAND;
-  }
-  else
-  {
-    return VERY_LOW_BAND;
-  }
-  
-}
-
-
-/**
-* @brief  Sets the channel number.
-* @param  cChannel the channel number.
-* @retval None.
-*/
-void SpiritRadioSetChannel(uint8_t cChannel)
-{
-  /* Writes the CHNUM register */
-  g_xStatus = SpiritSpiWriteRegisters(CHNUM_BASE, 1, &cChannel);
-  
-}
-
-
-/**
-* @brief  Returns the actual channel number.
-* @param  None.
-* @retval uint8_t Actual channel number.
-*/
-uint8_t SpiritRadioGetChannel(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the CHNUM register and return the value */
-  g_xStatus = SpiritSpiReadRegisters(CHNUM_BASE, 1, &tempRegValue);
-  
-  return tempRegValue;
-  
-}
-
-
-/**
-* @brief  Sets the channel space factor in channel space register.
-*         The channel spacing step is computed as F_Xo/32768.
-* @param  fChannelSpace the channel space expressed in Hz.
-* @retval None.
-*/
-void SpiritRadioSetChannelSpace(uint32_t fChannelSpace)
-{
-  uint8_t cChannelSpaceFactor;
-  
-  /* Round to the nearest integer */
-  cChannelSpaceFactor = ((uint32_t)fChannelSpace*CHSPACE_DIVIDER)/s_lXtalFrequency;
-  
-  /* Write value into the register */
-  g_xStatus = SpiritSpiWriteRegisters(CHSPACE_BASE, 1, &cChannelSpaceFactor);
-  
-}
-
-
-/**
-* @brief  Returns the channel space register.
-* @param  None.
-* @retval uint32_t Channel space. The channel space is: CS = channel_space_factor x XtalFrequency/2^15
-*         where channel_space_factor is the CHSPACE register value.
-*/
-uint32_t SpiritRadioGetChannelSpace(void)
-{
-  uint8_t channelSpaceFactor;
-  
-  /* Reads the CHSPACE register, calculate the channel space and return it */
-  g_xStatus = SpiritSpiReadRegisters(CHSPACE_BASE, 1, &channelSpaceFactor);
-  
-  /* Compute the Hertz value and return it */
-  return ((channelSpaceFactor*s_lXtalFrequency)/CHSPACE_DIVIDER);
-  
-}
-
-
-/**
-* @brief  Sets the FC OFFSET register starting from xtal ppm value.
-* @param  nXtalPpm the xtal offset expressed in ppm.
-* @retval None.
-*/
-void SpiritRadioSetFrequencyOffsetPpm(int16_t nXtalPpm)
-{
-  uint8_t tempArray[2];
-  int16_t xtalOffsetFactor;
-  uint32_t synthWord, fBase;
-  int32_t FOffsetTmp;
-  BandSelect band;
-  
-  /* Reads the synth word */
-  synthWord = SpiritRadioGetSynthWord();
-  
-  /* Reads the operating band */
-  band = SpiritRadioGetBand();
-  
-  /* Calculates the frequency base */
-  uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv()+1;
-  fBase = synthWord*(s_lXtalFrequency/(s_vectcBHalfFactor[band]*cRefDiv)/FBASE_DIVIDER);
-  
-  /* Calculates the offset respect to RF frequency and according to xtal_ppm parameter */
-  FOffsetTmp = (int32_t)(((float)nXtalPpm*fBase)/PPM_FACTOR);
-  
-  /* Check the Offset is in the correct range */
-  s_assert_param(IS_FREQUENCY_OFFSET(FOffsetTmp,s_lXtalFrequency));
-  
-  /* Calculates the FC_OFFSET value to write in the corresponding register */  
-  xtalOffsetFactor = (int16_t)(((float)FOffsetTmp*FBASE_DIVIDER)/s_lXtalFrequency);
-  
-  /* Build the array related to the FC_OFFSET_1 and FC_OFFSET_0 register */
-  tempArray[0]=(uint8_t)((((uint16_t)xtalOffsetFactor)>>8)&0x0F);
-  tempArray[1]=(uint8_t)(xtalOffsetFactor);
-  
-  /* Writes the FC_OFFSET registers */
-  g_xStatus = SpiritSpiWriteRegisters(FC_OFFSET1_BASE, 2, tempArray);
-  
-}
-
-
-/**
-* @brief  Sets the FC OFFSET register starting from frequency offset expressed in Hz.
-* @param  lFOffset frequency offset expressed in Hz as signed word.
-* @retval None.
-*/
-void SpiritRadioSetFrequencyOffset(int32_t lFOffset)
-{
-  uint8_t tempArray[2];
-  int16_t offset;
-  
-  /* Check that the Offset is in the correct range */
-  s_assert_param(IS_FREQUENCY_OFFSET(lFOffset,s_lXtalFrequency));
-  
-  /* Calculates the offset value to write in the FC_OFFSET register */
-  offset = (int16_t)(((float)lFOffset*FBASE_DIVIDER)/s_lXtalFrequency);
-  
-  /* Build the array related to the FC_OFFSET_1 and FC_OFFSET_0 register */
-  tempArray[0]=(uint8_t)((((uint16_t)offset)>>8)&0x0F);
-  tempArray[1]=(uint8_t)(offset);
-  
-  /* Writes the FC_OFFSET registers */
-  g_xStatus = SpiritSpiWriteRegisters(FC_OFFSET1_BASE, 2, tempArray);
-  
-}
-
-
-/**
-* @brief  Returns the actual frequency offset.
-* @param  None.
-* @retval int32_t Frequency offset expressed in Hz as signed word.
-*/
-int32_t SpiritRadioGetFrequencyOffset(void)
-{
-  uint8_t tempArray[2];
-  int16_t xtalOffsetFactor;
-  
-  /* Reads the FC_OFFSET registers */
-  g_xStatus = SpiritSpiReadRegisters(FC_OFFSET1_BASE, 2, tempArray);
-  
-  /* Calculates the Offset Factor */
-  uint16_t xtalOffTemp = ((((uint16_t)tempArray[0])<<8)+((uint16_t)tempArray[1]));
-  
-  if(xtalOffTemp & 0x0800)
-  {
-    xtalOffTemp = xtalOffTemp | 0xF000;
-  }
-  else
-  {
-    xtalOffTemp = xtalOffTemp & 0x0FFF;
-  }
-  
-  xtalOffsetFactor = *((int16_t*)(&xtalOffTemp));
-  
-  /* Calculates the frequency offset and return it */
-  return ((int32_t)(xtalOffsetFactor*s_lXtalFrequency)/FBASE_DIVIDER);
-  
-}
-
-
-
-/**
-* @brief  Sets the Synth word and the Band Select register according to desired base carrier frequency.
-*         In this API the Xtal configuration is read out from
-*         the corresponding register. The user shall fix it before call this API.
-* @param  lFBase the base carrier frequency expressed in Hz as unsigned word.
-* @retval Error code: 0=no error, 1=error during calibration of VCO.
-*/
-uint8_t SpiritRadioSetFrequencyBase(uint32_t lFBase)
-{
-  uint32_t synthWord, Fc;
-  uint8_t band, anaRadioRegArray[4], wcp;
-  
-  /* Check the parameter */
-  s_assert_param(IS_FREQUENCY_BAND(lFBase));
-  
-  /* Search the operating band */
-  if(IS_FREQUENCY_BAND_HIGH(lFBase))
-  {
-    band = HIGH_BAND;
-  }
-  else if(IS_FREQUENCY_BAND_MIDDLE(lFBase))
-  {
-    band = MIDDLE_BAND;
-  }
-  else if(IS_FREQUENCY_BAND_LOW(lFBase))
-  {
-    band = LOW_BAND;
-  }
-  else
-  {
-    band = VERY_LOW_BAND;
-  }
-  
-  int32_t FOffset  = SpiritRadioGetFrequencyOffset();
-  uint32_t lChannelSpace  = SpiritRadioGetChannelSpace();
-  uint8_t cChannelNum = SpiritRadioGetChannel();
-  
-  /* Calculates the channel center frequency */
-  Fc = lFBase + FOffset + lChannelSpace*cChannelNum;
-  
-  /* Reads the reference divider */
-  uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv()+1;
-  
-  /* Selects the VCO */
-  switch(band)
-  {
-  case VERY_LOW_BAND:
-    if(Fc<161281250)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case LOW_BAND:
-    if(Fc<322562500)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case MIDDLE_BAND:
-    if(Fc<430083334)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-    break;
-    
-  case HIGH_BAND:
-    if(Fc<860166667)
-    {
-      SpiritCalibrationSelectVco(VCO_L);
-    }
-    else
-    {
-      SpiritCalibrationSelectVco(VCO_H);
-    }
-  }
-  
-  /* Search the VCO charge pump word and set the corresponding register */
-  wcp = SpiritRadioSearchWCP(Fc);
-  
-  synthWord = (uint32_t)(lFBase*s_vectcBHalfFactor[band]*(((double)(FBASE_DIVIDER*cRefDiv))/s_lXtalFrequency));
-  
-  /* Build the array of registers values for the analog part */
-  anaRadioRegArray[0] = (uint8_t)(((synthWord>>21)&(0x0000001F))|(wcp<<5));
-  anaRadioRegArray[1] = (uint8_t)((synthWord>>13)&(0x000000FF));
-  anaRadioRegArray[2] = (uint8_t)((synthWord>>5)&(0x000000FF));
-  anaRadioRegArray[3] = (uint8_t)(((synthWord&0x0000001F)<<3)| s_vectcBandRegValue[band]);
-  
-  /* Configures the needed Analog Radio registers */
-  g_xStatus = SpiritSpiWriteRegisters(SYNT3_BASE, 4, anaRadioRegArray);
-  
-  if(xDoVcoCalibrationWA==S_ENABLE)
-    return SpiritManagementWaVcoCalibration();
-  
-  return 0;
-}
-
-/**
-* @brief  To say to the set frequency base if do or not the VCO calibration WA.
-* @param  S_ENABLE or S_DISABLE the WA procedure.
-* @retval None.
-*/
-void SpiritRadioVcoCalibrationWAFB(SpiritFunctionalState xNewstate)
-{
-  xDoVcoCalibrationWA=xNewstate;
-}
-
-/**
-* @brief  Returns the base carrier frequency.
-* @param  None.
-* @retval uint32_t Base carrier frequency expressed in Hz as unsigned word.
-*/
-uint32_t SpiritRadioGetFrequencyBase(void)
-{
-  uint32_t synthWord;
-  BandSelect band;
-  
-  /* Reads the synth word */
-  synthWord = SpiritRadioGetSynthWord();
-  
-  /* Reads the operating band */
-  band = SpiritRadioGetBand();
-  
-  uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv() + 1;
-  
-  /* Calculates the frequency base and return it */
-  return (uint32_t)round(synthWord*(((double)s_lXtalFrequency)/(FBASE_DIVIDER*cRefDiv*s_vectcBHalfFactor[band])));
-}
-
-
-/**
-* @brief  Returns the actual channel center frequency.
-* @param  None.
-* @retval uint32_t Actual channel center frequency expressed in Hz.
-*/
-uint32_t SpiritRadioGetCenterFrequency(void)
-{
-  int32_t offset;
-  uint8_t channel;
-  uint32_t fBase;
-  uint32_t channelSpace;
-  
-  /* Reads the frequency base */
-  fBase = SpiritRadioGetFrequencyBase();
-  
-  /* Reads the frequency offset */
-  offset = SpiritRadioGetFrequencyOffset();
-  
-  /* Reads the channel space */
-  channelSpace = SpiritRadioGetChannelSpace();
-  
-  /* Reads the channel number */
-  channel = SpiritRadioGetChannel();
-  
-  /* Calculates the channel center frequency and return it */
-  return (uint32_t)(fBase +  offset + (uint32_t)(channelSpace*channel));
-  
-}
-
-
-/**
-* @brief  Returns the mantissa and exponent, whose value used in the datarate formula
-*         will give the datarate value closer to the given datarate.
-* @param  fDatarate datarate expressed in bps. This parameter ranging between 100 and 500000.
-* @param  pcM pointer to the returned mantissa value.
-* @param  pcE pointer to the returned exponent value.
-* @retval None.
-*/
-void SpiritRadioSearchDatarateME(uint32_t lDatarate, uint8_t* pcM, uint8_t* pcE)
-{
-  volatile SpiritBool find = S_FALSE;
-  int8_t i=15;
-  uint8_t cMantissaTmp;
-  uint8_t cDivider = 0;
-  
-  /* Check the parameters */
-  s_assert_param(IS_DATARATE(lDatarate));
-  
-  cDivider = (uint8_t)SpiritRadioGetDigDiv();
-  
-  /* Search in the datarate array the exponent value */
-  while(!find && i>=0)
-  {
-    if(lDatarate>=(s_lXtalFrequency>>(20-i+cDivider)))
-    {
-      find = S_TRUE;
-    }
-    else
-    {
-      i--;
-    }
-  }
-  i<0 ? i=0 : i;
-  *pcE = i;
-  
-  /* Calculates the mantissa value according to the datarate formula */
-  cMantissaTmp = (lDatarate*((uint32_t)1<<(23-i)))/(s_lXtalFrequency>>(5+cDivider))-256;
-  
-  /* Finds the mantissa value with less approximation */
-  int16_t mantissaCalculation[3];
-  for(uint8_t j=0;j<3;j++)
-  {
-    if((cMantissaTmp+j-1))
-    {
-      mantissaCalculation[j]=lDatarate-(((256+cMantissaTmp+j-1)*(s_lXtalFrequency>>(5+cDivider)))>>(23-i));
-    }
-    else
-    {
-      mantissaCalculation[j]=0x7FFF;
-    }
-  }
-  uint16_t mantissaCalculationDelta = 0xFFFF;
-  for(uint8_t j=0;j<3;j++)
-  {
-    if(S_ABS(mantissaCalculation[j])<mantissaCalculationDelta)
-    {
-      mantissaCalculationDelta = S_ABS(mantissaCalculation[j]);
-      *pcM = cMantissaTmp+j-1;
-    }
-  }
-  
-}
-
-
-/**
-* @brief  Returns the mantissa and exponent for a given bandwidth.
-*         Even if it is possible to pass as parameter any value in the below mentioned range,
-*         the API will search the closer value according to a fixed table of channel
-*         bandwidth values (@ref s_vectnBandwidth), as defined in the datasheet, returning the corresponding mantissa
-*         and exponent value.
-* @param  lBandwidth bandwidth expressed in Hz. This parameter ranging between 1100 and 800100.
-* @param  pcM pointer to the returned mantissa value.
-* @param  pcE pointer to the returned exponent value.
-* @retval None.
-*/
-void SpiritRadioSearchChannelBwME(uint32_t lBandwidth, uint8_t* pcM, uint8_t* pcE)
-{
-  int8_t i, i_tmp;
-  uint8_t cDivider = 1;
-  
-    /* Search in the channel filter bandwidth table the exponent value */
-  if(SpiritRadioGetDigDiv())
-  {
-    cDivider = 2;
-  }
-  else
-  {
-    cDivider = 1;
-  }
-    
-  s_assert_param(IS_CH_BW(lBandwidth,s_lXtalFrequency/cDivider));
-  
-  uint32_t lChfltFactor = (s_lXtalFrequency/cDivider)/100;
-  
-  for(i=0;i<90 && (lBandwidth<(uint32_t)((s_vectnBandwidth26M[i]*lChfltFactor)/2600));i++);
-  
-  if(i!=0)
-  {
-    /* Finds the mantissa value with less approximation */
-    i_tmp=i;
-    int16_t chfltCalculation[3];
-    for(uint8_t j=0;j<3;j++) 
-    {
-      if(((i_tmp+j-1)>=0) || ((i_tmp+j-1)<=89))
-      {
-        chfltCalculation[j] = lBandwidth - (uint32_t)((s_vectnBandwidth26M[i_tmp+j-1]*lChfltFactor)/2600);
-      }
-      else
-      {
-        chfltCalculation[j] = 0x7FFF;
-      }
-    }
-    uint16_t chfltDelta = 0xFFFF;
-    
-    for(uint8_t j=0;j<3;j++)
-    {
-      if(S_ABS(chfltCalculation[j])<chfltDelta)
-      {
-        chfltDelta = S_ABS(chfltCalculation[j]);
-        i=i_tmp+j-1;
-      }    
-    }
-  }
-  (*pcE) = (uint8_t)(i/9);
-  (*pcM) = (uint8_t)(i%9);
-  
-}
-
-/**
-* @brief  Returns the mantissa and exponent, whose value used in the frequency deviation formula
-*         will give a frequency deviation value most closer to the given frequency deviation.
-* @param  fFDev frequency deviation expressed in Hz. This parameter can be a value in the range [F_Xo*8/2^18, F_Xo*7680/2^18].
-* @param  pcM pointer to the returned mantissa value.
-* @param  pcE pointer to the returned exponent value.
-* @retval None.
-*/
-void SpiritRadioSearchFreqDevME(uint32_t lFDev, uint8_t* pcM, uint8_t* pcE)
-{
-  uint8_t i;
-  uint32_t a,bp,b=0;
-  float xtalDivtmp=(float)s_lXtalFrequency/(((uint32_t)1)<<18);
-  
-  /* Check the parameters */
-  s_assert_param(IS_F_DEV(lFDev,s_lXtalFrequency));
-  
-  for(i=0;i<10;i++)
-  {
-    a=(uint32_t)(xtalDivtmp*(uint32_t)(7.5*(1<<i)));
-    if(lFDev<a)
-      break;
-  }
-  (*pcE) = i;
-  
-  for(i=0;i<8;i++)
-  {
-    bp=b;
-    b=(uint32_t)(xtalDivtmp*(uint32_t)((8.0+i)/2*(1<<(*pcE))));
-    if(lFDev<b)
-      break;
-  }
-  
-  (*pcM)=i;
-  if((lFDev-bp)<(b-lFDev))
-    (*pcM)--;
-  
-}
-
-
-/**
-* @brief  Sets the datarate.
-* @param  fDatarate datarate expressed in bps. This value shall be in the range
-*         [100 500000].
-* @retval None.
-*/
-void SpiritRadioSetDatarate(uint32_t lDatarate)
-{
-  uint8_t drE, tempRegValue[2];
-  
-  /* Check the parameters */
-  s_assert_param(IS_DATARATE(lDatarate));
-  
-  /* Calculates the datarate mantissa and exponent */
-  SpiritRadioSearchDatarateME(lDatarate, &tempRegValue[0], &drE);
-  
-  /* Reads the MOD_O register*/
-  SpiritSpiReadRegisters(MOD0_BASE, 1, &tempRegValue[1]);
-  
-  /* Mask the other fields and set the datarate exponent */
-  tempRegValue[1] &= 0xF0;
-  tempRegValue[1] |= drE;
-  
-  /* Writes the Datarate registers */
-  g_xStatus = SpiritSpiWriteRegisters(MOD1_BASE, 2, tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the datarate.
-* @param  None.
-* @retval uint32_t Settled datarate expressed in bps.
-*/
-uint32_t SpiritRadioGetDatarate(void)
-{
-  uint8_t tempRegValue[2];
-  uint8_t cDivider=0;
-  
-  /* Reads the datarate registers for mantissa and exponent */
-  g_xStatus = SpiritSpiReadRegisters(MOD1_BASE, 2, tempRegValue);
-  
-  /* Calculates the datarate */
-  cDivider = (uint8_t)SpiritRadioGetDigDiv(); 
-  
-  return (((s_lXtalFrequency>>(5+cDivider))*(256+tempRegValue[0]))>>(23-(tempRegValue[1]&0x0F)));
-}
-
-
-/**
-* @brief  Sets the frequency deviation.
-* @param  fFDev frequency deviation expressed in Hz. Be sure that this value
-*         is in the correct range [F_Xo*8/2^18, F_Xo*7680/2^18] Hz.
-* @retval None.
-*/
-void SpiritRadioSetFrequencyDev(uint32_t lFDev)
-{
-  uint8_t FDevM, FDevE, tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_F_DEV(lFDev, s_lXtalFrequency));
-  
-  /* Calculates the frequency deviation mantissa and exponent */
-  SpiritRadioSearchFreqDevME(lFDev, &FDevM, &FDevE);
-  
-  /* Reads the FDEV0 register */
-  SpiritSpiReadRegisters(FDEV0_BASE, 1, &tempRegValue);
-  
-  /* Mask the other fields and set the frequency deviation mantissa and exponent */
-  tempRegValue &= 0x08;
-  tempRegValue |= ((FDevE<<4)|(FDevM));
-  
-  /* Writes the Frequency deviation register */
-  g_xStatus = SpiritSpiWriteRegisters(FDEV0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the frequency deviation.
-* @param  None.
-* @retval uint32_t Frequency deviation value expressed in Hz.
-*         This value will be in the range [F_Xo*8/2^18, F_Xo*7680/2^18] Hz.
-*/
-uint32_t SpiritRadioGetFrequencyDev(void)
-{
-  uint8_t tempRegValue, FDevM, FDevE;  
-
-  
-  /* Reads the frequency deviation register for mantissa and exponent */
-  g_xStatus = SpiritSpiReadRegisters(FDEV0_BASE, 1, &tempRegValue);
-  FDevM = tempRegValue&0x07;
-  FDevE = (tempRegValue&0xF0)>>4;
-  
-  /* Calculates the frequency deviation and return it */
-  //return (((s_lXtalFrequency>>6)*(8+FDevM))>>(13-FDevE));
-  
-  return (uint32_t)((float)s_lXtalFrequency/(((uint32_t)1)<<18)*(uint32_t)((8.0+FDevM)/2*(1<<FDevE)));
-   
-}
-
-
-/**
-* @brief  Sets the channel filter bandwidth.
-* @param  lBandwidth channel filter bandwidth expressed in Hz. This parameter shall be in the range [1100 800100]
-*         Even if it is possible to pass as parameter any value in the above mentioned range,
-*         the API will search the most closer value according to a fixed table of channel
-*         bandwidth values (@ref s_vectnBandwidth), as defined in the datasheet. To verify the settled channel bandwidth
-*         it is possible to use the SpiritRadioGetChannelBW() API.
-* @retval None.
-*/
-void SpiritRadioSetChannelBW(uint32_t lBandwidth)
-{
-  uint8_t bwM, bwE, tempRegValue;
-  
-  /* Search in the channel filter bandwidth table the exponent value */
-  if(SpiritRadioGetDigDiv())
-  {
-    s_assert_param(IS_CH_BW(lBandwidth,(s_lXtalFrequency/2)));
-  }
-  else
-  {
-    s_assert_param(IS_CH_BW(lBandwidth,(s_lXtalFrequency)));
-  } 
-  
-  /* Calculates the channel bandwidth mantissa and exponent */
-  SpiritRadioSearchChannelBwME(lBandwidth, &bwM, &bwE);
-  tempRegValue = (bwM<<4)|(bwE);
-  
-  /* Writes the Channel filter register */
-  g_xStatus = SpiritSpiWriteRegisters(CHFLT_BASE, 1, &tempRegValue);
-  
-}
-
-/**
-* @brief  Returns the channel filter bandwidth.
-* @param  None.
-* @retval uint32_t Channel filter bandwidth expressed in Hz.
-*/
-uint32_t SpiritRadioGetChannelBW(void)
-{
-  uint8_t tempRegValue, bwM, bwE;
-  
-  /* Reads the channel filter register for mantissa and exponent */
-  g_xStatus = SpiritSpiReadRegisters(CHFLT_BASE, 1, &tempRegValue);
-  bwM = (tempRegValue&0xF0)>>4;
-  bwE = tempRegValue&0x0F;
-  
-  /* Reads the channel filter bandwidth from the look-up table and return it */
-  return (uint32_t)(100.0*s_vectnBandwidth26M[bwM+(bwE*9)]*s_lXtalFrequency/26e6);
-  
-}
-
-
-/**
-* @brief  Sets the modulation type.
-* @param  xModulation modulation to set.
-*         This parameter shall be of type @ref ModulationSelect .
-* @retval None.
-*/
-void SpiritRadioSetModulation(ModulationSelect xModulation)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_MODULATION_SELECTED(xModulation));
-  
-  /* Reads the modulation register */
-  SpiritSpiReadRegisters(MOD0_BASE, 1, &tempRegValue);
-  
-  /* Mask the other fields and set the modulation type */
-  tempRegValue &=0x8F;
-  tempRegValue |= xModulation;
-  
-  /* Writes the modulation register */
-  g_xStatus = SpiritSpiWriteRegisters(MOD0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the modulation type used.
-* @param  None.
-* @retval ModulationSelect Settled modulation type.
-*/
-ModulationSelect SpiritRadioGetModulation(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the modulation register MOD0*/
-  g_xStatus = SpiritSpiReadRegisters(MOD0_BASE, 1, &tempRegValue);
-  
-  /* Return the modulation type */
-  return (ModulationSelect)(tempRegValue&0x70);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the Continuous Wave transmit mode.
-* @param  xNewState new state for power ramping.
-*         This parameter can be: S_ENABLE or S_DISABLE .
-* @retval None.
-*/
-void SpiritRadioCWTransmitMode(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the modulation register MOD0 and mask the CW field */
-  SpiritSpiReadRegisters(MOD0_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |=MOD0_CW;
-  }
-  else
-  {
-    tempRegValue &= (~MOD0_CW);
-  }
-  
-  /* Writes the new value in the MOD0 register */
-  g_xStatus = SpiritSpiWriteRegisters(MOD0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Sets the OOK Peak Decay.
-* @param  xOokDecay Peak decay control for OOK.
-*         This parameter shall be of type @ref OokPeakDecay .
-* @retval None.
-*/
-void SpiritRadioSetOokPeakDecay(OokPeakDecay xOokDecay)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_OOK_PEAK_DECAY(xOokDecay));
-  
-  /* Reads the RSSI_FLT register */
-  SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-  
-  /* Mask the other fields and set OOK Peak Decay */
-  tempRegValue &= 0xFC;
-  tempRegValue |= xOokDecay;
-  
-  /* Writes the RSSI_FLT register to set the new OOK peak dacay value */
-  g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the OOK Peak Decay.
-* @param  None
-* @retval OokPeakDecay Ook peak decay value.
-*/
-OokPeakDecay SpiritRadioGetOokPeakDecay(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the OOK peak decay register RSSI_FLT_BASE*/
-  g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
-  
-  /* Returns the OOK peak decay */
-  return (OokPeakDecay) (tempRegValue & 0x03);
-  
-}
-
-/**
-* @brief  Returns the PA register value that corresponds to the passed dBm power.
-* @param  lFbase Frequency base expressed in Hz.
-* @param  fPowerdBm Desired power in dBm.
-* @retval Register value as byte.
-* @note The power interpolation curves used by this function have been extracted
-*       by measurements done on the divisional evaluation boards.
-*/
-uint8_t SpiritRadioGetdBm2Reg(uint32_t lFBase, float fPowerdBm)
-{
-  uint8_t i=0;
-  uint8_t j=0;
-  float fReg;
-  
-  if(IS_FREQUENCY_BAND_HIGH(lFBase))
-  {
-    i=0;
-    if(lFBase<900000000) i=1;// 868   
-  }
-  else if(IS_FREQUENCY_BAND_MIDDLE(lFBase))
-  {
-    i=2;
-  }
-  else if(IS_FREQUENCY_BAND_LOW(lFBase))
-  {
-    i=3;
-  }
-  else if(IS_FREQUENCY_BAND_VERY_LOW(lFBase))
-  {
-    i=4;
-  }
-  
-  j=1;
-  if(fPowerdBm>0 && 13.0/fPowerFactors[i][2]-fPowerFactors[i][3]/fPowerFactors[i][2]<fPowerdBm)
-      j=0;
-  else if(fPowerdBm<=0 && 40.0/fPowerFactors[i][2]-fPowerFactors[i][3]/fPowerFactors[i][2]>fPowerdBm)
-      j=2;
-
-  fReg=fPowerFactors[i][2*j]*fPowerdBm+fPowerFactors[i][2*j+1];
-  
-  if(fReg<1)
-    fReg=1;
-  else if(fReg>90) 
-    fReg=90;
-  
-  return ((uint8_t)fReg);
-}
-
-
-/**
-* @brief  Returns the dBm power that corresponds to the value of PA register.
-* @param  lFbase Frequency base expressed in Hz.
-* @param  cPowerReg Register value of the PA.
-* @retval Power in dBm as float.
-* @note The power interpolation curves used by this function have been extracted
-*       by measurements done on the divisional evaluation boards.
-*/
-float SpiritRadioGetReg2dBm(uint32_t lFBase, uint8_t cPowerReg)
-{
-  uint8_t i=0;
-  uint8_t j=0;
-  float fPower;
-  
-  if(cPowerReg==0 || cPowerReg>90)
-    return (-130.0);
-  
-  if(IS_FREQUENCY_BAND_HIGH(lFBase))
-  {
-    i=0;
-    if(lFBase<900000000) i=1;// 868   
-  }
-  else if(IS_FREQUENCY_BAND_MIDDLE(lFBase))
-  {
-    i=2;
-  }
-  else if(IS_FREQUENCY_BAND_LOW(lFBase))
-  {
-    i=3;
-  }
-  else if(IS_FREQUENCY_BAND_VERY_LOW(lFBase))
-  {
-    i=4;
-  }
-  
-  j=1;
-  if(cPowerReg<13) j=0;
-  else if(cPowerReg>40) j=2;
-  
-  fPower=(((float)cPowerReg)/fPowerFactors[i][2*j]-fPowerFactors[i][2*j+1]/fPowerFactors[i][2*j]);
-  
-  return fPower;
-}
-
-/**
-* @brief  Configures the Power Amplifier Table and registers with value expressed in dBm.
-* @param  cPALevelMaxIndex number of levels to set. This parameter shall be in the range [0:7].
-* @param  cWidth step width expressed in terms of bit period units Tb/8.
-*         This parameter shall be in the range [1:4].
-* @param  xCLoad one of the possible value of the enum type PALoadCapacitor.
-*         @arg LOAD_0_PF    No additional PA load capacitor
-*         @arg LOAD_1_2_PF  1.2pF additional PA load capacitor
-*         @arg LOAD_2_4_PF  2.4pF additional PA load capacitor
-*         @arg LOAD_3_6_PF  3.6pF additional PA load capacitor
-* @param  pfPAtabledBm pointer to an array of PA values in dbm between [-PA_LOWER_LIMIT: PA_UPPER_LIMIT] dbm.
-*         The first element shall be the lower level (PA_LEVEL[0]) value and the last element
-*         the higher level one (PA_LEVEL[paLevelMaxIndex]).
-* @retval None.
-*/
-void SpiritRadioSetPATabledBm(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, float* pfPAtabledBm)
-{
-  uint8_t palevel[9], address, paLevelValue;
-  uint32_t lFBase=SpiritRadioGetFrequencyBase();
-
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cPALevelMaxIndex));
-  s_assert_param(IS_PA_STEP_WIDTH(cWidth));
-  s_assert_param(IS_PA_LOAD_CAP(xCLoad));
-  
-  /* Check the PA level in dBm is in the range and calculate the PA_LEVEL value
-  to write in the corresponding register using the linearization formula */
-  for(int i=0; i<=cPALevelMaxIndex; i++)
-  {
-    s_assert_param(IS_PAPOWER_DBM(*pfPAtabledBm));
-    paLevelValue=SpiritRadioGetdBm2Reg(lFBase,(*pfPAtabledBm));
-    palevel[cPALevelMaxIndex-i]=paLevelValue;
-    pfPAtabledBm++;
-  }
-  
-  /* Sets the PA_POWER[0] register */
-  palevel[cPALevelMaxIndex+1]=xCLoad|(cWidth-1)<<3|cPALevelMaxIndex;
-  
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cPALevelMaxIndex;
-  
-  /* Configures the PA_POWER registers */
-  g_xStatus = SpiritSpiWriteRegisters(address, cPALevelMaxIndex+2, palevel);
-  
-}
-
-
-/**
-* @brief  Returns the Power Amplifier Table and registers, returning values in dBm.
-* @param  pcPALevelMaxIndex pointer to the number of levels settled.
-*         This parameter will be in the range [0:7].
-* @param  pfPAtabledBm pointer to an array of 8 elements containing the PA value in dbm.
-*         The first element will be the PA_LEVEL_0 and the last element
-*         will be PA_LEVEL_7. Any value higher than PA_UPPER_LIMIT implies no output
-*         power (output stage is in high impedance).
-* @retval None.
-*/
-void SpiritRadioGetPATabledBm(uint8_t* pcPALevelMaxIndex, float* pfPAtabledBm)
-{
-  uint8_t palevelvect[9];
-  uint32_t lFBase=SpiritRadioGetFrequencyBase();
-  
-  /* Reads the PA_LEVEL_x registers and the PA_POWER_0 register */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER8_BASE, 9, palevelvect);
-  
-  /* Fill the PAtable */
-  for(int i=7; i>=0; i--)
-  {
-    (*pfPAtabledBm)=SpiritRadioGetReg2dBm(lFBase,palevelvect[i]);
-    pfPAtabledBm++;
-  }
-  
-  /* Return the settled index */
-  *pcPALevelMaxIndex = palevelvect[8]&0x07;
-  
-}
-
-
-
-
-
-
-/**
-* @brief  Sets a specific PA_LEVEL register, with a value given in dBm.
-* @param  cIndex PA_LEVEL to set. This parameter shall be in the range [0:7].
-* @param  fPowerdBm PA value to write expressed in dBm . Be sure that this values is in the
-*         correct range [-PA_LOWER_LIMIT: PA_UPPER_LIMIT] dBm.
-* @retval None.
-* @note This function makes use of the @ref SpiritRadioGetdBm2Reg fcn to interpolate the 
-*       power value.
-*/
-void SpiritRadioSetPALeveldBm(uint8_t cIndex, float fPowerdBm)
-{
-  uint8_t address, paLevelValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cIndex));
-  s_assert_param(IS_PAPOWER_DBM(fPowerdBm));
-  
-  /* interpolate the power level */
-  paLevelValue=SpiritRadioGetdBm2Reg(SpiritRadioGetFrequencyBase(),fPowerdBm);
-
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cIndex;
-  
-  /* Configures the PA_LEVEL register */
-  g_xStatus = SpiritSpiWriteRegisters(address, 1, &paLevelValue);
-  
-}
-
-
-/**
-* @brief  Returns a specific PA_LEVEL register, returning a value in dBm.
-* @param  cIndex PA_LEVEL to read. This parameter shall be in the range [0:7]
-* @retval float Settled power level expressed in dBm. A value
-*         higher than PA_UPPER_LIMIT dBm implies no output power
-*         (output stage is in high impedance).
-* @note This function makes use of the @ref SpiritRadioGetReg2dBm fcn to interpolate the 
-*       power value.
-*/
-float SpiritRadioGetPALeveldBm(uint8_t cIndex)
-{
-  uint8_t address, paLevelValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cIndex));
-  
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cIndex;
-  
-  /* Reads the PA_LEVEL[cIndex] register */
-  g_xStatus = SpiritSpiReadRegisters(address, 1, &paLevelValue);
-  
-  return SpiritRadioGetReg2dBm(SpiritRadioGetFrequencyBase(),paLevelValue);
-}
-
-
-/**
-* @brief  Configures the Power Amplifier Table and registers.
-* @param  cPALevelMaxIndex number of levels to set. This parameter shall be in the range [0:7].
-* @param  cWidth step width expressed in terms of bit period units Tb/8.
-*         This parameter shall be in the range [1:4].
-* @param  xCLoad one of the possible value of the enum type PALoadCapacitor.
-*         @arg LOAD_0_PF    No additional PA load capacitor
-*         @arg LOAD_1_2_PF  1.2pF additional PA load capacitor
-*         @arg LOAD_2_4_PF  2.4pF additional PA load capacitor
-*         @arg LOAD_3_6_PF  3.6pF additional PA load capacitor
-* @param  pcPAtable pointer to an array of PA values in the range [0: 90], where 0 implies no
-*         output power, 1 will be the maximum level and 90 the minimum one
-*         The first element shall be the lower level (PA_LEVEL[0]) value and the last element
-*         the higher level one (PA_LEVEL[paLevelMaxIndex]).
-* @retval None.
-*/
-void SpiritRadioSetPATable(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, uint8_t* pcPAtable)
-{
-  uint8_t palevel[9], address;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cPALevelMaxIndex));
-  s_assert_param(IS_PA_STEP_WIDTH(cWidth));
-  s_assert_param(IS_PA_LOAD_CAP(xCLoad));
-  
-  /* Check the PA levels are in the range */
-  for(int i=0; i<=cPALevelMaxIndex; i++)
-  {
-    s_assert_param(IS_PAPOWER(*pcPAtable));
-    palevel[cPALevelMaxIndex-i]=*pcPAtable;
-    pcPAtable++;
-  }
-  
-  /* Sets the PA_POWER[0] register */
-  palevel[cPALevelMaxIndex+1]=xCLoad|((cWidth-1)<<3)|cPALevelMaxIndex;
-  
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cPALevelMaxIndex;
-  
-  /* Configures the PA_POWER registers */
-  g_xStatus = SpiritSpiWriteRegisters(address, cPALevelMaxIndex+2, palevel);
-  
-}
-
-
-/**
-* @brief  Returns the Power Amplifier Table and registers.
-* @param  pcPALevelMaxIndex pointer to the number of levels settled.
-*         This parameter shall be in the range [0:7].
-* @param  pcPAtable pointer to an array of 8 elements containing the PA value.
-*         The first element will be the PA_LEVEL_0 and the last element
-*         will be PA_LEVEL_7. Any value equals to 0 implies that level has
-*         no output power (output stage is in high impedance).
-* @retval None
-*/
-void SpiritRadioGetPATable(uint8_t* pcPALevelMaxIndex, uint8_t* pcPAtable)
-{
-  uint8_t palevelvect[9];
-  
-  /* Reads the PA_LEVEL_x registers and the PA_POWER_0 register */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER8_BASE, 9, palevelvect);
-  
-  /* Fill the PAtable */
-  for(int i=7; i>=0; i--)
-  {
-    *pcPAtable = palevelvect[i];
-    pcPAtable++;
-  }
-  
-  /* Return the settled index */
-  *pcPALevelMaxIndex = palevelvect[8]&0x07;
-  
-}
-
-
-/**
-* @brief  Sets a specific PA_LEVEL register.
-* @param  cIndex PA_LEVEL to set. This parameter shall be in the range [0:7].
-* @param  cPower PA value to write in the register. Be sure that this values is in the
-*         correct range [0 : 90].
-* @retval None.
-*/
-void SpiritRadioSetPALevel(uint8_t cIndex, uint8_t cPower)
-{
-  uint8_t address;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cIndex));
-  s_assert_param(IS_PAPOWER(cPower));
-  
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cIndex;
-  
-  /* Configures the PA_LEVEL register */
-  g_xStatus = SpiritSpiWriteRegisters(address, 1, &cPower);
-  
-}
-
-
-/**
-* @brief  Returns a specific PA_LEVEL register.
-* @param  cIndex PA_LEVEL to read. This parameter shall be in the range [0:7].
-* @retval uint8_t PA_LEVEL value. A value equal to zero
-*         implies no output power (output stage is in high impedance).
-*/
-uint8_t SpiritRadioGetPALevel(uint8_t cIndex)
-{
-  uint8_t address, tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cIndex));
-  
-  /* Sets the base address */
-  address=PA_POWER8_BASE+7-cIndex;
-  
-  /* Reads the PA_LEVEL[cIndex] register and return the value */
-  g_xStatus = SpiritSpiReadRegisters(address, 1, &tempRegValue);
-  return tempRegValue;
-  
-}
-
-
-/**
-* @brief  Sets the output stage additional load capacitor bank.
-* @param  xCLoad one of the possible value of the enum type PALoadCapacitor.
-*         @arg LOAD_0_PF    No additional PA load capacitor
-*         @arg LOAD_1_2_PF  1.2pF additional PA load capacitor
-*         @arg LOAD_2_4_PF  2.4pF additional PA load capacitor
-*         @arg LOAD_3_6_PF  3.6pF additional PA load capacitor
-* @retval None.
-*/
-void SpiritRadioSetPACwc(PALoadCapacitor xCLoad)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_LOAD_CAP(xCLoad));
-  
-  /* Reads the PA_POWER_0 register */
-  SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the CWC[1:0] field and write the new value */
-  tempRegValue &= 0x3F;
-  tempRegValue |= xCLoad;
-  
-  /* Configures the PA_POWER_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the output stage additional load capacitor bank.
-* @param  None.
-* @retval PALoadCapacitor Output stage additional load capacitor bank.
-*         This parameter can be:
-*         @arg LOAD_0_PF    No additional PA load capacitor
-*         @arg LOAD_1_2_PF  1.2pF additional PA load capacitor
-*         @arg LOAD_2_4_PF  2.4pF additional PA load capacitor
-*         @arg LOAD_3_6_PF  3.6pF additional PA load capacitor
-*/
-PALoadCapacitor SpiritRadioGetPACwc(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the PA_POWER_0 register */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the CWC[1:0] field and return the value*/
-  return (PALoadCapacitor)(tempRegValue & 0xC0);
-  
-}
-
-
-/**
-* @brief  Sets a specific PA_LEVEL_MAX_INDEX.
-* @param  cIndex PA_LEVEL_MAX_INDEX to set. This parameter shall be in the range [0:7].
-* @retval None
-*/
-void SpiritRadioSetPALevelMaxIndex(uint8_t cIndex)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_MAX_INDEX(cIndex));
-  
-  /* Reads the PA_POWER_0 register */
-  SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the PA_LEVEL_MAX_INDEX[1:0] field and write the new value */
-  tempRegValue &= 0xF8;
-  tempRegValue |= cIndex;
-  
-  /* Configures the PA_POWER_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the actual PA_LEVEL_MAX_INDEX.
-* @param  None.
-* @retval uint8_t Actual PA_LEVEL_MAX_INDEX. This parameter will be in the range [0:7].
-*/
-uint8_t SpiritRadioGetPALevelMaxIndex(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the PA_POWER_0 register */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the PA_LEVEL_MAX_INDEX[1:0] field and return the value */
-  return (tempRegValue & 0x07);
-  
-}
-
-
-/**
-* @brief  Sets a specific PA_RAMP_STEP_WIDTH.
-* @param  cWidth step width expressed in terms of bit period units Tb/8.
-*         This parameter shall be in the range [1:4].
-* @retval None.
-*/
-void SpiritRadioSetPAStepWidth(uint8_t cWidth)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_PA_STEP_WIDTH(cWidth));
-  
-  /* Reads the PA_POWER_0 register */
-  SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the PA_RAMP_STEP_WIDTH[1:0] field and write the new value */
-  tempRegValue &= 0xE7;
-  tempRegValue |= (cWidth-1)<<3;
-  
-  /* Configures the PA_POWER_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the actual PA_RAMP_STEP_WIDTH.
-* @param  None.
-* @retval uint8_t Step width value expressed in terms of bit period units Tb/8.
-*         This parameter will be in the range [1:4].
-*/
-uint8_t SpiritRadioGetPAStepWidth(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the PA_POWER_0 register */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask the PA_RAMP_STEP_WIDTH[1:0] field and return the value */
-  tempRegValue &= 0x18;
-  return  ((tempRegValue>>3)+1);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the Power Ramping.
-* @param  xNewState new state for power ramping.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioPARamping(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the PA_POWER_0 register and configure the PA_RAMP_ENABLE field */
-  SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PA_POWER0_PA_RAMP_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~PA_POWER0_PA_RAMP_MASK);
-  }
-  
-  /* Sets the PA_POWER_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-}
-
-/**
-* @brief  Returns the Power Ramping enable bit.
-* @param  xNewState new state for power ramping.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-SpiritFunctionalState SpiritRadioGetPARamping(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the PA_POWER_0 register and configure the PA_RAMP_ENABLE field */
-  g_xStatus = SpiritSpiReadRegisters(PA_POWER0_BASE, 1, &tempRegValue);
-  
-  /* Mask and return data */
-  return (SpiritFunctionalState)((tempRegValue>>5) & 0x01);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the AFC.
-* @param  xNewState new state for AFC.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioAFC(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AFC_2 register and configure the AFC Enabled field */
-  SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AFC2_AFC_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AFC2_AFC_MASK);
-  }
-  
-  /* Sets the AFC_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the AFC freeze on sync word detection.
-* @param  xNewState new state for AFC freeze on sync word detection.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioAFCFreezeOnSync(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AFC_2 register and configure the AFC Freeze on Sync field */
-  SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AFC2_AFC_FREEZE_ON_SYNC_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AFC2_AFC_FREEZE_ON_SYNC_MASK);
-  }
-  
-  /* Sets the AFC_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Sets the AFC working mode.
-* @param  xMode the AFC mode. This parameter can be one of the values defined in @ref AFCMode :
-*         @arg AFC_SLICER_CORRECTION     AFC loop closed on slicer
-*         @arg AFC_2ND_IF_CORRECTION     AFC loop closed on 2nd conversion stage
-* @retval None.
-*/
-void SpiritRadioSetAFCMode(AFCMode xMode)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_AFC_MODE(xMode));
-  
-  /* Reads the AFC_2 register and configure the AFC Mode field */
-  SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  if(xMode == AFC_2ND_IF_CORRECTION)
-  {
-    tempRegValue |= AFC_2ND_IF_CORRECTION;
-  }
-  else
-  {
-    tempRegValue &= (~AFC_2ND_IF_CORRECTION);
-  }
-  
-  /* Sets the AFC_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AFC working mode.
-* @param  None.
-* @retval AFCMode Settled AFC mode. This parameter will be one of the values defined in @ref AFCMode :
-*         @arg AFC_SLICER_CORRECTION     AFC loop closed on slicer
-*         @arg AFC_2ND_IF_CORRECTION     AFC loop closed on 2nd conversion stage
-*/
-AFCMode SpiritRadioGetAFCMode(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC_2 register */
-  g_xStatus = SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-  /* Mask the AFC Mode field and returns the value */
-  return (AFCMode)(tempRegValue & 0x20);
-  
-}
-
-
-/**
-* @brief  Sets the AFC peak detector leakage.
-* @param  cLeakage the peak detector leakage. This parameter shall be in the range:
-*         [0:31].
-* @retval None.
-*/
-void SpiritRadioSetAFCPDLeakage(uint8_t cLeakage)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_AFC_PD_LEAKAGE(cLeakage));
-  
-  /* Reads the AFC_2 register and configure the AFC PD leakage field */
-  SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  tempRegValue &= 0xE0;
-  tempRegValue |= cLeakage;
-  
-  /* Sets the AFC_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AFC peak detector leakage.
-* @param  None.
-* @retval uint8_t Peak detector leakage value. This parameter will be in the range:
-*         [0:31].
-*/
-uint8_t SpiritRadioGetAFCPDLeakage(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC_2 register */
-  g_xStatus = SpiritSpiReadRegisters(AFC2_BASE, 1, &tempRegValue);
-  
-  /* Mask the AFC PD leakage field and return the value */
-  return (tempRegValue & 0x1F);
-  
-}
-
-
-/**
-* @brief  Sets the length of the AFC fast period expressed as number of samples.
-* @param  cLength length of the fast period in number of samples.
-* @retval None.
-*/
-void SpiritRadioSetAFCFastPeriod(uint8_t cLength)
-{
-  /* Sets the AFC_1 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC1_BASE, 1, &cLength);
-  
-}
-
-
-/**
-* @brief  Returns the AFC fast period expressed as number of samples.
-* @param  None.
-* @retval uint8_t Length of the fast period in number of samples.
-*/
-uint8_t SpiritRadioGetAFCFastPeriod(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC 1 register and return the value */
-  g_xStatus = SpiritSpiReadRegisters(AFC1_BASE, 1, &tempRegValue);
-  
-  return tempRegValue;
-  
-}
-
-
-/**
-* @brief  Sets the AFC loop gain in fast mode.
-* @param  cGain AFC loop gain in fast mode. This parameter shall be in the range:
-*         [0:15].
-* @retval None.
-*/
-void SpiritRadioSetAFCFastGain(uint8_t cGain)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_AFC_FAST_GAIN(cGain));
-  
-  /* Reads the AFC_0 register and configure the AFC Fast Gain field */
-  SpiritSpiReadRegisters(AFC0_BASE, 1, &tempRegValue);
-  tempRegValue &= 0x0F;
-  tempRegValue |= cGain<<4;
-  
-  /* Sets the AFC_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AFC loop gain in fast mode.
-* @param  None.
-* @retval uint8_t AFC loop gain in fast mode. This parameter will be in the range:
-*         [0:15].
-*/
-uint8_t SpiritRadioGetAFCFastGain(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC_0 register, mask the AFC Fast Gain field and return the value  */
-  g_xStatus = SpiritSpiReadRegisters(AFC0_BASE, 1, &tempRegValue);
-  
-  return ((tempRegValue & 0xF0)>>4);
-  
-}
-
-
-/**
-* @brief  Sets the AFC loop gain in slow mode.
-* @param  cGain AFC loop gain in slow mode. This parameter shall be in the range:
-*         [0:15].
-* @retval None.
-*/
-void SpiritRadioSetAFCSlowGain(uint8_t cGain)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_AFC_SLOW_GAIN(cGain));
-  
-  /* Reads the AFC_0 register and configure the AFC Slow Gain field */
-  SpiritSpiReadRegisters(AFC0_BASE, 1, &tempRegValue);
-  tempRegValue &= 0xF0;
-  tempRegValue |= cGain;
-  
-  /* Sets the AFC_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AFC0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AFC loop gain in slow mode.
-* @param  None.
-* @retval uint8_t AFC loop gain in slow mode. This parameter will be in the range:
-*         [0:15].
-*/
-uint8_t SpiritRadioGetAFCSlowGain(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC_0 register, mask the AFC Slow Gain field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(AFC0_BASE, 1, &tempRegValue);
-  
-  return (tempRegValue & 0x0F);
-  
-}
-
-
-/**
-* @brief  Returns the AFC correction from the corresponding register.
-* @param  None.
-* @retval int8_t AFC correction, read from the corresponding register.
-*         This parameter will be in the range [-128:127].
-*/
-int8_t SpiritRadioGetAFCCorrectionReg(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AFC_CORR register, cast the read value as signed char and return it */
-  g_xStatus = SpiritSpiReadRegisters(AFC_CORR_BASE, 1, &tempRegValue);
-  
-  return (int8_t)tempRegValue;
-  
-}
-
-
-/**
-* @brief  Returns the AFC correction expressed in Hz.
-* @param  None.
-* @retval int32_t AFC correction expressed in Hz
-*         according to the following formula:<ul>
-*         <li> Fafc[Hz]= (Fdig/(12*2^10))*AFC_CORR  where </li>
-*         <li> AFC_CORR is the value read in the AFC_CORR register </li> </ul>
-*/
-int32_t SpiritRadioGetAFCCorrectionHz(void)
-{
-  int8_t correction;
-  uint32_t xtal = s_lXtalFrequency;
-  
-  /* Reads the AFC correction register */
-  correction = SpiritRadioGetAFCCorrectionReg();
-  
-  if(xtal>DOUBLE_XTAL_THR)
-  {
-    xtal /= 2;
-  }
-  
-  /* Calculates and return the Frequency Correction */
-  return (int32_t)(xtal/(12*pow(2,10))*correction);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the AGC.
-* @param  xNewState new state for AGC.
-*         This parameter can be: S_ENABLE or S_DISABLE
-* @retval None.
-*/
-void SpiritRadioAGC(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AGCCTRL_0 register and configure the AGC Enabled field */
-  SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AGCCTRL0_AGC_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AGCCTRL0_AGC_MASK);
-  }
-  
-  /* Sets the AGCCTRL_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Sets the AGC working mode.
-* @param  xMode the AGC mode. This parameter can be one of the values defined in @ref AGCMode :
-*         @arg AGC_LINEAR_MODE     AGC works in linear mode
-*         @arg AGC_BINARY_MODE     AGC works in binary mode
-* @retval None.
-*/
-void SpiritRadioSetAGCMode(AGCMode xMode)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_AGC_MODE(xMode));
-  
-  /* Reads the AGCCTRL_0 register and configure the AGC Mode field */
-  SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  if(xMode == AGC_BINARY_MODE)
-  {
-    tempRegValue |= AGC_BINARY_MODE;
-  }
-  else
-  {
-    tempRegValue &= (~AGC_BINARY_MODE);
-  }
-  
-  /* Sets the AGCCTRL_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC working mode.
-* @param  None.
-* @retval AGCMode Settled AGC mode.  This parameter can be one of the values defined in @ref AGCMode :
-*         @arg AGC_LINEAR_MODE     AGC works in linear mode
-*         @arg AGC_BINARY_MODE     AGC works in binary mode
-*/
-AGCMode SpiritRadioGetAGCMode(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_0 register, mask the AGC Mode field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-  return  (AGCMode)(tempRegValue & 0x40);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the AGC freeze on steady state.
-* @param  xNewState new state for AGC freeze on steady state.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioAGCFreezeOnSteady(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AGCCTRL_2 register and configure the AGC Freeze On Steady field */
-  SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AGCCTRL2_FREEZE_ON_STEADY_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AGCCTRL2_FREEZE_ON_STEADY_MASK);
-  }
-  
-  /* Sets the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Enable or Disable the AGC freeze on sync detection.
-* @param  xNewState new state for AGC freeze on sync detection.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioAGCFreezeOnSync(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AGCCTRL_2 register and configure the AGC Freeze On Sync field */
-  SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AGCCTRL2_FREEZE_ON_SYNC_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AGCCTRL2_FREEZE_ON_SYNC_MASK);
-  }
-  
-  /* Sets the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Enable or Disable the AGC to start with max attenuation.
-* @param  xNewState new state for AGC start with max attenuation mode.
-*         This parameter can be: S_ENABLE or S_DISABLE.
-* @retval None.
-*/
-void SpiritRadioAGCStartMaxAttenuation(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue = 0x00;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the AGCCTRL_2 register and configure the AGC Start Max Attenuation field */
-  SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= AGCCTRL2_START_MAX_ATTENUATION_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~AGCCTRL2_START_MAX_ATTENUATION_MASK);
-  }
-  
-  /* Sets the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Sets the AGC measure time.
-* @param  nTime AGC measure time expressed in us. This parameter shall be in the range [0, 393216/F_Xo].
-* @retval None.
-*/
-void SpiritRadioSetAGCMeasureTimeUs(uint16_t nTime)
-{
-  uint8_t tempRegValue, measure;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_MEASURE_TIME_US(nTime,s_lXtalFrequency));
-  
-  /* Reads the AGCCTRL_2 register */
-  SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-  /* Calculates the measure time value to write in the register */
-  measure = (uint8_t)lroundf(log2((float)nTime/1e6 * s_lXtalFrequency/12));
-  (measure>15) ? (measure=15):(measure);
-  
-  /* Mask the MEAS_TIME field and write the new value */
-  tempRegValue &= 0xF0;
-  tempRegValue |= measure;
-  
-  /* Sets the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC measure time.
-* @param  None.
-* @retval uint16_t AGC measure time expressed in us. This parameter will be in the range [0, 393216/F_Xo].
-*/
-uint16_t SpiritRadioGetAGCMeasureTimeUs(void)
-{
-  uint8_t measure;
-  
-  /* Reads the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &measure);
-  
-  /* Mask the MEAS_TIME field */
-  measure &= 0x0F;
-  
-  /* Calculates the measure time value to write in the register */
-  return (uint16_t)((12.0/s_lXtalFrequency)*(float)pow(2,measure)*1e6);
-  
-}
-
-
-/**
-* @brief  Sets the AGC measure time.
-* @param  cTime AGC measure time to write in the MEAS_TIME field of AGCCTRL_2 register.
-*         This parameter shall be in the range [0:15].
-* @retval None.
-*/
-void SpiritRadioSetAGCMeasureTime(uint8_t cTime)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_MEASURE_TIME(cTime));
-  
-  /* Reads the AGCCTRL_2 register */
-  SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-  /* Mask the MEAS_TIME field and write the new value */
-  tempRegValue &= 0xF0;
-  tempRegValue |= cTime;
-  
-  /* Sets the AGCCTRL_2 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC measure time.
-* @param  None.
-* @retval uint8_t AGC measure time read from the MEAS_TIME field of AGCCTRL_2 register.
-*         This parameter will be in the range [0:15].
-*/
-uint8_t SpiritRadioGetAGCMeasureTime(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_2 register, mask the MEAS_TIME field and return the value  */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL2_BASE, 1, &tempRegValue);
-  
-  return (tempRegValue & 0x0F);
-  
-}
-
-
-/**
-* @brief  Sets the AGC hold time.
-* @param  cTime AGC hold time expressed in us. This parameter shall be in the range[0, 756/F_Xo].
-* @retval None.
-*/
-void SpiritRadioSetAGCHoldTimeUs(uint8_t cTime)
-{
-  uint8_t tempRegValue, hold;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_HOLD_TIME_US(cTime,s_lXtalFrequency));
-  
-  /* Reads the AGCCTRL_0 register */
-  SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-  /* Calculates the hold time value to write in the register */
-  hold = (uint8_t)lroundf(((float)cTime/1e6 * s_lXtalFrequency)/12);
-  (hold>63) ? (hold=63):(hold);
-  
-  /* Mask the HOLD_TIME field and write the new value */
-  tempRegValue &= 0xC0;
-  tempRegValue |= hold;
-  
-  /* Sets the AGCCTRL_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC hold time.
-* @param  None.
-* @retval uint8_t AGC hold time expressed in us. This parameter will be in the range:
-*         [0, 756/F_Xo].
-*/
-uint8_t SpiritRadioGetAGCHoldTimeUs(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_0 register */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-  /* Mask the HOLD_TIME field */
-  tempRegValue &= 0x3F;
-  
-  /* Calculates the hold time value and return it */
-  return (uint8_t)lroundf ((12.0/s_lXtalFrequency)*(tempRegValue*1e6));
-  
-}
-
-
-/**
-* @brief  Sets the AGC hold time.
-* @param  cTime AGC hold time to write in the HOLD_TIME field of AGCCTRL_0 register.
-*         This parameter shall be in the range [0:63].
-* @retval None.
-*/
-void SpiritRadioSetAGCHoldTime(uint8_t cTime)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_HOLD_TIME(cTime));
-  
-  /* Reads the AGCCTRL_0 register */
-  SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-  /* Mask the HOLD_TIME field and write the new value */
-  tempRegValue &= 0xC0;
-  tempRegValue |= cTime;
-  
-  /* Sets the AGCCTRL_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC hold time.
-* @param  None.
-* @retval uint8_t AGC hold time read from the HOLD_TIME field of AGCCTRL_0 register.
-*         This parameter will be in the range [0:63].
-*/
-uint8_t SpiritRadioGetAGCHoldTime(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_0 register, mask the MEAS_TIME field and return the value  */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL0_BASE, 1, &tempRegValue);
-  
-  return (tempRegValue & 0x3F);
-  
-}
-
-
-/**
-* @brief  Sets the AGC high threshold.
-* @param  cHighThreshold AGC high threshold to write in the THRESHOLD_HIGH field of AGCCTRL_1 register.
-*         This parameter shall be in the range [0:15].
-* @retval None.
-*/
-void SpiritRadioSetAGCHighThreshold(uint8_t cHighThreshold)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_THRESHOLD(cHighThreshold));
-  
-  /* Reads the AGCCTRL_1 register */
-  SpiritSpiReadRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-  /* Mask the THRESHOLD_HIGH field and write the new value */
-  tempRegValue &= 0x0F;
-  tempRegValue |= cHighThreshold<<4;
-  
-  /* Sets the AGCCTRL_1 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC high threshold.
-* @param  None.
-* @retval uint8_t AGC high threshold read from the THRESHOLD_HIGH field of AGCCTRL_1 register.
-*         This parameter will be in the range [0:15].
-*/
-uint8_t SpiritRadioGetAGCHighThreshold(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_1 register, mask the THRESHOLD_HIGH field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-  return ((tempRegValue & 0xF0)>>4);
-  
-}
-
-
-/**
-* @brief  Sets the AGC low threshold.
-* @param  cLowThreshold AGC low threshold to write in the THRESHOLD_LOW field of AGCCTRL_1 register.
-*         This parameter shall be in the range [0:15].
-* @retval None.
-*/
-void SpiritRadioSetAGCLowThreshold(uint8_t cLowThreshold)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_AGC_THRESHOLD(cLowThreshold));
-  
-  /* Reads the AGCCTRL_1 register */
-  SpiritSpiReadRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-  /* Mask the THRESHOLD_LOW field and write the new value */
-  tempRegValue &= 0xF0;
-  tempRegValue |= cLowThreshold;
-  
-  /* Sets the AGCCTRL_1 register */
-  g_xStatus = SpiritSpiWriteRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the AGC low threshold.
-* @param  None.
-* @retval uint8_t AGC low threshold read from the THRESHOLD_LOW field of AGCCTRL_1 register.
-*         This parameter will be in the range [0:15].
-*/
-uint8_t SpiritRadioGetAGCLowThreshold(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the AGCCTRL_1 register, mask the THRESHOLD_LOW field and return the value  */
-  g_xStatus = SpiritSpiReadRegisters(AGCCTRL1_BASE, 1, &tempRegValue);
-  
-  return (tempRegValue & 0x0F);
-  
-}
-
-
-/**
-* @brief  Sets the clock recovery algorithm.
-* @param  xMode the Clock Recovery mode. This parameter can be one of the values defined in @ref ClkRecMode :
-*         @arg CLK_REC_PLL     PLL alogrithm for clock recovery
-*         @arg CLK_REC_DLL     DLL alogrithm for clock recovery
-* @retval None.
-*/
-void SpiritRadioSetClkRecMode(ClkRecMode xMode)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_CLK_REC_MODE(xMode));
-  
-  /* Reads the FDEV_0 register */
-  SpiritSpiReadRegisters(FDEV0_BASE, 1, &tempRegValue);
-  
-  /* Mask the CLOCK_REC_ALGO_SEL field and write the new value */
-  tempRegValue &= 0xF7;
-  tempRegValue |= (uint8_t)xMode;
-  
-  /* Sets the FDEV_0 register */
-  g_xStatus = SpiritSpiWriteRegisters(FDEV0_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the Clock Recovery working mode.
-* @param  None.
-* @retval ClkRecMode Clock Recovery mode. This parameter can be one of the values defined in @ref ClkRecMode :
-*         @arg CLK_REC_PLL     PLL alogrithm for clock recovery
-*         @arg CLK_REC_DLL     DLL alogrithm for clock recovery
-*/
-ClkRecMode SpiritRadioGetClkRecMode(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the FDEV_0 register, mask the CLOCK_REC_ALGO_SEL field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(FDEV0_BASE, 1, &tempRegValue);
-  
-  return (ClkRecMode)(tempRegValue & 0x08);
-  
-}
-
-
-/**
-* @brief  Sets the clock recovery proportional gain.
-* @param  cPGain the Clock Recovery proportional gain to write in the CLK_REC_P_GAIN field of CLOCKREC register.
-*         It represents is log2 value of the clock recovery proportional gain.
-*          This parameter shall be in the range [0:7].
-* @retval None.
-*/
-void SpiritRadioSetClkRecPGain(uint8_t cPGain)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_CLK_REC_P_GAIN(cPGain));
-  
-  /* Reads the CLOCKREC register */
-  SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  /* Mask the CLK_REC_P_GAIN field and write the new value */
-  tempRegValue &= 0x1F;
-  tempRegValue |= (cPGain<<5);
-  
-  /* Sets the CLOCKREC register */
-  g_xStatus = SpiritSpiWriteRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the log2 of the clock recovery proportional gain.
-* @param  None.
-* @retval uint8_t Clock Recovery proportional gain read from the CLK_REC_P_GAIN field of CLOCKREC register.
-*         This parameter will be in the range [0:7].
-*/
-uint8_t SpiritRadioGetClkRecPGain(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the CLOCKREC register, mask the CLK_REC_P_GAIN field and return the value  */
-  g_xStatus = SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  return ((tempRegValue & 0xEF)>>5);
-  
-}
-
-
-/**
-* @brief  Sets the clock recovery integral gain.
-* @param  cIGain the Clock Recovery integral gain to write in the CLK_REC_I_GAIN field of CLOCKREC register.
-*         This parameter shall be in the range [0:15].
-* @retval None.
-*/
-void SpiritRadioSetClkRecIGain(uint8_t cIGain)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_CLK_REC_I_GAIN(cIGain));
-  
-  /* Reads the CLOCKREC register */
-  SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  /* Mask the CLK_REC_P_GAIN field and write the new value */
-  tempRegValue &= 0xF0;
-  tempRegValue |= cIGain;
-  
-  /* Sets the CLOCKREC register */
-  g_xStatus = SpiritSpiWriteRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the clock recovery integral gain.
-* @param  None.
-* @retval uint8_t Clock Recovery integral gain read from the
-*         CLK_REC_I_GAIN field of CLOCKREC register.
-*         This parameter will be in the range [0:15].
-*/
-uint8_t SpiritRadioGetClkRecIGain(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the CLOCKREC register, mask the CLK_REC_I_GAIN field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  return (tempRegValue & 0x0F);
-  
-}
-
-
-/**
-* @brief  Sets the postfilter length for clock recovery algorithm.
-* @param  xLength the postfilter length in symbols. This parameter can be one of the values defined in @ref PstFltLength :
-*         @arg PSTFLT_LENGTH_8     Postfilter length is 8 symbols
-*         @arg PSTFLT_LENGTH_16    Postfilter length is 16 symbols
-* @retval None.
-*/
-void SpiritRadioSetClkRecPstFltLength(PstFltLength xLength)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameter */
-  s_assert_param(IS_PST_FLT_LENGTH(xLength));
-  
-  /* Reads the CLOCKREC register */
-  SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  /* Mask the PSTFLT_LEN field and write the new value */
-  tempRegValue &= 0xEF;
-  tempRegValue |= (uint8_t)xLength;
-  
-  /* Sets the CLOCKREC register */
-  g_xStatus = SpiritSpiWriteRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-}
-
-
-/**
-* @brief  Returns the postfilter length for clock recovery algorithm.
-* @param  None.
-* @retval PstFltLength Postfilter length in symbols. This parameter can be one of the values defined in @ref PstFltLength :
-*         @arg PSTFLT_LENGTH_8     Postfilter length is 8 symbols
-*         @arg PSTFLT_LENGTH_16    Postfilter length is 16 symbols
-*/
-PstFltLength SpiritRadioGetClkRecPstFltLength(void)
-{
-  uint8_t tempRegValue;
-  
-  /* Reads the CLOCKREC register, mask the PSTFLT_LEN field and return the value */
-  g_xStatus = SpiritSpiReadRegisters(CLOCKREC_BASE, 1, &tempRegValue);
-  
-  return (PstFltLength)(tempRegValue & 0x10);
-  
-}
-
-
-/**
-* @brief  Enables or Disables the received data blanking when the CS is under the threshold.
-* @param  xNewState new state of this mode.
-*         This parameter can be: S_ENABLE or S_DISABLE .
-* @retval None.
-*/
-void SpiritRadioCsBlanking(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the ANT_SELECT_CONF_BASE and mask the CS_BLANKING BIT field */
-  SpiritSpiReadRegisters(ANT_SELECT_CONF_BASE, 1, &tempRegValue);
-  
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= ANT_SELECT_CS_BLANKING_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~ANT_SELECT_CS_BLANKING_MASK);
-  }
-  
-  /* Writes the new value in the ANT_SELECT_CONF register */
-  g_xStatus = SpiritSpiWriteRegisters(ANT_SELECT_CONF_BASE, 1, &tempRegValue);
-  
-  
-}
-
-/**
-* @brief  Enables or Disables the persistent RX mode.
-* @param  xNewState new state of this mode.
-*         This parameter can be: S_ENABLE or S_DISABLE .
-* @retval None.
-*/
-void SpiritRadioPersistenRx(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the PROTOCOL0_BASE and mask the PROTOCOL0_PERS_RX_MASK bitfield */
-  SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-  
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL0_PERS_RX_MASK;
-  }
-  else
-  {
-    tempRegValue &= (~PROTOCOL0_PERS_RX_MASK);
-  }
-  
-  /* Writes the new value in the PROTOCOL0_BASE register */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-  
-}
-
-/**
-* @brief  Enables or Disables the synthesizer reference divider.
-* @param  xNewState new state for synthesizer reference divider.
-*         This parameter can be: S_ENABLE or S_DISABLE .
-* @retval None.
-*/
-void SpiritRadioSetRefDiv(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the SYNTH_CONFIG1_BASE and mask the REFDIV bit field */
-  SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-  
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue |= 0x80;
-  }
-  else
-  {
-    tempRegValue &= 0x7F;
-  }
-  
-  /* Writes the new value in the SYNTH_CONFIG1_BASE register */
-  g_xStatus = SpiritSpiWriteRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-  
-}
-
-/**
-* @brief  Get the the synthesizer reference divider state.
-* @param  void.
-* @retval None.
-*/
-SpiritFunctionalState SpiritRadioGetRefDiv(void)
-{
-  uint8_t tempRegValue;
-  
-  g_xStatus = SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
-  
-  if(((tempRegValue>>7)&0x1))
-  {
-    return S_ENABLE;
-  }
-  else
-  {
-    return S_DISABLE;
-  }
-  
-}
-
-/**
-* @brief  Enables or Disables the synthesizer reference divider.
-* @param  xNewState new state for synthesizer reference divider.
-*         This parameter can be: S_ENABLE or S_DISABLE .
-* @retval None.
-*/
-void SpiritRadioSetDigDiv(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-  
-  /* Check the parameters */
-  s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-  
-  /* Reads the XO_RCO_TEST_BASE and mask the PD_CLKDIV bit field */
-  SpiritSpiReadRegisters(XO_RCO_TEST_BASE, 1, &tempRegValue);
-  
-  if(xNewState == S_ENABLE)
-  {
-    tempRegValue &= 0xf7;
-  }
-  else
-  {
-    
-    tempRegValue |= 0x08;
-  }
-  
-  /* Writes the new value in the XO_RCO_TEST_BASE register */
-  g_xStatus = SpiritSpiWriteRegisters(XO_RCO_TEST_BASE, 1, &tempRegValue);
-  
-}
-
-/**
-* @brief  Get the the synthesizer reference divider state.
-* @param  void.
-* @retval None.
-*/
-SpiritFunctionalState SpiritRadioGetDigDiv(void)
-{
-  uint8_t tempRegValue;
-  
-  g_xStatus = SpiritSpiReadRegisters(XO_RCO_TEST_BASE, 1, &tempRegValue);
-  
-  if(((tempRegValue>>3)&0x1))
-  {
-    return S_DISABLE;
-  }
-  else
-  {
-    return S_ENABLE;
-  }
-  
-}
-
-/**
-* @brief  Returns the XTAL frequency.
-* @param  void.
-* @retval uint32_t XTAL frequency.
-*/
-uint32_t SpiritRadioGetXtalFrequency(void)
-{
-  return s_lXtalFrequency; 
-}
-
-/**
-* @brief  Sets the XTAL frequency.
-* @param  uint32_t XTAL frequency.
-* @retval void.
-*/
-void SpiritRadioSetXtalFrequency(uint32_t lXtalFrequency)
-{
-  s_lXtalFrequency = lXtalFrequency; 
-}
-
-/**
-* @}
-*/
-
-
-/**
-* @}
-*/
-
-
-/**
-* @}
-*/
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
-
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Timer.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Timer.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,700 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Timer.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   Configuration and management of SPIRIT timers.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Timer.h"
-#include "SPIRIT_Radio.h"
-#include "MCU_Interface.h"
-
-
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_Timer
- * @{
- */
-
-
-/**
- * @defgroup Timer_Private_TypesDefinitions             Timer Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Timer_Private_Defines                      Timer Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Timer_Private_Macros                       Timer Private Macros
- * @{
- */
-
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Timer_Private_Variables                    Timer Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Timer_Private_FunctionPrototypes            Timer Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup Timer_Private_Functions                    Timer Private Functions
- * @{
- */
-
-/**
- * @brief  Enables or Disables the LDCR mode.
- * @param  xNewState new state for LDCR mode.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritTimerLdcrMode(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-  /* Mask the read value to enable or disable the LDC mode */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL2_LDC_MODE_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL2_LDC_MODE_MASK;
-  }
-
-  /* Writes the register to Enable or Disable the LDCR mode */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Enables or Disables the LDCR timer reloading with the value stored in the LDCR_RELOAD registers.
- * @param  xNewState new state for LDCR reloading.
- *         This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritTimerLdcrAutoReload(SpiritFunctionalState xNewState)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  /* Mask te read value to enable or disable the reload on sync mode */
-  if(xNewState==S_ENABLE)
-  {
-    tempRegValue |= PROTOCOL1_LDC_RELOAD_ON_SYNC_MASK;
-  }
-  else
-  {
-    tempRegValue &= ~PROTOCOL1_LDC_RELOAD_ON_SYNC_MASK;
-  }
-
-  /* Writes the register to Enable or Disable the Auto Reload */
-  g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief  Returns the LDCR timer reload bit.
- * @param  None.
- * @retval SpiritFunctionalState: value of the reload bit.
- */
-SpiritFunctionalState SpiritTimerLdcrGetAutoReload(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the register value */
-  g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
-
-  return (SpiritFunctionalState)(tempRegValue & 0x80);
-
-}
-
-/**
- * @brief  Sets the RX timeout timer initialization registers with the values of COUNTER and PRESCALER according to the formula: Trx=PRESCALER*COUNTER*Tck.
- *         Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter and/or RX_Timeout_Prescaler registers.
- * @param  cCounter value for the timer counter.
- *         This parameter must be an uint8_t.
- * @param  cPrescaler value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetRxTimeout(uint8_t cCounter , uint8_t cPrescaler)
-{
-  uint8_t tempRegValue[2]={cPrescaler,cCounter};
-
-  /* Writes the prescaler and counter value for RX timeout in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the RX timeout timer counter and prescaler from the desired value in ms. it is possible to fix the RX_Timeout to
- *         a minimum value of 50.417us to a maximum value of about 3.28 s.
- * @param  fDesiredMsec desired timer value.
- *         This parameter must be a float.
- * @retval None
- */
-
-void SpiritTimerSetRxTimeoutMs(float fDesiredMsec)
-{
-  uint8_t tempRegValue[2];
-
-  /* Computes the counter and prescaler value */
-  SpiritTimerComputeRxTimeoutValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]);
-
-  /* Writes the prescaler and counter value for RX timeout in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the RX timeout timer counter. If it is equal to 0 the timeout is infinite.
- * @param  cCounter value for the timer counter.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetRxTimeoutCounter(uint8_t cCounter)
-{
-  /* Writes the counter value for RX timeout in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS4_RX_TIMEOUT_COUNTER_BASE, 1, &cCounter);
-
-}
-
-
-/**
- * @brief  Sets the RX timeout timer prescaler. If it is equal to 0 the timeout is infinite.
- * @param  cPrescaler value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None
- */
-void SpiritTimerSetRxTimeoutPrescaler(uint8_t cPrescaler)
-{
-  /* Writes the prescaler value for RX timeout in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 1, &cPrescaler);
-
-}
-
-
-/**
- * @brief  Returns the RX timeout timer.
- * @param  pfTimeoutMsec pointer to the variable in which the timeout expressed in milliseconds has to be stored.
- *         If the returned value is 0, it means that the RX_Timeout is infinite.
- *         This parameter must be a float*.
- * @param  pcCounter pointer to the variable in which the timer counter has to be stored.
- *         This parameter must be an uint8_t*.
- * @param  pcPrescaler pointer to the variable in which the timer prescaler has to be stored.
- *         This parameter must be an uint8_t*.
- * @retval None.
- */
-void SpiritTimerGetRxTimeout(float* pfTimeoutMsec, uint8_t* pcCounter , uint8_t* pcPrescaler)
-{
-  uint8_t tempRegValue[2];
-
-  /* Reads the RX timeout registers value */
-  g_xStatus = SpiritSpiReadRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue);
-
-  /* Returns values */
-  (*pcPrescaler) = tempRegValue[0];
-  (*pcCounter) = tempRegValue[1];
-    
-  float nXtalFrequency = (float)SpiritRadioGetXtalFrequency();
-  if(nXtalFrequency>DOUBLE_XTAL_THR) {
-    nXtalFrequency /= 2.0;
-  }
-  nXtalFrequency /= 1000.0;
-  *pfTimeoutMsec = (float)((tempRegValue[0]+1)*tempRegValue[1]*(1210.0/nXtalFrequency));
-  
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer initialization registers with the values of
- *         COUNTER and PRESCALER according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where
- *         Tck = 28.818 us. The minimum vale of the wakeup timeout is 28.818us (PRESCALER and
- *         COUNTER equals to 0) and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals
- *         to 255).
- * @param  cCounter value for the timer counter.
- *         This parameter must be an uint8_t.
- * @param  cPrescaler value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimer(uint8_t cCounter , uint8_t cPrescaler)
-{
-  uint8_t tempRegValue[2]={cPrescaler,cCounter};
-
-  /* Writes the counter and prescaler value of wake-up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer counter and prescaler from the desired value in ms,
- *         according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us.
- *         The minimum vale of the wakeup timeout is 28.818us (PRESCALER and COUNTER equals to 0)
- *         and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals to 255).
- * @param  fDesiredMsec desired timer value.
- *         This parameter must be a float.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimerMs(float fDesiredMsec)
-{
-  uint8_t tempRegValue[2];
-
-  /* Computes counter and prescaler */
-  SpiritTimerComputeWakeUpValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]);
-
-  /* Writes the counter and prescaler value of wake-up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer counter. Remember that this value is incresead by one in the Twu calculation.
- *         Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us
- * @param  cCounter value for the timer counter.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimerCounter(uint8_t cCounter)
-{
-  /* Writes the counter value for Wake_Up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS2_LDC_COUNTER_BASE, 1, &cCounter);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer prescaler. Remember that this value is incresead by one in the Twu calculation.
- *         Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us
- * @param  cPrescaler value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimerPrescaler(uint8_t cPrescaler)
-{
-  /* Writes the prescaler value for Wake_Up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 1, &cPrescaler);
-
-}
-
-
-/**
- * @brief  Returns the LDCR wake up timer, according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us.
- * @param  pfWakeUpMsec pointer to the variable in which the wake-up time expressed in milliseconds has to be stored.
- *         This parameter must be a float*.
- * @param  pcCounter pointer to the variable in which the timer counter has to be stored.
- *         This parameter must be an uint8_t*.
- * @param  pcPrescaler pointer to the variable in which the timer prescaler has to be stored.
- *         This parameter must be an uint8_t*.
- * @retval None.
- */
-void SpiritTimerGetWakeUpTimer(float* pfWakeUpMsec, uint8_t* pcCounter , uint8_t* pcPrescaler)
-{
-  uint8_t tempRegValue[2];
-  //uint32_t xtal=SpiritRadioGetXtalFrequency();
-  float rco_freq;
-  
-  rco_freq=(float)SpiritTimerGetRcoFrequency();
-  
-  /* Reads the Wake_Up timer registers value */
-  g_xStatus = SpiritSpiReadRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue);
-
-  /* Returns values */
-  (*pcPrescaler)=tempRegValue[0];
-  (*pcCounter)=tempRegValue[1];
-  *pfWakeUpMsec = (float)((((*pcPrescaler)+1)*((*pcCounter)+1)*(1000.0/rco_freq)));
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer reloading registers with the values of
- *         COUNTER and PRESCALER according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where
- *         Tck = 28.818 us. The minimum vale of the wakeup timeout is 28.818us (PRESCALER and
- *         COUNTER equals to 0) and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals
- *         to 255).
- * @param  cCounter reload value for the timer counter.
- *         This parameter must be an uint8_t.
- * @param  cPrescaler reload value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimerReload(uint8_t cCounter , uint8_t cPrescaler)
-{
-  uint8_t tempRegValue[2]={cPrescaler,cCounter};
-
-  /* Writes the counter and prescaler value of reload wake-up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up reload timer counter and prescaler from the desired value in ms,
- *         according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us.
- *         The minimum vale of the wakeup timeout is 28.818us (PRESCALER and COUNTER equals to 0)
- *         and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals to 255).
- * @param  fDesiredMsec desired timer value.
- *         This parameter must be a float.
- * @retval None.
- */
-void SpiritTimerSetWakeUpTimerReloadMs(float fDesiredMsec)
-{
-  uint8_t tempRegValue[2];
-
-  /* Computes counter and prescaler */
-  SpiritTimerComputeWakeUpValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]);
-
-  /* Writes the counter and prescaler value of reload wake-up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer reload counter. Remember that this value is incresead by one in the Twu calculation.
- *         Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us
- * @param  cCounter value for the timer counter.
- *         This parameter must be an uint8_t.
- * @retval None
- */
-void SpiritTimerSetWakeUpTimerReloadCounter(uint8_t cCounter)
-{
-  /* Writes the counter value for reload Wake_Up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS0_LDC_RELOAD_COUNTER_BASE, 1, &cCounter);
-
-}
-
-
-/**
- * @brief  Sets the LDCR wake up timer reload prescaler. Remember that this value is incresead by one in the Twu calculation.
- *         Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us
- * @param  cPrescaler value for the timer prescaler.
- *         This parameter must be an uint8_t.
- * @retval None
- */
-void SpiritTimerSetWakeUpTimerReloadPrescaler(uint8_t cPrescaler)
-{
-  /* Writes the prescaler value for reload Wake_Up timer in the corresponding register */
-  g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 1, &cPrescaler);
-
-}
-
-
-/**
- * @brief  Returns the LDCR wake up reload timer, according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us.
- * @param  pfWakeUpReloadMsec pointer to the variable in which the wake-up reload time expressed in milliseconds has to be stored.
- *         This parameter must be a float*.
- * @param  pcCounter pointer to the variable in which the timer counter has to be stored.
- *         This parameter must be an uint8_t*.
- * @param  pcPrescaler pointer to the variable in which the timer prescaler has to be stored.
- *         This parameter must be an uint8_t*.
- * @retval None.
- */
-void SpiritTimerGetWakeUpTimerReload(float* pfWakeUpReloadMsec, uint8_t* pcCounter , uint8_t* pcPrescaler)
-{
-  uint8_t tempRegValue[2];
-  //uint32_t xtal=SpiritRadioGetXtalFrequency();
-  float rco_freq;
-  
-  rco_freq=(float)SpiritTimerGetRcoFrequency();
-  
-  /* Reads the reload Wake_Up timer registers value */
-  g_xStatus = SpiritSpiReadRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue);
-
-  /* Returns values */
-  (*pcPrescaler)=tempRegValue[0];
-  (*pcCounter)=tempRegValue[1];
-  *pfWakeUpReloadMsec = (float)((((*pcPrescaler)+1)*((*pcCounter)+1)*(1000.0/rco_freq)));
-
-}
-
-/**
- * @brief  Computes and returns the RCO frequency. 
- *         This frequency depends on the xtal frequency and the XTAL bit in register 0x01.
- * @retval RCO frequency in Hz as an uint16_t.
- */
-uint16_t SpiritTimerGetRcoFrequency(void)
-{
-  uint16_t rco_freq=34700;
-  uint32_t xtal=SpiritRadioGetXtalFrequency();
-  
-  if(xtal>30000000) xtal/=2;
-  
-  if(xtal==25000000)
-  {
-    uint8_t xtal_flag;
-    SpiritSpiReadRegisters(0x01, 1, &xtal_flag);
-    xtal_flag=(xtal_flag&0x40);
-    
-    if(xtal_flag==0)
-    {
-      rco_freq=36100;
-    }
-    else
-    {
-      rco_freq=33300;
-    }
-  }
-  
-  return rco_freq;
-}
-
-/**
- * @brief  Computes the values of the wakeup timer counter and prescaler from the user time expressed in millisecond.
- *         The prescaler and the counter values are computed maintaining the prescaler value as
- *         small as possible in order to obtain the best resolution, and in the meantime minimizing the error.
- * @param  fDesiredMsec desired wakeup timeout in millisecs.
- *         This parameter must be a float. Since the counter and prescaler are 8 bit registers the maximum
- *         reachable value is maxTime = fTclk x 256 x 256.
- * @param  pcCounter pointer to the variable in which the value for the wakeup timer counter has to be stored.
- *         This parameter must be a uint8_t*.
- * @param  pcPrescaler pointer to the variable in which the value for the wakeup timer prescaler has to be stored.
- *         This parameter must be an uint8_t*.
- * @retval None
- */
-void SpiritTimerComputeWakeUpValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler)
-{
-  float rco_freq,err;
-  uint32_t n;
-  
-  rco_freq=((float)SpiritTimerGetRcoFrequency())/1000;
-  
-  /* N cycles in the time base of the timer: 
-     - clock of the timer is RCO frequency
-     - divide times 1000 more because we have an input in ms (variable rco_freq is already this frequency divided by 1000)
-  */
-  n=(uint32_t)(fDesiredMsec*rco_freq);
-    
-  /* check if it is possible to reach that target with prescaler and counter of spirit1 */
-  if(n/0xFF>0xFD)
-  {
-    /* if not return the maximum possible value */
-    (*pcCounter) = 0xFF;
-    (*pcPrescaler) = 0xFF;
-    return;
-  }
-  
-  /* prescaler is really 2 as min value */
-  (*pcPrescaler)=(n/0xFF)+2;
-  (*pcCounter) = n / (*pcPrescaler);
-  
-  /* check if the error is minimum */
-  err=S_ABS((float)(*pcCounter)*(*pcPrescaler)/rco_freq-fDesiredMsec);
-  
-  if((*pcCounter)<=254)
-  {
-    if(S_ABS((float)((*pcCounter)+1)*(*pcPrescaler)/rco_freq-fDesiredMsec)<err)
-      (*pcCounter)=(*pcCounter)+1;
-  }
-    
-  /* decrement prescaler and counter according to the logic of this timer in spirit1 */
-  (*pcPrescaler)--;
-  if((*pcCounter)>1)
-    (*pcCounter)--;
-  else
-    (*pcCounter)=1;
-}
-
-
-/**
- * @brief  Computes the values of the rx_timeout timer counter and prescaler from the user time expressed in millisecond.
- *         The prescaler and the counter values are computed maintaining the prescaler value as
- *         small as possible in order to obtain the best resolution, and in the meantime minimizing the error.
- * @param  fDesiredMsec desired rx_timeout in millisecs.
- *         This parameter must be a float. Since the counter and prescaler are 8 bit registers the maximum
- *         reachable value is maxTime = fTclk x 255 x 255.
- * @param  pcCounter pointer to the variable in which the value for the rx_timeout counter has to be stored.
- *         This parameter must be a uint8_t*.
- * @param  pcPrescaler pointer to the variable in which the value for the rx_timeout prescaler has to be stored.
- *         This parameter must be an uint8_t*.
- * @retval None
- */
-void SpiritTimerComputeRxTimeoutValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler)
-{
-  uint32_t nXtalFrequency = SpiritRadioGetXtalFrequency();
-  uint32_t n;
-  float err;
-  
-  /* if xtal is doubled divide it by 2 */
-  if(nXtalFrequency>DOUBLE_XTAL_THR) {
-    nXtalFrequency >>= 1;
-  }
-  
-  /* N cycles in the time base of the timer: 
-     - clock of the timer is xtal/1210
-     - divide times 1000 more because we have an input in ms
-  */
-  n=(uint32_t)(fDesiredMsec*nXtalFrequency/1210000);
-  
-  /* check if it is possible to reach that target with prescaler and counter of spirit1 */
-  if(n/0xFF>0xFD)
-  {
-    /* if not return the maximum possible value */
-    (*pcCounter) = 0xFF;
-    (*pcPrescaler) = 0xFF;
-    return;
-  }
-  
-  /* prescaler is really 2 as min value */
-  (*pcPrescaler)=(n/0xFF)+2;
-  (*pcCounter) = n / (*pcPrescaler);
-  
-  /* check if the error is minimum */
-  err=S_ABS((float)(*pcCounter)*(*pcPrescaler)*1210000/nXtalFrequency-fDesiredMsec);
-  
-  if((*pcCounter)<=254)
-  {
-    if(S_ABS((float)((*pcCounter)+1)*(*pcPrescaler)*1210000/nXtalFrequency-fDesiredMsec)<err)
-      (*pcCounter)=(*pcCounter)+1;
-  }
-    
-  /* decrement prescaler and counter according to the logic of this timer in spirit1 */
-  (*pcPrescaler)--;
-  if((*pcCounter)>1)
-    (*pcCounter)--;
-  else
-    (*pcCounter)=1;
-}
-
-
-/**
- * @brief  Sets the RX timeout stop conditions.
- * @param  xStopCondition new stop condition.
- *         This parameter can be any value of @ref RxTimeoutStopCondition.
- * @retval None
- */
-void SpiritTimerSetRxTimeoutStopCondition(RxTimeoutStopCondition xStopCondition)
-{
-  uint8_t tempRegValue[2];
-
-  /* Check the parameters */
-  s_assert_param(IS_RX_TIMEOUT_STOP_CONDITION(xStopCondition));
-
-  /* Reads value on the PKT_FLT_OPTIONS and PROTOCOL2 register */
-  g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 2, tempRegValue);
-
-  tempRegValue[0] &= 0xBF;
-  tempRegValue[0] |= ((xStopCondition & 0x08)  << 3);
-
-  tempRegValue[1] &= 0x1F;
-  tempRegValue[1] |= (xStopCondition << 5);
-
-  /* Writes value on the PKT_FLT_OPTIONS and PROTOCOL2 register */
-  g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 2, tempRegValue);
-
-}
-
-/**
- * @brief  Sends the LDC_RELOAD command to SPIRIT. Reload the LDC timer with the value stored in the LDC_PRESCALER / COUNTER registers.
- * @param  None.
- * @retval None
- */
-void SpiritTimerReloadStrobe(void)
-{
-  /* Sends the CMD_LDC_RELOAD command */
-  g_xStatus = SpiritSpiCommandStrobes(COMMAND_LDC_RELOAD);
-
-}
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Types.c
--- a/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Types.c	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    SPIRIT_Types.c
-  * @author  VMA division - AMS
-  * @version 3.2.2
-  * @date    08-July-2015
-  * @brief   File for SPIRIT types.
-  * @details
-  *
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "SPIRIT_Types.h"
-#include "MCU_Interface.h"
-
-
-/** @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/** @addtogroup SPIRIT_Types
- * @{
- */
-
-
-/** @defgroup Types_Private_TypesDefinitions    Types Private Types Definitions
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Types_Private_Defines             Types Private Defines
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Types_Private_Macros               Types Private Macros
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Types_Private_Variables             Types Private Variables
- * @{
- */
-
-/**
- * @brief  Spirit Status global variable.
- *         This global variable of @ref SpiritStatus type is updated on every SPI transaction
- *         to maintain memory of Spirit Status.
- */
-
-volatile SpiritStatus g_xStatus;
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Types_Private_FunctionPrototypes       Types Private FunctionPrototypes
- * @{
- */
-
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup Types_Private_Functions                 Types Private Functions
- * @{
- */
-
-#ifdef  SPIRIT_USE_FULL_ASSERT
-/**
- * @brief  Reports the name of the source file and the source line number
- *         where the assert_param error has occurred.
- * @param file  pointer to the source file name
- * @param line  assert_param error line source number
- * @retval : None
- */
-void s_assert_failed(uint8_t* file, uint32_t line)
-{
-  /* User can add his own implementation to report the file name and line number */
-  printf("Wrong parameters value: file %s on line %d\r\n", file, (int)line);
-
-  /* Infinite loop */
-  while (1)
-  {
-  }
-}
-#elif SPIRIT_USE_VCOM_ASSERT
-
-#include "SDK_EVAL_VC_General.h"
-
-/**
- * @brief  Reports the name of the source file and the source line number
- *         where the assert_param error has occurred.
- * @param file pointer to the source file name
- * @param line  assert_param error line source number
- * @param expression: string representing the assert failed expression
- * @retval : None
- */
-void s_assert_failed(uint8_t* file, uint32_t line, char* expression)
-{
-
-  printf("\n\rVCOM DEBUG: Incorrect parameter. Please reboot.\n\r");
-  printf("%s:%d \n\r",file,line);
-  printf("The expression %s returned FALSE.\n\r", expression);
-
-  /* Infinite loop */
-  while (1)
-  {
-  }
-}
-
-#elif SPIRIT_USE_FRAME_ASSERT
-
-#include "SdkUsbProtocol.h"
-
-/**
- * @brief Sends a notify frame with a payload indicating the name 
- *        of the assert failed.
- * @param expression: string representing the assert failed expression
- * @retval : None
- */
-void s_assert_failed(char* expression)
-{
-  char pcPayload[100];
-  uint16_t i;
-  
-  for(i = 0 ; expression[i]!='(' ; i++);
-  expression[i]='\0';
-  
-  strcpy(pcPayload, &expression[3]);
-  
-  //sprintf(pcPayload, "The expression %s returned FALSE.\n\r", expression);
-  SpiritNotifyAssertFailed(pcPayload);
-
-}
-
-#endif
-
-
-/**
- * @brief  Updates the gState (the global variable used to maintain memory of Spirit Status)
- *         reading the MC_STATE register of SPIRIT.
- * @param  None
- * @retval None
- */
-void SpiritRefreshStatus(void)
-{
-  uint8_t tempRegValue;
-
-  /* Reads the MC_STATUS register to update the g_xStatus */
-  g_xStatus = SpiritSpiReadRegisters(MC_STATE1_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @}
- */
-
-
-
-/**
- * @}
- */
-
-
-
-/**
- * @}
- */
-
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_gpio.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_gpio.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,224 +0,0 @@
-/**
-******************************************************************************
-* @file    radio_gpio.h
-* @author  System Lab - NOIDA
-* @version V1.0.0
-* @date    15-May-2014
-* @brief   This file contains all the functions prototypes for the gpio  
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*      without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported Variables ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __RADIO_GPIO_H
-#define __RADIO_GPIO_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-  
-/* Includes ------------------------------------------------------------------*/
-#ifdef USE_STM32L1XX_NUCLEO
-#include "stm32l1xx_hal.h"
-#endif
-
-#ifdef USE_STM32F4XX_NUCLEO
-#include "stm32f4xx_hal.h"
-#endif
-#include "SPIRIT_Types.h"
-  
-/**
- * @addtogroup BSP
- * @{
- */
-
-
-/* Exported types ------------------------------------------------------------*/
-  /* MCU GPIO pin working mode for GPIO */
-typedef enum                                                                                          
-{
-    RADIO_MODE_GPIO_IN  = 0x00,   /*!< Work as GPIO input */
-    RADIO_MODE_EXTI_IN,           /*!< Work as EXTI */
-    RADIO_MODE_GPIO_OUT,          /*!< Work as GPIO output */
-}RadioGpioMode;  
-
- /* MCU GPIO pin enumeration for GPIO */
-typedef enum 
-{
-  RADIO_GPIO_0     = 0x00, /*!< GPIO_0 selected */
-  RADIO_GPIO_1     = 0x01, /*!< GPIO_1 selected */
-  RADIO_GPIO_2     = 0x02, /*!< GPIO_2 selected */
-  RADIO_GPIO_3     = 0x03, /*!< GPIO_3 selected */
-  RADIO_GPIO_SDN   = 0x04, /*!< GPIO_SDN selected */
-} 
-RadioGpioPin;   
-
-  
-/* Exported constants --------------------------------------------------------*/
-  
-  
-/* Exported macro ------------------------------------------------------------*/
- /* MCU GPIO pin working mode for GPIO */
-#define IS_RADIO_GPIO_MODE(MODE) (((MODE) == RADIO_MODE_GPIO_IN) || \
-                               ((MODE) == RADIO_MODE_EXTI_IN) || \
-                               ((MODE) == RADIO_MODE_GPIO_OUT))
-
-/* Number of Arduino pins used for RADIO GPIO interface */
-#define RADIO_GPIO_NUMBER    ((uint8_t)5)
-
-/* MCU GPIO pin enumeration for GPIO */
-#define IS_RADIO_GPIO_PIN(PIN)   (((PIN) == RADIO_GPIO_0) || \
-                               ((PIN) == RADIO_GPIO_1) || \
-                               ((PIN) == RADIO_GPIO_2) || \
-                               ((PIN) == RADIO_GPIO_3) || \
-                               ((PIN) == RADIO_GPIO_SDN))
-
-/* Define for RADIO board */
-#if !defined (USE_SPIRIT1_DEFAULT)
- #define USE_SPIRIT1_DEFAULT
-#endif  
-
-/* @defgroup Radio_Gpio_config_Define */
-/*NOTE: GPIO0, GPIO1, GPIO2 of SPIRIT1 is not used in the shield*/
-
-#define RADIO_GPIO_0_PORT                          GPIOC
-#define RADIO_GPIO_0_PIN                           GPIO_PIN_1
-#define RADIO_GPIO_0_CLOCK_ENABLE()                __GPIOC_CLK_ENABLE()
-#define RADIO_GPIO_0_CLOCK_DISABLE()               __GPIOC_CLK_ENABLE()   
-#define RADIO_GPIO_0_SPEED                         GPIO_SPEED_HIGH
-#define RADIO_GPIO_0_PUPD                          GPIO_NOPULL
-#define RADIO_GPIO_0_EXTI_LINE                     GPIO_PIN_1
-#define RADIO_GPIO_0_EXTI_MODE                     GPIO_MODE_IT_FALLING
-#define RADIO_GPIO_0_EXTI_IRQN                     EXTI1_IRQn 
-#define RADIO_GPIO_0_EXTI_PREEMPTION_PRIORITY      2
-#define RADIO_GPIO_0_EXTI_SUB_PRIORITY             2
-#define RADIO_GPIO_0_EXTI_IRQ_HANDLER              EXTI1_IRQHandler
-
-#define RADIO_GPIO_1_PORT                          GPIOB
-#define RADIO_GPIO_1_PIN                           GPIO_PIN_0
-#define RADIO_GPIO_1_CLOCK_ENABLE()                __GPIOB_CLK_ENABLE()
-#define RADIO_GPIO_1_CLOCK_DISABLE()               __GPIOB_CLK_ENABLE()   
-#define RADIO_GPIO_1_SPEED                         GPIO_SPEED_HIGH
-#define RADIO_GPIO_1_PUPD                          GPIO_NOPULL
-#define RADIO_GPIO_1_EXTI_LINE                     GPIO_PIN_0
-#define RADIO_GPIO_1_EXTI_MODE                     GPIO_MODE_IT_FALLING
-#define RADIO_GPIO_1_EXTI_IRQN                     EXTI0_IRQn 
-#define RADIO_GPIO_1_EXTI_PREEMPTION_PRIORITY      2
-#define RADIO_GPIO_1_EXTI_SUB_PRIORITY             2
-#define RADIO_GPIO_1_EXTI_IRQ_HANDLER              EXTI0_IRQHandler
-
-#define RADIO_GPIO_2_PORT                          GPIOA
-#define RADIO_GPIO_2_PIN                           GPIO_PIN_4
-#define RADIO_GPIO_2_CLOCK_ENABLE()                __GPIOA_CLK_ENABLE()
-#define RADIO_GPIO_2_CLOCK_DISABLE()               __GPIOA_CLK_ENABLE()   
-#define RADIO_GPIO_2_SPEED                         GPIO_SPEED_HIGH
-#define RADIO_GPIO_2_PUPD                          GPIO_NOPULL
-#define RADIO_GPIO_2_EXTI_LINE                     GPIO_PIN_4
-#define RADIO_GPIO_2_EXTI_MODE                     GPIO_MODE_IT_FALLING
-#define RADIO_GPIO_2_EXTI_IRQN                     EXTI4_IRQn 
-#define RADIO_GPIO_2_EXTI_PREEMPTION_PRIORITY      2
-#define RADIO_GPIO_2_EXTI_SUB_PRIORITY             2
-#define RADIO_GPIO_2_EXTI_IRQ_HANDLER              EXTI4_IRQHandler
-
-
-#if defined (USE_SPIRIT1_DEFAULT)
-
-
-#define RADIO_GPIO_3_PORT                          GPIOC
-#define RADIO_GPIO_3_PIN                           GPIO_PIN_7
-#define RADIO_GPIO_3_CLOCK_ENABLE()              __GPIOC_CLK_ENABLE()
-#define RADIO_GPIO_3_CLOCK_DISABLE()             __GPIOC_CLK_DISABLE()   
-#define RADIO_GPIO_3_SPEED                         GPIO_SPEED_HIGH
-#define RADIO_GPIO_3_PUPD                          GPIO_NOPULL
-#define RADIO_GPIO_3_EXTI_LINE                     GPIO_PIN_7
-#define RADIO_GPIO_3_EXTI_MODE                     GPIO_MODE_IT_FALLING
-#define RADIO_GPIO_3_EXTI_IRQN                     EXTI9_5_IRQn 
-#define RADIO_GPIO_3_EXTI_PREEMPTION_PRIORITY      2
-#define RADIO_GPIO_3_EXTI_SUB_PRIORITY             2
-#define RADIO_GPIO_3_EXTI_IRQ_HANDLER              EXTI9_5_IRQHandler
-
-#else
-
-#define RADIO_GPIO_3_PORT                        GPIOA
-#define RADIO_GPIO_3_PIN                         GPIO_PIN_0
-#define RADIO_GPIO_3_CLOCK_ENABLE()                __GPIOA_CLK_ENABLE()
-#define RADIO_GPIO_3_CLOCK_DISABLE()               __GPIOA_CLK_DISABLE() 
-#define RADIO_GPIO_3_SPEED                       GPIO_SPEED_HIGH
-#define RADIO_GPIO_3_PUPD                        GPIO_NOPULL
-#define RADIO_GPIO_3_EXTI_LINE                   GPIO_PIN_0
-#define RADIO_GPIO_3_EXTI_MODE                   GPIO_MODE_IT_FALLING
-#define RADIO_GPIO_3_EXTI_IRQN                   EXTI0_IRQn
-#define RADIO_GPIO_3_EXTI_PREEMPTION_PRIORITY    2
-#define RADIO_GPIO_3_EXTI_SUB_PRIORITY           2
-#define RADIO_GPIO_3_EXTI_IRQ_HANDLER            EXTI0_IRQHandler
-
-#endif
-
-#define RADIO_GPIO_SDN_PORT                        GPIOA
-#define RADIO_GPIO_SDN_PIN                         GPIO_PIN_10
-#define RADIO_GPIO_SDN_CLOCK_ENABLE()            __GPIOA_CLK_ENABLE()
-#define RADIO_GPIO_SDN_CLOCK_DISABLE()           __GPIOA_CLK_DISABLE()
-#define RADIO_GPIO_SDN_SPEED                       GPIO_SPEED_HIGH
-#define RADIO_GPIO_SDN_PUPD                        GPIO_PULLUP
-
-
-#define RADIO_GPIO_IRQ		RADIO_GPIO_3
-#define SPIRIT_GPIO_IRQ         SPIRIT_GPIO_3
-
-/* Exported Variables ------------------------------------------------------------*/
-  
-  
-/* Exported functions ------------------------------------------------------- */
-FlagStatus RadioGpioGetLevel(RadioGpioPin xGpio);
-void RadioGpioSetLevel(RadioGpioPin xGpio, GPIO_PinState xState);
-void SdkEvalEnterShutdown(void);
-void SdkEvalExitShutdown(void);
-SpiritFlagStatus SdkEvalCheckShutdown(void);
-void RadioGpioInit(RadioGpioPin xGpio, RadioGpioMode xGpioMode);
-void RadioGpioInterruptCmd(RadioGpioPin xGpio, uint8_t nPreemption, uint8_t nSubpriority, FunctionalState xNewState);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*__RADIO_GPIO_H */
-
-/**
-* @}
-*/
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_shield_config.h
--- a/stm-spirit1-rf-driver/source/libs/spirit1/X-NUCLEO-IDS01Ax/radio_shield_config.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/**
-******************************************************************************
-* @file    radio_shield_config.h
-* @author  System Lab - NOIDA
-* @version V1.0.0
-* @date    15-May-2014
-* @brief   This file contains definitions for:
-*          - LEDs and push-button available on RF shields
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*       without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/ 
-  
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __RADIO_SHIELD_CONFIG_H
-#define __RADIO_SHIELD_CONFIG_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#ifdef USE_STM32L1XX_NUCLEO
-// #include "stm32l1xx_hal.h"
-#endif
-
-#ifdef USE_STM32F4XX_NUCLEO
-// #include "stm32f4xx_hal.h"
-#endif
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup X-NUCLEO-IDS02Ax
-  * @{
-  */
-
-/** @addtogroup RADIO_SHILED_LOW_LEVEL
-  * @{
-  */   
-   
-/* Exported types ------------------------------------------------------------*/
-typedef enum 
-{
-  RADIO_SHIELD_LED = 0
-} Led_t;
- 
-
-
-/* Exported constants --------------------------------------------------------*/
-
-
-/* Exported macro ------------------------------------------------------------*/
- /** @addtogroup RF_SHIELD_CONFIG_LOW_LEVEL_LED
- * @{
- */
-#define RADIO_SHIELD_LEDn                               ((uint8_t)1)
-
-#define RADIO_SHIELD_LED_GPIO_PIN                      GPIO_PIN_4                         /*Rx Indicator LED*/
-#define RADIO_SHIELD_LED_GPIO_PORT                     GPIOB
-#define RADIO_SHIELD_LED_GPIO_CLK_ENABLE()           __GPIOB_CLK_ENABLE()  
-#define RADIO_SHIELD_LED_GPIO_CLK_DISABLE()          __GPIOB_CLK_DISABLE()
-
-
-/* Exported Variables ------------------------------------------------------------*/
-
-
-/* Exported functions ------------------------------------------------------- */
-void RadioShieldLedInit(Led_t Led);
-void RadioShieldLedOn(Led_t Led);
-void RadioShieldLedOff(Led_t Led);
-void RadioShieldLedToggle(Led_t Led);                 
-                
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __RADIO_SHIELD_CONFIG_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-    
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/source/radio_spi.cpp
--- a/stm-spirit1-rf-driver/source/radio_spi.cpp	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-/**
-******************************************************************************
-* @file    radio_spi.c
-* @author  System Lab - NOIDA
-* @version V1.0.0
-* @date    15-May-2014
-* @brief   This file provides code for the configuration of the SPI instances.
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*     without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "radio_spi.h"
-
-#include "SimpleSpirit1.h"
-
-
-/**
- * @addtogroup BSP
- * @{
- */
-
-
-/**
- * @addtogroup X-NUCLEO-IDS02Ax
- * @{
- */
-
-
-/**
- * @defgroup RADIO_SPI_Private_TypesDefinitions       RADIO_SPI Private Types Definitions
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup RADIO_SPI_Private_Defines                RADIO_SPI Private Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup RADIO_SPI_Private_Macros                 RADIO_SPI Private Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup RADIO_SPI_Private_Variables              RADIO_SPI Private Variables
- * @{
- */
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup RADIO_SPI_Private_FunctionPrototypes     RADIO_SPI Private Function Prototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/**
- * @defgroup RADIO_SPI_Private_Functions              RADIO_SPI Private Functions
- * @{
- */
-
-/**
-* @}
-*/
-
-/**
-* @brief  Write single or multiple RF Transceivers register
-* @param  cRegAddress: base register's address to be write
-* @param  cNbBytes: number of registers and bytes to be write
-* @param  pcBuffer: pointer to the buffer of values have to be written into registers
-* @retval StatusBytes
-*/
-StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-	return SimpleSpirit1::Instance().SdkEvalSpiWriteRegisters(cRegAddress, cNbBytes, pcBuffer);
-}
-
-StatusBytes SimpleSpirit1::SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-  uint8_t aHeader[2] = {0};
-  uint16_t tmpstatus = 0x0000;
-  StatusBytes *pStatus=(StatusBytes *)&tmpstatus;
-
-  /* Built the aHeader bytes */
-  aHeader[0] = WRITE_HEADER;
-  aHeader[1] = cRegAddress;
-
-  /* Puts the SPI chip select low to start the transaction */
-  chip_sync_select();
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus = _spi.write(aHeader[0]);
-  tmpstatus = tmpstatus << 8;
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus |= _spi.write(aHeader[1]);
-
-  /* Writes the registers according to the number of bytes */
-  for (int index = 0; index < cNbBytes; index++)
-  {
-	  _spi.write(pcBuffer[index]);
-  }
-
-  /* Puts the SPI chip select high to end the transaction */
-  chip_sync_unselect();
-
-  return *pStatus;
-}
-
-
-/**
-* @brief  Read single or multiple SPIRIT1 register
-* @param  cRegAddress: base register's address to be read
-* @param  cNbBytes: number of registers and bytes to be read
-* @param  pcBuffer: pointer to the buffer of registers' values read
-* @retval StatusBytes
-*/
-StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-	return SimpleSpirit1::Instance().SdkEvalSpiReadRegisters(cRegAddress, cNbBytes, pcBuffer);
-}
-
-StatusBytes SimpleSpirit1::SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-  uint16_t tmpstatus = 0x00;
-  StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
-
-  uint8_t aHeader[2] = {0};
-
-  /* Built the aHeader bytes */
-  aHeader[0] = READ_HEADER;
-  aHeader[1] = cRegAddress;
-
-  /* Put the SPI chip select low to start the transaction */
-  chip_sync_select();
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus = _spi.write(aHeader[0]);
-  tmpstatus = tmpstatus << 8;
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus |= _spi.write(aHeader[1]);
-
-  for (int index = 0; index < cNbBytes; index++)
-  {
-	  pcBuffer[index] = _spi.write(0xFF);
-  }
-
-  /* Put the SPI chip select high to end the transaction */
-  chip_sync_unselect();
-
-  return *pStatus;
-}
-
-
-/**
-* @brief  Send a command
-* @param  cCommandCode: command code to be sent
-* @retval StatusBytes
-*/
-StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode)
-{
-	return SimpleSpirit1::Instance().SdkEvalSpiCommandStrobes(cCommandCode);
-}
-
-StatusBytes SimpleSpirit1::SdkEvalSpiCommandStrobes(uint8_t cCommandCode)
-{
-  uint8_t aHeader[2] = {0};
-  uint16_t tmpstatus = 0x0000;
-
-  StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
-
-  /* Built the aHeader bytes */
-  aHeader[0] = COMMAND_HEADER;
-  aHeader[1] = cCommandCode;
-
-  /* Puts the SPI chip select low to start the transaction */
-  chip_sync_select();
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus = _spi.write(aHeader[0]);
-  tmpstatus = tmpstatus<<8;
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus |= _spi.write(aHeader[1]);
-
-  /* Puts the SPI chip select high to end the transaction */
-  chip_sync_unselect();
-
-  return *pStatus;
-}
-
-
-/**
-* @brief  Write data into TX FIFO
-* @param  cNbBytes: number of bytes to be written into TX FIFO
-* @param  pcBuffer: pointer to data to write
-* @retval StatusBytes
-*/
-StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-	return SimpleSpirit1::Instance().SdkEvalSpiWriteFifo(cNbBytes, pcBuffer);
-}
-
-StatusBytes SimpleSpirit1::SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-  uint16_t tmpstatus = 0x0000;
-  StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
-
-  uint8_t aHeader[2] = {0};
-
-  /* Built the aHeader bytes */
-  aHeader[0] = WRITE_HEADER;
-  aHeader[1] = LINEAR_FIFO_ADDRESS;
-
-  /* Put the SPI chip select low to start the transaction */
-  chip_sync_select();
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus = _spi.write(aHeader[0]);
-  tmpstatus = tmpstatus<<8;
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus |= _spi.write(aHeader[1]);
-
-  /* Writes the registers according to the number of bytes */
-  for (int index = 0; index < cNbBytes; index++)
-  {
-	  _spi.write(pcBuffer[index]);
-  }
-
-  /* Put the SPI chip select high to end the transaction */
-  chip_sync_unselect();
-
-  return *pStatus;
-}
-
-/**
-* @brief  Read data from RX FIFO
-* @param  cNbBytes: number of bytes to read from RX FIFO
-* @param  pcBuffer: pointer to data read from RX FIFO
-* @retval StatusBytes
-*/
-StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-	return SimpleSpirit1::Instance().SdkEvalSpiReadFifo(cNbBytes, pcBuffer);
-}
-
-StatusBytes SimpleSpirit1::SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer)
-{
-  uint16_t tmpstatus = 0x0000;
-  StatusBytes *pStatus = (StatusBytes *)&tmpstatus;
-
-  uint8_t aHeader[2];
-
-  /* Built the aHeader bytes */
-  aHeader[0]=READ_HEADER;
-  aHeader[1]=LINEAR_FIFO_ADDRESS;
-
-  /* Put the SPI chip select low to start the transaction */
-  chip_sync_select();
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus = _spi.write(aHeader[0]);
-  tmpstatus = tmpstatus<<8;
-
-  /* Write the aHeader bytes and read the SPIRIT1 status bytes */
-  tmpstatus |= _spi.write(aHeader[1]);
-
-  for (int index = 0; index < cNbBytes; index++)
-  {
-	  pcBuffer[index] = _spi.write(0xFF);
-  }
-
-  /* Put the SPI chip select high to end the transaction */
-  chip_sync_unselect();
-
-  return *pStatus;
-}
-
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/stm-spirit1-rf-driver/NanostackRfPhySpirit1.h
--- a/stm-spirit1-rf-driver/stm-spirit1-rf-driver/NanostackRfPhySpirit1.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#ifndef NANOSTACK_RF_PHY_SPIRIT1_H_
-#define NANOSTACK_RF_PHY_SPIRIT1_H_
-
-#include <stdint.h>
-
-#include "NanostackRfPhy.h"
-#include "PinNames.h"
-
-// Arduino pin defaults for convenience
-#if !defined(SPIRIT1_SPI_MOSI)
-#define SPIRIT1_SPI_MOSI   D11
-#endif
-#if !defined(SPIRIT1_SPI_MISO)
-#define SPIRIT1_SPI_MISO   D12
-#endif
-#if !defined(SPIRIT1_SPI_SCLK)
-#define SPIRIT1_SPI_SCLK   D13
-#endif
-#if !defined(SPIRIT1_DEV_IRQ)
-#define SPIRIT1_DEV_IRQ    D9
-#endif
-#if !defined(SPIRIT1_DEV_CS)
-#define SPIRIT1_DEV_CS     D10
-#endif
-#if !defined(SPIRIT1_DEV_SDN)
-#define SPIRIT1_DEV_SDN    D2
-#endif
-#if !defined(SPIRIT1_BRD_LED)
-#define SPIRIT1_BRD_LED    NC
-#endif
-
-class NanostackRfPhySpirit1 : public NanostackRfPhy {
-public:
-    NanostackRfPhySpirit1(PinName spi_mosi, PinName spi_miso, PinName spi_sclk,
-    		PinName dev_irq,  PinName dev_cs, PinName dev_sdn, PinName brd_led);
-    ~NanostackRfPhySpirit1();
-    int8_t rf_register();
-    void rf_unregister();
-    void get_mac_address(uint8_t *mac);
-    void set_mac_address(uint8_t *mac);
-
-private:
-    void rf_init(void);
-
-    const PinName _spi_mosi;
-    const PinName _spi_miso;
-    const PinName _spi_sclk;
-    const PinName _dev_irq;
-    const PinName _dev_cs;
-    const PinName _dev_sdn;
-    const PinName _brd_led;
-};
-
-#endif /* NANOSTACK_RF_PHY_SPIRIT1_H_ */
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/stm-spirit1-rf-driver/SimpleSpirit1.h
--- a/stm-spirit1-rf-driver/stm-spirit1-rf-driver/SimpleSpirit1.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,562 +0,0 @@
-/*** Mbed Includes ***/
-#include "mbed.h"
-#include "mbed_debug.h"
-
-
-/*** Cube Includes ***/
-#include "SPIRIT_Radio.h"
-#include "SPIRIT_Management.h"
-#include "SPIRIT_Commands.h"
-#include "MCU_Interface.h"
-
-
-/*** Contiki Lib Includes ***/
-#include "spirit1.h"
-#include "spirit1-config.h"
-#include "spirit1-const.h"
-
-
-// betzw: enable beyond macro if you want debug messages also from IRQ handler
-// #define DEBUG_IRQ
-
-
-/*** Macros from Cube Implementation ***/
-#define CLEAR_TXBUF()			(spirit_tx_len = 0)
-#define IS_RXBUF_EMPTY()        (spirit_rx_len == 0)
-#define CLEAR_RXBUF()			do { 					\
-									spirit_rx_len = 0;	\
-									_spirit_rx_pos = 0; \
-								} while(0)
-
-
-/*** Macros from Cube Implementation ***/
-/* transceiver state. */
-#define ON     0
-#define OFF    1
-
-
-/*** Macros for Spirit1 API ***/
-/* max payload */
-#define SPIRIT1_MAX_PAYLOAD     (MAX_PACKET_LEN)
-
-
-/*** Missing Cube External Declarations ***/
-extern "C" void SpiritManagementSetFrequencyBase(uint32_t);
-
-
-/*** UnlockedSPI for Usage in IRQ context ***/
-class UnlockedSPI : public SPI {
-public:
-    UnlockedSPI(PinName mosi, PinName miso, PinName sclk) :
-        SPI(mosi, miso, sclk) { }
-    virtual ~UnlockedSPI() {}
-    virtual void lock() { }
-    virtual void unlock() { }
-};
-
-
-/*** A Simple Spirit1 Class ***/
-// NOTE: must be a singleton (due to mix of MBED/CUBE code)!!!
-// NOTE: implementation is IRQ-save but (intentionally) NOT thread-safe!!!
-/** Simple Spirit1 Class
- *
- * @Note Synchronization level: implementation is IRQ-save but (intentionally) NOT thread-safe!!!
- *
- * Example:
- * @code
- * #include "mbed.h"
- * #include "SimpleSpirit1.h"
- *
- * static char send_buf[] = "Hello World!";
- *
- * static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(D11, D12, D3, D9, D10, D2);
- *
- * static volatile bool tx_done_flag = false;
- *
- * static void callback_func(int event)
- * {
- *   if (event == SimpleSpirit1::TX_DONE) {
- *     tx_done_flag = true;
- *   }
- * }
- *
- * int main()
- * {
- *   myspirit.attach_irq_callback(callback_func);
- *   myspirit.on();
- *
- *   while(1)
- *   {
- *     size_t curr_len = strlen((const char*)send_buf);
- *     myspirit.send(send_buf, curr_len);
- *
- *     while(!tx_done_flag);
- *     tx_done_flag = false;
- *   }
- * }
- * @endcode
- */
-class SimpleSpirit1 {
- protected:
-	static SimpleSpirit1 *_singleton;
-
-    /** Communication Interface Instance Variables **/
-	UnlockedSPI _spi; // betzw - NOTE: Morpho/Zio pins are valid only for NUCLEO-F401RE
-              	  	  // mosi: PA_7 (D11)
-					  // miso: PA_6 (D12)
-              	  	  // sclk: PB_3 (D3) or
-              	  	  //       PA_5 (D13) (only in case you unmount R4 & mount R7,
-              	  	  //                  (note: in this case you may not use LED1 on some platforms)
-              	  	  // bits: 8-bit
-              	  	  // mode: 0
-              	  	  // ordr: MSB
-              	  	  // freq: max 10MHz
-    InterruptIn _irq; // PC_7 (D9) (falling)
-    DigitalOut _chip_select; // PB_6 (D10) ('1' == chip unselected)
-    DigitalOut _shut_down; // PA_10 (D2) ('1' == shut_down)
-    DigitalOut _led; // PB_4 (D5) (optional)
-
-    Callback<void(int)> _current_irq_callback;
-    Timeout _rx_receiving_timeout;
-
-    void rx_timeout_handler(void) {
-    	set_ready_state();
-	    cmd_strobe(SPIRIT1_STROBE_RX);
-#ifdef DEBUG_IRQ
-	    debug("\r\n%s (%d)\r\n", __func__, __LINE__);
-#endif
-    }
-
-    void start_rx_timeout(void) {
-    	_rx_receiving_timeout.attach_us(Callback<void()>(this, &SimpleSpirit1::rx_timeout_handler), 100 * 1000); // 100ms
-    }
-
-    void stop_rx_timeout(void) {
-    	_rx_receiving_timeout.detach();
-    }
-
-    /** Static Variables from Cube Implementation **/
-    /*
-     * The buffers which hold incoming data.
-     * The +1 because of the first byte,
-     * which will contain the length of the packet.
-     */
-    volatile uint16_t spirit_tx_len;
-    volatile bool _spirit_tx_started;
-    volatile uint16_t spirit_rx_len;
-    volatile uint16_t _spirit_rx_pos;
-    volatile bool _spirit_rx_err;
-    uint8_t spirit_rx_buf[MAX_PACKET_LEN];
-    volatile bool _is_receiving;
-
-    /** Status Variables from Cube Implementation **/
-    unsigned int spirit_on;
-    uint8_t last_rssi; //MGR
-    uint8_t last_sqi;  //MGR
-
-    /** Low Level Instance Variables **/
-    unsigned int _nr_of_irq_disables;
-
-    /** Low Level Instance Methods **/
-    void disable_spirit_irq(void) {
-    	_irq.disable_irq();
-    	_nr_of_irq_disables++;
-#ifndef NDEBUG
-    	debug_if(_nr_of_irq_disables == 0, "\r\nassert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-    }
-
-    void enable_spirit_irq(void) {
-#ifndef NDEBUG
-    	debug_if(_nr_of_irq_disables == 0, "\r\nassert failed in: %s (%d)\r\n", __func__, __LINE__);
-#endif
-    	if(--_nr_of_irq_disables == 0)
-    		_irq.enable_irq();
-    }
-
-    void chip_select() { _chip_select = 0; }
-    void chip_unselect() { _chip_select = 1; }
-
-    void enter_shutdown() {
-    	_shut_down = 1;
-    	wait_ms(5); // wait 5 milliseconds (to allow Spirit1 to shut down)
-    }
-
-    void exit_shutdown() {
-    	_shut_down = 0;
-    	wait_ms(10); // wait 10 milliseconds (to allow Spirit1 a proper boot-up sequence)
-    }
-
-    void cs_to_sclk_delay(void) {
-    	wait_us(1); // heuristic value
-    }
-
-    /**
-     * @brief      Write and read a buffer to/from the SPI peripheral device at the same time
-     *             in 8-bit data mode using synchronous SPI communication.
-     * @param[in]  pBufferToWrite pointer to the buffer of data to send.
-     * @param[out] pBufferToRead pointer to the buffer to read data into.
-     * @param[in]  NumBytes number of bytes to read and write.
-     * @retval     0 if ok.
-     * @retval     -1 if data format error.
-     * @note       When using the SPI in Interrupt-mode, remember to disable interrupts
-     *             before calling this function and to enable them again after.
-     */
-    void spi_write_read(uint8_t* pBufferToWrite, uint8_t* pBufferToRead, uint16_t NumBytes)
-    {
-        /* Read and write data at the same time. */
-    	for (int i = 0; i < NumBytes; i++) {
-            pBufferToRead[i] = _spi.write(pBufferToWrite[i]);
-    	}
-    }
-
-    /** Radio Instance Methods **/
-    void radio_set_xtal_freq(uint32_t freq) {
-    	SpiritRadioSetXtalFrequency(freq);
-    }
-
-    void radio_set_pa_level_dbm(uint8_t cIndex, float fPowerdBm) {
-    	SpiritRadioSetPALeveldBm(cIndex, fPowerdBm);
-    }
-
-    void radio_set_pa_level_max_index(uint8_t cIndex) {
-    	SpiritRadioSetPALevelMaxIndex(cIndex);
-    }
-
-    uint8_t radio_init(SRadioInit *init_struct) {
-    	return SpiritRadioInit(init_struct);
-    }
-
-    void radio_persistent_rx(SpiritFunctionalState xNewState) {
-    	SpiritRadioPersistenRx(xNewState);
-    }
-
-    void radio_afc_freeze_on_sync(SpiritFunctionalState xNewState) {
-    	SpiritRadioAFCFreezeOnSync(xNewState);
-    }
-
-    /** Packet System Instance Methods **/
-    void pkt_basic_init(PktBasicInit* pxPktBasicInit) {
-    	SpiritPktBasicInit(pxPktBasicInit);
-    }
-
-    void pkt_basic_set_payload_length(uint16_t nPayloadLength) {
-    	SpiritPktBasicSetPayloadLength(nPayloadLength);
-    }
-
-    uint16_t pkt_basic_get_received_pkt_length(void) {
-    	return SpiritPktBasicGetReceivedPktLength();
-    }
-
-	/** IRQ Instance Methods **/
-    void irq_de_init(SpiritIrqs* pxIrqInit) {
-    	SpiritIrqDeInit(pxIrqInit);
-    }
-
-    void irq_clear_status(void) {
-    	SpiritIrqClearStatus();
-    }
-
-    void irq_set_status(IrqList xIrq, SpiritFunctionalState xNewState) {
-    	SpiritIrq(xIrq, xNewState);
-    }
-
-    void irq_get_status(SpiritIrqs* pxIrqStatus) {
-    	SpiritIrqGetStatus(pxIrqStatus);
-    }
-
-    /** Management Instance Methods **/
-    void mgmt_set_freq_base(uint32_t freq) {
-    	SpiritManagementSetFrequencyBase(freq);
-    }
-
-    void mgmt_refresh_status(void) {
-    	SpiritRefreshStatus();
-    }
-
-    /** Spirit GPIO Instance Methods **/
-    void spirit_gpio_init(SGpioInit* pxGpioInitStruct) {
-    	SpiritGpioInit(pxGpioInitStruct);
-    }
-
-	/** Qi Instance Methods **/
-    void qi_set_sqi_threshold(SqiThreshold xSqiThr) {
-    	SpiritQiSetSqiThreshold(xSqiThr);
-    }
-
-    void qi_sqi_check(SpiritFunctionalState xNewState) {
-    	SpiritQiSqiCheck(xNewState);
-    }
-
-    void qi_set_rssi_threshold_dbm(int nDbmValue) {
-    	SpiritQiSetRssiThresholddBm(nDbmValue);
-    }
-
-    float qi_get_rssi_dbm() {
-    	last_rssi = qi_get_rssi();
-    	return get_last_rssi_dbm();
-    }
-
-    uint8_t qi_get_rssi() {
-    	return SpiritQiGetRssi();
-    }
-
-    uint8_t qi_get_sqi() {
-    	return SpiritQiGetSqi();
-    }
-
-    /** Timer Instance Methods **/
-    void timer_set_rx_timeout_stop_condition(RxTimeoutStopCondition xStopCondition) {
-    	SpiritTimerSetRxTimeoutStopCondition(xStopCondition);
-    }
-
-    void timer_set_rx_timeout_counter(uint8_t cCounter) {
-    	SpiritTimerSetRxTimeoutCounter(cCounter);
-    }
-
-    void timer_set_infinite_rx_timeout(void) {
-    	timer_set_rx_timeout_counter(0);
-    }
-
-    /** CSMA/CA Instance Methods **/
-    void csma_ca_state(SpiritFunctionalState xNewState) {
-    	SpiritCsma(xNewState);
-    }
-
-    void csma_ca_init(CsmaInit* pxCsmaInit) {
-    	csma_ca_state(S_DISABLE); // Disabled at init
-    	SpiritCsmaInit(pxCsmaInit);
-    	SpiritCsmaSeedReloadMode(S_DISABLE); // always disable seed reload
-    }
-
-    /** Command Instance Methods**/
-    void cmd_strobe(uint8_t cmd) {
-    	SpiritCmdStrobeCommand((SpiritCmd)cmd);
-    }
-
-    void cmd_strobe_flush_rx_fifo() {
-    	SpiritCmdStrobeCommand(CMD_FLUSHRXFIFO);
-    }
-
-    /** SPI Instance Methods **/
-    StatusBytes spi_write_linear_fifo(uint8_t cNbBytes, uint8_t* pcBuffer) {
-    	return SdkEvalSpiWriteFifo(cNbBytes, pcBuffer);
-    }
-
-    StatusBytes spi_read_linear_fifo(uint8_t cNbBytes, uint8_t* pcBuffer) {
-    	return SdkEvalSpiReadFifo(cNbBytes, pcBuffer);
-    }
-
-    /** Linear FIFO Instance Methods **/
-    uint8_t linear_fifo_read_num_elements_rx_fifo(void) {
-    	return SpiritLinearFifoReadNumElementsRxFifo();
-    }
-
-    uint8_t linear_fifo_read_num_elements_tx_fifo(void) {
-    	return SpiritLinearFifoReadNumElementsTxFifo();
-    }
-
-    void linear_fifo_set_almost_full_thr_rx(uint8_t cThrRxFifo) {
-    	SpiritLinearFifoSetAlmostFullThresholdRx(cThrRxFifo);
-    }
-
-    /** Calibration Instance Methods **/
-    void calibration_rco(SpiritFunctionalState xNewState) {
-    	SpiritCalibrationRco(xNewState);
-    }
-
-    /** Internal Spirit Methods */
-    void set_ready_state(void);
-    uint8_t refresh_state(void);
-
-    /** Friend Functions **/
-    friend StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-    friend StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-    friend StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode);
-    friend StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-    friend StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-
-    /** Sdk Instance Methods **/
-    StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-    StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-    StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode);
-    StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-    StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-
-    /** Helper Instance Methods **/
-    void chip_sync_select() {
-    	disable_spirit_irq();
-    	chip_select();
-    	cs_to_sclk_delay();
-    }
-
-    void chip_sync_unselect() {
-    	chip_unselect();
-    	enable_spirit_irq();
-    }
-
-    /** Init Instance Method **/
-    void init();
-
-    /** Spirit Irq Callback */
-    void IrqHandler();
-
-    /** Constructor **/
-    SimpleSpirit1(PinName mosi, PinName miso, PinName sclk,
-		  PinName irq, PinName cs, PinName sdn,
-		  PinName led);
-
-    /** Destructor **/
-    ~SimpleSpirit1(void); // should never be called!
-
-public:
-    enum {
-    	RX_DONE,
-    	TX_DONE,
-		TX_ERR
-    };
-
-    /** Create singleton instance of 'SimpleSpirit1'
-     *
-     * @param mosi 'PinName' of mosi pin to use
-     * @param miso 'PinName' of miso pin to use
-     * @param sclk 'PinName' of clock pin to use
-     * @param irq  'PinName' of interrupt pin to use
-     * @param cs   'PinName' of chip-select pin pin to use
-     * @param sdn  'PinName' of pin to use for device shutdown
-     *
-     * @returns     reference to singleton instance
-     */
-    static SimpleSpirit1& CreateInstance(PinName mosi, PinName miso, PinName sclk,
-    		PinName irq, PinName cs, PinName sdn,
-			PinName led = NC) {
-
-    	if(_singleton == NULL) {
-    		_singleton = new SimpleSpirit1(mosi, miso, sclk,
-    				irq, cs, sdn, led);
-    		_singleton->init();
-    	} else {
-    		error("SimpleSpirit1 singleton already created!\n");
-    	}
-
-    	return *_singleton;
-    }
-    
-
-    /** Create singleton instance of 'SimpleSpirit1'
-     *
-     * @param mosi 'PinName' of mosi pin to use
-     * @param miso 'PinName' of miso pin to use
-     * @param sclk 'PinName' of clock pin to use
-     * @param irq  'PinName' of interrupt pin to use
-     * @param cs   'PinName' of chip-select pin pin to use
-     * @param sdn  'PinName' of pin to use for device shutdown
-     *
-     * @returns     reference to singleton instance
-     */
-    static SimpleSpirit1& Instance() {
-    	if(_singleton == NULL) {
-    		error("SimpleSpirit1 must be created before used!\n");
-    	}
-
-    	return *_singleton;
-    }
-
-    /** Attach a function to be called by the Spirit Irq handler when an event has occurred
-     *
-     *  @param func A void(int) callback, or 0 to set as none
-     *
-     *  @note  Function 'func' will be executed in interrupt context!
-     *  @note  Function 'func' will be call with either 'RX_DONE', 'TX_DONE', or 'TX_ERR' as parameter
-     *         to indicate which event has occurred.
-     */
-    void attach_irq_callback(Callback<void(int)> func) {
-    	_current_irq_callback = func;
-    }
-
-    /** Switch Radio On
-     */
-    int on(void);
-    /** Switch Radio Off
-     */
-    int off(void);
-
-    /** Set Channel
-     */
-    void set_channel(uint8_t channel) {
-    	SpiritRadioSetChannel(channel);
-    }
-
-    /** Send a Buffer
-     *
-     * @param payload       pointer to buffer to be send
-     * @param payload_len   length of payload buffer in bytes
-     * @param use_csma_ca   should CSMA/CA be enabled for transmission
-     *
-     * @returns             zero in case of success, non-zero error code otherwise
-     *
-     * @note                the maximum payload size in bytes allowed is defined by macro 'SPIRIT1_MAX_PAYLOAD'
-     */
-    int send(const void *payload, unsigned int payload_len, bool use_csma_ca = true);
-
-    /** Copy received data into buffer
-     *
-     * @param buf       pointer to buffer to be filled
-     * @param bufsize   size of buffer
-     *
-     * @returns         number of bytes copied into the buffer
-     *
-     * @note            the buffer should be (at least) of size 'SPIRIT1_MAX_PAYLOAD' (in bytes).
-     */
-    int read(void *buf, unsigned int bufsize);
-
-    /** Perform a Clear-Channel Assessment (CCA) to find out if there is a packet in the air or not.
-     *
-     * @returns  1 if packet has been seen.
-     */
-    int channel_clear(void);
-
-    /** Check if the radio driver has just received a packet
-     */
-    int get_pending_packet(void);
-
-    /** Is radio currently receiving
-     */
-    bool is_receiving(void) {
-    	return _is_receiving;
-    }
-
-    /** Get latest value of RSSI (in dBm)
-     */
-    float get_last_rssi_dbm(void) {
-    	get_last_rssi_raw();
-		return (-120.0+((float)(last_rssi-20))/2);
-    }
-
-    /** Get latest value of RSSI (as Spirit1 raw value)
-     */
-    uint8_t get_last_rssi_raw(void) {
-    	if(last_rssi == 0) {
-    		last_rssi = qi_get_rssi();
-    	}
-    	return last_rssi;
-    }
-
-    /** Get latest value of LQI (scaled to 8-bit)
-     */
-    uint8_t get_last_sqi(void) {
-    	const uint8_t max_sqi = 8 * ((SYNC_LENGTH>>1)+1);
-    	if(last_sqi == 0) {
-    		last_sqi = qi_get_sqi();
-    	}
-    	if(last_sqi > max_sqi) last_sqi = max_sqi;
-
-    	return (last_sqi * 255 / max_sqi);
-    }
-
-    /** Reset Board
-     */
-    void reset_board() {
-    	init();
-    }
-};
diff -r d802c6ed2e75 -r 1a6faeda6579 stm-spirit1-rf-driver/stm-spirit1-rf-driver/radio_spi.h
--- a/stm-spirit1-rf-driver/stm-spirit1-rf-driver/radio_spi.h	Wed Jan 17 04:04:16 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,185 +0,0 @@
-/**
-******************************************************************************
-* @file    radio_spi.h
-* @author  System Lab - NOIDA
-* @version V1.0.0
-* @date    15-May-2014
-* @brief   This file contains all the functions prototypes for SPI .
-******************************************************************************
-* @attention
-*
-* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*   1. Redistributions of source code must retain the above copyright notice,
-*      this list of conditions and the following disclaimer.
-*   2. Redistributions in binary form must reproduce the above copyright notice,
-*      this list of conditions and the following disclaimer in the documentation
-*      and/or other materials provided with the distribution.
-*   3. Neither the name of STMicroelectronics nor the names of its contributors
-*      may be used to endorse or promote products derived from this software
-*      without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-******************************************************************************
-*/
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __RADIO_SPI_H
-#define __RADIO_SPI_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-  
-/* Includes ------------------------------------------------------------------*/
-#ifdef USE_STM32L1XX_NUCLEO
-// #include "stm32l1xx_hal.h"
-#endif
-
-#ifdef USE_STM32F4XX_NUCLEO
-// #include "stm32f4xx_hal.h"
-#endif
-#include "SPIRIT_Config.h"
-#include "radio_spi.h" 
-// #include "spirit1-arch.h"
-
-/**
- * @addtogroup BSP
- * @{
- */ 
-  
-/* Exported types ------------------------------------------------------------*/
-
-  
-/* Exported constants --------------------------------------------------------*/
-  
-  
-/* Exported macro ------------------------------------------------------------*/
-  /* Define for SPIRIT1 board  */  
- #if !defined (USE_SPIRIT1_DEFAULT)
- #define USE_SPIRIT1_DEFAULT
-#endif
-  
-/* SPIRIT1_Spi_config */ 
-/* SPI1 */  
-#define RADIO_SPI                                 SPI1
-#define RADIO_SPI_CLK_ENABLE()                  __SPI1_CLK_ENABLE()
-#define RADIO_SPI_CLK_DISABLE()                 __SPI1_CLK_DISABLE()
-
-#define RADIO_SPI_MISO_PORT                      GPIOA
-#define RADIO_SPI_MISO_PIN                       GPIO_PIN_6
-#define RADIO_SPI_MISO_CLOCK_ENABLE()            __GPIOA_CLK_ENABLE()
-#define RADIO_SPI_MISO_CLOCK_DISABLE()           __GPIOA_CLK_DISABLE() 
-  
-#define RADIO_SPI_MOSI_PORT                      GPIOA
-#define RADIO_SPI_MOSI_PIN                       GPIO_PIN_7
-#define RADIO_SPI_MOSI_CLOCK_ENABLE()            __GPIOA_CLK_ENABLE()
-#define RADIO_SPI_MOSI_CLOCK_DISABLE()           __GPIOA_CLK_DISABLE()   
-  
- 
- 
-#ifdef USE_SPIRIT1_DEFAULT    
-
-#define RADIO_SPI_SCK_PORT                      GPIOB
-#define RADIO_SPI_SCK_PIN                       GPIO_PIN_3
-#define RADIO_SPI_SCK_CLOCK_ENABLE()            __GPIOB_CLK_ENABLE()
-#define RADIO_SPI_SCK_CLOCK_DISABLE()           __GPIOB_CLK_DISABLE()
-
-  
-#define RADIO_SPI_CS_PORT                        GPIOB
-#define RADIO_SPI_CS_PIN                         GPIO_PIN_6
-#define RADIO_SPI_CS_CLOCK_ENABLE()            __GPIOB_CLK_ENABLE()
-#define RADIO_SPI_CS_CLOCK_DISABLE()           __GPIOB_CLK_DISABLE()
- 
-#else 
- 
-#define RADIO_SPI_SCK_PORT                      GPIOB
-#define RADIO_SPI_SCK_PIN                       GPIO_PIN_3
-#define RADIO_SPI_SCK_CLOCK_ENABLE()            __GPIOB_CLK_ENABLE()
-#define RADIO_SPI_SCK_CLOCK_DISABLE()           __GPIOB_CLK_DISABLE()
-
-  
-#define RADIO_SPI_CS_PORT                        GPIOB
-#define RADIO_SPI_CS_PIN                         GPIO_PIN_6
-#define RADIO_SPI_CS_CLOCK_ENABLE()            __GPIOB_CLK_ENABLE()
-#define RADIO_SPI_CS_CLOCK_DISABLE()           __GPIOB_CLK_DISABLE()
-    
-#endif  
-  
-/* Maximum Timeout values for flags waiting loops. These timeouts are not based
-   on accurate values, they just guarantee that the application will not remain
-   stuck if the SPI communication is corrupted.
-   You may modify these timeout values depending on CPU frequency and application
-   conditions (interrupts routines ...) */    
-#define RADIO_SPI_TIMEOUT_MAX                   ((uint32_t)1000)
-
-/* SPIRIT1_Spi_config_Private_Defines */  
-#define CS_TO_SCLK_DELAY     0x0200//FIXME what is this doing?
-#define CLK_TO_CS_DELAY      0x0001
-  
-/* SPIRIT1_Spi_config_Headers */
-#define HEADER_WRITE_MASK     0x00                                /*!< Write mask for header byte*/
-#define HEADER_READ_MASK      0x01                                /*!< Read mask for header byte*/
-#define HEADER_ADDRESS_MASK   0x00                                /*!< Address mask for header byte*/
-#define HEADER_COMMAND_MASK   0x80                                /*!< Command mask for header byte*/
-  
-#define LINEAR_FIFO_ADDRESS 0xFF                                  /*!< Linear FIFO address*/
-  
-/* SPIRIT1_Spi_config_Private_FunctionPrototypes */
-#define SPI_ENTER_CRITICAL()         IRQ_DISABLE()
-#define SPI_EXIT_CRITICAL()          IRQ_ENABLE()
-  
-/* SPIRIT1_Spi_config_Private_Functions */
-#define RadioSpiCSLow()        HAL_GPIO_WritePin(RADIO_SPI_CS_PORT, RADIO_SPI_CS_PIN, GPIO_PIN_RESET)
-#define RadioSpiCSHigh()       HAL_GPIO_WritePin(RADIO_SPI_CS_PORT, RADIO_SPI_CS_PIN, GPIO_PIN_SET)
-  
-/* SPIRIT1_Spi_config_Private_Macros */
-#define BUILT_HEADER(add_comm, w_r) (add_comm | w_r)                             /*!< macro to build the header byte*/
-#define WRITE_HEADER        BUILT_HEADER(HEADER_ADDRESS_MASK, HEADER_WRITE_MASK) /*!< macro to build the write 
-                                                                                                         header byte*/
-#define READ_HEADER         BUILT_HEADER(HEADER_ADDRESS_MASK, HEADER_READ_MASK)  /*!< macro to build the read 
-                                                                                                         header byte*/
-#define COMMAND_HEADER      BUILT_HEADER(HEADER_COMMAND_MASK, HEADER_WRITE_MASK) /*!< macro to build the command 
-                                                                                                         header byte*/
-  
-  
-  
-/* Exported Variables --------------------------------------------------------*/
-  
-  
-/* Exported functions ------------------------------------------------------- */ 
-void SdkEvalSpiInit(void);
-// void SpiCSGpioSetLevel(GPIO_PinState xState);
-StatusBytes SdkEvalSpiWriteRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiReadRegisters(uint8_t cRegAddress, uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiCommandStrobes(uint8_t cCommandCode);
-StatusBytes SdkEvalSpiWriteFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-StatusBytes SdkEvalSpiReadFifo(uint8_t cNbBytes, uint8_t* pcBuffer);
-
-  
-#ifdef __cplusplus
-}
-#endif
-#endif /*__RADIO_SPI_H */
-
-/**
-* @}
-*/
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/