This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1310: EasyLink_enableRxAddrFilter not filtering

Part Number: CC1310

Why was I able to receive a packet with dstAddr = 0xCC, when my filter code is set up for 0x23, 0x31, or 0x80?

Do I have to enable Address Filtering so I only receive/process packets for the values listed in “devAddress[x]” ?

rxPacket->dstAddr[0] = 0xCC,  rxPacket->dstAddr[1] - [7] = 0x00

My code; 

uint8_t devAddress[3];

 

void set_RADIO_addrs(void)

{

           devAddress[0] = 0x23;

           devAddress[1] = 0x31;         //area #1

           devAddress[2] = 0x80;         //Learn addr

           EasyLink_enableRxAddrFilter(&devAddress, 1, 3);

}

 

 

static void rxDoneCallback(EasyLink_RxPacket * rxPacket, EasyLink_Status status)

{

       AckStatus = 0;        //default to no Ack

 

       System_printf("\nInside RxCb....\n");

 

       /* If we received a packet successfully */

    if (status == EasyLink_Status_Success)             //Address has been decoded here.

    {

        tmpRxPacket = rxPacket;

.

.

.

.

}

 

  • Yes, address filtering needs to be enabled. Also your transmit packet's destination address should be set. Use txPacket.dstAddr[0] = 0xcc. 

    You can refer to 

    Regards,

    Prashanth

  • Prashanth,

    My Tx packet destination was set to 0xCC. 0xCC is NOT one of the the addresses set up in EasyLink_enableRxAddrFilter(&devAddress, 1, 3).

    Why is the RxCallback firing? Within the " EasyLink_enableRxAddrFilter()" routine, if devAddress is not NULL then filtering is enabled?

    if( (pui8AddrFilterTable != NULL) &&
    (ui8AddrSize != 0) && (ui8NumAddrs != 0) &&
    (ui8AddrSize == addrSize) &&
    (ui8NumAddrs <= EASYLINK_MAX_ADDR_FILTERS) )
    {
    memcpy(addrFilterTable, pui8AddrFilterTable, EASYLINK_MAX_ADDR_SIZE * EASYLINK_MAX_ADDR_FILTERS);
    EasyLink_cmdPropRxAdv.addrConf.addrSize = ui8AddrSize;
    EasyLink_cmdPropRxAdv.addrConf.numAddr = ui8NumAddrs;
    EasyLink_cmdPropRxAdv.pktConf.filterOp = 0;

    status = EasyLink_Status_Success;
    }
    else if(pui8AddrFilterTable == NULL)
    {
    //disable filter
    EasyLink_cmdPropRxAdv.pktConf.filterOp = 1;

    status = EasyLink_Status_Success;
    }


    Is this not true, or do I have to use a separate control command? If so, what?

    I do nor want the rx callback firing unless the destination address is one of the 3 addresses specified.

    Thanks