From 8b5192b3f405d35d13883a3bbaf0f11f1047f1af Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Thu, 21 Dec 2023 23:11:44 +0800 Subject: [PATCH] rewrite schedule pool. --- datalink814_ge/src/linklayer/linklayer814.h | 19 ++---- .../src/linklayer/linklayer814_types.h | 15 +---- datalink814_ge/src/linklayer/schdevent.h | 63 +++++++++++++++++++ 3 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 datalink814_ge/src/linklayer/schdevent.h diff --git a/datalink814_ge/src/linklayer/linklayer814.h b/datalink814_ge/src/linklayer/linklayer814.h index a8bf0b4..1d86720 100644 --- a/datalink814_ge/src/linklayer/linklayer814.h +++ b/datalink814_ge/src/linklayer/linklayer814.h @@ -22,13 +22,12 @@ #include #include "linklayer814_types.h" #include "node_list.h" +#include "schdevent.h" #include "rtt.h" #include "../bit_array/bit_array.h" #include "../phy_ctrl/phy_ctrl.h" #include "../time_ctrl/time_ctrl.h" - - /************************** Constant Definitions *****************************/ #define DATA_STORE_INTERVAL 100 // 250ms @@ -60,8 +59,7 @@ typedef struct { L2_CONFIG config; L2_NODE_INFO myInfo; NODE_LIST* nodeList; - L2_SCHD_EVENT* l2SchdEventPool[L2_SCHD_EVENT_MAX]; - uint32_t schdEventCnt; + L2_SCHD_POOL* schdEventPool; uint32_t netStartTime; bool isEnable; // if the node is connected to the network bool dataAvail; // if there is a valid received frame data in rx buffer @@ -109,17 +107,12 @@ int32_t Linklayer_EventHandler(L2_INST* instPtr, const L2_EVENT* l2Event); int32_t Linklayer_PktHandler(L2_INST* instPtr, L2_FRAME_TYPE frameType); int32_t L2_SetupNextSlot(L2_INST* instPtr, L2_TOR_TYPE txrxMode, L2_FRAME_TYPE frameType); -// Event -bool L2_isEventScheduled(L2_SCHD_EVENT* schdEvent); -int32_t L2_CancelEvent(L2_SCHD_EVENT* schdEvent); -int32_t L2_SchdEventAppendMsg(L2_SCHD_EVENT* schdEvent, void* msg); -L2_SCHD_EVENT* L2_CreatNewSchdEvent(L2_INST* instPtr, L2_EVENT_TYPE event); -int32_t L2_DeletSchdEvent(L2_INST* instPtr, int32_t eventId); -void L2_ClearSchdEvent(L2_INST* instPtr); +// Scheduling Event +void L2_EventPoolHandler(L2_INST* instPtr); int32_t L2_ScheduleEventAt(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t frameNo, uint32_t slotNo); int32_t L2_ScheduleEventAfter(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t numSlots); -int32_t L2_RecheduleEventAt(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t frameNo, uint32_t slotNo); -int32_t L2_RecheduleEventAfter(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t numSlots); +int32_t L2_RescheduleEventAt(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t frameNo, uint32_t slotNo); +int32_t L2_RescheduleEventAfter(L2_INST* instPtr, L2_SCHD_EVENT* schdEvent, uint32_t numSlots); // Framing void L2_FrameStateUpdate(L2_INST* instPtr); diff --git a/datalink814_ge/src/linklayer/linklayer814_types.h b/datalink814_ge/src/linklayer/linklayer814_types.h index 3cd1d49..b7a0ce6 100644 --- a/datalink814_ge/src/linklayer/linklayer814_types.h +++ b/datalink814_ge/src/linklayer/linklayer814_types.h @@ -51,9 +51,6 @@ #define NUM_SLOTS_5MS 1 #define NUM_SLOTS_SKIP 0 -// Common schedule event definition -#define L2_SCHD_EVENT_MAX 16 - /**************************** Type Definitions *******************************/ typedef struct { @@ -109,6 +106,7 @@ typedef enum { L2_EV_MGMT_PROC_DONE = 2, L2_EV_NET_SETUP_DONE = 3, L2_EV_TIME_SYNC = 4, + L2_EV_RTT_RECV_UPDATE = 5, L2_EV_LINK_SET_REQ = 6, L2_EV_LOST_CXN = 7, L2_EV_LOST_NODE = 8, @@ -127,17 +125,6 @@ typedef struct { void* msg; } L2_EVENT; -/** @name L2 event - * A definition of L2 event instance. - */ -typedef struct { - uint8_t eventId; - bool isSchd; - L2_EVENT l2Event; - uint32_t schdFrame; - uint32_t schdSlot; -} L2_SCHD_EVENT; - /** @name Slot types * A definition of different slots. */ diff --git a/datalink814_ge/src/linklayer/schdevent.h b/datalink814_ge/src/linklayer/schdevent.h new file mode 100644 index 0000000..81f4f76 --- /dev/null +++ b/datalink814_ge/src/linklayer/schdevent.h @@ -0,0 +1,63 @@ +/*****************************************************************************/ +/** + * Description: Event scheduling implementation + * + * Date: 2023-12-21 13:32 + * LastEditors: Fan Hao + * LastEditTime: 2023-12-21 13:32 + * Revisions: Rev 0.0 + * History: + * [2023-12-21]: Initial version. + * + * Copyright(c) 2021 Beijing Institute of Technology. + * Lab of Communication and Networking + * + ******************************************************************************/ +#ifndef SCHDEVENT_H_ +#define SCHDEVENT_H_ + +#define SCHDEVENT_ID_NONE UINT32_MAX +/***************************** Include Files *********************************/ +#include +#include "linklayer814_types.h" +#include "../error.h" +#include "../util/list.h" +/***************** Macros (Inline Functions) Definitions *********************/ +/**************************** Type Definitions *******************************/ +/** @name L2 event + * A definition of L2 event instance. + */ +typedef struct { + bool isSchd; + bool isVolatile; + L2_EVENT l2Event; + uint32_t eventId; + uint32_t ocurrCnt; + uint32_t schdFrame; + uint32_t schdSlot; +} L2_SCHD_EVENT; + +/** @name L2 event + * A definition of L2 event instance. + */ +typedef struct { + list_t* schdList; + uint32_t envCnt; +} L2_SCHD_POOL; + +/************************** Variable Definitions *****************************/ +/************************** Function Prototypes ******************************/ +// Scheduling Event +int32_t L2_CreateSchedEventPool(L2_SCHD_POOL** schdPool); +void L2_ClearSchedEventPool(L2_SCHD_POOL* schdPool); +void L2_DestroySchedEventPool(L2_SCHD_POOL* schdPool); + +L2_SCHD_EVENT* L2_CreatNewSchdEvent(L2_SCHD_POOL* schdPool, L2_EVENT_TYPE event, bool isVolatile); +L2_SCHD_EVENT* L2_GetEventById(L2_SCHD_POOL* schdPool, uint32_t id); +int32_t L2_DeleteSchdEventById(L2_SCHD_POOL* schdPool, uint32_t id); + +void L2_SchdEventAppendMsg(L2_SCHD_EVENT* schdEvent, void* msg); +bool L2_isEventScheduled(const L2_SCHD_EVENT* schdEvent); +int32_t L2_CancelEvent(L2_SCHD_EVENT* schdEvent); + +#endif //SCHDEVENT_H_ \ No newline at end of file