From 16b6e18420e3426ce86286d59fe7d1abf72df471 Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Fri, 22 Dec 2023 01:27:26 +0800 Subject: [PATCH] add w2aq rsp test. --- .../unit_test/linklayer_emulate_unit_test.c | 71 ++++++++++++++++--- 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/datalink814_ge/unit_test/linklayer_emulate_unit_test.c b/datalink814_ge/unit_test/linklayer_emulate_unit_test.c index a35ee5c..45af3cc 100644 --- a/datalink814_ge/unit_test/linklayer_emulate_unit_test.c +++ b/datalink814_ge/unit_test/linklayer_emulate_unit_test.c @@ -1,4 +1,5 @@ #include +#include #include #include "error.h" #include "unit_test_framework.h" @@ -193,6 +194,11 @@ TIMECTRL_CONFIG tmcConfig = { .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){ int32_t Status; Status = TimeCtrl_Init(&tmcInstPtr, &tmcConfig); @@ -214,13 +220,14 @@ void linklayer_teardown(void){ 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 = { - .words = (uint64_t*)bmTemplate, + .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, bmTemplate, INTRA_BM_FRAME_LENGTH_MAX); uint64_t dataChunk; dataChunk = (nodeId & 0x001F) | ((clustId & 0x001F) << 5); 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); // 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) { BIT_ARRAY bitarr = { - .words = (uint64_t*)w2acqTemplate, + .words = (uint64_t*)buff, .num_of_bits = 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), }; + memcpy(buff, w2acqTemplate, INTRA_W2ACQ_FRAME_LENGTH_MAX); + uint64_t dataChunk; /* message type */ 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); // 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 = { - .words = (uint64_t*)mgmtTemplate, + .words = (uint64_t*)buff, .num_of_bits = 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), }; + memcpy(buff, mgmtTemplate, INTRA_MGMT_FRAME_LENGTH_MAX); + uint64_t dataChunk; switch (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; } @@ -332,18 +350,49 @@ TEST(linklayer_master_routine) { for(int i = 0; i < 200*30; i++) { 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); 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); } else{ 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)); + } + } } }