/*****************************************************************************/ /** * Description: Header of 814 linklayer local record. * * Date: 2022-07-14 00:08 * LastEditors: Fan Hao * LastEditTime: 2022-07-14 22:52 * Revisions: Rev 0.0 * History: * [2022-07-14]: Initial version. * * Copyright(c) 2021 Beijing Institute of Technology. * Lab of Communication and Networking * ******************************************************************************/ /***************************** Include Files *********************************/ #ifndef NODE_LIST_H_ #define NODE_LIST_H_ #include #include #include #include #include "linklayer814_types.h" #include "geometry/coord.h" #include "../util/util.h" #include "../util/list.h" /************************** Constant Definitions *****************************/ /***************** Macros (Inline Functions) Definitions *********************/ /**************************** Type Definitions *******************************/ typedef struct NODE_LIST_ENTRY { L2_NODE_INFO nodeInfo; uint32_t ttlCnt; int32_t timeDevi; } NODE_ENTRY; typedef list_t NODE_LIST; /************************** Variable Definitions *****************************/ /************************** Function Prototypes ******************************/ int32_t L2_NodeList_Init(NODE_LIST **list); void L2_NodeList_Clear(NODE_LIST *list); void L2_NodeList_Destroy(NODE_LIST *list); uint32_t L2_GetNodeListLen(NODE_LIST *list); NODE_ENTRY* L2_GetNodeById(NODE_LIST *list, uint8_t nodeId); NODE_ENTRY* L2_AppendNode(NODE_LIST *list, uint8_t nodeId, L2_NODE_TYPE nodeType); int32_t L2_DeleteNodeById(NODE_LIST *list, uint8_t nodeId); int32_t L2_UpdateNodePos(NODE_LIST *list, uint8_t nodeId, const COORD *newPos); bool L2_isNodeInList(NODE_LIST *list, uint8_t nodeId); int32_t L2_GetNodePos(NODE_LIST *list, uint8_t nodeId, COORD *newPos); int32_t L2_UpdateNodeSpeed(NODE_LIST *list, uint8_t nodeId, const COORD *newSpeed); int32_t L2_GetNodeSpeed(NODE_LIST *list, uint8_t nodeId, COORD *speed); int32_t L2_UpdateNodeTimeDeviation(NODE_LIST *list, uint8_t nodeId, int32_t devi); int32_t L2_GetDistance(NODE_LIST *list, COORD myCoord, uint8_t nodeId, double* dst); int32_t L2_RstNodeTTL(NODE_LIST *list, uint8_t nodeId); int32_t L2_IncNodeTTL(NODE_LIST *list, uint8_t nodeId, uint32_t inc); int32_t L2_GetNodeTTL(NODE_LIST *list, uint8_t nodeId, uint32_t *ttl); int32_t L2_IterEditNode(NODE_LIST *list, const void *param, int32_t (*operation)(NODE_ENTRY*, const void*)); int32_t L2_IterDeleteNode(NODE_LIST *list, bool (*condition)(NODE_ENTRY *)); #endif /* NODE_LIST_H_ */