diff -r 7b5c1fbeda7b -r 50dbb626fbab esp-idf-lib/components/apds9930/apds9930.c --- a/esp-idf-lib/components/apds9930/apds9930.c Thu Apr 20 15:19:31 2023 +0200 +++ b/esp-idf-lib/components/apds9930/apds9930.c Sun Sep 10 17:29:15 2023 +0200 @@ -360,10 +360,18 @@ float iac; float ALSIT = 2.73 * (256 - APDS9930_DEFAULT_ATIME); - if ((Ch0 - APDS9930_ALS_B * Ch1) > (APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1)) - iac = Ch0 - APDS9930_ALS_B * Ch1; + float iac0 = Ch0 - APDS9930_ALS_B * Ch1; + float iac1 = APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1; + + if ((iac0 < 0) && (iac1 < 0)) { + /* Overflow, too much light */ + return 32767.0; + } + + if (iac0 > iac1) + iac = iac0; else - iac = APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1; + iac = iac1; //float iac = fmax(Ch0 - APDS9930_ALS_B * Ch1, APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1); if (iac < 0) iac = 0; @@ -378,10 +386,18 @@ unsigned long iac; unsigned long ALSIT = 2.73 * (256 - APDS9930_DEFAULT_ATIME); - if ((Ch0 - APDS9930_ALS_B * Ch1) > (APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1)) - iac = Ch0 - APDS9930_ALS_B * Ch1; + long iac0 = Ch0 - APDS9930_ALS_B * Ch1; + long iac1 = APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1; + + if ((iac0 < 0) && (iac1 < 0)) { + /* Overflow, too much light */ + return 32767; + } + + if (iac0 > iac1) + iac = iac0; else - iac = APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1; + iac = iac1; //unsigned long iac = max(Ch0 - APDS9930_ALS_B * Ch1, APDS9930_ALS_C * Ch0 - APDS9930_ALS_D * Ch1); // if (iac < 0) iac = 0; unsigned long lpc = APDS9930_GA * APDS9930_DF / (ALSIT * x[apds9930_getAmbientLightGain(dev)]);