@@ -87,6 +87,8 @@ static void subcmd_status(int argc, char *argv[])
8787 FEB_Console_Printf ("Min Temp: %.1fC Max Temp: %.1fC Avg: %.1fC\r\n" , FEB_ADBMS_GET_ACC_MIN_Temp (),
8888 FEB_ADBMS_GET_ACC_MAX_Temp (), FEB_ADBMS_GET_ACC_AVG_Temp ());
8989 FEB_Console_Printf ("Balancing: %s\r\n" , FEB_Cell_Balancing_Status () ? "ON" : "OFF" );
90+ FEB_Console_Printf ("Cell delta: %.0fmV Balance done: %s\r\n" , FEB_ADBMS_GET_Cell_Voltage_Delta_mV (),
91+ FEB_Cell_Balance_Complete () ? "YES" : "NO" );
9092 FEB_Console_Printf ("Error Type: 0x%02X\r\n" , FEB_ADBMS_Get_Error_Type ());
9193}
9294
@@ -106,9 +108,13 @@ static void subcmd_cells(int argc, char *argv[])
106108 {
107109 float v_c = FEB_ADBMS_GET_Cell_Voltage (bank , cell );
108110 float v_s = FEB_ADBMS_GET_Cell_Voltage_S (bank , cell );
109- FEB_Console_Printf (" C%02d: %.3f/%.3f\r\n" , cell + 1 , v_c , v_s );
111+ uint8_t bal = FEB_ADBMS_GET_Cell_Discharging (bank , cell );
112+ FEB_Console_Printf (" C%02d: %.3f/%.3f%s\r\n" , cell + 1 , v_c , v_s , bal ? " *BAL" : "" );
110113 }
111114 }
115+ FEB_Console_Printf ("Balancing: %u cells active | delta %.0fmV | done: %s\r\n" ,
116+ (unsigned int )FEB_ADBMS_GET_Balancing_Cell_Count (), FEB_ADBMS_GET_Cell_Voltage_Delta_mV (),
117+ FEB_Cell_Balance_Complete () ? "YES" : "NO" );
112118}
113119
114120/* ============================================================================
@@ -802,9 +808,10 @@ static void cmd_bms(int argc, char *argv[]);
802808 * CSV-Mode Handlers (one per spec command, registered at top level)
803809 * ============================================================================ */
804810
805- /* Mandatory per spec. Emits voltage,<module>,<cell>,<primary>,<secondary>
811+ /* Mandatory per spec. Emits voltage,<module>,<cell>,<primary>,<secondary>,<balancing>
806812 * for every cell, then temp,<module>,<sensor>,<temp> for every sensor.
807- * "module" is the 1-indexed bank number. */
813+ * "module" is the 1-indexed bank number; "balancing" is 1 if the cell's discharge
814+ * FET is active this balance cycle, else 0. */
808815static void cmd_cell_stats_csv (int argc , char * argv [])
809816{
810817 (void )argc ;
@@ -816,7 +823,8 @@ static void cmd_cell_stats_csv(int argc, char *argv[])
816823 {
817824 float v_c = FEB_ADBMS_GET_Cell_Voltage (bank , cell );
818825 float v_s = FEB_ADBMS_GET_Cell_Voltage_S (bank , cell );
819- FEB_Console_CsvEmit ("voltage" , "%d,%d,%.3f,%.3f" , bank + 1 , cell + 1 , v_c , v_s );
826+ uint8_t bal = FEB_ADBMS_GET_Cell_Discharging (bank , cell );
827+ FEB_Console_CsvEmit ("voltage" , "%d,%d,%.3f,%.3f,%d" , bank + 1 , cell + 1 , v_c , v_s , bal );
820828 }
821829 }
822830 for (int bank = 0 ; bank < FEB_NBANKS ; bank ++ )
@@ -858,13 +866,16 @@ static void cmd_status_csv(int argc, char *argv[])
858866 }
859867 }
860868
861- /* Body fields: state,pack_v,min_c,max_c,min_s,max_s,min_t,max_t,avg_t,balancing,err_type */
862- FEB_Console_CsvEmit ("status" , "%s,%.2f,%.3f,%.3f,%.3f,%.3f,%.1f,%.1f,%.1f,%d,0x%02X" ,
869+ /* Body fields: state,pack_v,min_c,max_c,min_s,max_s,min_t,max_t,avg_t,balancing,err_type,balance_done,delta_mV */
870+ FEB_Console_CsvEmit ("status" , "%s,%.2f,%.3f,%.3f,%.3f,%.3f,%.1f,%.1f,%.1f,%d,0x%02X,%d,%.0f " ,
863871 FEB_CAN_State_GetStateName (FEB_SM_Get_Current_State ()), FEB_ADBMS_GET_ACC_Total_Voltage (), min_c ,
864872 max_c , min_s , max_s , FEB_ADBMS_GET_ACC_MIN_Temp (), FEB_ADBMS_GET_ACC_MAX_Temp (),
865- FEB_ADBMS_GET_ACC_AVG_Temp (), FEB_Cell_Balancing_Status () ? 1 : 0 , FEB_ADBMS_Get_Error_Type ());
873+ FEB_ADBMS_GET_ACC_AVG_Temp (), FEB_Cell_Balancing_Status () ? 1 : 0 , FEB_ADBMS_Get_Error_Type (),
874+ FEB_Cell_Balance_Complete () ? 1 : 0 , FEB_ADBMS_GET_Cell_Voltage_Delta_mV ());
866875}
867876
877+ /* Emits voltage,<module>,<cell>,<primary>,<secondary>,<balancing> per cell.
878+ * "balancing" is 1 if the cell's discharge FET is active this cycle, else 0. */
868879static void cmd_cells_csv (int argc , char * argv [])
869880{
870881 (void )argc ;
@@ -875,7 +886,8 @@ static void cmd_cells_csv(int argc, char *argv[])
875886 {
876887 float v_c = FEB_ADBMS_GET_Cell_Voltage (bank , cell );
877888 float v_s = FEB_ADBMS_GET_Cell_Voltage_S (bank , cell );
878- FEB_Console_CsvEmit ("voltage" , "%d,%d,%.3f,%.3f" , bank + 1 , cell + 1 , v_c , v_s );
889+ uint8_t bal = FEB_ADBMS_GET_Cell_Discharging (bank , cell );
890+ FEB_Console_CsvEmit ("voltage" , "%d,%d,%.3f,%.3f,%d" , bank + 1 , cell + 1 , v_c , v_s , bal );
879891 }
880892 }
881893}
0 commit comments