📄 mac_802_15_4_transac.cpp
字号:
return 0;}// /**// FUNCTION :: Mac802_15_4GetPktFrTransacLink// LAYER :: Mac// PURPOSE :: Returns a pending packet from transaction link// PARAMETERS ::// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + pendAM : UInt8 :// + pendAddr : MACADDR : MAC address// RETURN :: Message*// **/Message* Mac802_15_4GetPktFrTransacLink( M802_15_4TRANSLINK** transacLink1, UInt8 pendAM, MACADDR pendAddr){ M802_15_4TRANSLINK* tmp; tmp = *transacLink1; while(tmp != NULL) { if((tmp->pendAddrMode == pendAM) && (((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE16) && ((UInt16)pendAddr == tmp->pendAddr16)) || ((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE64) && (pendAddr == tmp->pendAddr64)))) { return tmp->pkt; } tmp = tmp->next; } return NULL;}// /**// FUNCTION :: Mac802_15_4UpdateTransacLink// LAYER :: Mac// PURPOSE :: Deletes or updates transaction link// PARAMETERS ::// + node : Node* : Node pointer// + oper : int : Operation// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + transacLink2 : M802_15_4TRANSLINK** : Transaction Link structure// + pendAM : UInt8 :// + pendAddr : MACADDR : MAC address// RETURN :: int// **/int Mac802_15_4UpdateTransacLink( Node* node, int oper, M802_15_4TRANSLINK** transacLink1, M802_15_4TRANSLINK** transacLink2, UInt8 pendAM, MACADDR pendAddr){ M802_15_4TRANSLINK* tmp; int rt; //purge first if (oper == tr_oper_est) if (oper == 2) { Mac802_15_4PurgeTransacLink(node, transacLink1, transacLink2); } rt = 1; tmp = *transacLink1; if (oper == 3) { while(tmp != NULL) { if((tmp->pendAddrMode == pendAM) && (((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE16) && ((UInt16)pendAddr == tmp->pendAddr16)) || ((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE64) && (pendAddr == tmp->pendAddr64)))) { rt = 0; tmp = tmp->next; break; } tmp = tmp->next; } if (rt) { return 1; } } rt = 1; while(tmp != NULL) { if((tmp->pendAddrMode == pendAM) && (((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE16) && ((UInt16)pendAddr == tmp->pendAddr16)) || ((pendAM == M802_15_4DEFFRMCTRL_ADDRMODE64) && (pendAddr == tmp->pendAddr64)))) { if (oper == 1) //delete an element { if(tmp->last != NULL) { tmp->last->next = tmp->next; if(tmp->next != NULL) { tmp->next->last = tmp->last; } else { *transacLink2 = tmp->last; } } else if (tmp->next != NULL) { *transacLink1 = tmp->next; tmp->next->last = NULL; } else { *transacLink1 = NULL; *transacLink2 = NULL; } //free the packet first MESSAGE_Free(node, tmp->pkt); MEM_free((void*)tmp);// Packet::free(tmp->pkt);// delete tmp; } rt = 0; break; } tmp = tmp->next; } return rt;}// /**// FUNCTION :: Mac802_15_4UpdateTransacLinkByPktOrHandle// LAYER :: Mac// PURPOSE :: To update or delete transaction list// PARAMETERS ::// + node : Node* : Node pointer// + oper : int : Operation// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + transacLink2 : M802_15_4TRANSLINK** : Transaction Link structure// + p : Message* : Message// + msduH : UInt8 :// RETURN :: int// **/int Mac802_15_4UpdateTransacLinkByPktOrHandle( Node* node, int oper, M802_15_4TRANSLINK** transacLink1, M802_15_4TRANSLINK** transacLink2, Message* pkt, UInt8 msduH){ M802_15_4TRANSLINK* tmp; int rt; //purge first if (oper == tr_oper_est) if (oper == 2) { Mac802_15_4PurgeTransacLink(node, transacLink1, transacLink2); } rt = 1; tmp = *transacLink1; while(tmp != NULL) { if(((pkt != NULL) && (tmp->pkt == pkt)) || ((pkt == NULL) && (tmp->msduHandle == msduH))) { if (oper == 1) //delete an element { if(tmp->last != NULL) { tmp->last->next = tmp->next; if(tmp->next != NULL) { tmp->next->last = tmp->last; } else { *transacLink2 = tmp->last; } } else if (tmp->next != NULL) { *transacLink1 = tmp->next; tmp->next->last = NULL; } else { *transacLink1 = NULL; *transacLink2 = NULL; } //free the packet first MESSAGE_Free(node, tmp->pkt); MEM_free(tmp);// Packet::free(tmp->pkt);// delete tmp; } rt = 0; break; } tmp = tmp->next; } return rt;}// /**// FUNCTION :: Mac802_15_4NumberTransacLink// LAYER :: Mac// PURPOSE :: Returns number of current transaction links at the node// PARAMETERS ::// + node : Node* : Node pointer// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + transacLink2 : M802_15_4TRANSLINK** : Transaction Link structure// RETURN :: int// **/int Mac802_15_4NumberTransacLink( Node* node, M802_15_4TRANSLINK** transacLink1, M802_15_4TRANSLINK** transacLink2){ //return the number of transactions in the link M802_15_4TRANSLINK *tmp; int num; //purge first Mac802_15_4PurgeTransacLink(node, transacLink1, transacLink2); num = 0; tmp = *transacLink1; while(tmp != NULL) { num++; tmp = tmp->next; } return num;}// /**// FUNCTION :: Mac802_15_4ChkAddTransacLink// LAYER :: Mac// PURPOSE :: Checks and add transaction link at the node// PARAMETERS ::// + node : Node* : Node pointer// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + transacLink2 : M802_15_4TRANSLINK** : Transaction Link structure// + pendAM : UInt8 :// + pendAddr : MACADDR : MAC address// + p : Message* : Message// + msduH : UInt8 :// + kpTime : clocktype :// RETURN :: int// **/int Mac802_15_4ChkAddTransacLink( Node* node, M802_15_4TRANSLINK** transacLink1, M802_15_4TRANSLINK** transacLink2, UInt8 pendAM, MACADDR pendAddr, Message* p, UInt8 msduH, clocktype kpTime){ int i; Mac802_15_4PurgeTransacLink(node, transacLink1, transacLink2); i = Mac802_15_4NumberTransacLink(node, transacLink1, transacLink2); if (i >= M802_15_4_MAXNUMTRANSACTIONS) { return 1; } i = Mac802_15_4AddTransacLink( node, transacLink1, transacLink2, pendAM, pendAddr, p, msduH, kpTime); if (i == 0) { return 0; } else { return 2; }}// /**// FUNCTION :: Mac802_15_4EmptyTransacLink// LAYER :: Mac// PURPOSE :: Deletes transaction link list// PARAMETERS ::// + node : Node* : Node pointer// + transacLink1 : M802_15_4TRANSLINK** : Transaction Link structure// + transacLink2 : M802_15_4TRANSLINK** : Transaction Link structure// RETURN :: int// **/void Mac802_15_4EmptyTransacLink( Node* node, M802_15_4TRANSLINK** transacLink1, M802_15_4TRANSLINK** transacLink2){ M802_15_4TRANSLINK* tmp; M802_15_4TRANSLINK* tmp2; if(*transacLink1 != NULL) { tmp = *transacLink1; while(tmp != NULL) { tmp2 = tmp; tmp = tmp->next; //free the packet first MESSAGE_Free(node, tmp2->pkt); MEM_free(tmp2); } *transacLink1 = NULL; } *transacLink2 = *transacLink1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -