feat: 完成扫描建网的修改, 移除建网状态机, 收到入网帧即入网

This commit is contained in:
2025-05-21 10:23:38 +08:00
parent b8e8c6272a
commit 6d665eb853
9 changed files with 490 additions and 383 deletions
@@ -152,6 +152,7 @@ int32_t L2_SetupNextSlot(L2_INST *instPtr, L2_TOR_TYPE txrxMode, L2_FRAME_TYPE f
void L2_FrameInsertChunk(uint8_t *frame, size_t offset, size_t bytes, const void *chunk); void L2_FrameInsertChunk(uint8_t *frame, size_t offset, size_t bytes, const void *chunk);
void L2_FrameGetChunk(uint8_t *frame, size_t offset, size_t bytes, void *chunk); void L2_FrameGetChunk(uint8_t *frame, size_t offset, size_t bytes, void *chunk);
int32_t L2_CrcAppend(uint8_t *dataBuff, uint32_t dataLen, uint32_t crcPos, L2_CRC_TYPE crcType); int32_t L2_CrcAppend(uint8_t *dataBuff, uint32_t dataLen, uint32_t crcPos, L2_CRC_TYPE crcType);
static int32_t L2_CrcGen(uint8_t *dataBuff, uint32_t dataLen, L2_CRC_TYPE crcType, uint32_t *crc);
bool L2_CrcCheck(uint8_t *dataBuff, uint32_t dataLen, L2_CRC_TYPE crcType); bool L2_CrcCheck(uint8_t *dataBuff, uint32_t dataLen, L2_CRC_TYPE crcType);
/** @} LinkLayer_Framing*/ /** @} LinkLayer_Framing*/
@@ -170,7 +171,6 @@ int32_t L2_RescheduleEventAfter(L2_INST *instPtr, L2_SCHD_EVENT *schdEvent, uint
* @defgroup LinkLayer_Scan * @defgroup LinkLayer_Scan
* @{ * @{
*/ */
int32_t L2_Scan_Init(L2_SCAN_FSM **scanFSMPtr);
void L2_Scan_RefreashScanTable(L2_INST *instPtr); void L2_Scan_RefreashScanTable(L2_INST *instPtr);
void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr); void L2_Scan_Reset(L2_SCAN_FSM *scanFSMPtr);
void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr); void L2_Scan_Destroy(L2_SCAN_FSM *scanFSMPtr);
@@ -23,105 +23,154 @@
#ifndef __L2_MSG_DEF_H_ #ifndef __L2_MSG_DEF_H_
#define __L2_MSG_DEF_H_ #define __L2_MSG_DEF_H_
#define L2_PACK_LEN_MAX 512 // bytes #define L2_PACK_LEN_MAX 2048 // bytes
#define L2_PAYLOAD_LEN_ADV 17
#define L2_PAYLOAD_LEN_ACK 9
#define L2_PAYLOAD_LEN_SVC_128K 42
#define L2_PAYLOAD_LEN_SVC_512K 267
#define L2_PAYLOAD_LEN_SVC_2M 1222
#define L2_MSG_CRC_LEN 1
#define L2_ADV_PACK_LEN 28 // bytes
#define L2_CMF_PACK_LEN 268 // bytes
#define L2_SVC_PACK_LEN 268 // bytes
// Common structure:
// [bytes] [name] // [bytes] [name]
// 4 fame number // 1 udu number
// 10 crypto sync word
// 8 message authentication code
// 4 frame number
// 1 slot number // 1 slot number
// 1 source id // 1 source id
// 1 destination id // 1 destination id
// 1 message type // 1 message type
#define L2_MSG_FRAME_NUM 0 #define L2_MSG_UDU_NUM 0
#define L2_MSG_UDU_NUM_LEN 1
#define L2_MSG_SYNC_WORD 1
#define L2_MSG_SYNC_WORD_LEN 10
#define L2_MSG_AUTH_CODE 11
#define L2_MSG_AUTH_CODE_LEN 8
#define L2_MSG_FRAME_NUM 19
#define L2_MSG_FRAME_NUM_LEN 4 #define L2_MSG_FRAME_NUM_LEN 4
#define L2_MSG_SLOT_NUM 4 #define L2_MSG_SLOT_NUM 23
#define L2_MSG_SLOT_NUM_LEN 1 #define L2_MSG_SLOT_NUM_LEN 1
#define L2_MSG_SRC_ID 5 #define L2_MSG_SRC_ID 24
#define L2_MSG_SRC_ID_LEN 1 #define L2_MSG_SRC_ID_LEN 1
#define L2_MSG_DST_ID 6 #define L2_MSG_DST_ID 25
#define L2_MSG_DST_ID_LEN 1 #define L2_MSG_DST_ID_LEN 1
#define L2_MSG_TYPE 7 #define L2_MSG_TYPE 26
#define L2_MSG_TYPE_LEN 1 #define L2_MSG_TYPE_LEN 1
#define L2_MSG_PAYLOAD 8 #define L2_MSG_PAYLOAD 27
// advertisement payload structure: #pragma pack(push, 1) // Force 1-byte alignment
// [bytes] [name]
// 4 position x
// 4 position y
// 4 position z
// 4 net start time
// 2 crc
#define L2_MSG_ADV_SRC_POSX 8
#define L2_MSG_ADV_SRC_POSX_LEN 4
#define L2_MSG_ADV_SRC_POSY 12
#define L2_MSG_ADV_SRC_POSY_LEN 4
#define L2_MSG_ADV_SRC_POSZ 16
#define L2_MSG_ADV_SRC_POSZ_LEN 4
#define L2_MSG_ADV_SRC_NETSTART_TIME 20
#define L2_MSG_ADV_SRC_NETSTART_TIME_LEN 4
#define L2_MSG_ADV_SVC_CRC 26
#define L2_MSG_ADV_SVC_CRC_LEN 2
// confirm payload structure: /**
// [bytes] [name] * @struct L2_MSG_COMMON
// 4 position x * @brief Link layer common message header, 27 byte / 216 bit in total.
// 4 position y */
// 4 position z typedef struct
// 4 speed x {
// 4 speed y uint8_t uduNum; ///< udu (user data unit) number per pdu (packet data unit)
// 4 speed z struct
// 2 crc {
#define L2_MSG_CFM_SRC_POSX 8 uint8_t cryptoSyncWord[10];
#define L2_MSG_CFM_SRC_POSX_LEN 4 uint8_t msgAuthCode[8];
#define L2_MSG_CFM_SRC_POSY 12 } MSG_KEY;
#define L2_MSG_CFM_SRC_POSY_LEN 4
#define L2_MSG_CFM_SRC_POSZ 16
#define L2_MSG_CFM_SRC_POSZ_LEN 4
#define L2_MSG_CFM_SRC_SPEEDX 20
#define L2_MSG_CFM_SRC_SPEEDX_LEN 4
#define L2_MSG_CFM_SRC_SPEEDY 24
#define L2_MSG_CFM_SRC_SPEEDY_LEN 4
#define L2_MSG_CFM_SRC_SPEEDZ 28
#define L2_MSG_CFM_SRC_SPEEDZ_LEN 4
#define L2_MSG_CFM_PAYLOAD_ID 32
#define L2_MSG_CFM_PAYLOAD_ID_LEN 4
#define L2_MSG_CFM_PAYLOAD 36
#define L2_MSG_CFM_PAYLOAD_LEN 230
#define L2_MSG_CFM_CRC 266
#define L2_MSG_CFM_CRC_LEN 2
// service payload structure: uint32_t frameNum; ///< frame number
// [bytes] [name] uint8_t slotNum; ///< slot number
// 4 position x uint8_t src; ///< source id
// 4 position y uint8_t dst; ///< destination id
// 4 position z uint8_t msgType; ///< message type
// 4 speed x } L2_MSG_COMMON;
// 4 speed y
// 4 speed z /**
// 234 payload * @struct L2_MSG_ADV
// 2 crc * @brief Link layer advertise message definition, 65 byte / 520 bit in total.
#define L2_MSG_SVC_SRC_POSX 8 */
#define L2_MSG_SVC_SRC_POSX_LEN 4 typedef struct
#define L2_MSG_SVC_SRC_POSY 12 {
#define L2_MSG_SVC_SRC_POSY_LEN 4 L2_MSG_COMMON *common; ///< common message header
#define L2_MSG_SVC_SRC_POSZ 16 double srcPosX; ///< position x
#define L2_MSG_SVC_SRC_POSZ_LEN 4 double srcPosY; ///< position y
#define L2_MSG_SVC_SRC_SPEEDX 20 double srcPosZ; ///< position z
#define L2_MSG_SVC_SRC_SPEEDX_LEN 4 uint32_t srcNetStatTime;///< net start time
#define L2_MSG_SVC_SRC_SPEEDY 24 uint32_t advDataId; ///< advertise payload id
#define L2_MSG_SVC_SRC_SPEEDY_LEN 4 uint8_t advData[17]; ///< advertise payload data
#define L2_MSG_SVC_SRC_SPEEDZ 28 uint8_t crc; ///< crc
#define L2_MSG_SVC_SRC_SPEEDZ_LEN 4 } L2_MSG_ADV;
#define L2_MSG_SVC_PAYLOAD_ID 32
#define L2_MSG_SVC_PAYLOAD_ID_LEN 4 /**
#define L2_MSG_SVC_PAYLOAD 36 * @struct L2_MSG_ACK
#define L2_MSG_SVC_PAYLOAD_LEN 230 * @brief Link layer acknowledge message definition, 65 byte / 520 bit in total.
#define L2_MSG_SVC_CRC 266 */
#define L2_MSG_SVC_CRC_LEN 2 typedef struct
{
L2_MSG_COMMON *common; ///< common message header
double srcPosX; ///< position x
double srcPosY; ///< position y
double srcPosZ; ///< position z
double srcSpeedX; ///< speed x
double srcSpeedY; ///< speed y
double srcSpeedZ; ///< speed z
uint32_t ackDataId; ///< acknowledge payload id
uint8_t ackData[9]; ///< acknowledge payload data
uint8_t crc; ///< crc
} L2_MSG_ACK;
/**
* @struct L2_MSG_SVC_128K
* @brief Link layer 128 kbps service message definition, 98 byte / 784 bit in total.
*/
typedef struct
{
L2_MSG_COMMON *common; ///< common message header
double srcPosX; ///< position x
double srcPosY; ///< position y
double srcPosZ; ///< position z
double srcSpeedX; ///< speed x
double srcSpeedY; ///< speed y
double srcSpeedZ; ///< speed z
uint32_t svcDataId; ///< service payload id
uint8_t svcData[42]; ///< service payload data
uint8_t crc; ///< crc
} L2_MSG_SVC_128K;
/**
* @struct L2_MSG_SVC_512K
* @brief Link layer 512 kbps service message definition, 323 byte / 2584 bit in total.
*/
typedef struct
{
L2_MSG_COMMON *common; ///< common message header
double srcPosX; ///< position x
double srcPosY; ///< position y
double srcPosZ; ///< position z
double srcSpeedX; ///< speed x
double srcSpeedY; ///< speed y
double srcSpeedZ; ///< speed z
uint32_t svcDataId; ///< service payload id
uint8_t svcData[267]; ///< service payload data
uint8_t crc; ///< crc
} L2_MSG_SVC_512K;
/**
* @struct L2_MSG_SVC_2M
* @brief Link layer 2 Mbps service message definition, 1278 byte / 10224 bit in total.
*/
typedef struct
{
L2_MSG_COMMON *common; ///< common message header
double srcPosX; ///< position x
double srcPosY; ///< position y
double srcPosZ; ///< position z
double srcSpeedX; ///< speed x
double srcSpeedY; ///< speed y
double srcSpeedZ; ///< speed z
uint32_t svcDataId; ///< service payload id
uint8_t svcData[1222]; ///< service payload data
uint8_t crc; ///< crc
} L2_MSG_SVC_2M;
#pragma pack(pop) // Restore original packing
#endif //__L2_MSG_DEF_H_ #endif //__L2_MSG_DEF_H_
@@ -25,238 +25,289 @@
#include "link_layer.h" #include "link_layer.h"
#include "link_layer_types.h" #include "link_layer_types.h"
L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = { L2_RTNE_TABLE_ENTRY innerScanSubT[L2_SLOTS_PER_FRAME] =
// SubFrame 0 {
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, // 36 slots: advertise of antenna-1 ~ antenna-3
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, // 12 slots: idle for no antenna-4
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, // 2 slots: service slot, set to idle
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x00, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x01, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x02, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x03, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x04, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x05, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x06, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x07, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x08, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x09, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0A, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0B, 0x01, L2_BROADCAST_ID1},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x00, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x01, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x02, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x03, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x04, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_ADVERTISE, 0x05, 0x01, L2_BROADCAST_ID2},
// SubFrame 1 {L2_SLOT_ADVERTISE, 0x06, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x07, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x08, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x09, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0A, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0B, 0x01, L2_BROADCAST_ID2},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x00, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x01, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x02, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x03, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x04, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x05, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x06, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x07, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x08, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x09, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0A, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_ADVERTISE, 0x0B, 0x01, L2_BROADCAST_ID3},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
// SubFrame 2 {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
// SubFrame 3
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
{L2_SLOT_ADVERTISE, 0x00, 0x01, 0xFF},
{L2_SLOT_ADVERTISE, 0x01, 0x01, 0xFF},
{L2_SLOT_ADVERTISE, 0x02, 0x01, 0xFF},
{L2_SLOT_ADVERTISE, 0x03, 0x01, 0xFF},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
// SubFrame 4 // 36 slots: acknowledge of member nodes
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF}, // 14 slots: service
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x00, 0x02, 0x01},
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x01, 0x02, 0x01},
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x02, 0x02, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_ACKNOWLEDGE, 0x03, 0x02, 0x01},
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x00, 0x03, 0x01},
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x01, 0x03, 0x01},
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x02, 0x03, 0x01},
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF}, {L2_SLOT_ACKNOWLEDGE, 0x03, 0x03, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_ACKNOWLEDGE, 0x00, 0x04, 0x01},
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x01, 0x04, 0x01},
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x02, 0x04, 0x01},
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x03, 0x04, 0x01},
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x00, 0x05, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_ACKNOWLEDGE, 0x01, 0x05, 0x01},
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x02, 0x05, 0x01},
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x03, 0x05, 0x01},
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x00, 0x06, 0x01},
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01}, {L2_SLOT_ACKNOWLEDGE, 0x01, 0x06, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_ACKNOWLEDGE, 0x02, 0x06, 0x01},
}; {L2_SLOT_ACKNOWLEDGE, 0x03, 0x06, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x00, 0x07, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x01, 0x07, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x02, 0x07, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x03, 0x07, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x00, 0x08, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x01, 0x08, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x02, 0x08, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x03, 0x08, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x00, 0x09, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x01, 0x09, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x02, 0x09, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x03, 0x09, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x00, 0x0A, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x01, 0x0A, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x02, 0x0A, 0x01},
{L2_SLOT_ACKNOWLEDGE, 0x03, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x03},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x03},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x04},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x04},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x05},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x05},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x07},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x07},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x08},
L2_RTNE_TABLE_ENTRY normalSub[L2_SLOTS_PER_FRAME] = { // 12 slots: network management, head <--> node
// SubFrame 0 // 18 slots: message distribution, head ---> node
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, // 12 slots: rtt, head <--> node
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, // 8 slots: service
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x02},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x03},
{L2_SLOT_MANAGE, 0x01, 0x01, 0x03},
{L2_SLOT_MANAGE, 0x00, 0x01, 0x04},
{L2_SLOT_MANAGE, 0x01, 0x01, 0x04},
{L2_SLOT_MANAGE, 0x00, 0x02, 0x01},
{L2_SLOT_MANAGE, 0x01, 0x02, 0x01},
{L2_SLOT_MANAGE, 0x00, 0x03, 0x01},
{L2_SLOT_MANAGE, 0x01, 0x03, 0x01},
{L2_SLOT_MANAGE, 0x00, 0x04, 0x01},
{L2_SLOT_MANAGE, 0x01, 0x04, 0x01},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x02},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x02},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x03},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x03},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x04},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x04},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x05},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x05},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x06},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x06},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x07},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x07},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x08},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x08},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x09},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x09},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x0A},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x0A},
{L2_SLOT_RTT, 0x00, 0x01, 0x02},
{L2_SLOT_RTT, 0x01, 0x01, 0x02},
{L2_SLOT_RTT, 0x00, 0x01, 0x03},
{L2_SLOT_RTT, 0x01, 0x01, 0x03},
{L2_SLOT_RTT, 0x00, 0x01, 0x04},
{L2_SLOT_RTT, 0x01, 0x01, 0x04},
{L2_SLOT_RTT, 0x00, 0x02, 0x01},
{L2_SLOT_RTT, 0x01, 0x02, 0x01},
{L2_SLOT_RTT, 0x00, 0x03, 0x01},
{L2_SLOT_RTT, 0x01, 0x03, 0x01},
{L2_SLOT_RTT, 0x00, 0x04, 0x01},
{L2_SLOT_RTT, 0x01, 0x04, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x0B},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x0B},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
// SubFrame 1 // 12 slots: network management, head <--> node
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, // 18 slots: message distribution, head ---> node
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, // 12 slots: rtt, head <--> node
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, // 8 slots: service
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x05},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x05},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x07},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x07},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x00, 0x05, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x01, 0x05, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x06, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x01, 0x06, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x07, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x01, 0x07, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x03},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x03},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x04},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x04},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x05},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x05},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x06},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x06},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x07},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x07},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x08},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x08},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x09},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x09},
{L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x0A},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x0A},
{L2_SLOT_RTT, 0x00, 0x01, 0x05},
{L2_SLOT_RTT, 0x01, 0x01, 0x05},
{L2_SLOT_RTT, 0x00, 0x01, 0x06},
{L2_SLOT_RTT, 0x01, 0x01, 0x06},
{L2_SLOT_RTT, 0x00, 0x01, 0x07},
{L2_SLOT_RTT, 0x01, 0x01, 0x07},
{L2_SLOT_RTT, 0x00, 0x05, 0x01},
{L2_SLOT_RTT, 0x01, 0x05, 0x01},
{L2_SLOT_RTT, 0x00, 0x06, 0x01},
{L2_SLOT_RTT, 0x01, 0x06, 0x01},
{L2_SLOT_RTT, 0x00, 0x07, 0x01},
{L2_SLOT_RTT, 0x01, 0x07, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x03, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x03, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x04, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x04, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x05, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x05, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x06, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x06, 0x01},
// SubFrame 2 // 12 slots: network management, head <--> node
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, // 18 slots: message distribution, head ---> node
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, // 12 slots: rtt, head <--> node
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, // 8 slots: service, with one slot idle
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x08},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x00, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_MANAGE, 0x01, 0x01, 0x0A},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x00, 0x08, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x01, 0x08, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x09, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x01, 0x09, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_MANAGE, 0x00, 0x0A, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_MANAGE, 0x01, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x03},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x03},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x04},
{L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x04},
// SubFrame 3 {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x05},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x05},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x06},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x07},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x07},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x09},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_DISTRIBUTE, 0x00, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, {L2_SLOT_DISTRIBUTE, 0x01, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, {L2_SLOT_RTT, 0x00, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_RTT, 0x01, 0x01, 0x08},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_RTT, 0x00, 0x01, 0x09},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_RTT, 0x01, 0x01, 0x09},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_RTT, 0x00, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_RTT, 0x01, 0x01, 0x0A},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01}, {L2_SLOT_RTT, 0x00, 0x08, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01}, {L2_SLOT_RTT, 0x01, 0x08, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_RTT, 0x00, 0x09, 0x01},
{L2_SLOT_RTT, 0x01, 0x09, 0x01},
// SubFrame 4 {L2_SLOT_RTT, 0x00, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02}, {L2_SLOT_RTT, 0x01, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02}, {L2_SLOT_SERVICE, 0x00, 0x08, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02}, {L2_SLOT_SERVICE, 0x01, 0x08, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02}, {L2_SLOT_SERVICE, 0x00, 0x09, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_SERVICE, 0x01, 0x09, 0x01},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01}, {L2_SLOT_SERVICE, 0x00, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01}, {L2_SLOT_SERVICE, 0x01, 0x0A, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}, {L2_SLOT_IDLE, 0x00, 0x00, 0x00},
{L2_SLOT_IDLE, 0x00, 0x00, 0x00}
}; };
L2_RTNE_TABLE_ENTRY *initTable[L2_INIT_RTNE_PERIOD] = L2_RTNE_TABLE_ENTRY *initTable[L2_INIT_RTNE_PERIOD] =
{ {
intraScanSubT innerScanSubT
}; };
L2_RTNE_TABLE_ENTRY *normalTable[L2_NORMAL_RTNE_PERIOD] = L2_RTNE_TABLE_ENTRY *normalTable[L2_NORMAL_RTNE_PERIOD] =
{ {
normalSub innerScanSubT
}; };
/** @} RoutineTable*/ /** @} RoutineTable*/
+57 -59
View File
@@ -57,89 +57,100 @@ static int32_t ScanMsg_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
int32_t Status; int32_t Status;
uint32_t dataChunk; uint32_t dataChunk;
uint8_t *buff = instPtr->sendPktData; if ((type < L2_FRAME_ADV) || (type > L2_FRAME_ACK))
if ((type < L2_ADV_FRAME) || (type > L2_CFM_FRAME))
{ {
DBG_ERROR("Unexpected frame type: %" PRId8 ".\n", type); DBG_ERROR("Unexpected frame type: %" PRId8 ".\n", type);
return EPARAM; return EPARAM;
} }
// Common section of link layer package
dataChunk = L2_GetNextFrameNum(instPtr);
L2_FrameInsertChunk(buff, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &dataChunk);
dataChunk = L2_GetNextSlotNum(instPtr);
L2_FrameInsertChunk(buff, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &dataChunk);
dataChunk = L2_GetNodeId(instPtr);
L2_FrameInsertChunk(buff, L2_MSG_SRC_ID, L2_MSG_SRC_ID_LEN, &dataChunk);
dataChunk = dstId;
L2_FrameInsertChunk(buff, L2_MSG_DST_ID, L2_MSG_DST_ID_LEN, &dataChunk);
switch (type) switch (type)
{ {
case L2_FRAME_ADV: case L2_FRAME_ADV:
{ {
dataChunk = L2_FRAME_ADV; L2_MSG_ADV *message = calloc(sizeof(L2_MSG_ADV));
L2_FrameInsertChunk(buff, L2_MSG_TYPE, L2_MSG_TYPE_LEN, &dataChunk);
// Common section of link layer package
message->common->frameNum = L2_GetNextFrameNum(instPtr);
message->common->slotNum = L2_GetNextSlotNum(instPtr);
message->common->src = L2_GetNodeId(instPtr);
message->common->dst = dstId;
message->common->msgType = L2_FRAME_ADV;
SysMonitor_GetSysinfo(&(instPtr->sysInfo));
// insert position and speed info // insert position and speed info
L2_FrameInsertChunk(buff, L2_MSG_ADV_SRC_POSX, L2_MSG_ADV_SRC_POSX_LEN, &(instPtr->sysInfo.posX)); SysMonitor_GetSysinfo(&(instPtr->sysInfo));
L2_FrameInsertChunk(buff, L2_MSG_ADV_SRC_POSY, L2_MSG_ADV_SRC_POSY_LEN, &(instPtr->sysInfo.posY)); message->srcPosX = &(instPtr->sysInfo.posX);
L2_FrameInsertChunk(buff, L2_MSG_ADV_SRC_POSZ, L2_MSG_ADV_SRC_POSZ_LEN, &(instPtr->sysInfo.posZ)); message->srcPosY = &(instPtr->sysInfo.posY);
message->srcPosZ = &(instPtr->sysInfo.posZ);
// Insert net start time // Insert net start time
L2_FrameInsertChunk(buff, L2_MSG_ADV_SRC_NETSTART_TIME, L2_MSG_ADV_SRC_NETSTART_TIME_LEN, &(instPtr->netStartTime)); message->srcNetStatTime = &(instPtr->netStartTime);
// Packing extra payload
SysMonitor_GetSendPayload(message->advData, message->advDataId, L2_PAYLOAD_LEN_ADV);
if (message->ackDataId == DATA_ID_NONE)
{
memset(message->ackData, 0xAA, L2_PAYLOAD_LEN_ADV);
}
// Append CRC // Append CRC
Status = L2_CrcAppend(buff, L2_ADV_PACK_LEN - L2_MSG_ADV_SVC_CRC_LEN, L2_MSG_ADV_SVC_CRC, L2_CRC16_1021); uint32_t crcVal;
Status = L2_CrcGen(message, Phy_GetFrameLen(L2_L2frame2L1frame(L2_FRAME_ADV)) - L2_MSG_CRC_LEN, L2_CRC8_31, &crcVal);
if (Status != SUCCESS) if (Status != SUCCESS)
{ {
DBG_ERROR("Fail to append CRC, error code: %" PRId32 ".\n", Status);
return Status; return Status;
} }
message->crc = crcVal;
instPtr->sendPktData = message;
// Logging...
memcpy(instPtr->log.txLog.data, message, Phy_GetFrameLen(L2_L2frame2L1frame(L2_FRAME_ADV)));
instPtr->log.txLog.dataId = message->ackDataId;
free(message);
break; break;
} }
case L2_FRAME_ACK: case L2_FRAME_ACK:
{ {
dataChunk = L2_FRAME_ACK; L2_MSG_ACK *message = calloc(sizeof(L2_MSG_ACK));
L2_FrameInsertChunk(buff, L2_MSG_TYPE, L2_MSG_TYPE_LEN, &dataChunk);
// Common section of link layer package
message->common->frameNum = L2_GetNextFrameNum(instPtr);
message->common->slotNum = L2_GetNextSlotNum(instPtr);
message->common->src = L2_GetNodeId(instPtr);
message->common->dst = dstId;
message->common.msgType = L2_FRAME_ADV;
SysMonitor_GetSysinfo(&(instPtr->sysInfo));
// insert position and speed info // insert position and speed info
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_POSX, L2_MSG_CFM_SRC_POSX_LEN, &(instPtr->sysInfo.posX)); SysMonitor_GetSysinfo(&(instPtr->sysInfo));
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_POSY, L2_MSG_CFM_SRC_POSY_LEN, &(instPtr->sysInfo.posY)); message->srcPosX = &(instPtr->sysInfo.posX);
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_POSZ, L2_MSG_CFM_SRC_POSZ_LEN, &(instPtr->sysInfo.posZ)); message->srcPosY = &(instPtr->sysInfo.posY);
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_SPEEDX, L2_MSG_CFM_SRC_SPEEDX_LEN, &(instPtr->sysInfo.vX)); message->srcPosZ = &(instPtr->sysInfo.posZ);
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_SPEEDY, L2_MSG_CFM_SRC_SPEEDY_LEN, &(instPtr->sysInfo.vY)); message->srcSpeedX = &(instPtr->&(instPtr->sysInfo.vX));
L2_FrameInsertChunk(buff, L2_MSG_CFM_SRC_SPEEDZ, L2_MSG_CFM_SRC_SPEEDZ_LEN, &(instPtr->sysInfo.vZ)); message->srcSpeedY = &(instPtr->&(instPtr->sysInfo.vY));
message->srcSpeedZ = &(instPtr->&(instPtr->sysInfo.vZ));
// Packing extra payload // Packing extra payload
uint32_t dataId; SysMonitor_GetSendPayload(message->ackData, message->ackDataId, L2_PAYLOAD_LEN_ACK);
if (L2_GetNodeType(instPtr) == L2_NODE_HEAD) if (message->ackDataId == DATA_ID_NONE)
{ {
SysMonitor_GetSendPayload(buff + L2_MSG_CFM_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX); memset(message->ackData, 0xAA, L2_PAYLOAD_LEN_ACK);
}
else
{
SysMonitor_GetSendPayload(buff + L2_MSG_CFM_PAYLOAD, &dataId, PAYLOAD_LEN_LJ_TX);
}
L2_FrameInsertChunk(buff, L2_MSG_CFM_PAYLOAD_ID, L2_MSG_CFM_PAYLOAD_ID_LEN, &dataId);
if (dataId == DATA_ID_NONE)
{
memset(buff + L2_MSG_CFM_PAYLOAD, 0xAA, L2_MSG_CFM_PAYLOAD_LEN);
} }
// Append CRC // Append CRC
Status = L2_CrcAppend(buff, L2_CMF_PACK_LEN - L2_MSG_CFM_CRC_LEN, L2_MSG_CFM_CRC, L2_CRC16_1021); uint32_t crcVal;
Status = L2_CrcGen(message, Phy_GetFrameLen(L2_L2frame2L1frame(L2_FRAME_ACK)) - L2_MSG_CRC_LEN, L2_CRC8_31, &crcVal);
if (Status != SUCCESS) if (Status != SUCCESS)
{ {
DBG_ERROR("Fail to append CRC, error code: %" PRId32 ".\n", Status);
return Status; return Status;
} }
message->crc = crcVal;
// Logging... // Logging...
memcpy(instPtr->log.txLog.data, buff, L2_CMF_PACK_LEN); memcpy(instPtr->log.txLog.data, message, Phy_GetFrameLen(L2_L2frame2L1frame(L2_FRAME_ACK)));
instPtr->log.txLog.dataId = dataId; instPtr->log.txLog.dataId = message->ackDataId;
free(message);
break; break;
} }
default: default:
@@ -233,17 +244,6 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
.msg = NULL .msg = NULL
}; };
(void)AssertL2Event(instPtr, &l2Event); (void)AssertL2Event(instPtr, &l2Event);
// Assert update routine event...
L2_RTNE_CONFIG newRtneConfig = {0};
L2_EVENT rtneUpEvent =
{
.event = L2_ROUTINE_UPDATE,
.msg = &newRtneConfig
};
newRtneConfig.rtneTable = initTable;
newRtneConfig.rtnePrd = ARRAY_SIZE(initTable);
(void)AssertL2Event(instPtr, &rtneUpEvent);
} }
// Time sync. // Time sync.
L2_TimeAdjust(instPtr, &(instPtr->log.timeDev)); L2_TimeAdjust(instPtr, &(instPtr->log.timeDev));
@@ -400,7 +400,6 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
antIndex = L2_AntId2AntIndex(rtneEntry->dst); // antenna selection based on broadcast id in routing table antIndex = L2_AntId2AntIndex(rtneEntry->dst); // antenna selection based on broadcast id in routing table
torState = L2_TOR_TX; // head node transmits messages in advertise slot torState = L2_TOR_TX; // head node transmits messages in advertise slot
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
if (ScanMsg_Packing(instPtr, L2_FRAME_ADV, rtneEntry->dst) != SUCCESS) if (ScanMsg_Packing(instPtr, L2_FRAME_ADV, rtneEntry->dst) != SUCCESS)
{ {
return FAILURE; return FAILURE;
@@ -432,7 +431,6 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
antIndex = commNode->nodeInfo.antIndex; // antenna selection based on node list antIndex = commNode->nodeInfo.antIndex; // antenna selection based on node list
torState = L2_TOR_TX; // member node transmits message in acknowledge slot torState = L2_TOR_TX; // member node transmits message in acknowledge slot
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
if (ScanMsg_Packing(instPtr, L2_FRAME_ACK, rtneEntry->dst) != SUCCESS) if (ScanMsg_Packing(instPtr, L2_FRAME_ACK, rtneEntry->dst) != SUCCESS)
{ {
return FAILURE; return FAILURE;
@@ -333,28 +333,37 @@ void Phy_SetRxAntIndex(PHY_INST *instPtr, PHY_ANT_INDEX antRxIndex)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
switch (antRxIndex) if (instPtr->antConfig.antControl.antMode == ANT_MODE_RX_AJ)
{
switch (antRxIndex)
{
case PHY_ANT_INDEX_1:
instPtr->antConfig.antControl.antRx1En = ANT_ENABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
case PHY_ANT_INDEX_2:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_ENABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
case PHY_ANT_INDEX_3:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_ENABLE;
break;
default:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
}
}
else
{ {
case PHY_ANT_INDEX_1:
instPtr->antConfig.antControl.antRx1En = ANT_ENABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
case PHY_ANT_INDEX_2:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_ENABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
case PHY_ANT_INDEX_3:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_ENABLE;
break;
default:
instPtr->antConfig.antControl.antRx1En = ANT_DISABLE; instPtr->antConfig.antControl.antRx1En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx2En = ANT_DISABLE; instPtr->antConfig.antControl.antRx2En = ANT_DISABLE;
instPtr->antConfig.antControl.antRx3En = ANT_DISABLE; instPtr->antConfig.antControl.antRx3En = ANT_DISABLE;
break;
} }
} }
@@ -34,7 +34,7 @@
* @{ * @{
*/ */
#define PHY_TIME_WORD_H_MAX UINT32_MAX #define PHY_TIME_WORD_H_MAX UINT32_MAX
#define PHY_TIME_WORD_L_MAX 0x0007A120 // 5ms/10ns #define PHY_TIME_WORD_L_MAX 200000U // 2 ms/10 ns
#define L1_FRAME_LEN_MAX (16384 / 8) // byte #define L1_FRAME_LEN_MAX (16384 / 8) // byte
#define L1_FRAME_ADV_24MS_LEN (520 / 8) // byte #define L1_FRAME_ADV_24MS_LEN (520 / 8) // byte
@@ -47,7 +47,7 @@
#define L1_FRAME_128KBPS_4MS_HOPS 33U #define L1_FRAME_128KBPS_4MS_HOPS 33U
#define L1_FRAME_512KBPS_4MS_HOPS 36U #define L1_FRAME_512KBPS_4MS_HOPS 36U
#define L1_FRAME_2MBPS_4MS_HOPS 38U #define L1_FRAME_2MBPS_4MS_HOPS 38U
#define PHY_LOG_EXPIRE 40U // 50*5ms #define PHY_LOG_EXPIRE 50U // number of 2 ms slot
/** @} */ /** @} */
/***************** Macros (Inline Functions) Definitions *********************/ /***************** Macros (Inline Functions) Definitions *********************/
/**************************** Type Definitions *******************************/ /**************************** Type Definitions *******************************/
+1 -1
View File
@@ -146,7 +146,7 @@ void TimeCtrl_ResetLow(TMC_INST *instPtr)
/*****************************************************************************/ /*****************************************************************************/
/** /**
* @brief Get current time integer value. * @brief Get current time integer value (2 ms counter).
* *
* @param instPtr a pointer to time controller instance * @param instPtr a pointer to time controller instance
* *
+3 -3
View File
@@ -21,7 +21,7 @@
/***************************** Include Files *********************************/ /***************************** Include Files *********************************/
#include <stdint.h> #include <stdint.h>
/************************** Constant Definitions *****************************/ /************************** Constant Definitions *****************************/
#define TIME_FRAC_MAX 500000 // how many 10ns in a 5ms #define TIME_FRAC_MAX 200000 // how many 10ns in a 2 ms
/***************** Macros (Inline Functions) Definitions *********************/ /***************** Macros (Inline Functions) Definitions *********************/
/**************************** Type Definitions *******************************/ /**************************** Type Definitions *******************************/
/** /**
@@ -44,8 +44,8 @@ typedef uint32_t TIME_INT;
*/ */
typedef struct typedef struct
{ {
TIME_INT int_part; ///< 5ms each LSB TIME_INT int_part; ///< 2 ms each LSB
TIME_FRAC frac_part; ///< 10ns each LSB TIME_FRAC frac_part; ///< 10 ns each LSB
} TIME_WORD; } TIME_WORD;
/** /**