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.