Convert long term and short term RSSI to dBm

This article applies to:
DolphinAPI

QUESTION

I am using radio_getRSSI but I would like to convert the values to dBm. How can I do it with the API ?

ANSWER

You can use the radio_rssiToDbm_asm. In your source code add the definition of the function as shown below:

definition

/************************************************************************************************************************//*!
Calculates dBm from RSSI based on the calibration values in radio init specified by array u8RssiCalib.
\param      RSSI signal where the LSB bit is the LNA
\return     dBm value, 
 
<b>Number of nested functions:</b> -\n
<b>Typical execution time:</b> -us
 
\note
This value is supposed to be interpreted as a negative value although the function returns an unsigned value
 
\sa radio_getRSSI
**************************************************************************************************************************/
uint8 radio_rssiToDbm_asm(uint16 u16RssiLna);

With the result uin16 value call the function radio_rssiToDbm_asm and you will get the dBm result. This function is already defined in the API Version 2.2.0.0.

EXAMPLE CODE:
This example shows how to get the LongTerm RSSI and transmit it through the UART.

main.c

#include "EO3000I_API.h"
#include "EO3000I_CFG.h"
#include "stdio.h"
#include "string.h"
 
 
uint8 radio_rssiToDbm_asm(uint16 u16RssiLna);
void main()
{
  uint16 pu16StRssi, pu16LtRssi;
  uint8 u8Buff[30];
  uint8 u8dBmLtRssi;
 
  mainInit();
  radio_enableRx(1);
 
  while(1)
  {
 
    radio_getRSSI (&pu16StRssi, &pu16LtRssi);
 
    u8dBmLtRssi = radio_rssiToDbm_asm(pu16LtRssi);
    sprintf(u8Buff,"Long Term RSSI: %u dBm\n", (uint16)u8dBmLtRssi);
    while (uart_sendBuffer(u8Buff, strlen(u8Buff))!=OK);
    time_wait(500);
  }
}

EO3000I_CFG.h

// Generated with DolphinStudio 2.0.0.13 which was compiled on Jun  2 2010 05:10:30
//Generated on 24.01.2011 14:48 by DolphinStudio 2.1.1.0
 
#ifndef _EO3000I_CFG_H_INCLUDED
#define _EO3000I_CFG_H_INCLUDED
#include "EO3000I_API.h"
 
 
//! Function Prototypes
void radio_init_asm(RADIO_INIT_PARAM u8PowerUp);
void startupInit();
void mainInit();
 
 
//*********************UART PARAM***************************
 
//! UART Rx/Tx buffers allocation
#define RX_RING_SIZE 34
#define TX_RING_SIZE 34
 
extern volatile uint8	xdata	u8RxRing[RX_RING_SIZE];
extern volatile uint8	xdata	u8TxRing[TX_RING_SIZE];
 
extern uint8 uart_param[];
 
//*********************RADIO PARAM***************************
#define RADIO_BUFF_NUM 10
#define RADIO_MATURITY_TIME 100
 
//! Radio buffers allocation	
 extern volatile uint8 xdata u8gRadioBuff[RADIO_BUFF_NUM][RADIO_BUFF_LENGTH];	
 //! Radio tx buffers additional allocation for state 		
 extern volatile uint8 xdata u8gRadioBuffTXState[RADIO_BUFF_NUM];		
 //! Radio flags		
 extern volatile uint8 idata u8gFlags[RADIO_BUFF_NUM];	
 //! buffers Rx subtelegrams counters. Index indicates the buffer number.	
 extern volatile uint8 idata u8gRadioBuffsRxSubtel[RADIO_BUFF_NUM];		
 //! buffers Tx subtelegrams counters. Index indicates the buffer number. 		
 extern volatile uint8 idata u8gRadioBuffsTxSubtel[RADIO_BUFF_NUM];	
 //! buffers time stamp counters. Index indicates the buffer number.	
 extern volatile uint8 idata u8gRadioBuffsTimeStamp[RADIO_BUFF_NUM];	
 //! buffers received bytes counters. Index indicates the buffer number.		
 extern volatile uint8 idata u8gRadioBuffsBytes[RADIO_BUFF_NUM];	
 //! buffers dBm values. Value indicating signal strength upon telegram reception. 
 extern volatile uint8 xdata u8gRxRadioBuffsDbm[RADIO_BUFF_NUM];	
 //! Tx buffers time to send subtelegram. Index indicates the buffer number. 
 extern volatile uint8 idata u8gTxRadioBuffsTimeToSend[RADIO_BUFF_NUM];
 
//*********************FILTER PARAM***************************
 
//! Max. number of filters
#define FILTER_NUM	4
 
//! Filter buffer allocation for value of filter
extern volatile uint32 xdata u32gFilterValue[FILTER_NUM];
//! Filter buffer allocation containing FILTER_TYPE (Bit 0..1 and FILTER_KIND Bit 7)
extern volatile uint8  xdata u8gFilterCfg[FILTER_NUM];
 
extern uint8 filter_param[];
 
//*********************IO PARAM***************************
 
extern uint8 code	io_param[];
 
#endif //_EO3000I_CFG_H_INCLUDED

EO3000I_CFG.c

//Generated on 24.01.2011 14:48 by DolphinStudio 2.1.1.0
#include "EO3000I_CFG.h"
 
 
//*********************API INIT*************************** 
 
//Note: Function is called from startup.a51. Global variables are not yet initialized!
void startupInit()
{
	pwr_enableXTAL(DEFAULT_DELAY);
	io_init(io_param);
}
 
 
//Note: Function is called from main()
void mainInit()
{
	radio_init_asm(CFG_ALL);
	radio_init(RADIO_BUFF_NUM, RADIO_MATURITY_TIME);
	UART_INIT(uart_param, SET_ALL_PARAM);
	isr_timer0Init();
	misc_init();
	pwr_selectXTAL();
	ISD51_INIT(BAUD_57600);
}
 
//*********************UART PARAM***************************
 
//! UART Rx/Tx buffers allocation
volatile uint8	xdata	u8RxRing[RX_RING_SIZE];
volatile uint8	xdata	u8TxRing[TX_RING_SIZE];
 
uint8 uart_param[]	= {	
 		BAUD_9600,		//IDX_BAUD 
 		RX_RING_SIZE,	//IDX_RX_RING_SIZE 
 		TX_RING_SIZE,	//IDX_TX_RING_SIZE 
 };
 
 
//*********************RADIO PARAM***************************
 
//! Radio buffers allocation	
 volatile uint8 xdata u8gRadioBuff[RADIO_BUFF_NUM][RADIO_BUFF_LENGTH];	
 //! Radio tx buffers additional allocation for state 		
 volatile uint8 xdata u8gRadioBuffTXState[RADIO_BUFF_NUM];		
 //! Radio flags		
 volatile uint8 idata u8gFlags[RADIO_BUFF_NUM];	
 //! buffers Rx subtelegrams counters. Index indicates the buffer number.	
 volatile uint8 idata u8gRadioBuffsRxSubtel[RADIO_BUFF_NUM];		
 //! buffers Tx subtelegrams counters. Index indicates the buffer number. 		
 volatile uint8 idata u8gRadioBuffsTxSubtel[RADIO_BUFF_NUM];	
 //! buffers time stamp counters. Index indicates the buffer number.	
 volatile uint8 idata u8gRadioBuffsTimeStamp[RADIO_BUFF_NUM];	
 //! buffers received bytes counters. Index indicates the buffer number.		
 volatile uint8 idata u8gRadioBuffsBytes[RADIO_BUFF_NUM];	
 //! buffers dBm values. Value indicating signal strength upon telegram reception. 
 volatile uint8 xdata u8gRxRadioBuffsDbm[RADIO_BUFF_NUM];	
 //! Tx buffers time to send subtelegram. Index indicates the buffer number. 
 volatile uint8 idata u8gTxRadioBuffsTimeToSend[RADIO_BUFF_NUM];
 
//*********************FILTER PARAM***************************
 
//! Filter buffer allocation for value of filter
volatile uint32 xdata u32gFilterValue[FILTER_NUM];
//! Filter buffer allocation containing FILTER_TYPE (Bit 0..1 and FILTER_KIND Bit 7)
volatile uint8  xdata u8gFilterCfg[FILTER_NUM];
 
uint8 filter_param[]	= {
 		FILTER_NUM, //IDX_FILTER_MAX
 		FILTER_ALL_AND	//IDX_FILTER_OPERATOR 
 };
 
//*********************IO PARAM***************************
 
uint8 code	io_param[]	= {	
 		0x07,	//IDX_GPIO_CONF 
 		0x00,	//IDX_GPIO0_CONF 
 		0x0E,	//IDX_GPIO0_PULL_CONF 
 		0x01,	//IDX_GPIO0_DIR 
 		0x00,	//IDX_GPIO1_AN 
 		0xC0,	//IDX_GPIO1_CONF 
 		0x03,	//IDX_GPIO1_DIG_CONF 
 		0x80,	//IDX_GPIO1_DIR 
 		0x7F,	//IDX_GPIO1_PULL 
 		0x04,	//IDX_GPIO2_CONF 
 		0x00,	//IDX_GPIO2_DIR 
 		0x00,	//IDX_GPIO0 
 		0x00,	//IDX_GPIO1 
 		0x00 	//IDX_GPIO2 
 };
 
// I/O Configuration overview
// 
//      Pin:  Interface     Direction  Pull   Init Value
// SCSEDIO0:  Digital I/O   Out        None   0
// SCLKDIO1:  Digital I/O   In         Up     0
// WSDADIO2:  Digital I/O   In         Up     0
// RSDADIO3:  Digital I/O   In         Up     0
//    ADIO0:  Digital I/O   In         Up     0
//    ADIO1:  Digital I/O   In         Up     0
//    ADIO2:  Digital I/O   In         Up     0
//    ADIO3:  Digital I/O   In         Up     0
//    ADIO4:  Digital I/O   In         Up     0
//    ADIO5:  Digital I/O   In         Up     0
//    ADIO6:  UART          In         Up     0
//    ADIO7:  UART          Out        None   0
//   WXIDIO:  Digital I/O   In         Up     0
//   WXODIO:  Digital I/O   In         Up     
//    WAKE0:  Digital I/O   In         None   
//    WAKE1:  Digital I/O   In         None  

FAQ Single Template

Where to buy

Find the right distributor for our modules, components and finished products in your region!

Where to buy

Stay up to date and subscribe to our newsletter!

The EnOcean newsletter informs you regularly about exciting projects in the areas of IoT and smart buildings as well as current events and new products.

Subscribe now

More EnOcean

EnOcean Alliance
EnOceanSpaces
Easyfit by EnOcean

Visit us

© 2024 EnOcean GmbH. All rights reserved.

Contact