Shivam Garg
/
EVAL-ADBMS2950_copy
Diff: program/src/print_result.cpp
- Revision:
- 1:94a3e8fe5e25
- Child:
- 2:4a10c825f860
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/program/src/print_result.cpp Fri Jul 24 02:01:57 2020 +0000 @@ -0,0 +1,1660 @@ +/** +******************************************************************************** +* +* @file: print_result.c +* +* @brief: This file contains the print result function implementation. +* +* @details: +* +******************************************************************************* +Copyright(c) 2020 Analog Devices, Inc. All Rights Reserved. This software is +proprietary & confidential to Analog Devices, Inc. and its licensors. By using +this software you agree to the terms of the associated Analog Devices License +Agreement. +******************************************************************************* +*/ +/*! \addtogroup Main +* @{ +*/ + +/*! \addtogroup Print_Result +* @{ +*/ + +#include "application.h" +#ifdef MBED +extern Serial pc; +/** +******************************************************************************* +* 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++) + { + pc.printf("IC%d:\n",(ic+1)); + if(type == Config) + { + if(grp == A) + { + pc.printf("Write Config A:\n"); + pc.printf("0x%X, ", IC[ic].configa.tx_data[0]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[1]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[2]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[3]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[4]); + pc.printf("0x%X\n\n", IC[ic].configa.tx_data[5]); + } + else if(grp == B) + { + pc.printf("Write Config B:\n"); + pc.printf("0x%X, ", IC[ic].configb.tx_data[0]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[1]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[2]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[3]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[4]); + pc.printf("0x%X\n\n", IC[ic].configb.tx_data[5]); + } + else if(grp == ALL_GRP) + { + pc.printf("Write Config A:\n"); + pc.printf("0x%X, ", IC[ic].configa.tx_data[0]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[1]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[2]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[3]); + pc.printf("0x%X, ", IC[ic].configa.tx_data[4]); + pc.printf("0x%X\n\n", IC[ic].configa.tx_data[5]); + + pc.printf("Write Config B:\n"); + pc.printf("0x%X, ", IC[ic].configb.tx_data[0]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[1]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[2]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[3]); + pc.printf("0x%X, ", IC[ic].configb.tx_data[4]); + pc.printf("0x%X\n\n", IC[ic].configb.tx_data[5]); + } + else{ pc.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++) + { + pc.printf("IC%d:\n",(ic+1)); + if(type == Config) + { + if(grp == A) + { + pc.printf("Read Config A:\n"); + pc.printf("0x%X, ", IC[ic].configa.rx_data[0]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[1]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[2]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[3]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[4]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[5]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec); + } + else if(grp == B) + { + pc.printf("Read Config B:\n"); + pc.printf("0x%X, ", IC[ic].configb.rx_data[0]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[1]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[2]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[3]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[4]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[5]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec); + } + else if(grp == ALL_GRP) + { + pc.printf("Read Config A:\n"); + pc.printf("0x%X, ", IC[ic].configa.rx_data[0]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[1]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[2]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[3]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[4]); + pc.printf("0x%X, ", IC[ic].configa.rx_data[5]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n",IC[ic].cccrc.cfgr_pec); + + pc.printf("Read Config B:\n"); + pc.printf("0x%X, ", IC[ic].configb.rx_data[0]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[1]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[2]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[3]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[4]); + pc.printf("0x%X, ", IC[ic].configb.rx_data[5]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n\n",IC[ic].cccrc.cfgr_pec); + } + else{ pc.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) +{ + for(uint8_t ic = 0; ic < tIC; ic++) + { + pc.printf("IC%d:\n",(ic+1)); + if(type == SID) + { + pc.printf("Read Device SID:\n"); + pc.printf("0x%X, ", IC[ic].sid.sid[0]); + pc.printf("0x%X, ", IC[ic].sid.sid[1]); + pc.printf("0x%X, ", IC[ic].sid.sid[2]); + pc.printf("0x%X, ", IC[ic].sid.sid[3]); + pc.printf("0x%X, ", IC[ic].sid.sid[4]); + pc.printf("0x%X, ", IC[ic].sid.sid[5]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n\n",IC[ic].cccrc.sid_pec); + } + else{ pc.printf("Wrong Register Type Select\n"); } + } +} + +/** +******************************************************************************* +* 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++) + { + pc.printf("IC%d:\n",(ic+1)); + if(type == Comm) + { + pc.printf("Write Comm Data:\n"); + pc.printf("0x%X, ", IC[ic].com.tx_data[0]); + pc.printf("0x%X, ", IC[ic].com.tx_data[1]); + pc.printf("0x%X, ", IC[ic].com.tx_data[2]); + pc.printf("0x%X, ", IC[ic].com.tx_data[3]); + pc.printf("0x%X, ", IC[ic].com.tx_data[4]); + pc.printf("0x%X\n\n", IC[ic].com.tx_data[5]); + } + else{ pc.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) +{ + for(uint8_t ic = 0; ic < tIC; ic++) + { + pc.printf("IC%d:\n",(ic+1)); + if(type == Comm) + { + pc.printf("Read Comm Data:\n"); + pc.printf("ICOM0:0x%X, ", IC[ic].rx_comm.icomm[0]); + pc.printf("ICOM1:0x%X, ", IC[ic].rx_comm.icomm[1]); + pc.printf("ICOM2:0x%X\n", IC[ic].rx_comm.icomm[2]); + pc.printf("FCOM0:0x%X, ", IC[ic].rx_comm.fcomm[0]); + pc.printf("FCOM1:0x%X, ", IC[ic].rx_comm.fcomm[1]); + pc.printf("FCOM2:0x%X\n", IC[ic].rx_comm.fcomm[2]); + pc.printf("DATA0:0x%X, ", IC[ic].rx_comm.data[0]); + pc.printf("DATA1:0x%X, ", IC[ic].rx_comm.data[1]); + pc.printf("DATA2:0x%X\n", IC[ic].rx_comm.data[2]); + pc.printf("CCount:%d,",IC[ic].cccrc.cmd_cntr); + pc.printf("PECError:%d\n\n",IC[ic].cccrc.comm_pec); + } + else{ pc.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++) + { + 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("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) + { + 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++) + { + 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)) + { + 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("V%2d = %7.4fV \n", index, voltage); + } + else{pc.printf("V%2d = %7.4fV \n",(index+1), voltage);} + } + } + else if(type == Vrx) + { + 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);} + } + else if(type == Rvr) + { + 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); + } + } + 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: %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); + } + } + + /** + ******************************************************************************* + * 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++) + { + 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); + } + } + + /** + ******************************************************************************* + * 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:%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); + } + } + + /** + ******************************************************************************* + * 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:%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); + } + } + + /** + ******************************************************************************* + * 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); + } + } + + /** + ******************************************************************************* + * 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); + } + } + + /** + ******************************************************************************* + * 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("VREF2:%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("VREF2:%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); + + 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 \n"); + pc.printf("Read Configuration: 2 \n"); + pc.printf("Start Adi1 Conversion: 3 \n"); + pc.printf("Start Adi2 Conversion: 4 \n"); + pc.printf("Read Current Registers: 5 \n"); + pc.printf("Read Battery Voltage Register: 6 \n"); + pc.printf("Read Current and Battery Voltage Register: 7 \n"); + pc.printf("Read Overcurrent ADC Register: 8 \n"); + pc.printf("Read Average Current Register: 9 \n"); + pc.printf("Read Average Batter Voltage Register: 10 \n"); + pc.printf("Read Average Battery Current and Voltage Register: 11 \n"); + pc.printf("Start Adv Conversion: 12 \n"); + pc.printf("Read Voltage Registers: 13 \n"); + pc.printf("Read Voltage X Registers: 14 \n"); + pc.printf("Read Redundant Voltage Registers: 15 \n"); + pc.printf("Start Adaux Conversion: 16 \n"); + pc.printf("Read Adaux Measurment: 17 \n"); + pc.printf("Read All Status Registers: 18 \n"); + pc.printf("Read Device SID: 19 \n"); + pc.printf("Soft Reset: 20 \n"); + pc.printf("Reset cmd counter: 21 \n"); + pc.printf("Snapshot: 22 \n"); + pc.printf("Release Snapshot: 23 \n"); + pc.printf("Gpio spi communication: 24 \n"); + pc.printf("Gpio i2c write to slave: 25 \n"); + pc.printf("Gpio i2c read from slave: 26 \n"); + pc.printf("Set reset gpo pins: 27 \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) + { + for(uint8_t ic = 0; ic < tIC; ic++) + { + printf("IC%d:\n",(ic+1)); + if(type == Config) + { + 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 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) + { + for(uint8_t ic = 0; ic < tIC; ic++) + { + printf("IC%d:\n",(ic+1)); + if(type == SID) + { + 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: 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]); + } + 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) + { + for(uint8_t ic = 0; ic < tIC; ic++) + { + 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"); } + } + } + + /** + ******************************************************************************* + * 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:%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); + } + } + + /** + ******************************************************************************* + * 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(index == 8) + { + 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("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); + } + } + 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) + { + 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); + } + } + + /** + ******************************************************************************* + * 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++) + { + 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); + } + } + + /** + ******************************************************************************* + * 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:%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); + } + } + + /** + ******************************************************************************* + * 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); + } + } + + /** + ******************************************************************************* + * 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); + } + } + + /** + ******************************************************************************* + * 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("VREF2:%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("VREF2:%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: 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 \n"); + printf("Read Configuration: 2 \n"); + printf("Start Adi1 Conversion: 3 \n"); + printf("Start Adi2 Conversion: 4 \n"); + printf("Read Current Registers: 5 \n"); + printf("Read Battery Voltage Register: 6 \n"); + printf("Read Current and Battery Voltage Register: 7 \n"); + printf("Read Overcurrent ADC Register: 8 \n"); + printf("Read Average Current Register: 9 \n"); + printf("Read Average Batter Voltage Register: 10 \n"); + printf("Read Average Battery Current and Voltage Register: 11 \n"); + printf("Start Adv Conversion: 12 \n"); + printf("Read Voltage Registers: 13 \n"); + printf("Read Voltage X Registers: 14 \n"); + printf("Read Redundant Voltage Registers: 15 \n"); + printf("Start Adaux Conversion: 16 \n"); + printf("Read Adaux Measurment: 17 \n"); + printf("Read All Status Registers: 18 \n"); + printf("Read Device SID: 19 \n"); + printf("Soft Reset: 20 \n"); + printf("Reset cmd counter: 21 \n"); + printf("Snapshot: 22 \n"); + printf("Release Snapshot: 23 \n"); + printf("Gpio spi communication: 24 \n"); + printf("Gpio i2c write to slave: 25 \n"); + printf("Gpio i2c read from slave: 26 \n"); + printf("Set reset gpo pins: 27 \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) + { +#ifdef MBED + pc.printf("%s\n\n", msg); +#else /* IAR */ + 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: 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: 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