Mode1 Optical Validation

Dependencies:   max32630fthr

Revision:
47:346a13fbdc0f
Parent:
46:553559610878
Child:
48:6b93b56bb22e
--- a/main.cpp	Fri Apr 29 17:13:58 2022 +0000
+++ b/main.cpp	Fri Apr 29 21:04:46 2022 +0000
@@ -85,10 +85,11 @@
 
 /*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*/
 // comment the three below if you want raw sensor+algo data
-#define ALGO_ONLY 1  // define this if you only want algo data
+//#define ALGO_ONLY 1  // define this if you only want algo data
 //#define RAW  // define this if you want AFE+accel data, no algorithm, tested on 33.13.31
   #define RAW_HZ 256   // Raw data rate
   //#define RAW_HZ 100   // Raw data rate
+#define SPO2_CAL_RPT 1
 
 // Comment out both of the below for Normal Algorithm Samples Format
 //#define EXTENDED_ALGO 1  // define this if you want the extended algo samples report format 
@@ -261,8 +262,11 @@
             ppg[4] = (rsp[ptr+12] << 16) | (rsp[ptr+13] << 8) | (rsp[ptr+14]);
             ppg[5] = (rsp[ptr+15] << 16) | (rsp[ptr+16] << 8) | (rsp[ptr+17]);
             pc.printf("%d,%d,%d,%d,", ppg[0], ppg[1], ppg[2], ppg[3]);
+#if defined(RAW) || defined(SPO2_CAL_RPT)
+   pc.printf("%d,%d,", ppg[4], ppg[5]);
+#endif 
 #ifdef MAXM86146_CFG
-#ifdef RAW
+#if defined(RAW) || defined(SPO2_CAL_RPT)
             pc.printf("%d,%d,", ppg[4], ppg[5]);
             ppg[6] = (rsp[ptr+18] << 16) | (rsp[ptr+19] << 8) | (rsp[ptr+20]);
             ppg[7] = (rsp[ptr+21] << 16) | (rsp[ptr+22] << 8) | (rsp[ptr+23]);
@@ -542,30 +546,10 @@
 #ifdef MAXREFDES103_CFG
     init_max20303_pmic();
 #endif
-#if 0 // 1.5s is ok for 33.13.12
-  thread_sleep_for(250);
-#endif
+// 33.13.31 needs at least 1.6s
+//  thread_sleep_for(100);
 
     mfio = 0; wait_us(300);
-#if 0
-//write SpO2 coefficients 0x00000000 FFD7FBDD 00AB61FE
-    cmd[0] = 0x50; cmd[1] = 0x07; cmd[2] = 0x00; 
-    cmd[3] = 0x00; cmd[4] = 0x00; cmd[5] = 0x00; cmd[6] = 0x00;
-    cmd[7] = 0xFF; cmd[8] = 0xD7; cmd[9] = 0xFB; cmd[10] = 0xDD;
-    cmd[11] = 0x00; cmd[12] = 0xAB; cmd[13] = 0x61; cmd[14] = 0xFE;
-    sh_i2c.write(SH_ADDR, cmd, 15);
-    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 Spo2 Coeff %x\n\r", rsp[0]);
-#endif
-//1.1 rd SpO2 Coefficients 
-    cmd[0] = 0x51; cmd[1] = 0x07; cmd[2] = 0x00;
-    sh_i2c.write(SH_ADDR, cmd, 3);
-    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
-    sh_i2c.read(SH_ADDR, rsp, 13);
-    mfio = 1; mfio = 0; wait_us(300);
-    pc.printf("%x SpO2 Coeff %2X%2X%2X%2X  %2X%2X%2X%2X %2X%2X%2X%2X\n\r", rsp[0], rsp[1], rsp[2], rsp[3], rsp[4], rsp[5], rsp[6], rsp[7], rsp[8], rsp[9], rsp[10], rsp[11], rsp[12]);
 #ifdef REDUCE_RPT_PERIOD
 //Change report period to 25
     cmd[0] = 0x10; cmd[1] = 0x02; cmd[2] = REDUCE_RPT_PERIOD; 
@@ -659,7 +643,11 @@
     mfio = 1; mfio = 0; wait_us(300);
     pc.printf("1.2 Status: %x\n\r", rsp[0]);
 // 1.5 cont hr, spo2
+#ifdef SPO2_CAL_RPT
+    cmd[0] = 0x50; cmd[1] = 0x07; cmd[2] = 0x0A; cmd[3] = 0x06;
+#else
     cmd[0] = 0x50; cmd[1] = 0x07; cmd[2] = 0x0A; cmd[3] = 0x00;
+#endif
     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);
@@ -802,6 +790,25 @@
     pc.printf("\n\r gpio en %x\n\r", rsp[0]);
     mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
 #endif
+#if 0
+//write SpO2 coefficients 0x00000000 FFD7FBDD 00AB61FE
+    cmd[0] = 0x50; cmd[1] = 0x07; cmd[2] = 0x00; 
+    cmd[3] = 0x00; cmd[4] = 0x00; cmd[5] = 0x00; cmd[6] = 0x00;
+    cmd[7] = 0xFF; cmd[8] = 0xD7; cmd[9] = 0xFB; cmd[10] = 0xDD;
+    cmd[11] = 0x00; cmd[12] = 0xAB; cmd[13] = 0x61; cmd[14] = 0xFE;
+    sh_i2c.write(SH_ADDR, cmd, 15);
+    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 Spo2 Coeff %x\n\r", rsp[0]);
+#endif
+//1.1 rd SpO2 Coefficients 
+    cmd[0] = 0x51; cmd[1] = 0x07; cmd[2] = 0x00;
+    sh_i2c.write(SH_ADDR, cmd, 3);
+    mfio = 1; thread_sleep_for(2); mfio = 0; wait_us(300);
+    sh_i2c.read(SH_ADDR, rsp, 13);
+    mfio = 1; mfio = 0; wait_us(300);
+    pc.printf("%x SpO2 Coeff %2X%2X%2X%2X  %2X%2X%2X%2X %2X%2X%2X%2X\n\r", rsp[0], rsp[1], rsp[2], rsp[3], rsp[4], rsp[5], rsp[6], rsp[7], rsp[8], rsp[9], rsp[10], rsp[11], rsp[12]);
 
 // 1.30 Enable HR, SpO2 algo
 #ifdef EXTENDED_ALGO