Dependencies:   ADBMS2950

Revision:
6:5d29fdcbae72
Parent:
4:0e99350684aa
Child:
9:0a4828d32e76
--- a/program/src/print_result.cpp	Tue Jul 28 07:32:42 2020 +0000
+++ b/program/src/print_result.cpp	Thu Jul 30 10:42:10 2020 +0000
@@ -313,1343 +313,1406 @@
   {
     pc.printf("IC%d:\n",(ic+1));
     pc.printf("Read Current:\n");
-    pc.printf("I1:%f, ", getCurrent(IC[ic].i.i1));
-    pc.printf("I2:%f\n", getCurrent(IC[ic].i.i2));
+    pc.printf("I1:%fmV, ", getCurrent(IC[ic].i.i1));
+    pc.printf("I2:%fmV\n", getCurrent(IC[ic].i.i2));
     pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
     pc.printf("PECError:%d\n\n",IC[ic].cccrc.cr_pec);
   }
 }
 
-  /**
-  *******************************************************************************
-  * Function: printVoltages
-  * @brief Print Voltages.
-  *
-  * @details This function Print Voltages into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC    Total IC
-  *
-  * @param [in]  *IC    cell_asic stucture pointer
-  *
-  * @param [in]  type    Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printVoltage(uint8_t tIC, cell_asic *IC, TYPE type)
+/**
+*******************************************************************************
+* Function: printVoltages
+* @brief Print Voltages.
+*
+* @details This function Print Voltages into terminal.
+*
+* Parameters:
+* @param [in]   tIC    Total IC
+*
+* @param [in]  *IC    cell_asic stucture pointer
+*
+* @param [in]  type    Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printVoltage(uint8_t tIC, cell_asic *IC, TYPE type)
+{
+  float voltage;
+  uint16_t temp;
+  uint8_t channel;
+  uint8_t flag = 0;
+  if((type == Vr)){channel = VR_SIZE;}
+  else if((type == Vrx)){channel = VRX_SIZE;}
+  else if (type == Rvr){ channel = RVR_SIZE;}
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    float voltage;
-    uint16_t temp;
-    uint8_t channel;
-    uint8_t flag = 0;
-    if((type == Vr)){channel = VR_SIZE;}
-    else if((type == Vrx)){channel = VRX_SIZE;}
-    else if (type == Rvr){ channel = RVR_SIZE;}
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    pc.printf("IC%d: \n",(ic+1));
+    for(uint8_t index = 0; index < channel; index++)
     {
-      pc.printf("IC%d: \n",(ic+1));
-      for(uint8_t index = 0; index < channel; index++)
+      if(type == Vr){ temp = IC[ic].vr.v_codes[index];}
+      else if(type == Vrx){ temp = IC[ic].vrx.vx_codes[index]; }
+      else if(type == Rvr){ temp = IC[ic].rvr.redv_codes[index]; }
+      voltage = getVoltage(temp);
+      if(type == Vr)
       {
-        if(type == Vr){ temp = IC[ic].vr.v_codes[index];}
-        else if(type == Vrx){ temp = IC[ic].vrx.vx_codes[index]; }
-        else if(type == Rvr){ temp = IC[ic].rvr.redv_codes[index]; }
-        voltage = getVoltage(temp);
-        if(type == Vr)
+        if(index == 8)
+        {
+          pc.printf("VREF2A = %7.4fV \n", voltage);
+          flag = 1;
+        }
+        else if(index == (channel-1))
         {
-          if(index == 8)
+          pc.printf("VREF2B = %7.4fV \n", voltage);
+          pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          pc.printf("PECError:%d",IC[ic].cccrc.vr_pec);
+        }
+        else
+        {
+          if(flag == 1)
           {
-            pc.printf("VREF2A = %7.4fV \n", voltage);
-            flag = 1;
-          }
-          else if(index == (channel-1))
-          {
-            pc.printf("VREF2B = %7.4fV \n", voltage);
-            pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            pc.printf("PECError:%d",IC[ic].cccrc.vr_pec);
+            pc.printf("V%2d = %7.4fV \n", index, voltage);
           }
-         else
-         {
-           if(flag == 1)
-           {
-             pc.printf("V%2d = %7.4fV \n", index, voltage);
-           }
-           else{pc.printf("V%2d = %7.4fV \n",(index+1), voltage);}
-         }
+          else{pc.printf("V%2d = %7.4fV \n",(index+1), voltage);}
         }
-        else if(type == Vrx)
+      }
+      else if(type == Vrx)
+      {
+        if(index == 4){pc.printf("VREF2A = %7.4fV \n", voltage);}
+        else if(index == (channel-1))
         {
-          if(index == 4){pc.printf("VREF2A = %7.4fV \n", voltage);}
-          else if(index == (channel-1))
-          {
-            pc.printf("VREF2B = %7.4fV \n", voltage);
-            pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            pc.printf("PECError:%d",IC[ic].cccrc.vrx_pec);
-          }
-          else{pc.printf("V%2d = %7.4fV \n",(index+7), voltage);}
+          pc.printf("VREF2B = %7.4fV \n", voltage);
+          pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          pc.printf("PECError:%d",IC[ic].cccrc.vrx_pec);
         }
-        else if(type == Rvr)
+        else{pc.printf("V%2d = %7.4fV \n",(index+7), voltage);}
+      }
+      else if(type == Rvr)
+      {
+        pc.printf("V%dR=%fV \n",(index+1), voltage);
+        if(index == (channel-1))
         {
-          pc.printf("V%dR=%fV \n",(index+1), voltage);
-          if(index == (channel-1))
-          {
-            pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            pc.printf("PECError:%d",IC[ic].cccrc.rvr_pec);
-          }
+          pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          pc.printf("PECError:%d",IC[ic].cccrc.rvr_pec);
         }
-        else{pc.printf("Wrong Register Group Select\n");}
       }
-      pc.printf("\n\n");
+      else{pc.printf("Wrong Register Group Select\n");}
     }
+    pc.printf("\n\n");
   }
+}
+
+/**
+*******************************************************************************
+* Function: printVbat
+* @brief Print VBAT Result.
+*
+* @details This function Print the VBAT result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    pc.printf("IC%d:\n",(ic+1));
+    pc.printf("Read VBAT:\n");
+    pc.printf("VBAT1: %fV, ", getVoltage(IC[ic].vbat.vbat1));
+    pc.printf("VBAT2: %fV, ", getVoltage(IC[ic].vbat.vbat2));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.vbat_pec);
+  }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printVbat
-  * @brief Print VBAT Result.
-  *
-  * @details This function Print the VBAT result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printVbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printIvbat
+* @brief Print IVBAT result.
+*
+* @details This function Print the IVBAT result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printIvbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("IC%d:\n",(ic+1));
-      pc.printf("Read VBAT:\n");
-      pc.printf("VBAT1: %f, ", getVoltage(IC[ic].vbat.vbat1));
-      pc.printf("VBAT2: %f, ", getVoltage(IC[ic].vbat.vbat2));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.vbat_pec);
-    }
+    pc.printf("IC%d:\n",(ic+1));
+    pc.printf("Read IVBAT:\n");
+    pc.printf("I1:%fmV, ", getCurrent(IC[ic].ivbat.i1));
+    pc.printf("VBAT1%fV, ", getVoltage(IC[ic].ivbat.vbat1));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.ivbat_pec);
   }
+}
+
+/**
+*******************************************************************************
+* Function: printAvgVbat
+* @brief Print AVGVBAT result.
+*
+* @details This function Print the avgvbat result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    pc.printf("IC%d:\n",(ic+1));
+    pc.printf("Read AvgVbat:\n");
+    pc.printf("VB1AVG:%fV, ", getAvgVbat(IC[ic].vbavg.vb1avg));
+    pc.printf("VB2AVG:%fV, ", getAvgVbat(IC[ic].vbavg.vb2avg));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgvbat_pec);
+  }
+}
+
+/**
+*******************************************************************************
+* Function: printAvgIVbat
+* @brief Print AVGIVBAT result.
+*
+* @details This function Print the avgivbat result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgIVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    pc.printf("IC%d:\n",(ic+1));
+    pc.printf("Read AvgIVbat:\n");
+    pc.printf("I1AVG:%fmV, ", getAvgCurrent(IC[ic].i_vbavg.i1avg));
+    pc.printf("VB1AVG%fV, ", getAvgVbat(IC[ic].i_vbavg.vb1avg));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgivbat_pec);
+  }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printIvbat
-  * @brief Print IVBAT result.
-  *
-  * @details This function Print the IVBAT result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printIvbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printAvgCr
+* @brief Print IAVG result.
+*
+* @details This function Print the iavg result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgCr(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("IC%d:\n",(ic+1));
-      pc.printf("Read IVBAT:\n");
-      pc.printf("I1:%f, ", getCurrent(IC[ic].ivbat.i1));
-      pc.printf("VBAT1%f, ", getVoltage(IC[ic].ivbat.vbat1));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.ivbat_pec);
-    }
+    pc.printf("IC%d:\n",(ic+1));
+    pc.printf("Read AvgCr:\n");
+    pc.printf("I1AVG:%fmV, ", getAvgCurrent(IC[ic].iavg.i1avg));
+    pc.printf("I2AVG:%fmV, ", getAvgCurrent(IC[ic].iavg.i2avg));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgcr_pec);
   }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printAvgVbat
-  * @brief Print AVGVBAT result.
-  *
-  * @details This function Print the avgvbat result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgVbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printOc
+* @brief Print OC result.
+*
+* @details This function Print the oc result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printOc(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("IC%d:\n",(ic+1));
-      pc.printf("Read AvgVbat:\n");
-      pc.printf("VB1AVG:%f, ", getVoltage(IC[ic].vbavg.vb1avg));
-      pc.printf("VB2AVG:%f, ", getVoltage(IC[ic].vbavg.vb2avg));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgvbat_pec);
-    }
+    pc.printf("Read OCR:\n");
+    pc.printf("OC1R: %fmV, ", getOverCurrent(IC[ic].oc.oc1r));
+    pc.printf("OC2R: %fmV, ", getOverCurrent(IC[ic].oc.oc2r));
+    pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    pc.printf("PECError:%d\n\n",IC[ic].cccrc.oc_pec);
   }
+}
+
+/**
+*******************************************************************************
+* Function: PrintStatus
+* @brief Print status reg. result.
+*
+* @details This function Print status result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @param [in]  grp      Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
 
-  /**
-  *******************************************************************************
-  * Function: printAvgIVbat
-  * @brief Print AVGIVBAT result.
-  *
-  * @details This function Print the avgivbat result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgIVbat(uint8_t tIC, cell_asic *IC)
+void printStatus(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
+{
+  float voltage;
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    pc.printf("IC%d:\n",(ic+1));
+    if(type == Status)
     {
-      pc.printf("IC%d:\n",(ic+1));
-      pc.printf("Read AvgIVbat:\n");
-      pc.printf("I1AVG:%f, ", getCurrent(IC[ic].i_vbavg.i1avg));
-      pc.printf("VB1AVG%f, ", getVoltage(IC[ic].i_vbavg.vb1avg));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgivbat_pec);
-    }
-  }
+      if(grp == A)
+      {
+        pc.printf("Status A:\n");
+        voltage = getVoltage(IC[ic].stata.vref1p25);
+        pc.printf("VREF1P25:%fV, ", voltage);
+        pc.printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
+        voltage = getVoltage(IC[ic].stata.vreg2);
+        pc.printf("VREG2:%fV\n", (voltage + 1.5));
+        pc.printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == B)
+      {
+        pc.printf("Status B:\n");
+        pc.printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
+        pc.printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
+        pc.printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
+        pc.printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
+        pc.printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == C)
+      {
+        pc.printf("Status C:\n");
+        pc.printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
+        pc.printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
+        pc.printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
+        pc.printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
+        pc.printf("CT:0x%X, ", IC[ic].statc.ct);
+        pc.printf("CTS:0x%X\n", IC[ic].statc.cts);
+
+        pc.printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
+        pc.printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
+        pc.printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
+        pc.printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
+        pc.printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
+        pc.printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
+        pc.printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
+        pc.printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
+
+        pc.printf("VDE:0x%X, ", IC[ic].statc.vde);
+        pc.printf("VDE1:0x%X, ", IC[ic].statc.vdel);
+        pc.printf("INSYNC:0x%X, ", IC[ic].statc.insync);
+        pc.printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
+        pc.printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
+        pc.printf("THSD:0x%X, ", IC[ic].statc.thsd);
+        pc.printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
+        pc.printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
 
-  /**
-  *******************************************************************************
-  * Function: printAvgCr
-  * @brief Print IAVG result.
-  *
-  * @details This function Print the iavg result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgCr(uint8_t tIC, cell_asic *IC)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("IC%d:\n",(ic+1));
-      pc.printf("Read AvgCr:\n");
-      pc.printf("I1AVG:%f, ", getCurrent(IC[ic].iavg.i1avg));
-      pc.printf("I2AVG:%f, ", getCurrent(IC[ic].iavg.i2avg));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.avgcr_pec);
-    }
-  }
+        pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == D)
+      {
+        pc.printf("Status D:\n");
+        pc.printf("OC_CNTR:0x%X, ", IC[ic].statd.oc_cntr);
+        pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == E)
+      {
+        pc.printf("Status E:\n");
+        pc.printf("GPIO:0x%X, ", IC[ic].state.gpio);
+        pc.printf("GPO:0x%X, ", IC[ic].state.gpo);
+        pc.printf("REV_ID:0x%X\n", IC[ic].state.rev);
+        pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == ALL_GRP)
+      {
+        pc.printf("Status A:\n");
+        voltage = getVoltage(IC[ic].stata.vref1p25);
+        pc.printf("VREF1P25:%fV, ", voltage);
+        pc.printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
+        voltage = getVoltage(IC[ic].stata.vreg2);
+        pc.printf("VREG2:%fV\n", (voltage + 1.5));
+
+        pc.printf("Status B:\n");
+        pc.printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
+        pc.printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
+        pc.printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
+        pc.printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
 
-  /**
-  *******************************************************************************
-  * Function: printOc
-  * @brief Print OC result.
-  *
-  * @details This function Print the oc result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printOc(uint8_t tIC, cell_asic *IC)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("Read OC:\n");
-      pc.printf("OC1R: %f, ", getOverCurrent(IC[ic].oc.oc1r));
-      pc.printf("OC2R: %f, ", getOverCurrent(IC[ic].oc.oc2r));
-      pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      pc.printf("PECError:%d\n\n",IC[ic].cccrc.oc_pec);
+        pc.printf("Status C:\n");
+        pc.printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
+        pc.printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
+        pc.printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
+        pc.printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
+        pc.printf("CT:0x%X, ", IC[ic].statc.ct);
+        pc.printf("CTS:0x%X\n", IC[ic].statc.cts);
+        pc.printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
+        pc.printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
+        pc.printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
+        pc.printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
+        pc.printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
+        pc.printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
+        pc.printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
+        pc.printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
+        pc.printf("VDE:0x%X, ", IC[ic].statc.vde);
+        pc.printf("VDE1:0x%X, ", IC[ic].statc.vdel);
+        pc.printf("INSYNC:0x%X, ", IC[ic].statc.insync);
+        pc.printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
+        pc.printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
+        pc.printf("THSD:0x%X, ", IC[ic].statc.thsd);
+        pc.printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
+        pc.printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+
+        pc.printf("Status D:\n");
+        pc.printf("OC_CNTR:0x%X\n", IC[ic].statd.oc_cntr);
+
+        pc.printf("Status E:\n");
+        pc.printf("GPIO:0x%X, ", IC[ic].state.gpio);
+        pc.printf("GPO:0x%X, ", IC[ic].state.gpo);
+        pc.printf("REV_ID:0x%X\n", IC[ic].state.rev);
+        pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else{ pc.printf("Wrong Register Group Select\n"); }
     }
   }
-
-  /**
-  *******************************************************************************
-  * Function: PrintStatus
-  * @brief Print status reg. result.
-  *
-  * @details This function Print status result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @param [in]  grp      Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-
-  void printStatus(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
-  {
-    float voltage;
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      pc.printf("IC%d:\n",(ic+1));
-      if(type == Status)
-      {
-        if(grp == A)
-        {
-          pc.printf("Status A:\n");
-          voltage = getVoltage(IC[ic].stata.vref1p25);
-          pc.printf("VREF1P25:%fV, ", voltage);
-          pc.printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
-          voltage = getVoltage(IC[ic].stata.vreg2);
-          pc.printf("VREG2:%fV\n", (voltage + 1.5));
-          pc.printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == B)
-        {
-          pc.printf("Status B:\n");
-          pc.printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
-          pc.printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
-          pc.printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
-          pc.printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
-          pc.printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == C)
-        {
-          pc.printf("Status C:\n");
-          pc.printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
-          pc.printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
-          pc.printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
-          pc.printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
-          pc.printf("CT:0x%X, ", IC[ic].statc.ct);
-          pc.printf("CTS:0x%X\n", IC[ic].statc.cts);
-
-          pc.printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
-          pc.printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
-          pc.printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
-          pc.printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
-          pc.printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
-          pc.printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
-          pc.printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
-          pc.printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
-
-          pc.printf("VDE:0x%X, ", IC[ic].statc.vde);
-          pc.printf("VDE1:0x%X, ", IC[ic].statc.vdel);
-          pc.printf("INSYNC:0x%X, ", IC[ic].statc.insync);
-          pc.printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
-          pc.printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
-          pc.printf("THSD:0x%X, ", IC[ic].statc.thsd);
-          pc.printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
-          pc.printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+}
 
-          pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == D)
-        {
-          pc.printf("Status D:\n");
-          pc.printf("OC_CNTR:0x%X, ", IC[ic].statd.oc_cntr);
-          pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == E)
-        {
-          pc.printf("Status E:\n");
-          pc.printf("GPIO:0x%X, ", IC[ic].state.gpio);
-          pc.printf("GPO:0x%X, ", IC[ic].state.gpo);
-          pc.printf("REV_ID:0x%X\n", IC[ic].state.rev);
-          pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == ALL_GRP)
-        {
-          pc.printf("Status A:\n");
-          voltage = getVoltage(IC[ic].stata.vref1p25);
-          pc.printf("VREF1P25:%fV, ", voltage);
-          pc.printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
-          voltage = getVoltage(IC[ic].stata.vreg2);
-          pc.printf("VREG2:%fV\n", (voltage + 1.5));
-
-          pc.printf("Status B:\n");
-          pc.printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
-          pc.printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
-          pc.printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
-          pc.printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
-
-          pc.printf("Status C:\n");
-          pc.printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
-          pc.printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
-          pc.printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
-          pc.printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
-          pc.printf("CT:0x%X, ", IC[ic].statc.ct);
-          pc.printf("CTS:0x%X\n", IC[ic].statc.cts);
-          pc.printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
-          pc.printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
-          pc.printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
-          pc.printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
-          pc.printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
-          pc.printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
-          pc.printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
-          pc.printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
-          pc.printf("VDE:0x%X, ", IC[ic].statc.vde);
-          pc.printf("VDE1:0x%X, ", IC[ic].statc.vdel);
-          pc.printf("INSYNC:0x%X, ", IC[ic].statc.insync);
-          pc.printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
-          pc.printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
-          pc.printf("THSD:0x%X, ", IC[ic].statc.thsd);
-          pc.printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
-          pc.printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+/**
+*******************************************************************************
+* Function: printMenu
+* @brief Print Command Menu.
+*
+* @details This function print all command menu.
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printMenu()
+{
+  pc.printf("List of ADBMS2950 Command:\n");
+  pc.printf("Write and Read Configuration: 1                              |Read Device SID: 26                 \n");
+  pc.printf("Read Configuration: 2                                        |Soft Reset: 27                      \n");
+  pc.printf("Start ADI1 Conversion(Single Shot): 3                        |Reset cmd counter: 28               \n");
+  pc.printf("Start ADI2 Conversion(Single Shot): 4                        |SNAP(Stop Reg. updates): 29         \n");
+  pc.printf("Start ADI1 Conversion(Continuous): 5                         |UNSNAP(Resume Reg. updates): 30     \n");
+  pc.printf("Start ADI2 Conversion(Continuous): 6                         |Set Reset GPO Pins: 31              \n");
+  pc.printf("Start ADI1 Redundant Conversion(Single Shot): 7              |GPIO SPI Write to Slave: 32         \n");
+  pc.printf("Start ADI1 Redundant Conversion(Continuous): 8               |GPIO SPI Read from Slave: 33        \n");
+  pc.printf("Read CR, VBAT & IVBAT Registers(Single Shot): 9              |GPIO I2C Write to Slave: 34         \n");
+  pc.printf("Read CR, VBAT & IVBAT Registers(Continuous): 10              |GPIO I2C Read from Slave: 35        \n");
+  pc.printf("Read Overcurrent ADC Register(Single Shot): 11               |                                    \n");
+  pc.printf("Read Overcurrent ADC Register(Continuous): 12                |                                    \n");
+  pc.printf("Read Average CR, VBAT & IVBAT Registers(Single Shot): 13     |                                    \n");
+  pc.printf("Read Average CR, VBAT & IVBAT Registers(Continuous): 14      |                                    \n");
+  pc.printf("Read All CR and VBAT Voltage Registers(Single Shot): 15      |                                    \n");
+  pc.printf("Read All CR and VBAT Voltage Registers(Continuous): 16       |                                    \n");
+  pc.printf("Start ADV All Channel Conversion: 17                         |                                    \n");
+  pc.printf("Read All VR Registers(RDV commands): 18                      |                                    \n");
+  pc.printf("Read All RVR Registers(RDRVA & RDRVB commands): 19           |                                    \n");
+  pc.printf("Read All VR & RVR Registers(RDV, RDRVA & RDRVB commands): 20 |                                    \n");
+  pc.printf("Read Voltage Registers(RDAUXC & RDAUXD commands)(NA): 21     |                                    \n");
+  pc.printf("Start ADAUX All Channel Conversion: 22                       |                                    \n");
+  pc.printf("Read ADAUX Measurement: 23                                   |                                    \n");
+  pc.printf("Read Status C Register: 24                                   |                                    \n");
+  pc.printf("Read All Status Registers: 25                                |                                    \n");
 
-          pc.printf("Status D:\n");
-          pc.printf("OC_CNTR:0x%X\n", IC[ic].statd.oc_cntr);
-
-          pc.printf("Status E:\n");
-          pc.printf("GPIO:0x%X, ", IC[ic].state.gpio);
-          pc.printf("GPO:0x%X, ", IC[ic].state.gpo);
-          pc.printf("REV_ID:0x%X\n", IC[ic].state.rev);
-          pc.printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          pc.printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else{ pc.printf("Wrong Register Group Select\n"); }
-      }
-    }
-  }
-
-  /**
-  *******************************************************************************
-  * Function: printMenu
-  * @brief Print Command Menu.
-  *
-  * @details This function print all command menu.
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printMenu()
-  {
-    pc.printf("List of ADBMS2950 Command:\n");
-    pc.printf("Write and Read Configuration: 1                       |Gpio i2c write to slave: 26  \n");
-    pc.printf("Read Configuration: 2                                 |Gpio i2c read from slave: 27 \n");
-    pc.printf("Start Adi1 Conversion: 3                              |Set reset gpo pins: 28       \n");
-    pc.printf("Start Adi2 Conversion: 4                              |                             \n");
-    pc.printf("Start Adi1 & Adi2 Conversion: 5                       |                             \n");
-    pc.printf("Read Current Registers: 6                             |                             \n");
-    pc.printf("Read Battery Voltage Register: 7                      |                             \n");
-    pc.printf("Read Current and Battery Voltage Register: 8          |                             \n");
-    pc.printf("Read Overcurrent ADC Register: 9                      |                             \n");
-    pc.printf("Read Average Current Register: 10                     |                             \n");
-    pc.printf("Read Average Batter Voltage Register: 11              |                             \n");
-    pc.printf("Read Average Battery Current and Voltage Register: 12 |                             \n");
-    pc.printf("Start Adv Conversion: 13                              |                             \n");
-    pc.printf("Read Voltage Registers: 14                            |                             \n");
-    pc.printf("Read Voltage X Registers: 15                          |                             \n");
-    pc.printf("Read Redundant Voltage Registers: 16                  |                             \n");
-    pc.printf("Start Adaux Conversion: 17                            |                             \n");
-    pc.printf("Read Adaux Measurement: 18                            |                             \n");
-    pc.printf("Read All Status Registers: 19                         |                             \n");
-    pc.printf("Read Device SID: 20                                   |                             \n");
-    pc.printf("Soft Reset: 21                                        |                             \n");
-    pc.printf("Reset cmd counter: 22                                 |                             \n");
-    pc.printf("Snapshot: 23                                          |                             \n");
-    pc.printf("Release Snapshot: 24                                  |                             \n");
-    pc.printf("Gpio spi communication: 25                            |                             \n");
-
-    pc.printf("\n");
-    pc.printf("Print '0' for menu\n");
-    pc.printf("Please enter command: \n");
-    pc.printf("\n\n");
-  }
+  pc.printf("\n");
+  pc.printf("Print '0' for menu\n");
+  pc.printf("Please enter command: \n");
+  pc.printf("\n\n");
+}
 #else /* IAR */
 
-  /**
-  *******************************************************************************
-  * Function: printWriteConfig
-  * @brief Print write config A/B result.
-  *
-  * @details This function Print write config result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @param [in]  grp      Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printWriteConfig(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
+/**
+*******************************************************************************
+* Function: printWriteConfig
+* @brief Print write config A/B result.
+*
+* @details This function Print write config result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @param [in]  grp      Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printWriteConfig(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("IC%d:\n",(ic+1));
+    if(type == Config)
     {
-      printf("IC%d:\n",(ic+1));
-      if(type == Config)
+      if(grp == A)
       {
-        if(grp == A)
-        {
-          printf("Write Config A:\n");
-          printf("0x%X, ", IC[ic].configa.tx_data[0]);
-          printf("0x%X, ", IC[ic].configa.tx_data[1]);
-          printf("0x%X, ", IC[ic].configa.tx_data[2]);
-          printf("0x%X, ", IC[ic].configa.tx_data[3]);
-          printf("0x%X, ", IC[ic].configa.tx_data[4]);
-          printf("0x%X\n\n", IC[ic].configa.tx_data[5]);
-        }
-        else if(grp == B)
-        {
-          printf("Write Config B:\n");
-          printf("0x%X, ", IC[ic].configb.tx_data[0]);
-          printf("0x%X, ", IC[ic].configb.tx_data[1]);
-          printf("0x%X, ", IC[ic].configb.tx_data[2]);
-          printf("0x%X, ", IC[ic].configb.tx_data[3]);
-          printf("0x%X, ", IC[ic].configb.tx_data[4]);
-          printf("0x%X\n\n", IC[ic].configb.tx_data[5]);
-        }
-        else if(grp == ALL_GRP)
-        {
-          printf("Write Config A:\n");
-          printf("0x%X, ", IC[ic].configa.tx_data[0]);
-          printf("0x%X, ", IC[ic].configa.tx_data[1]);
-          printf("0x%X, ", IC[ic].configa.tx_data[2]);
-          printf("0x%X, ", IC[ic].configa.tx_data[3]);
-          printf("0x%X, ", IC[ic].configa.tx_data[4]);
-          printf("0x%X\n\n", IC[ic].configa.tx_data[5]);
+        printf("Write Config A:\n");
+        printf("0x%X, ", IC[ic].configa.tx_data[0]);
+        printf("0x%X, ", IC[ic].configa.tx_data[1]);
+        printf("0x%X, ", IC[ic].configa.tx_data[2]);
+        printf("0x%X, ", IC[ic].configa.tx_data[3]);
+        printf("0x%X, ", IC[ic].configa.tx_data[4]);
+        printf("0x%X\n\n", IC[ic].configa.tx_data[5]);
+      }
+      else if(grp == B)
+      {
+        printf("Write Config B:\n");
+        printf("0x%X, ", IC[ic].configb.tx_data[0]);
+        printf("0x%X, ", IC[ic].configb.tx_data[1]);
+        printf("0x%X, ", IC[ic].configb.tx_data[2]);
+        printf("0x%X, ", IC[ic].configb.tx_data[3]);
+        printf("0x%X, ", IC[ic].configb.tx_data[4]);
+        printf("0x%X\n\n", IC[ic].configb.tx_data[5]);
+      }
+      else if(grp == ALL_GRP)
+      {
+        printf("Write Config A:\n");
+        printf("0x%X, ", IC[ic].configa.tx_data[0]);
+        printf("0x%X, ", IC[ic].configa.tx_data[1]);
+        printf("0x%X, ", IC[ic].configa.tx_data[2]);
+        printf("0x%X, ", IC[ic].configa.tx_data[3]);
+        printf("0x%X, ", IC[ic].configa.tx_data[4]);
+        printf("0x%X\n\n", IC[ic].configa.tx_data[5]);
 
-          printf("Write Config B:\n");
-          printf("0x%X, ", IC[ic].configb.tx_data[0]);
-          printf("0x%X, ", IC[ic].configb.tx_data[1]);
-          printf("0x%X, ", IC[ic].configb.tx_data[2]);
-          printf("0x%X, ", IC[ic].configb.tx_data[3]);
-          printf("0x%X, ", IC[ic].configb.tx_data[4]);
-          printf("0x%X\n\n", IC[ic].configb.tx_data[5]);
-        }
-        else{ printf("Wrong Register Group Select\n"); }
+        printf("Write Config B:\n");
+        printf("0x%X, ", IC[ic].configb.tx_data[0]);
+        printf("0x%X, ", IC[ic].configb.tx_data[1]);
+        printf("0x%X, ", IC[ic].configb.tx_data[2]);
+        printf("0x%X, ", IC[ic].configb.tx_data[3]);
+        printf("0x%X, ", IC[ic].configb.tx_data[4]);
+        printf("0x%X\n\n", IC[ic].configb.tx_data[5]);
       }
+      else{ printf("Wrong Register Group Select\n"); }
     }
   }
-
-  /**
-  *******************************************************************************
-  * Function: printReadConfig
-  * @brief Print Read config A/B result.
-  *
-  * @details This function Print read config result into IAR I/O terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @param [in]  TYPE     Enum type of resistor
-  *
-  * @param [in]  GRP      Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printReadConfig(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      if(type == Config)
-      {
-        if(grp == A)
-        {
-          printf("Read Config A:\n");
-          printf("0x%X, ", IC[ic].configa.rx_data[0]);
-          printf("0x%X, ", IC[ic].configa.rx_data[1]);
-          printf("0x%X, ", IC[ic].configa.rx_data[2]);
-          printf("0x%X, ", IC[ic].configa.rx_data[3]);
-          printf("0x%X, ", IC[ic].configa.rx_data[4]);
-          printf("0x%X, ", IC[ic].configa.rx_data[5]);
-          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
-        }
-        else if(grp == B)
-        {
-          printf("Read Config B:\n");
-          printf("0x%X, ", IC[ic].configb.rx_data[0]);
-          printf("0x%X, ", IC[ic].configb.rx_data[1]);
-          printf("0x%X, ", IC[ic].configb.rx_data[2]);
-          printf("0x%X, ", IC[ic].configb.rx_data[3]);
-          printf("0x%X, ", IC[ic].configb.rx_data[4]);
-          printf("0x%X, ", IC[ic].configb.rx_data[5]);
-          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
-        }
-        else if(grp == ALL_GRP)
-        {
-          printf("Read Config A:\n");
-          printf("0x%X, ", IC[ic].configa.rx_data[0]);
-          printf("0x%X, ", IC[ic].configa.rx_data[1]);
-          printf("0x%X, ", IC[ic].configa.rx_data[2]);
-          printf("0x%X, ", IC[ic].configa.rx_data[3]);
-          printf("0x%X, ", IC[ic].configa.rx_data[4]);
-          printf("0x%X, ", IC[ic].configa.rx_data[5]);
-          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n",IC[ic].cccrc.cfgr_pec);
+}
 
-          printf("Read Config B:\n");
-          printf("0x%X, ", IC[ic].configb.rx_data[0]);
-          printf("0x%X, ", IC[ic].configb.rx_data[1]);
-          printf("0x%X, ", IC[ic].configb.rx_data[2]);
-          printf("0x%X, ", IC[ic].configb.rx_data[3]);
-          printf("0x%X, ", IC[ic].configb.rx_data[4]);
-          printf("0x%X, ", IC[ic].configb.rx_data[5]);
-          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
-        }
-        else{ printf("Wrong Register Group Select\n"); }
-      }
-    }
-  }
-
-  /**
-  *******************************************************************************
-  * Function: PrintDeviceSID
-  * @brief Print Device SID.
-  *
-  * @details This function Print Device SID into IAR I/O terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printDeviceSID(uint8_t tIC, cell_asic *IC, TYPE type)
+/**
+*******************************************************************************
+* Function: printReadConfig
+* @brief Print Read config A/B result.
+*
+* @details This function Print read config result into IAR I/O terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @param [in]  TYPE     Enum type of resistor
+*
+* @param [in]  GRP      Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printReadConfig(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("IC%d:\n",(ic+1));
+    if(type == Config)
     {
-      printf("IC%d:\n",(ic+1));
-      if(type == SID)
+      if(grp == A)
       {
-        printf("Read Device SID:\n");
-        printf("0x%X, ", IC[ic].sid.sid[0]);
-        printf("0x%X, ", IC[ic].sid.sid[1]);
-        printf("0x%X, ", IC[ic].sid.sid[2]);
-        printf("0x%X, ", IC[ic].sid.sid[3]);
-        printf("0x%X, ", IC[ic].sid.sid[4]);
-        printf("0x%X, ", IC[ic].sid.sid[5]);
+        printf("Read Config A:\n");
+        printf("0x%X, ", IC[ic].configa.rx_data[0]);
+        printf("0x%X, ", IC[ic].configa.rx_data[1]);
+        printf("0x%X, ", IC[ic].configa.rx_data[2]);
+        printf("0x%X, ", IC[ic].configa.rx_data[3]);
+        printf("0x%X, ", IC[ic].configa.rx_data[4]);
+        printf("0x%X, ", IC[ic].configa.rx_data[5]);
         printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-        printf("PECError:%d\n\n",IC[ic].cccrc.sid_pec);
+        printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
       }
-      else{ printf("Wrong Register Type Select\n"); }
-    }
-  }
+      else if(grp == B)
+      {
+        printf("Read Config B:\n");
+        printf("0x%X, ", IC[ic].configb.rx_data[0]);
+        printf("0x%X, ", IC[ic].configb.rx_data[1]);
+        printf("0x%X, ", IC[ic].configb.rx_data[2]);
+        printf("0x%X, ", IC[ic].configb.rx_data[3]);
+        printf("0x%X, ", IC[ic].configb.rx_data[4]);
+        printf("0x%X, ", IC[ic].configb.rx_data[5]);
+        printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
+      }
+      else if(grp == ALL_GRP)
+      {
+        printf("Read Config A:\n");
+        printf("0x%X, ", IC[ic].configa.rx_data[0]);
+        printf("0x%X, ", IC[ic].configa.rx_data[1]);
+        printf("0x%X, ", IC[ic].configa.rx_data[2]);
+        printf("0x%X, ", IC[ic].configa.rx_data[3]);
+        printf("0x%X, ", IC[ic].configa.rx_data[4]);
+        printf("0x%X, ", IC[ic].configa.rx_data[5]);
+        printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n",IC[ic].cccrc.cfgr_pec);
 
-  /**
-  *******************************************************************************
-  * Function: printWriteCommData
-  * @brief Print Write Comm data.
-  *
-  * @details This function Print write comm data.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printWriteCommData(uint8_t tIC, cell_asic *IC, TYPE type)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      if(type == Comm)
-      {
-        printf("Write Comm Data:\n");
-        printf("0x%X, ", IC[ic].com.tx_data[0]);
-        printf("0x%X, ", IC[ic].com.tx_data[1]);
-        printf("0x%X, ", IC[ic].com.tx_data[2]);
-        printf("0x%X, ", IC[ic].com.tx_data[3]);
-        printf("0x%X, ", IC[ic].com.tx_data[4]);
-        printf("0x%X\n\n", IC[ic].com.tx_data[5]);
+        printf("Read Config B:\n");
+        printf("0x%X, ", IC[ic].configb.rx_data[0]);
+        printf("0x%X, ", IC[ic].configb.rx_data[1]);
+        printf("0x%X, ", IC[ic].configb.rx_data[2]);
+        printf("0x%X, ", IC[ic].configb.rx_data[3]);
+        printf("0x%X, ", IC[ic].configb.rx_data[4]);
+        printf("0x%X, ", IC[ic].configb.rx_data[5]);
+        printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec);
       }
       else{ printf("Wrong Register Group Select\n"); }
     }
   }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printReadCommData
-  * @brief Print Read Comm Data.
-  *
-  * @details This function print read comm data.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printReadCommData(uint8_t tIC, cell_asic *IC, TYPE type)
+/**
+*******************************************************************************
+* Function: PrintDeviceSID
+* @brief Print Device SID.
+*
+* @details This function Print Device SID into IAR I/O terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printDeviceSID(uint8_t tIC, cell_asic *IC, TYPE type)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("IC%d:\n",(ic+1));
+    if(type == SID)
     {
-      printf("IC%d:\n",(ic+1));
-      if(type == Comm)
-      {
-        printf("Read Comm Data:\n");
-        printf("ICOM0:0x%X, ", IC[ic].rx_comm.icomm[0]);
-        printf("ICOM1:0x%X, ", IC[ic].rx_comm.icomm[1]);
-        printf("ICOM2:0x%X\n", IC[ic].rx_comm.icomm[2]);
-        printf("FCOM0:0x%X, ", IC[ic].rx_comm.fcomm[0]);
-        printf("FCOM1:0x%X, ", IC[ic].rx_comm.fcomm[1]);
-        printf("FCOM2:0x%X\n", IC[ic].rx_comm.fcomm[2]);
-        printf("DATA0:0x%X, ", IC[ic].rx_comm.data[0]);
-        printf("DATA1:0x%X, ", IC[ic].rx_comm.data[1]);
-        printf("DATA2:0x%X\n", IC[ic].rx_comm.data[2]);
-        printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-        printf("PECError:%d\n\n",IC[ic].cccrc.comm_pec);
-      }
-      else{ printf("Wrong Register Type Select\n"); }
+      printf("Read Device SID:\n");
+      printf("0x%X, ", IC[ic].sid.sid[0]);
+      printf("0x%X, ", IC[ic].sid.sid[1]);
+      printf("0x%X, ", IC[ic].sid.sid[2]);
+      printf("0x%X, ", IC[ic].sid.sid[3]);
+      printf("0x%X, ", IC[ic].sid.sid[4]);
+      printf("0x%X, ", IC[ic].sid.sid[5]);
+      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+      printf("PECError:%d\n\n",IC[ic].cccrc.sid_pec);
     }
+    else{ printf("Wrong Register Type Select\n"); }
   }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printCr
-  * @brief Print Current Result.
-  *
-  * @details This function Print current result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printCr(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printWriteCommData
+* @brief Print Write Comm data.
+*
+* @details This function Print write comm data.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printWriteCommData(uint8_t tIC, cell_asic *IC, TYPE type)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("IC%d:\n",(ic+1));
+    if(type == Comm)
     {
-      printf("IC%d:\n",(ic+1));
-      printf("Read Current:\n");
-      printf("I1:%f, ", getCurrent(IC[ic].i.i1));
-      printf("I2:%f\n", getCurrent(IC[ic].i.i2));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.cr_pec);
+      printf("Write Comm Data:\n");
+      printf("0x%X, ", IC[ic].com.tx_data[0]);
+      printf("0x%X, ", IC[ic].com.tx_data[1]);
+      printf("0x%X, ", IC[ic].com.tx_data[2]);
+      printf("0x%X, ", IC[ic].com.tx_data[3]);
+      printf("0x%X, ", IC[ic].com.tx_data[4]);
+      printf("0x%X\n\n", IC[ic].com.tx_data[5]);
     }
+    else{ printf("Wrong Register Group Select\n"); }
   }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printVoltages
-  * @brief Print Voltages.
-  *
-  * @details This function Print Voltages into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC    Total IC
-  *
-  * @param [in]  *IC    cell_asic stucture pointer
-  *
-  * @param [in]  type    Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printVoltage(uint8_t tIC, cell_asic *IC, TYPE type)
+/**
+*******************************************************************************
+* Function: printReadCommData
+* @brief Print Read Comm Data.
+*
+* @details This function print read comm data.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printReadCommData(uint8_t tIC, cell_asic *IC, TYPE type)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    float voltage;
-    uint16_t temp;
-    uint8_t channel;
-    uint8_t flag = 0;
-    if((type == Vr)){channel = VR_SIZE;}
-    else if((type == Vrx)){channel = VRX_SIZE;}
-    else if (type == Rvr){ channel = RVR_SIZE;}
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("IC%d:\n",(ic+1));
+    if(type == Comm)
     {
-      printf("IC%d: \n",(ic+1));
-      for(uint8_t index = 0; index < channel; index++)
+      printf("Read Comm Data:\n");
+      printf("ICOM0:0x%X, ", IC[ic].rx_comm.icomm[0]);
+      printf("ICOM1:0x%X, ", IC[ic].rx_comm.icomm[1]);
+      printf("ICOM2:0x%X\n", IC[ic].rx_comm.icomm[2]);
+      printf("FCOM0:0x%X, ", IC[ic].rx_comm.fcomm[0]);
+      printf("FCOM1:0x%X, ", IC[ic].rx_comm.fcomm[1]);
+      printf("FCOM2:0x%X\n", IC[ic].rx_comm.fcomm[2]);
+      printf("DATA0:0x%X, ", IC[ic].rx_comm.data[0]);
+      printf("DATA1:0x%X, ", IC[ic].rx_comm.data[1]);
+      printf("DATA2:0x%X\n", IC[ic].rx_comm.data[2]);
+      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+      printf("PECError:%d\n\n",IC[ic].cccrc.comm_pec);
+    }
+    else{ printf("Wrong Register Type Select\n"); }
+  }
+}
+
+/**
+*******************************************************************************
+* Function: printCr
+* @brief Print Current Result.
+*
+* @details This function Print current result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printCr(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d:\n",(ic+1));
+    printf("Read Current:\n");
+    printf("I1:%fmV, ", getCurrent(IC[ic].i.i1));
+    printf("I2:%fmV\n", getCurrent(IC[ic].i.i2));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.cr_pec);
+  }
+}
+
+/**
+*******************************************************************************
+* Function: printVoltages
+* @brief Print Voltages.
+*
+* @details This function Print Voltages into terminal.
+*
+* Parameters:
+* @param [in]   tIC    Total IC
+*
+* @param [in]  *IC    cell_asic stucture pointer
+*
+* @param [in]  type    Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printVoltage(uint8_t tIC, cell_asic *IC, TYPE type)
+{
+  float voltage;
+  uint16_t temp;
+  uint8_t channel;
+  uint8_t flag = 0;
+  if((type == Vr)){channel = VR_SIZE;}
+  else if((type == Vrx)){channel = VRX_SIZE;}
+  else if (type == Rvr){ channel = RVR_SIZE;}
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d: \n",(ic+1));
+    for(uint8_t index = 0; index < channel; index++)
+    {
+      if(type == Vr){ temp = IC[ic].vr.v_codes[index];}
+      else if(type == Vrx){ temp = IC[ic].vrx.vx_codes[index]; }
+      else if(type == Rvr){ temp = IC[ic].rvr.redv_codes[index]; }
+      voltage = getVoltage(temp);
+      if(type == Vr)
       {
-        if(type == Vr){ temp = IC[ic].vr.v_codes[index];}
-        else if(type == Vrx){ temp = IC[ic].vrx.vx_codes[index]; }
-        else if(type == Rvr){ temp = IC[ic].rvr.redv_codes[index]; }
-        voltage = getVoltage(temp);
-        if(type == Vr)
+        if(index == 8)
         {
-          if(index == 8)
-          {
-            printf("VREF2A = %7.4fV \n", voltage);
-            flag = 1;
-          }
-          else if(index == (channel-1))
+          printf("VREF2A = %7.4fV \n", voltage);
+          flag = 1;
+        }
+        else if(index == (channel-1))
+        {
+          printf("VREF2B = %7.4fV \n", voltage);
+          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          printf("PECError:%d",IC[ic].cccrc.vr_pec);
+        }
+        else
+        {
+          if(flag == 1)
           {
-            printf("VREF2B = %7.4fV \n", voltage);
-            printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            printf("PECError:%d",IC[ic].cccrc.vr_pec);
-          }
-         else
-         {
-           if(flag == 1)
-           {
-             printf("V%2d = %7.4fV \n", index, voltage);
-           }
-           else{printf("V%2d = %7.4fV \n",(index+1), voltage);}
-         }
-        }
-        else if(type == Vrx)
-        {
-          if(index == 4){printf("VREF2A = %7.4fV \n", voltage);}
-          else if(index == (channel-1))
-          {
-            printf("VREF2B = %7.4fV \n", voltage);
-            printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            printf("PECError:%d",IC[ic].cccrc.vrx_pec);
-          }
-          else{printf("V%2d = %7.4fV \n",(index+7), voltage);}
-        }
-        else if(type == Rvr)
-        {
-          printf("V%dR=%fV \n",(index+1), voltage);
-          if(index == (channel-1))
-          {
-            printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-            printf("PECError:%d",IC[ic].cccrc.rvr_pec);
+            printf("V%2d = %7.4fV \n", index, voltage);
           }
+          else{printf("V%2d = %7.4fV \n",(index+1), voltage);}
         }
-        else{printf("Wrong Register Group Select\n");}
+      }
+      else if(type == Vrx)
+      {
+        if(index == 4){printf("VREF2A = %7.4fV \n", voltage);}
+        else if(index == (channel-1))
+        {
+          printf("VREF2B = %7.4fV \n", voltage);
+          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          printf("PECError:%d",IC[ic].cccrc.vrx_pec);
+        }
+        else{printf("V%2d = %7.4fV \n",(index+7), voltage);}
       }
-      printf("\n\n");
+      else if(type == Rvr)
+      {
+        printf("V%dR=%fV \n",(index+1), voltage);
+        if(index == (channel-1))
+        {
+          printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+          printf("PECError:%d",IC[ic].cccrc.rvr_pec);
+        }
+      }
+      else{printf("Wrong Register Group Select\n");}
     }
+    printf("\n\n");
   }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printVbat
-  * @brief Print VBAT Result.
-  *
-  * @details This function Print the VBAT result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printVbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printVbat
+* @brief Print VBAT Result.
+*
+* @details This function Print the VBAT result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d:\n",(ic+1));
+    printf("Read VBAT:\n");
+    printf("VBAT1: %fV, ", getVoltage(IC[ic].vbat.vbat1));
+    printf("VBAT2: %fV, ", getVoltage(IC[ic].vbat.vbat2));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.vbat_pec);
+  }
+}
+
+/**
+*******************************************************************************
+* Function: printIvbat
+* @brief Print IVBAT result.
+*
+* @details This function Print the IVBAT result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printIvbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      printf("Read VBAT:\n");
-      printf("VBAT1: %f, ", getVoltage(IC[ic].vbat.vbat1));
-      printf("VBAT2: %f, ", getVoltage(IC[ic].vbat.vbat2));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.vbat_pec);
-    }
+    printf("IC%d:\n",(ic+1));
+    printf("Read IVBAT:\n");
+    printf("I1:%fmV, ", getCurrent(IC[ic].ivbat.i1));
+    printf("VBAT1%fV, ", getVoltage(IC[ic].ivbat.vbat1));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.ivbat_pec);
   }
+}
+
+/**
+*******************************************************************************
+* Function: printAvgVbat
+* @brief Print AVGVBAT result.
+*
+* @details This function Print the avgvbat result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d:\n",(ic+1));
+    printf("Read AvgVbat:\n");
+    printf("VB1AVG:%fV, ", getAvgVbat(IC[ic].vbavg.vb1avg));
+    printf("VB2AVG:%fV, ", getAvgVbat(IC[ic].vbavg.vb2avg));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.avgvbat_pec);
+  }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printIvbat
-  * @brief Print IVBAT result.
-  *
-  * @details This function Print the IVBAT result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printIvbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printAvgIVbat
+* @brief Print AVGIVBAT result.
+*
+* @details This function Print the avgivbat result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgIVbat(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      printf("Read IVBAT:\n");
-      printf("I1:%f, ", getCurrent(IC[ic].ivbat.i1));
-      printf("VBAT1%f, ", getVoltage(IC[ic].ivbat.vbat1));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.ivbat_pec);
-    }
+    printf("IC%d:\n",(ic+1));
+    printf("Read AvgIVbat:\n");
+    printf("I1AVG:%fmV, ", getAvgCurrent(IC[ic].i_vbavg.i1avg));
+    printf("VB1AVG%fV, ", getAvgVbat(IC[ic].i_vbavg.vb1avg));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.avgivbat_pec);
   }
+}
+
+/**
+*******************************************************************************
+* Function: printAvgCr
+* @brief Print IAVG result.
+*
+* @details This function Print the iavg result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printAvgCr(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d:\n",(ic+1));
+    printf("Read AvgCr:\n");
+    printf("I1AVG:%fmV, ", getAvgCurrent(IC[ic].iavg.i1avg));
+    printf("I2AVG:%fmV, ", getAvgCurrent(IC[ic].iavg.i2avg));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.avgcr_pec);
+  }
+}
 
-  /**
-  *******************************************************************************
-  * Function: printAvgVbat
-  * @brief Print AVGVBAT result.
-  *
-  * @details This function Print the avgvbat result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgVbat(uint8_t tIC, cell_asic *IC)
+/**
+*******************************************************************************
+* Function: printOc
+* @brief Print OC result.
+*
+* @details This function Print the oc result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *ic      cell_asic stucture pointer
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printOc(uint8_t tIC, cell_asic *IC)
+{
+  for(uint8_t ic = 0; ic < tIC; ic++)
   {
-    for(uint8_t ic = 0; ic < tIC; ic++)
+    printf("Read OCR:\n");
+    printf("OC1R: %fmV, ", getOverCurrent(IC[ic].oc.oc1r));
+    printf("OC2R: %fmV, ", getOverCurrent(IC[ic].oc.oc2r));
+    printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
+    printf("PECError:%d\n\n",IC[ic].cccrc.oc_pec);
+  }
+}
+
+/**
+*******************************************************************************
+* Function: PrintStatus
+* @brief Print status reg. result.
+*
+* @details This function Print status result into terminal.
+*
+* Parameters:
+* @param [in]   tIC      Total IC
+*
+* @param [in]  *IC      cell_asic stucture pointer
+*
+* @param [in]  type     Enum type of resistor
+*
+* @param [in]  grp      Enum type of resistor group
+*
+* @return None
+*
+*******************************************************************************
+*/
+
+void printStatus(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
+{
+  float voltage;
+  for(uint8_t ic = 0; ic < tIC; ic++)
+  {
+    printf("IC%d:\n",(ic+1));
+    if(type == Status)
     {
-      printf("IC%d:\n",(ic+1));
-      printf("Read AvgVbat:\n");
-      printf("VB1AVG:%f, ", getVoltage(IC[ic].vbavg.vb1avg));
-      printf("VB2AVG:%f, ", getVoltage(IC[ic].vbavg.vb2avg));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.avgvbat_pec);
-    }
-  }
+      if(grp == A)
+      {
+        printf("Status A:\n");
+        voltage = getVoltage(IC[ic].stata.vref1p25);
+        printf("VREF1P25:%fV, ", voltage);
+        printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
+        voltage = getVoltage(IC[ic].stata.vreg2);
+        printf("VREG2:%fV\n", (voltage + 1.5));
+        printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == B)
+      {
+        printf("Status B:\n");
+        printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
+        printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
+        printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
+        printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
+        printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == C)
+      {
+        printf("Status C:\n");
+        printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
+        printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
+        printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
+        printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
+        printf("CT:0x%X, ", IC[ic].statc.ct);
+        printf("CTS:0x%X\n", IC[ic].statc.cts);
 
-  /**
-  *******************************************************************************
-  * Function: printAvgIVbat
-  * @brief Print AVGIVBAT result.
-  *
-  * @details This function Print the avgivbat result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgIVbat(uint8_t tIC, cell_asic *IC)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      printf("Read AvgIVbat:\n");
-      printf("I1AVG:%f, ", getCurrent(IC[ic].i_vbavg.i1avg));
-      printf("VB1AVG%f, ", getVoltage(IC[ic].i_vbavg.vb1avg));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.avgivbat_pec);
-    }
-  }
+        printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
+        printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
+        printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
+        printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
+        printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
+        printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
+        printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
+        printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
+
+        printf("VDE:0x%X, ", IC[ic].statc.vde);
+        printf("VDE1:0x%X, ", IC[ic].statc.vdel);
+        printf("INSYNC:0x%X, ", IC[ic].statc.insync);
+        printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
+        printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
+        printf("THSD:0x%X, ", IC[ic].statc.thsd);
+        printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
+        printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
 
-  /**
-  *******************************************************************************
-  * Function: printAvgCr
-  * @brief Print IAVG result.
-  *
-  * @details This function Print the iavg result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printAvgCr(uint8_t tIC, cell_asic *IC)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      printf("Read AvgCr:\n");
-      printf("I1AVG:%f, ", getCurrent(IC[ic].iavg.i1avg));
-      printf("I2AVG:%f, ", getCurrent(IC[ic].iavg.i2avg));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.avgcr_pec);
+        printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == D)
+      {
+        printf("Status D:\n");
+        printf("OC_CNTR:0x%X, ", IC[ic].statd.oc_cntr);
+        printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == E)
+      {
+        printf("Status E:\n");
+        printf("GPIO:0x%X, ", IC[ic].state.gpio);
+        printf("GPO:0x%X, ", IC[ic].state.gpo);
+        printf("REV_ID:0x%X\n", IC[ic].state.rev);
+        printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else if(grp == ALL_GRP)
+      {
+        printf("Status A:\n");
+        voltage = getVoltage(IC[ic].stata.vref1p25);
+        printf("VREF1P25:%fV, ", voltage);
+        printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
+        voltage = getVoltage(IC[ic].stata.vreg2);
+        printf("VREG2:%fV\n", (voltage + 1.5));
+
+        printf("Status B:\n");
+        printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
+        printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
+        printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
+        printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
+
+        printf("Status C:\n");
+        printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
+        printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
+        printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
+        printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
+        printf("CT:0x%X, ", IC[ic].statc.ct);
+        printf("CTS:0x%X\n", IC[ic].statc.cts);
+        printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
+        printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
+        printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
+        printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
+        printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
+        printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
+        printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
+        printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
+        printf("VDE:0x%X, ", IC[ic].statc.vde);
+        printf("VDE1:0x%X, ", IC[ic].statc.vdel);
+        printf("INSYNC:0x%X, ", IC[ic].statc.insync);
+        printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
+        printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
+        printf("THSD:0x%X, ", IC[ic].statc.thsd);
+        printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
+        printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+
+        printf("Status D:\n");
+        printf("OC_CNTR:0x%X\n", IC[ic].statd.oc_cntr);
+
+        printf("Status E:\n");
+        printf("GPIO:0x%X, ", IC[ic].state.gpio);
+        printf("GPO:0x%X, ", IC[ic].state.gpo);
+        printf("REV_ID:0x%X\n", IC[ic].state.rev);
+        printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
+        printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
+      }
+      else{ printf("Wrong Register Group Select\n"); }
     }
   }
-
-  /**
-  *******************************************************************************
-  * Function: printOc
-  * @brief Print OC result.
-  *
-  * @details This function Print the oc result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *ic      cell_asic stucture pointer
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printOc(uint8_t tIC, cell_asic *IC)
-  {
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("Read OC:\n");
-      printf("OC1R: %f, ", getOverCurrent(IC[ic].oc.oc1r));
-      printf("OC2R: %f, ", getOverCurrent(IC[ic].oc.oc2r));
-      printf("CCount:%d,",IC[ic].cccrc.cmd_cntr);
-      printf("PECError:%d\n\n",IC[ic].cccrc.oc_pec);
-    }
-  }
-
-  /**
-  *******************************************************************************
-  * Function: PrintStatus
-  * @brief Print status reg. result.
-  *
-  * @details This function Print status result into terminal.
-  *
-  * Parameters:
-  * @param [in] tIC      Total IC
-  *
-  * @param [in]  *IC      cell_asic stucture pointer
-  *
-  * @param [in]  type     Enum type of resistor
-  *
-  * @param [in]  grp      Enum type of resistor group
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-
-  void printStatus(uint8_t tIC, cell_asic *IC, TYPE type, GRP grp)
-  {
-    float voltage;
-    for(uint8_t ic = 0; ic < tIC; ic++)
-    {
-      printf("IC%d:\n",(ic+1));
-      if(type == Status)
-      {
-        if(grp == A)
-        {
-          printf("Status A:\n");
-          voltage = getVoltage(IC[ic].stata.vref1p25);
-          printf("VREF1P25:%fV, ", voltage);
-          printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
-          voltage = getVoltage(IC[ic].stata.vreg2);
-          printf("VREG2:%fV\n", (voltage + 1.5));
-          printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == B)
-        {
-          printf("Status B:\n");
-          printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
-          printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
-          printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
-          printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
-          printf("CCount:%d, ",IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n",IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == C)
-        {
-          printf("Status C:\n");
-          printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
-          printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
-          printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
-          printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
-          printf("CT:0x%X, ", IC[ic].statc.ct);
-          printf("CTS:0x%X\n", IC[ic].statc.cts);
-
-          printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
-          printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
-          printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
-          printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
-          printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
-          printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
-          printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
-          printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
-
-          printf("VDE:0x%X, ", IC[ic].statc.vde);
-          printf("VDE1:0x%X, ", IC[ic].statc.vdel);
-          printf("INSYNC:0x%X, ", IC[ic].statc.insync);
-          printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
-          printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
-          printf("THSD:0x%X, ", IC[ic].statc.thsd);
-          printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
-          printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+}
 
-          printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == D)
-        {
-          printf("Status D:\n");
-          printf("OC_CNTR:0x%X, ", IC[ic].statd.oc_cntr);
-          printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == E)
-        {
-          printf("Status E:\n");
-          printf("GPIO:0x%X, ", IC[ic].state.gpio);
-          printf("GPO:0x%X, ", IC[ic].state.gpo);
-          printf("REV_ID:0x%X\n", IC[ic].state.rev);
-          printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else if(grp == ALL_GRP)
-        {
-          printf("Status A:\n");
-          voltage = getVoltage(IC[ic].stata.vref1p25);
-          printf("VREF1P25:%fV, ", voltage);
-          printf("ITMP:%f°C, ", (((IC[ic].stata.itmp * 150e-6 )+ 1.5)/0.0075)-273);
-          voltage = getVoltage(IC[ic].stata.vreg2);
-          printf("VREG2:%fV\n", (voltage + 1.5));
-
-          printf("Status B:\n");
-          printf("OC1MIN:0x%X, ", IC[ic].statb.oc1min);
-          printf("OC1MAX:0x%X, ", IC[ic].statb.oc1max);
-          printf("OC2MIN:0x%X, ", IC[ic].statb.oc2min);
-          printf("OC2MAX:0x%X\n", IC[ic].statb.oc2max);
-
-          printf("Status C:\n");
-          printf("OC1A:0x%X, ", IC[ic].statc.oc1a);
-          printf("~OC1A:0x%X, ", IC[ic].statc.oc1a_inv);
-          printf("OC2A:0x%X, ", IC[ic].statc.oc2a);
-          printf("~OC2A:0x%X, ", IC[ic].statc.oc2a_inv);
-          printf("CT:0x%X, ", IC[ic].statc.ct);
-          printf("CTS:0x%X\n", IC[ic].statc.cts);
-          printf("VA_OV:0x%X, ", IC[ic].statc.va_ov);
-          printf("VA_UV:0x%X ", IC[ic].statc.va_uv);
-          printf("VD_OV:0x%X, ", IC[ic].statc.vd_ov);
-          printf("VD_UV:0x%X, ", IC[ic].statc.vd_uv);
-          printf("OTP1_ED:0x%X, ", IC[ic].statc.otp1_ed);
-          printf("OTP1_MED:0x%X, ", IC[ic].statc.otp1_med);
-          printf("OTP2_ED:0x%X, ", IC[ic].statc.otp2_ed);
-          printf("OTP2_MED:0x%X\n", IC[ic].statc.otp2_med);
-          printf("VDE:0x%X, ", IC[ic].statc.vde);
-          printf("VDE1:0x%X, ", IC[ic].statc.vdel);
-          printf("INSYNC:0x%X, ", IC[ic].statc.insync);
-          printf("SPIFLT:0x%X, ", IC[ic].statc.spiflt);
-          printf("SLEEP:0x%X, ", IC[ic].statc.sleep);
-          printf("THSD:0x%X, ", IC[ic].statc.thsd);
-          printf("TMODCHK:0x%X, ", IC[ic].statc.tmodchk);
-          printf("OSCCHK:0x%X\n", IC[ic].statc.oscchk);
+/**
+*******************************************************************************
+* Function: printMenu
+* @brief Print Command Menu.
+*
+* @details This function print all command menu.
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printMenu()
+{
+  printf("List of ADBMS2950 Command:\n");
+  printf("Write and Read Configuration: 1                              |Read Device SID: 26                 \n");
+  printf("Read Configuration: 2                                        |Soft Reset: 27                      \n");
+  printf("Start ADI1 Conversion(Single Shot): 3                        |Reset cmd counter: 28               \n");
+  printf("Start ADI2 Conversion(Single Shot): 4                        |SNAP(Stop Reg. updates): 29         \n");
+  printf("Start ADI1 Conversion(Continuous): 5                         |UNSNAP(Resume Reg. updates): 30     \n");
+  printf("Start ADI2 Conversion(Continuous): 6                         |Set Reset GPO Pins: 31              \n");
+  printf("Start ADI1 Redundant Conversion(Single Shot): 7              |GPIO SPI Write to Slave: 32         \n");
+  printf("Start ADI1 Redundant Conversion(Continuous): 8               |GPIO SPI Read from Slave: 33        \n");
+  printf("Read CR, VBAT & IVBAT Registers(Single Shot): 9              |GPIO I2C Write to Slave: 34         \n");
+  printf("Read CR, VBAT & IVBAT Registers(Continuous): 10              |GPIO I2C Read from Slave: 35        \n");
+  printf("Read Overcurrent ADC Register(Single Shot): 11               |                                    \n");
+  printf("Read Overcurrent ADC Register(Continuous): 12                |                                    \n");
+  printf("Read Average CR, VBAT & IVBAT Registers(Single Shot): 13     |                                    \n");
+  printf("Read Average CR, VBAT & IVBAT Registers(Continuous): 14      |                                    \n");
+  printf("Read All CR and VBAT Voltage Registers(Single Shot): 15      |                                    \n");
+  printf("Read All CR and VBAT Voltage Registers(Continuous): 16       |                                    \n");
+  printf("Start ADV All Channel Conversion: 17                         |                                    \n");
+  printf("Read All VR Registers(RDV commands): 18                      |                                    \n");
+  printf("Read All RVR Registers(RDRVA & RDRVB commands): 19           |                                    \n");
+  printf("Read All VR & RVR Registers(RDV, RDRVA & RDRVB commands): 20 |                                    \n");
+  printf("Read Voltage Registers(RDAUXC & RDAUXD commands)(NA): 21     |                                    \n");
+  printf("Start ADAUX All Channel Conversion: 22                       |                                    \n");
+  printf("Read ADAUX Measurement: 23                                   |                                    \n");
+  printf("Read Status C Register: 24                                   |                                    \n");
+  printf("Read All Status Registers: 25                                |                                    \n");
 
-          printf("Status D:\n");
-          printf("OC_CNTR:0x%X\n", IC[ic].statd.oc_cntr);
-
-          printf("Status E:\n");
-          printf("GPIO:0x%X, ", IC[ic].state.gpio);
-          printf("GPO:0x%X, ", IC[ic].state.gpo);
-          printf("REV_ID:0x%X\n", IC[ic].state.rev);
-          printf("CCount:%d, ", IC[ic].cccrc.cmd_cntr);
-          printf("PECError:%d\n\n", IC[ic].cccrc.stat_pec);
-        }
-        else{ printf("Wrong Register Group Select\n"); }
-      }
-    }
-  }
-
-  /**
-  *******************************************************************************
-  * Function: printMenu
-  * @brief Print Command Menu.
-  *
-  * @details This function print all command menu.
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printMenu()
-  {
-    printf("List of ADBMS2950 Command:\n");
-    printf("Write and Read Configuration: 1                       |Gpio i2c write to slave: 26  \n");
-    printf("Read Configuration: 2                                 |Gpio i2c read from slave: 27 \n");
-    printf("Start Adi1 Conversion: 3                              |Set reset gpo pins: 28       \n");
-    printf("Start Adi2 Conversion: 4                              |                             \n");
-    printf("Start Adi1 & Adi2 Conversion: 5                       |                             \n");
-    printf("Read Current Registers: 6                             |                             \n");
-    printf("Read Battery Voltage Register: 7                      |                             \n");
-    printf("Read Current and Battery Voltage Register: 8          |                             \n");
-    printf("Read Overcurrent ADC Register: 9                      |                             \n");
-    printf("Read Average Current Register: 10                     |                             \n");
-    printf("Read Average Batter Voltage Register: 11              |                             \n");
-    printf("Read Average Battery Current and Voltage Register: 12 |                             \n");
-    printf("Start Adv Conversion: 13                              |                             \n");
-    printf("Read Voltage Registers: 14                            |                             \n");
-    printf("Read Voltage X Registers: 15                          |                             \n");
-    printf("Read Redundant Voltage Registers: 16                  |                             \n");
-    printf("Start Adaux Conversion: 17                            |                             \n");
-    printf("Read Adaux Measurement: 18                            |                             \n");
-    printf("Read All Status Registers: 19                         |                             \n");
-    printf("Read Device SID: 20                                   |                             \n");
-    printf("Soft Reset: 21                                        |                             \n");
-    printf("Reset cmd counter: 22                                 |                             \n");
-    printf("Snapshot: 23                                          |                             \n");
-    printf("Release Snapshot: 24                                  |                             \n");
-    printf("Gpio spi communication: 25                            |                             \n");
-
-    printf("\n");
-    printf("Print '0' for menu\n");
-    printf("Please enter command: \n");
-    printf("\n\n");
-  }
+  printf("\n");
+  printf("Print '0' for menu\n");
+  printf("Please enter command: \n");
+  printf("\n\n");
+}
 #endif /* MBED */
 
-  /**
-  *******************************************************************************
-  * Function: printMsg
-  * @brief Print Message.
-  *
-  * @details This function print message into terminal.
-  * Parameters:
-  * @param [in] msg    Message string
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printMsg(char *msg)
-  {
+/**
+*******************************************************************************
+* Function: printMsg
+* @brief Print Message.
+*
+* @details This function print message into terminal.
+* Parameters:
+* @param [in]   msg    Message string
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printMsg(char *msg)
+{
 #ifdef MBED
-    pc.printf("%s\n\n", msg);
+  pc.printf("%s\n\n", msg);
 #else /* IAR */
-    printf("%s\n\n", msg);
+  printf("%s\n\n", msg);
 #endif /* MBED */
-  }
+}
+
+/**
+*******************************************************************************
+* Function: printPollAdcConvTime
+* @brief Print Poll adc conversion Time.
+*
+* @details This function print poll adc conversion Time.
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printPollAdcConvTime(int count)
+{
+#ifdef MBED
+  pc.printf("Adc Conversion Time = %fms\n", (float)(count/1000.0));
+#else /* IAR */
+  printf("Adc Conversion Time = %fms\n", (float)(count/64000.0));
+#endif /* MBED */
+}
 
-  /**
-  *******************************************************************************
-  * Function: printPollAdcConvTime
-  * @brief Print Poll adc conversion Time.
-  *
-  * @details This function print poll adc conversion Time.
-  *
-  * @return None
-  *
-  *******************************************************************************
-  */
-  void printPollAdcConvTime(int count)
-  {
+/**
+*******************************************************************************
+* Function: printResultCount
+* @brief Print Result Count.
+*
+* @details This function print the continuous measurment result count.
+*
+* @return None
+*
+*******************************************************************************
+*/
+void printResultCount(int count)
+{
 #ifdef MBED
-    pc.printf("Adc Conversion Time = %fms\n", (float)(count/1000.0));
+  pc.printf("Result Count:%d\n", (count+1));
 #else /* IAR */
-    printf("Adc Conversion Time = %fms\n", (float)(count/64000.0));
+  printf("Result Count:%d\n", (count+1));
 #endif /* MBED */
-  }
+}
 
-  /**
-  *******************************************************************************
-  * Function: getVoltage
-  * @brief Get Voltage with multiplication factor.
-  *
-  * @details This function calculates the voltage.
-  *
-  * Parameters:
-  * @param [in] data    Register value(uint16_t)
-  *
-  * @return Voltage(float)
-  *
-  *******************************************************************************
-  */
-  float getVoltage(int data)
-  {
-    float voltage;
-    voltage = 100e-6 * (int16_t)data; // interpreting as 16-bit to be sure of length so signed works
-    return voltage;
-  }
+/**
+*******************************************************************************
+* Function: readUserInupt
+* @brief Read command input & print into console.
+*
+* @details This function print the input command & print into console.
+*
+* @return None
+*
+*******************************************************************************
+*/
+void readUserInupt(int *user_command)
+{
+#ifdef MBED
+    pc.scanf("%d", user_command);
+    pc.printf("Enter cmd:%d\n", *user_command);
+#else /* IAR */
+    scanf("%d", user_command);
+    printf("Enter cmd:%d\n", *user_command);
+#endif /* MBED */
+}
 
-  /**
-  *******************************************************************************
-  * Function: getCurrent
-  * @brief Get Current with multiplication factor.
-  *
-  * @details This function calculates the current.
-  *
-  * Parameters:
-  * @param [in] data    Register value(uint32_t)
-  *
-  * @return Current(float)
-  *
-  *******************************************************************************
-  */
-  float getCurrent(uint32_t data)
-  {
-    float current;
-    current = 1e-6 * ((int32_t)(data << (32-18)) >> (32-18));
-    return current;
-  }
+/**
+*******************************************************************************
+* Function: getVoltage
+* @brief Get Voltage with multiplication factor.
+*
+* @details This function calculates the voltage.
+*
+* Parameters:
+* @param [in]   data    Register value(uint16_t)
+*
+* @return Voltage(float)
+*
+*******************************************************************************
+*/
+float getVoltage(int data)
+{
+  float voltage;
+  voltage = 100e-6 * (int16_t)data; /* Interpreting as 16-bit to be sure of length so signed works */
+  return voltage;
+}
+
+/**
+*******************************************************************************
+* Function: getCurrent
+* @brief Get Current with multiplication factor.
+*
+* @details This function calculates the current.
+*
+* Parameters:
+* @param [in]   data    Register value(uint32_t)
+*
+* @return Current(float)
+*
+*******************************************************************************
+*/
+float getCurrent(uint32_t data)
+{
+  float current;
+  current = 1e-6 * ((int32_t)(data << (32-18)) >> (32-18));
+  return current;
+}
 
-  /**
-  *******************************************************************************
-  * Function: getAvgCurrent
-  * @brief Get Average Current with multiplication factor.
-  *
-  * @details This function calculates the current.
-  *
-  * Parameters:
-  * @param [in] data    Register value(uint32_t)
-  *
-  * @return Current(float)
-  *
-  *******************************************************************************
-  */
-  float getAvgCurrent(uint32_t data)
-  {
-    float current;
-    current = 1e-6 * 0.125 * ((int32_t)(data << (32-18)) >> (32-18));
-    return current;
-  }
+/**
+*******************************************************************************
+* Function: getAvgCurrent
+* @brief Get Average Current with multiplication factor.
+*
+* @details This function calculates the current.
+*
+* Parameters:
+* @param [in]   data    Register value(uint32_t)
+*
+* @return Current(float)
+*
+*******************************************************************************
+*/
+float getAvgCurrent(uint32_t data)
+{
+  float current;
+  current = 1e-6 * 0.125 * ((int32_t)(data << (32-24)) >> (32-24));
+  return current;
+}
 
-  /**
-  *******************************************************************************
-  * Function: getOverCurrent
-  * @brief Get Over Current with multiplication factor.
-  *
-  * @details This function calculates the over current.
-  *
-  * Parameters:
-  * @param [in] data    Register value(uint8_t)
-  *
-  * @return Current(float)
-  *
-  *******************************************************************************
-  */
-  float getOverCurrent(uint8_t data)
-  {
-    float over_current;
-    over_current = 0.005 * ((int8_t)(data << (8-7)) >> (8-7));
-    return over_current;
-  }
+/**
+*******************************************************************************
+* Function: getAvgVbat
+* @brief Get Average VBAT with multiplication factor.
+*
+* @details This function calculates the avg vbat.
+*
+* Parameters:
+* @param [in]   data    Register value(uint32_t)
+*
+* @return Current(float)
+*
+*******************************************************************************
+*/
+float getAvgVbat(uint32_t data)
+{
+  float avgvbat;
+  avgvbat = 100e-6 * 0.125 * ((int32_t)(data << (32-24)) >> (32-24));
+  return avgvbat;
+}
+
+/**
+*******************************************************************************
+* Function: getOverCurrent
+* @brief Get Over Current with multiplication factor.
+*
+* @details This function calculates the over current.
+*
+* Parameters:
+* @param [in]   data    Register value(uint8_t)
+*
+* @return Current(float)
+*
+*******************************************************************************
+*/
+float getOverCurrent(uint8_t data)
+{
+  float over_current;
+  over_current = 0.005 * ((int8_t)(data << (8-7)) >> (8-7));
+  return over_current;
+}
 
 /** @}*/
 /** @}*/
\ No newline at end of file