add w2aq rsp test.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "unit_test_framework.h"
|
#include "unit_test_framework.h"
|
||||||
@@ -193,6 +194,11 @@ TIMECTRL_CONFIG tmcConfig = {
|
|||||||
.reset = 10
|
.reset = 10
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline uint32_t rand_range(uint32_t a, uint32_t b){
|
||||||
|
ASSERT(b > a);
|
||||||
|
return (rand() % (b + 1 - a) + a);
|
||||||
|
}
|
||||||
|
|
||||||
void linklayer_setup(void){
|
void linklayer_setup(void){
|
||||||
int32_t Status;
|
int32_t Status;
|
||||||
Status = TimeCtrl_Init(&tmcInstPtr, &tmcConfig);
|
Status = TimeCtrl_Init(&tmcInstPtr, &tmcConfig);
|
||||||
@@ -214,13 +220,14 @@ void linklayer_teardown(void){
|
|||||||
TimeCtrl_Destroy(tmcInstPtr);
|
TimeCtrl_Destroy(tmcInstPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void forge_bm_frame(uint16_t nodeId, uint16_t clustId, uint16_t headId, uint64_t time) {
|
void forge_bm_frame(uint8_t* buff, uint8_t nodeId, uint16_t clustId, uint16_t headId, uint64_t time) {
|
||||||
BIT_ARRAY bitarr = {
|
BIT_ARRAY bitarr = {
|
||||||
.words = (uint64_t*)bmTemplate,
|
.words = (uint64_t*)buff,
|
||||||
.num_of_bits = INTRA_BM_FRAME_LENGTH_MAX*8,
|
.num_of_bits = INTRA_BM_FRAME_LENGTH_MAX*8,
|
||||||
.num_of_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
.num_of_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
||||||
.capacity_in_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
.capacity_in_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
||||||
};
|
};
|
||||||
|
memcpy(buff, bmTemplate, INTRA_BM_FRAME_LENGTH_MAX);
|
||||||
uint64_t dataChunk;
|
uint64_t dataChunk;
|
||||||
dataChunk = (nodeId & 0x001F) | ((clustId & 0x001F) << 5);
|
dataChunk = (nodeId & 0x001F) | ((clustId & 0x001F) << 5);
|
||||||
FrameInsertChunk(&bitarr, BM_MSG_SRC_ADDR_OFFSET, BM_MSG_SRC_ADDR_LEN, dataChunk);
|
FrameInsertChunk(&bitarr, BM_MSG_SRC_ADDR_OFFSET, BM_MSG_SRC_ADDR_LEN, dataChunk);
|
||||||
@@ -242,17 +249,19 @@ void forge_bm_frame(uint16_t nodeId, uint16_t clustId, uint16_t headId, uint64_t
|
|||||||
FrameInsertChunk(&bitarr, BM_MSG_TSLOT_NUM_OFFSET, BM_MSG_TSLOT_NUM_LEN, dataChunk);
|
FrameInsertChunk(&bitarr, BM_MSG_TSLOT_NUM_OFFSET, BM_MSG_TSLOT_NUM_LEN, dataChunk);
|
||||||
|
|
||||||
// Append CRC
|
// Append CRC
|
||||||
L2_CrcAppend(bmTemplate, BM_MSG_CRC_OFFSET / 8, BM_MSG_CRC_OFFSET / 8, L2_CRC8_31);
|
L2_CrcAppend(buff, BM_MSG_CRC_OFFSET / 8, BM_MSG_CRC_OFFSET / 8, L2_CRC8_31);
|
||||||
}
|
}
|
||||||
|
|
||||||
void forge_w2acq_frame(L2_NODE_TYPE nodeType, uint16_t srcId, uint16_t destId,
|
void forge_w2acq_frame(uint8_t* buff, L2_NODE_TYPE nodeType, uint16_t srcId, uint16_t destId,
|
||||||
uint16_t clustId, uint32_t netStartTime, L2_NODE_STATE state) {
|
uint16_t clustId, uint32_t netStartTime, L2_NODE_STATE state) {
|
||||||
BIT_ARRAY bitarr = {
|
BIT_ARRAY bitarr = {
|
||||||
.words = (uint64_t*)w2acqTemplate,
|
.words = (uint64_t*)buff,
|
||||||
.num_of_bits = INTRA_W2ACQ_FRAME_LENGTH_MAX*8,
|
.num_of_bits = INTRA_W2ACQ_FRAME_LENGTH_MAX*8,
|
||||||
.num_of_words = roundup_bits2words64(INTRA_W2ACQ_FRAME_LENGTH_MAX*8),
|
.num_of_words = roundup_bits2words64(INTRA_W2ACQ_FRAME_LENGTH_MAX*8),
|
||||||
.capacity_in_words = roundup_bits2words64(INTRA_W2ACQ_FRAME_LENGTH_MAX*8),
|
.capacity_in_words = roundup_bits2words64(INTRA_W2ACQ_FRAME_LENGTH_MAX*8),
|
||||||
};
|
};
|
||||||
|
memcpy(buff, w2acqTemplate, INTRA_W2ACQ_FRAME_LENGTH_MAX);
|
||||||
|
|
||||||
uint64_t dataChunk;
|
uint64_t dataChunk;
|
||||||
/* message type */
|
/* message type */
|
||||||
dataChunk = (nodeType == HEAD_NODE) ? 0 : 1;
|
dataChunk = (nodeType == HEAD_NODE) ? 0 : 1;
|
||||||
@@ -287,16 +296,18 @@ void forge_w2acq_frame(L2_NODE_TYPE nodeType, uint16_t srcId, uint16_t destId,
|
|||||||
FrameInsertChunk(&bitarr, NS_MSG_INI_SCAN_TIME_OFFSET, NS_MSG_INI_SCAN_TIME_LEN, dataChunk);
|
FrameInsertChunk(&bitarr, NS_MSG_INI_SCAN_TIME_OFFSET, NS_MSG_INI_SCAN_TIME_LEN, dataChunk);
|
||||||
|
|
||||||
// Update CRC
|
// Update CRC
|
||||||
L2_CrcAppend(w2acqTemplate, W2ACQ_FRAME_CRC_DLEN, W2ACQ_FRAME_CRC_POS, L2_CRC16_8005);
|
L2_CrcAppend(buff, W2ACQ_FRAME_CRC_DLEN, W2ACQ_FRAME_CRC_POS, L2_CRC16_8005);
|
||||||
}
|
}
|
||||||
|
|
||||||
void forge_mgmt_frame(L2_NODE_STATE state) {
|
void forge_mgmt_frame(uint8_t* buff, L2_NODE_STATE state) {
|
||||||
BIT_ARRAY bitarr = {
|
BIT_ARRAY bitarr = {
|
||||||
.words = (uint64_t*)mgmtTemplate,
|
.words = (uint64_t*)buff,
|
||||||
.num_of_bits = INTRA_MGMT_FRAME_LENGTH_MAX*8,
|
.num_of_bits = INTRA_MGMT_FRAME_LENGTH_MAX*8,
|
||||||
.num_of_words = roundup_bits2words64(INTRA_MGMT_FRAME_LENGTH_MAX*8),
|
.num_of_words = roundup_bits2words64(INTRA_MGMT_FRAME_LENGTH_MAX*8),
|
||||||
.capacity_in_words = roundup_bits2words64(INTRA_MGMT_FRAME_LENGTH_MAX*8),
|
.capacity_in_words = roundup_bits2words64(INTRA_MGMT_FRAME_LENGTH_MAX*8),
|
||||||
};
|
};
|
||||||
|
memcpy(buff, mgmtTemplate, INTRA_MGMT_FRAME_LENGTH_MAX);
|
||||||
|
|
||||||
uint64_t dataChunk;
|
uint64_t dataChunk;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case INIT_STATE:
|
case INIT_STATE:
|
||||||
@@ -321,7 +332,14 @@ void forge_mgmt_frame(L2_NODE_STATE state) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void forge_rtt_frame(L2_INST* instPtr) {
|
void forge_rtt_frame(uint8_t* buff) {
|
||||||
|
// BIT_ARRAY bitarr = {
|
||||||
|
// .words = (uint64_t*)buff,
|
||||||
|
// .num_of_bits = INTRA_BM_FRAME_LENGTH_MAX*8,
|
||||||
|
// .num_of_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
||||||
|
// .capacity_in_words = roundup_bits2words64(INTRA_BM_FRAME_LENGTH_MAX*8),
|
||||||
|
// };
|
||||||
|
memcpy(buff, rttReqTemplate, INTRA_BM_FRAME_LENGTH_MAX);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,18 +350,49 @@ TEST(linklayer_master_routine) {
|
|||||||
for(int i = 0; i < 200*30; i++) {
|
for(int i = 0; i < 200*30; i++) {
|
||||||
tmcReg[TIME_INT_REG]++;
|
tmcReg[TIME_INT_REG]++;
|
||||||
|
|
||||||
if(phyInstPtr->TOR.last == PHY_TOR_RX && linkInstPtr->frame.last == L2_INTRA_W2_ACQ_FRAME)
|
if (L2_GetLastTor(linkInstPtr) == L2_TOR_RX && rand() < (RAND_MAX*0.8))
|
||||||
|
{
|
||||||
|
if(L2_GetLastFrameType(linkInstPtr) == L2_INTRA_W2_ACQ_FRAME) {
|
||||||
|
forge_w2acq_frame((uint8_t*)phyInstPtr->recvDataAddr, MEMBER_NODE, 2, 1, 1, -1, INIT_STATE);
|
||||||
|
PhyWrite(phyInstPtr, TXRX_STATE, 0x01010101);
|
||||||
|
PhyWrite(phyInstPtr, RECVDATA_STATE, INTRA_W2ACQ_FRAME_LENGTH_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (L2_GetLastFrameType(linkInstPtr) == L2_INTRA_MGMT_FRAME)
|
||||||
|
{
|
||||||
|
forge_mgmt_frame((uint8_t*)phyInstPtr->recvDataAddr, NORMAL_STATE);
|
||||||
|
PhyWrite(phyInstPtr, TXRX_STATE, 0x01010101);
|
||||||
|
PhyWrite(phyInstPtr, RECVDATA_STATE, INTRA_MGMT_FRAME_LENGTH_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (L2_GetLastFrameType(linkInstPtr) == L2_INTRA_SVC_FRAME)
|
||||||
|
{
|
||||||
|
forge_mgmt_frame((uint8_t*)phyInstPtr->recvDataAddr, NORMAL_STATE);
|
||||||
|
PhyWrite(phyInstPtr, TXRX_STATE, 0x01010101);
|
||||||
|
PhyWrite(phyInstPtr, RECVDATA_STATE, INTRA_MGMT_FRAME_LENGTH_MAX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PhyWrite(phyInstPtr, TXRX_STATE, 0x02020202);
|
||||||
|
}
|
||||||
|
|
||||||
Phy_UpdateState(phyInstPtr);
|
Phy_UpdateState(phyInstPtr);
|
||||||
|
|
||||||
Status = Linklayer_Proc(linkInstPtr);
|
Status = Linklayer_Proc(linkInstPtr);
|
||||||
|
|
||||||
if(tmcReg[TIME_INT_REG]/200 < linkInstPtr->netStartTime) {
|
if((tmcReg[TIME_INT_REG]+1)/200 < linkInstPtr->netStartTime) {
|
||||||
ASSERT_EQUAL(EIGNORE, Status);
|
ASSERT_EQUAL(EIGNORE, Status);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ASSERT_EQUAL(SUCCESS, Status);
|
ASSERT_EQUAL(SUCCESS, Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(L2_isDataAvail(linkInstPtr)) {
|
||||||
|
if(L2_GetLastFrameType(linkInstPtr) == L2_INTRA_W2_ACQ_FRAME) {
|
||||||
|
ASSERT_EQUAL(1, L2_GetNodeListLen(linkInstPtr->nodeList));
|
||||||
|
ASSERT_TRUE(L2_isNodeInList(linkInstPtr->nodeList, 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user