Discovery loop keeps halting

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Discovery loop keeps halting

939 Views
jacobi
Contributor I

Hi

I am running a discovery loop using the NFC reader library on an IMX7 processor. For some strange reason the loop is halting. I don't know why.

Here is my code:

bool result = false;

phStatus_t status = PHAC_DISCLOOP_LPCD_NO_TECH_DETECTED;

// Set Poll Configuration
result = (phacDiscLoop_SetConfig(m_pDiscLoop, PHAC_DISCLOOP_CONFIG_PAS_POLL_TECH_CFG,
PHAC_DISCLOOP_POS_BIT_MASK_A | PHAC_DISCLOOP_POS_BIT_MASK_B)) == PH_ERR_SUCCESS);

uint16_t stopped = 0;

do
{
    // Set Discovery Poll State to Detection
    result = result && (phacDiscLoop_SetConfig(m_pDiscLoop,
                                 PHAC_DISCLOOP_CONFIG_NEXT_POLL_STATE,
                                 PHAC_DISCLOOP_POLL_STATE_DETECTION) == PH_ERR_SUCCESS);

    std::cout << "discovery loop" << std::endl;

    // Start discovery loop
    status = phacDiscLoop_Run(m_pDiscLoop, PHAC_DISCLOOP_ENTRY_POINT_POLL);

   //Check if loop was stopped
   result = result && (phacDiscLoop_GetConfig(m_pDiscLoop,
                                 PHAC_DISCLOOP_CONFIG_STOP_DETECTION_LOOP,
                                 &stopped) == PH_ERR_SUCCESS);

    std::cout << "discovery loop 2" << std::endl;

} while (((status & PH_ERR_MASK) == PHAC_DISCLOOP_NO_TECH_DETECTED) && result && !stopped);


if (stopped)
{
    // Reset the stop detector
    phacDiscLoop_SetConfig(m_pDiscLoop, PHAC_DISCLOOP_CONFIG_STOP_DETECTION_LOOP, 0);
}

I put some debug statements in to help me understand where things were going wrong. I found that the phacDiscLoop_Run doesn't return after some time, and therefore I never exit the do...while loop.

 

What could be going wrong? I have implemented an IRQ polling in another thread.

 

Could it be some synchronisation or resource problem?

Labels (1)
Tags (1)
0 Kudos
2 Replies

704 Views
christianhack
Contributor I

I don't think you can see this as it's not approved yet - so wait a few days. We had a problem like this and found some fairly significant issues in the Linux abstraction layer if you're using that.

https://community.nxp.com/thread/484506 

0 Kudos

704 Views
jimmychan
NXP TechSupport
NXP TechSupport

you may try to add a timer in the do while loop.

0 Kudos