45 #define PKT_FORMAT_WMBUS_CODE 0x00 47 #define WMBUS_PREAMBLE_LEN_S1S2LONGHEADER (uint16_t)279 48 #define WMBUS_PREAMBLE_LEN_S1MS2T2OTHERTOMETER (uint16_t)15 49 #define WMBUS_PREAMBLE_LEN_T1T2METERTOOTHER (uint16_t)19 50 #define WMBUS_PREAMBLE_LEN_R2 (uint16_t)39 51 #define WMBUS_PREAMBLE_LEN_N1N2 (uint16_t)8 53 #define WMBUS_SYNC_LEN_S1S2LONGHEADER (uint8_t)18 54 #define WMBUS_SYNC_LEN_S1MS2T2OTHERTOMETER (uint8_t)18 55 #define WMBUS_SYNC_LEN_T1T2METERTOOTHER (uint8_t)10 56 #define WMBUS_SYNC_LEN_R2 (uint8_t)18 57 #define WMBUS_SYNC_LEN_N1N2 (uint16_t)16 59 #define WMBUS_SYNCWORD_S1S2LONGHEADER (uint32_t)0xE25A4000 60 #define WMBUS_SYNCWORD_S1MS2T2OTHERTOMETER (uint32_t)0xE25A4000 61 #define WMBUS_SYNCWORD_T1T2METERTOOTHER (uint32_t)0x0F400000 62 #define WMBUS_SYNCWORD_R2 (uint32_t)0xE25A4000 63 #define WMBUS_SYNCWORD_N1N2 (uint32_t)0xf68d0000 74 #define IS_WMBUS_SUBMODE(MODE) (((MODE) == WMBUS_SUBMODE_S1_S2_LONG_HEADER) || \ 75 ((MODE) == WMBUS_SUBMODE_NOT_CONFIGURED) || \ 76 ((MODE) == WMBUS_SUBMODE_S1_M_S2_T2_OTHER_TO_METER) || \ 77 ((MODE) == WMBUS_SUBMODE_T1_T2_METER_TO_OTHER) || \ 78 ((MODE) == WMBUS_SUBMODE_R2_SHORT_HEADER)) 111 s_assert_param(IS_WMBUS_SUBMODE(pxPktWMbusInit->
xWMbusSubmode));
122 S2LPSetSyncWords(WMBUS_SYNCWORD_S1S2LONGHEADER, WMBUS_SYNC_LEN_S1S2LONGHEADER);
126 S2LPSpiReadRegisters(
MOD1_ADDR, 1, &tmp);
127 tmp &= ~G4FSK_CONST_MAP_REGMASK;
128 tmp |= (((uint8_t)2)<<4);
129 S2LPSpiWriteRegisters(
MOD1_ADDR, 1, &tmp);
131 S2LPSpiReadRegisters(0xF1, 1, &tmp);
138 S2LPSetSyncWords(WMBUS_SYNCWORD_S1MS2T2OTHERTOMETER, WMBUS_SYNC_LEN_S1MS2T2OTHERTOMETER);
141 S2LPSpiReadRegisters(
MOD1_ADDR, 1, &tmp);
142 tmp &= ~G4FSK_CONST_MAP_REGMASK;
143 tmp |= (((uint8_t)2)<<4);
144 S2LPSpiWriteRegisters(
MOD1_ADDR, 1, &tmp);
146 S2LPSpiReadRegisters(0xF1, 1, &tmp);
153 S2LPSetSyncWords(WMBUS_SYNCWORD_T1T2METERTOOTHER, WMBUS_SYNC_LEN_T1T2METERTOOTHER);
162 S2LPSpiReadRegisters(
MOD1_ADDR, 1, &tmp);
163 tmp &= ~G4FSK_CONST_MAP_REGMASK;
164 tmp |= (((uint8_t)2)<<4);
165 S2LPSpiWriteRegisters(
MOD1_ADDR, 1, &tmp);
185 if(tmp>=WMBUS_PREAMBLE_LEN_S1S2LONGHEADER)
186 tmp -= WMBUS_PREAMBLE_LEN_S1S2LONGHEADER;
189 if(tmp>=WMBUS_PREAMBLE_LEN_S1MS2T2OTHERTOMETER)
190 tmp -= WMBUS_PREAMBLE_LEN_S1MS2T2OTHERTOMETER;
193 if(tmp>=WMBUS_PREAMBLE_LEN_T1T2METERTOOTHER)
194 tmp -= WMBUS_PREAMBLE_LEN_T1T2METERTOOTHER;
197 if(tmp>=WMBUS_PREAMBLE_LEN_R2)
198 tmp -= WMBUS_PREAMBLE_LEN_R2;
215 uint8_t tmpBuffer[4] = {0,0,0,0};
218 tmpBuffer[1] |= PKT_FORMAT_WMBUS_CODE;
235 tmp = (tmp & 0xC0) | cPostamble;
251 tmp = (tmp & 0x3F) | (cPostamble<<6);
278 return ((tmp & 0xC0)>>6);
289 s_cWMbusSubmode = xWMbusSubmode;
300 return s_cWMbusSubmode;
312 uint8_t tmpBuffer[2];
314 tmpBuffer[0] = (uint8_t)(nPayloadLength>>8);
315 tmpBuffer[1] = (uint8_t)nPayloadLength;
327 uint8_t tmpBuffer[2];
328 uint16_t nPayloadLength;
331 nPayloadLength = (((uint16_t)tmpBuffer[0])<<8) | ((uint16_t)tmpBuffer[1]);
333 return nPayloadLength;
void S2LPPacketHandler3OutOf6(SFunctionalState xNewState)
Enable or Disable the 3o6 encoding.
uint8_t S2LPPktWMbusGetPostamble(void)
Returns how many chips are used in the postamble.
WMbusSubmode S2LPPktWMbusGetSubmode(void)
Return the WMBUS submode used.
void S2LPPktWMbusSetSubmode(WMbusSubmode xWMbusSubmode)
Set the W-MBus submode.
void S2LPPktWMbusGetInfo(PktWMbusInit *pxPktWMbusInit)
Return the S2LP WMBUS packet structure according to the specified parameters in the registers.
#define MOD1_ADDR
MOD1 register.
S2LP WMBUS Packet Init structure definition.
void S2LPSetPreambleLength(uint16_t cPreambleLength)
Set the PREAMBLE field Length mode for S2LP packets.
WMbusSubmode
WMbus submode enumeration.
#define PCKT_PSTMBL_ADDR
PCKT_PSTMBL register.
void S2LPPktWMbusInit(PktWMbusInit *pxPktWMbusInit)
Initialize the S2LP WMBUS packet according to the specified parameters in the PktWMbusInit struct.
#define PCKTCTRL4_ADDR
PCKTCTRL4 register.
uint8_t S2LPPktWMbusGetPostamblePattern(void)
Returns the pattern of the postamble.
void S2LPSetSyncWords(uint32_t lSyncWords, uint8_t xSyncLength)
Set the SYNC_WORD.
uint16_t S2LPGetPreambleLength(void)
Return the PREAMBLE field Length mode for S2LP packets.
void S2LPPktCommonFilterOnCrc(SFunctionalState xNewState)
Enable or Disable the filtering on CRC.
void S2LPPacketHandlerManchester(SFunctionalState xNewState)
Enable or Disable the MANCHESTER encoding.
void S2LPPktWMbusSetPostamblePattern(uint8_t cPostamble)
Set the pattern of the postamble.
WMbusSubmode xWMbusSubmode
Configuration and management of S2-LP WMbus packets.
uint16_t S2LPPktWMbusGetPayloadLength(void)
Return the payload length for WMBUS packets.
#define PCKTLEN1_ADDR
PCKTLEN1 register.
void S2LPPktWMbusSetFormat(void)
Configure the WMBUS packet format as the one used by S2LP.
volatile S2LPStatus g_xStatus
S2LP Status global variable. This global variable of S2LPStatus type is updated on every SPI transact...
void S2LPPktWMbusSetPayloadLength(uint16_t nPayloadLength)
Sets the payload length for S2LP WMBUS packets.
Header file for low level S2LP SPI driver.
void S2LPPktWMbusSetPostamble(uint8_t cPostamble)
Set how many chips will be used in postamble.
void S2LPSetSyncLength(uint8_t cSyncLength)
Set the SYNC field Length for S2LP packets.