接上文https://blog.csdn.net/zhang1806618/article/details/107753611
MacDot11StationTransmitFrame()函数区分链路当前状态,或调用MacDot11StationTransmitDataFrame()发送数据帧,或调用MacDot11StationTransmitRTSFrame()发送RTS帧。以发送数据帧为例,由目的地址判断是广播还是单播,广播将不使用RTS-CTS机制,更改链路状态后调用MacDot11StationStartTransmittingPacket发送数据。单播时区分是否使用RTS-CTS机制,设置延迟,然后调用MacDot11StationStartTransmittingPacket
static //inline//
void MacDot11StationTransmitDataFrame(
Node* node,
MacDataDot11* dot11)
{
Mac802Address destAddr;
//广播
if (destAddr == ANY_MAC802)
{
Message* dequeuedPacket;
DOT11_FrameHdr* hdr;
hdr = (DOT11_FrameHdr*)MESSAGE_ReturnPacket(dequeuedPacket);
if (MacDot11IsAp(dot11) && dot11->dot11TxFrameInfo != NULL)
{
if (dot11->dot11TxFrameInfo->frameType == DOT11_BEACON)
MacDot11StationSetState(node, dot11, DOT11_X_BEACON);
else
MacDot11StationSetState(node, dot11, DOT11_X_BROADCAST);
}
else
MacDot11StationSetState(node, dot11, DOT11_X_BROADCAST);
MacDot11StationStartTransmittingPacket(no