Mode1 Optical Validation

Dependencies:   max32630fthr

Revision:
57:51feeb984d0b
Parent:
56:60b61d5c8154
Child:
58:33af4ccb8220
--- a/main.cpp	Fri May 20 00:44:49 2022 +0000
+++ b/main.cpp	Fri May 20 02:09:50 2022 +0000
@@ -96,6 +96,7 @@
 //#define MAXM86161_OPT_VALIDATION_RED 1 // Optical validatation
 //#define MAXM86161_OPT_VALIDATION_IR 1 // Optical validatation
 #define MAXM86161_OPT_VALIDATION_GRN 1 // Optical validatation
+//#define MAXM86161_OPT_VALIDATION_XTALK 1 // Optical validatation
 #define SENSOR_ONLY 1
 
 // Comment out both of the below for Normal Algorithm Samples Format
@@ -142,7 +143,7 @@
   #endif
 #endif
 
-#if defined(MAXM86161_OPT_VALIDATION_GRN) || defined(MAXM86161_OPT_VALIDATION_RED) || defined(MAXM86161_OPT_VALIDATION_IR)
+#if defined(MAXM86161_OPT_VALIDATION_GRN) || defined(MAXM86161_OPT_VALIDATION_RED) || defined(MAXM86161_OPT_VALIDATION_IR) || defined(MAXM86161_OPT_VALIDATION_XTALK)
     #define TTL_SZ (PPG_SZ)
 #else
   #ifdef ALGO_ONLY
@@ -1079,26 +1080,8 @@
 }
 
 
-void set_seq_green(void) {
-    char cmd[16];
-    char rsp[32];
-    // Set Sequence to ambient, LED1
-    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x20; cmd[3] = 0x91;
-    sh_i2c.write(SH_ADDR, cmd, 4);
-    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
-    sh_i2c.read(SH_ADDR, rsp, 1);
-    mfio = 1; mfio = 0; wait_us(300);
-//    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
-    // Set Sequence to LED4, LED3 to ambient, ambient
-    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x21; cmd[3] = 0x99;
-    sh_i2c.write(SH_ADDR, cmd, 4);
-    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
-    sh_i2c.read(SH_ADDR, rsp, 1);
-    mfio = 1; mfio = 0; wait_us(300);
-//    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
-}
 
-void set_green_reg(void) {
+void set_reg_opt_validation(void) {
     char cmd[16];
     char rsp[32];
 
@@ -1147,6 +1130,7 @@
     mfio = 1; mfio = 0; wait_us(300);
     pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
 #endif
+    // always set seq3 reg to none
     cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x22; cmd[3] = 0x00;
     sh_i2c.write(SH_ADDR, cmd, 4);
     mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
@@ -1161,7 +1145,16 @@
     mfio = 1; mfio = 0; wait_us(300);
     pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
 
-    // Set Green, current
+    // configure LED Range
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x2A; cmd[3] = 0x3F;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+#if defined(MAXM86161_OPT_VALIDATION_GRN)
+    // Set Green current to 1uA, 10uA or 30uA
     cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x23; cmd[3] = 0xA7;
     sh_i2c.write(SH_ADDR, cmd, 4);
     mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
@@ -1184,20 +1177,91 @@
     sh_i2c.read(SH_ADDR, rsp, 1);
     mfio = 1; mfio = 0; wait_us(300);
     pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+#endif
+#if defined(MAXM86161_OPT_VALIDATION_IR)
+    // Set Green current 
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x23; cmd[3] = 0x0;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
 
-    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x2A; cmd[3] = 0x3F;
+    // Set IR current to 1uA, 10uA or 30uA
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x24; cmd[3] = 0xA7;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+    // Set Red current
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x25; cmd[3] = 0x0;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+#endif
+
+#if defined(MAXM86161_OPT_VALIDATION_RED)
+    // Set Green current 
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x23; cmd[3] = 0x0;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+    // Set IR current
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x24; cmd[3] = 0x0;
     sh_i2c.write(SH_ADDR, cmd, 4);
     mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
     sh_i2c.read(SH_ADDR, rsp, 1);
     mfio = 1; mfio = 0; wait_us(300);
     pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+    // Set Red current to 1uA, 10uA or 30uA
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x25; cmd[3] = 0xA7;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+#endif
+#if defined(MAXM86161_OPT_VALIDATION_XTALK)
+    // Set Green current 
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x23; cmd[3] = 0xFF;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+    // Set IR current to 1uA, 10uA or 30uA
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x24; cmd[3] = 0xFF;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+
+    // Set Red current
+    cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x25; cmd[3] = 0xFF;
+    sh_i2c.write(SH_ADDR, cmd, 4);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 1);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("wr afe reg Status: %x\n\r", rsp[0]);
+#endif
 }
 
 
 /*****************************************************************************/
-// init_sh_opt  Mode1 optical validation for MAXM86161
+// init_sh_opt_validation  Mode1 optical validation for MAXM86161
 /*****************************************************************************/
-void init_sh_opt(void) {
+void init_sh_opt_validation(void) {
     char cmd[16];
     char rsp[32];
 
@@ -1282,7 +1346,7 @@
     pc.printf("1.32 who accel %x %x\n\r", rsp[0], rsp[1]);
 #endif
 
-    set_green_reg();
+    set_reg_opt_validation();
 
 mfio = 1;
 }
@@ -1291,6 +1355,8 @@
 /*****************************************************************************/
 int main()
 {
+    char cmd[16];
+    char rsp[32];
     sh_i2c.frequency(400000);
     int32_t ledcnt = 0;
     rLED = LED_OFF;  gLED = LED_ON;  bLED = LED_OFF;
@@ -1314,7 +1380,7 @@
 #ifdef RAW
     init_sh_raw();
 #elif defined(MAXM86161_OPT_VALIDATION_RED) || defined(MAXM86161_OPT_VALIDATION_IR) || defined(MAXM86161_OPT_VALIDATION_GRN)
-    init_sh_opt();
+    init_sh_opt_validation();
 #else
     init_sh_algo();
 #endif
@@ -1354,10 +1420,6 @@
             tmr1.reset();
             read_sh_fifo();
 
-#if defined(MAXM86161_OPT_VALIDATION_GRN)
-//            set_seq_green();
-#endif
-
             if ((ledcnt++ % 50) == 0)
                 gLED = !gLED;
         }