windows-cesensorslightambient

Ambient Light Sensor Interrupt Status register not getting updated


I'm using WinCE 7 Visual Studio 2008 and writing a driver code for ALS (MAX44009). I have written the following code for reading the interrupt status register and displaying messages when the interrupt has occurs. But, it works randomly for a few times only. For eg., when I close the sensor with my hand, I get the messages only few times, and then, it doesn't go into the data==1 condition even when it has to interrupt and continues to loop. The threshold timer is 0. The AlsRegRead function does an I2CRead. pAlsDrvInfo is the driver context. ADD_ALS_INT_STATUS is 0. DumpAlsRegistry function will print the content of all the registers except register 0x0.

        while(1)
        {

            AlsRegRead(pAlsDrvInfo, ADD_ALS_INT_STATUS, &data, sizeof(UINT8));

            if (data == 1)
            {
                DumpAlsRegistry(pAlsDrvInfo);
                RETAILMSG(1,(L"Interrupt Received...\r\n"));
            }

        }

Please guide me where I'm making mistake.


Solution

  • I have found the reason behind this. Two issues had been behind this and both of them are equally important.

    1) The sensor had been in a partially damaged state.

    2) It requires some delay. So, I added Sleep(1000) at the start of the loop.

        while(1)
        {
            Sleep(1000);
    
            AlsRegRead(pAlsDrvInfo, ADD_ALS_INT_STATUS, &data, sizeof(UINT8));
    
            if (data == 1)
            {
                DumpAlsRegistry(pAlsDrvInfo);
                RETAILMSG(1,(L"Interrupt Received...\r\n"));
            }
    
        }
    

    Thanks.