/********************************************************************* * @fn MAC_SrcMatchEnable * * @brief Enabled AUTOPEND and source address matching. If number of source * address table entries asked for is more than the hardware * supports. It will allocate maximum number of entries and return * MAC_INVALID_PARAMETER. This function shall be not be called from * ISR. It is not thread safe. * * @param None * * @return None */ void MAC_SrcMatchEnable (void) { /* Turn on Frame Filter (TIMAC enables frame filter by default), TBD */ MAC_RADIO_TURN_ON_RX_FRAME_FILTERING(); /* Turn on Auto ACK (TIMAC turn on Auto ACK by default), TBD */ MAC_RADIO_TURN_ON_AUTO_ACK(); /* Turn on Autopend: set SRCMATCH.AUTOPEND and SRCMATCH.SRC_MATCH_EN */ MAC_RADIO_TURN_ON_SRC_MATCH(); /* Set SRCMATCH.AUTOPEND */ MAC_RADIO_TURN_ON_AUTOPEND(); /* Configure all the globals */ macSrcMatchIsEnabled = TRUE; }
/********************************************************************* * @fn MAC_SrcMatchEnable * * @brief Enabled AUTOPEND and source address matching. If number of source * address table entries asked for is more than the hardware * supports. It will allocate maximum number of entries and return * MAC_INVALID_PARAMETER. This function shall be not be called from * ISR. It is not thread safe. * * @param addressType - address type that the application uses * SADDR_MODE_SHORT or SADDR_MODE_EXT * @param num - number of source address table entries to be used * * @return MAC_SUCCESS or MAC_INVALID_PARAMETER */ uint8 MAC_SrcMatchEnable ( uint8 addrType, uint8 num ) { uint8 rtn; uint8 maxNum; /* Verify the address type */ if( addrType != SADDR_MODE_SHORT && addrType != SADDR_MODE_EXT ) { return MAC_INVALID_PARAMETER; } maxNum = ( addrType == SADDR_MODE_SHORT ) ? MAC_SRCMATCH_SHORT_MAX_NUM_ENTRIES : MAC_SRCMATCH_EXT_MAX_NUM_ENTRIES; if( num > maxNum ) { rtn = MAC_INVALID_PARAMETER; num = maxNum; } else { rtn = MAC_SUCCESS; } /* Turn on Frame Filter (TIMAC enables frame filter by default), TBD */ MAC_RADIO_TURN_ON_RX_FRAME_FILTERING(); /* Turn on Auto ACK (TIMAC turn on Auto ACK by default), TBD */ MAC_RADIO_TURN_ON_AUTO_ACK(); /* Turn on Autopend: set SRCMATCH.AUTOPEND and SRCMATCH.SRC_MATCH_EN */ MAC_RADIO_TURN_ON_SRC_MATCH(); /* Set SRCMATCH.AUTOPEND */ MAC_RADIO_TURN_ON_AUTOPEND(); /* Configure all the globals */ macSrcMatchIsEnabled = TRUE; macSrcMatchMaxNumEntries = num; macSrcMatchAddrMode = addrType; return rtn; }
/********************************************************************* * @fn MAC_SrcMatchEnable * * @brief Enabled AUTOPEND and source address matching. If number of source * address table entries asked for is more than the hardware * supports. It will allocate maximum number of entries and return * MAC_INVALID_PARAMETER. This function shall be not be called from * ISR. It is not thread safe. * * @param None * * @return None */ void MAC_SrcMatchEnable (void) { /* Turn on Frame Filter (TIMAC enables frame filter by default), TBD */ MAC_RADIO_TURN_ON_RX_FRAME_FILTERING(); /* Turn on Auto ACK (TIMAC turn on Auto ACK by default), TBD */ MAC_RADIO_TURN_ON_AUTO_ACK(); /* Turn on Autopend: set SRCMATCH.AUTOPEND and SRCMATCH.SRC_MATCH_EN */ MAC_RADIO_TURN_ON_SRC_MATCH(); /* Set SRCMATCH.AUTOPEND */ MAC_RADIO_TURN_ON_AUTOPEND(); /* AUTOPEND function requires that the received * frame is a DATA REQUEST MAC command frame */ MAC_RADIO_TURN_ON_AUTOPEND_DATAREQ_ONLY(); /* Configure all the globals */ macSrcMatchIsEnabled = TRUE; }