45 #define PKT_FORMAT_STACK_CODE           (uint8_t)3    58 #define IS_STACK_PREAMBLE_LENGTH           IS_PREAMBLE_LEN    59 #define IS_STACK_SYNC_LENGTH               IS_SYNC_LEN    60 #define IS_STACK_PKT_LEN_FIELD_WID         IS_PKT_LEN_FIELD_WID    61 #define IS_STACK_CRC_MODE                  IS_PKT_CRC_MODE    62 #define IS_STACK_NMAX_RETX(NRETX)          (NRETX<=15)    63 #define IS_STACK_SEQNUM_RELOAD_VAL(VAL)    (VAL<=3)    88   s_assert_param(IS_STACK_PREAMBLE_LENGTH(pxPktStackInit->
xPreambleLength));
    89   s_assert_param(IS_STACK_SYNC_LENGTH(pxPktStackInit->
xSyncLength));
    90   s_assert_param(IS_STACK_CRC_MODE(pxPktStackInit->
xCrcMode));
    92   s_assert_param(IS_SFUNCTIONAL_STATE(pxPktStackInit->
xFixVarLength));
    93   s_assert_param(IS_SFUNCTIONAL_STATE(pxPktStackInit->
xFec));
    94   s_assert_param(IS_SFUNCTIONAL_STATE(pxPktStackInit->
xDataWhitening));
   100   tmpBuffer[0] |= AUTO_PCKT_FLT_REGMASK;
   108   tmpBuffer[3] &= ~(PCKT_FRMT_REGMASK | RX_MODE_REGMASK);
   109   tmpBuffer[3] |= PKT_FORMAT_STACK_CODE<<6;
   114      tmpBuffer[4] |= FIX_VAR_LEN_REGMASK;
   117      tmpBuffer[4] &= ~FIX_VAR_LEN_REGMASK;
   119   tmpBuffer[4] &= ~(MANCHESTER_EN_REGMASK | MBUS_3OF6_EN_REGMASK);
   121   tmpBuffer[5] &= ~(CRC_MODE_REGMASK | TXSOURCE_REGMASK);
   122   tmpBuffer[5] |= (uint8_t)pxPktStackInit->
xCrcMode;
   125      tmpBuffer[5] |= WHIT_EN_REGMASK;
   128      tmpBuffer[5] &= ~WHIT_EN_REGMASK;
   131   if(pxPktStackInit->
xFec == S_ENABLE) {
   132      tmpBuffer[5] |= FEC_EN_REGMASK;
   135      tmpBuffer[5] &= ~FEC_EN_REGMASK;
   141   for(uint8_t i=0 ; i<4 ; i++) {
   142     tmpBuffer[i] = (uint8_t)(pxPktStackInit->
lSyncWords>>(8*i));
   154   S2LPSpiReadRegisters(
MOD1_ADDR, 1, tmpBuffer);
   155   tmpBuffer[0] &= ~G4FSK_CONST_MAP_REGMASK;
   156   S2LPSpiWriteRegisters(
MOD1_ADDR, 1, tmpBuffer); 
   168   uint8_t tmpBuffer[6];
   173   pxPktStackInit->
xSyncLength = ((tmpBuffer[0] & SYNC_LEN_REGMASK)>>2);
   176   pxPktStackInit->
xPreambleLength = (((uint16_t)(tmpBuffer[0] & PREAMBLE_LEN_9_8_REGMASK))<<8) | ((uint16_t)tmpBuffer[1]);
   197   for(uint8_t i=0 ; i<4 ; i++) {
   198     pxPktStackInit->
lSyncWords |= ((uint32_t)tmpBuffer[i])<<(8*i);
   213   uint8_t tmpBuffer[3];
   223     tmpBuffer[0] |= DEST_VS_SOURCE_ADDR_REGMASK;
   226     tmpBuffer[0] &= ~DEST_VS_SOURCE_ADDR_REGMASK;
   231     tmpBuffer[0] |= DEST_VS_MULTICAST_ADDR_REGMASK;
   234     tmpBuffer[0] &= ~DEST_VS_MULTICAST_ADDR_REGMASK;
   239     tmpBuffer[0] |= DEST_VS_BROADCAST_ADDR_REGMASK;
   242     tmpBuffer[0] &= ~DEST_VS_BROADCAST_ADDR_REGMASK;
   248   tmpBuffer[2] = pxPktStackAddresses->
cMyAddress;
   264   uint8_t tmpBuffer[3];
   267   pxPktStackAddresses->
cMyAddress = tmpBuffer[0];
   290   tmp &= ~(PCKT_FRMT_REGMASK | RX_MODE_REGMASK);
   291   tmp |= PKT_FORMAT_STACK_CODE;
   297   tmp &= ~TXSOURCE_REGMASK;
   316   uint8_t tmpBuffer[2];
   319   tmpBuffer[0] = (uint8_t)(nPayloadLength>>8);
   320   tmpBuffer[1] = (uint8_t)nPayloadLength;
   336   uint8_t tmpBuffer[2];
   337   uint16_t nPayloadLength;
   340   nPayloadLength = (((uint16_t)tmpBuffer[0])<<8) | ((uint16_t)tmpBuffer[1]);
   343   return nPayloadLength;
   354   uint8_t tmpBuffer[2];
   355   uint16_t nPayloadLength;
   358   nPayloadLength = (((uint16_t)tmpBuffer[0])<<8) | ((uint16_t)tmpBuffer[1]);
   361   return nPayloadLength;
   373   s_assert_param(IS_SFUNCTIONAL_STATE(xNewState));
   376   if(xNewState == S_ENABLE) {
   377     tmp |= AUTO_ACK_REGMASK;
   380     tmp &= ~AUTO_ACK_REGMASK;
   395   s_assert_param(IS_STACK_NMAX_RETX(nRetx));
   398   tmp &= ~NMAX_RETX_REGMASK;
   415   tmp &= NACK_RX_REGMASK;
   429   s_assert_param(IS_SFUNCTIONAL_STATE(xNewState));
   432   if(xNewState == S_ENABLE) {
   433     tmp &= ~NACK_TX_REGMASK;
   436     tmp |= NACK_TX_REGMASK;
   451   s_assert_param(IS_SFUNCTIONAL_STATE(xNewState));
   454   if(xNewState == S_ENABLE) {
   455     tmp |= PIGGYBACKING_REGMASK;
   458     tmp &= ~PIGGYBACKING_REGMASK;
   474   s_assert_param(IS_STACK_SEQNUM_RELOAD_VAL(cReloadValue));
   477   tmp &= ~TX_SEQ_NUM_RELOAD_REGMASK;
   478   tmp |= (cReloadValue<<3);
   489   uint8_t tempRetValue;
   495   return (tempRetValue & 0x0F);
 #define TX_PCKT_INFO_ADDR
TX_PCKT_INFO register.
 
SFunctionalState xFilterOnMulticastAddress
 
void S2LPPktStackAutoAck(SFunctionalState xNewState)
Se the AUTO_ACK bit on the receiver .
 
#define PROTOCOL2_ADDR
PROTOCOL2 register.
 
#define MOD1_ADDR
MOD1 register.
 
SFunctionalState
S2LP Functional state. Used to enable or disable a specific option.
 
void S2LPPktStackInit(PktStackInit *pxPktStackInit)
Initialize the S2LP STack packet according to the specified parameters in the PktStackInit.
 
#define PROTOCOL1_ADDR
PROTOCOL1 register.
 
#define PCKTCTRL6_ADDR
PCKTCTRL6 register.
 
void S2LPPktStackPiggybacking(SFunctionalState xNewState)
Enable or Disable the piggybacking.
 
uint8_t cMulticastAddress
 
#define S2LPPktStackFilterOnCrc(xNewState)
Enables or Disables the CRC filtering.
 
SFlagStatus
S2LP Flag status. Used to control the state of a flag.
 
S2LP STack packet address structure definition. This structure allows users to specify the node/multi...
 
SFunctionalState xFilterOnBroadcastAddress
 
#define PCKTCTRL2_ADDR
PCKTCTRL2 register.
 
void S2LPPktStackSeqNumForReload(uint8_t cReloadValue)
Set the reload value of the sequence number.
 
#define SYNC3_ADDR
SYNC3 register.
 
void S2LPPktStackAckRequest(SFunctionalState xNewState)
This function will set the NO_ACK bit or reset it.
 
SFunctionalState xFilterOnMyAddress
 
PktCrcMode StackCrcMode
CRC length in bytes enumeration.
 
void S2LPPktStackNRetx(uint8_t nRetx)
Set the number of retransmissions to be done in case of ACK loss.
 
Configuration and management of S2-LP WMbus packets.
 
void S2LPPktStackAddressesInit(PktStackAddressesInit *pxPktStackAddresses)
Initialize the S2LP STack packet addresses according to the specified parameters in the PktStackAddre...
 
void S2LPPktStackSetFormat(void)
Configure the STack packet format for S2LP.
 
#define PCKTCTRL1_ADDR
PCKTCTRL1 register.
 
#define PCKTLEN1_ADDR
PCKTLEN1 register.
 
uint8_t cBroadcastAddress
 
SFlagStatus S2LPPktStackGetTXAckRequest(void)
Get the NO_ACK bit.
 
uint16_t S2LPPktStackGetPayloadLength(void)
Return the payload length for S2LP STack packets. Since the packet length depends from the address an...
 
SFunctionalState xDataWhitening
 
uint16_t S2LPPktStackGetReceivedPktLength(void)
Return the packet length field of the received packet.
 
void S2LPPktWMbusSetSubmode(WMbusSubmode xWMbusSubmode)
Set the W-MBus submode.
 
#define PROTOCOL0_ADDR
PROTOCOL0 register.
 
void S2LPPktStackSetPayloadLength(uint16_t nPayloadLength)
Set the payload length for S2LP STack packets. Since the packet length depends from the address (alwa...
 
SFunctionalState xFixVarLength
 
#define RX_PCKT_LEN1_ADDR
RX_PCKT_LEN1 register.
 
volatile S2LPStatus g_xStatus
S2LP Status global variable. This global variable of S2LPStatus type is updated on every SPI transact...
 
#define PCKTCTRL3_ADDR
PCKTCTRL3 register.
 
#define PCKT_FLT_GOALS3_ADDR
PCKT_FLT_GOALS3 register.
 
#define PCKT_FLT_GOALS2_ADDR
PCKT_FLT_GOALS2 register.
 
SFunctionalState cExtendedPktLenField
 
void S2LPPktStackGetAddressesInfo(PktStackAddressesInit *pxPktStackAddresses)
Return the S2LP STack packet addresses structure according to the specified parameters in the registe...
 
#define PCKT_FLT_OPTIONS_ADDR
PCKT_FLT_OPTIONS register.
 
Header file for low level S2LP SPI driver.
 
#define RX_PCKT_INFO_ADDR
RX_PCKT_INFO register.
 
S2LP STack Packet Init structure definition.
 
Configuration and management of S2-LP STack packets.
 
uint8_t S2LPPktStackGetNReTx(void)
Returns the number of retransmission done on the transmitted packet.
 
void S2LPPktStackGetInfo(PktStackInit *pxPktStackInit)
Return the S2LP STack packet structure according to the specified parameters in the registers.