⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_802_15_4_transac.cpp

📁 csma协议
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -