/** ****************************************************************************** * @file dflash_sbs.c * @author AMG Energy Solution Team * @version V1.0.0 * @date 07-Feb-2022 * @brief This file provides all the codes of system parameter functions. ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * *

© COPYRIGHT 2022 AMG

****************************************************************************** */ /** @addtogroup mBMS2 * @{ */ /* Includes ------------------------------------------------------------------*/ #include "includes.h" #include "dflash_sbs.h" #include "console.h" #include "asutil.h" #include "device_param.h" #ifdef CONSOLE_DEBUG /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ uint8_t SSet_SbsCfg(uint8_t *text, uint8_t aDevice); /* Private functions ---------------------------------------------------------*/ /* Command processing in SETTING STATE */ int8_t Process_DataSBSSet(uint8_t *text, uint16_t size) { uint16_t i, ret; /* Invalid command if space is in first position */ if (size > 1) {if (text[1] != ' ') return(0);} text[size] = 0x00; ret = 1; switch (text[0]) { case 'o': /* Switch to operating mode */ screenmode = OP_MODE; ViewScreen(); break; case 's': /* Switch to setting status */ screenmode = SET_MODE; ViewScreen(); break; case 'd': /* Switch to diagnostic mode */ screenmode = DIAG_MODE; ViewScreen(); break; case '1': // SBS Data Parameter Setting i = SSet_SbsCfg(&text[2],text[0]); if (i == 0) UserMessage("COMMAND COMPLETE"); else if (i == 1) UserMessage("COMMAND FORMAT ERROR"); /* setting format error */ else UserMessage("COMMAND LIMIT ERROR"); /* setting limit error */ break; case 'I': SBS_InitData(); Save_Param(); break; default : ret = 0; break; } return(ret); } uint8_t SSet_SbsCfg(uint8_t *text, uint8_t aDevice) { uint16_t size, i, j; int16_t aParam[4]; uint8_t temp[10]; uint8_t ret; uint8_t cmd; ret = 0; size = 0; while (text[size] != 0x00) size++; /* Measure total string length */ switch (aDevice) { case '1': // Data i = 0; if (size < 2 ) return(1); j = FIND_CHAR((uint8_t *)&text[i], temp, size - i, ' '); i = i + j + 1; temp[j] = 0x00; cmd = temp[0]; j = FIND_CHAR((uint8_t *)&text[i], temp, size - i, ' '); i = i + j + 1; temp[j] = 0x00; switch (cmd) { case '1': aParam[0] = strtohex((char *)temp, j); break; /* Hex Value */ case '2': aParam[0] = StrToInt(temp, j); break; /* Int Value */ case '3': aParam[0] = strtohex((char *)temp, j); break; /* Hex Value */ case '4': aParam[0] = strtohex((char *)temp, j); break; /* Hex Value */ case '5': aParam[0] = strtohex((char *)temp, j); break; /* Hex Value */ case '6': aParam[0] = StrToInt(temp, j); break; /* Int Value */ case '7': aParam[0] = StrToInt(temp, j); break; /* Int Value */ case '8': aParam[0] = StrToInt(temp, j); break; /* Int Value */ case '9': aParam[0] = StrToInt(temp, j); break; /* Int Value */ case 'a': aParam[0] = StrToInt(temp, j); break; /* Int Value */ } switch (cmd) { case '1': device_param.sbs.data.System_ID = aParam[0]; break; case '2': device_param.sbs.data.Design_Voltage = aParam[0]; break; case '3': device_param.sbs.data.Spec_Info = aParam[0]; break; case '4': device_param.sbs.data.Manuf_Date = aParam[0]; break; case '5': device_param.sbs.data.Ser_Num = aParam[0]; break; case '6': device_param.sbs.data.Cycle_Count = aParam[0]; break; case '7': device_param.sbs.data.CC_Threshold = aParam[0]; break; case '8': device_param.sbs.data.Design_Capacity = aParam[0]; break; case '9': device_param.sbs.data.Design_Energy = aParam[0]; break; case 'a': device_param.sbs.data.Full_Charge_Capacity = aParam[0]; break; default : return (1); } Save_Param(); break; default: ret = 1; break; } return(ret); /* Setting value OK */ } void SBSDisplayData(uint8_t p) { uint8_t text[20]; // Initial_Battery_Mode (Offset 0) if (p || (dis_device_param.sbs.data.System_ID != device_param.sbs.data.System_ID)) { sprintf((char *)text, "%04X", device_param.sbs.data.System_ID); GreenOutXY(20, 3, text); dis_device_param.sbs.data.System_ID = device_param.sbs.data.System_ID; } // Initial_Battery_Mode (Offset 2) if (p || (dis_device_param.sbs.data.Design_Voltage != device_param.sbs.data.Design_Voltage)) { sprintf((char *)text, "%5d", device_param.sbs.data.Design_Voltage); GreenOutXY(19, 4, text); dis_device_param.sbs.data.Design_Voltage = device_param.sbs.data.Design_Voltage; } // Spec_Info (Offset 4) if (p || (dis_device_param.sbs.data.Spec_Info != device_param.sbs.data.Spec_Info)) { sprintf((char *)text, "%04X", device_param.sbs.data.Spec_Info); GreenOutXY(20, 5, text); dis_device_param.sbs.data.Spec_Info = device_param.sbs.data.Spec_Info; } // Manuf_Date (Offset 6) if (p || (dis_device_param.sbs.data.Manuf_Date != device_param.sbs.data.Manuf_Date)) { sprintf((char *)text, "%04X", device_param.sbs.data.Manuf_Date); GreenOutXY(20, 6, text); dis_device_param.sbs.data.Manuf_Date = device_param.sbs.data.Manuf_Date; } // Ser_Num (Offset 8) if (p || (dis_device_param.sbs.data.Ser_Num != device_param.sbs.data.Ser_Num)) { sprintf((char *)text, "%04X", device_param.sbs.data.Ser_Num); GreenOutXY(20, 7, text); dis_device_param.sbs.data.Ser_Num = device_param.sbs.data.Ser_Num; } // Cycle_Count (Offset 10) if (p || (dis_device_param.sbs.data.Cycle_Count != device_param.sbs.data.Cycle_Count)) { sprintf((char *)text, "%5d", device_param.sbs.data.Cycle_Count); GreenOutXY(19, 8, text); dis_device_param.sbs.data.Cycle_Count = device_param.sbs.data.Cycle_Count; } // CC_Threshold (Offset 12) if (p || (dis_device_param.sbs.data.CC_Threshold != device_param.sbs.data.CC_Threshold)) { sprintf((char *)text, "%5d", device_param.sbs.data.CC_Threshold); GreenOutXY(19, 9, text); dis_device_param.sbs.data.CC_Threshold = device_param.sbs.data.CC_Threshold; } // Design_Capacity (Offset 16) if (p || (dis_device_param.sbs.data.Design_Capacity != device_param.sbs.data.Design_Capacity)) { sprintf((char *)text, "%6.2f", (float)device_param.sbs.data.Design_Capacity / 100); GreenOutXY(18, 10, text); dis_device_param.sbs.data.Design_Capacity = device_param.sbs.data.Design_Capacity; } // Design_Energy (Offset 18) if (p || (dis_device_param.sbs.data.Design_Energy != device_param.sbs.data.Design_Energy)) { sprintf((char *)text, "%7d", device_param.sbs.data.Design_Energy); GreenOutXY(17, 11, text); dis_device_param.sbs.data.Design_Energy = device_param.sbs.data.Design_Energy; } // Full_Charge_Capacity (Offset 20) if (p || (dis_device_param.sbs.data.Full_Charge_Capacity != device_param.sbs.data.Full_Charge_Capacity)) { sprintf((char *)text, "%6.2f", (float)device_param.sbs.data.Full_Charge_Capacity / 100); GreenOutXY(18, 12, text); dis_device_param.sbs.data.Full_Charge_Capacity = device_param.sbs.data.Full_Charge_Capacity; } } void SBSDisplay(uint8_t p) { SBSDisplayData(p); } #endif // #ifdef CONSOLE_DEBUG void SBS_InitData(void) { device_param.sbs.data.System_ID = 1; device_param.sbs.data.Design_Voltage = 48000; device_param.sbs.data.Spec_Info = 0x0000; device_param.sbs.data.Manuf_Date = 0; device_param.sbs.data.Ser_Num = 0; device_param.sbs.data.Cycle_Count = 0; device_param.sbs.data.CC_Threshold = 10000; device_param.sbs.data.Design_Capacity = 10000; device_param.sbs.data.Design_Energy = 0; device_param.sbs.data.Full_Charge_Capacity = 10000; } /*******************(C)COPYRIGHT 2022 AMG ********************END OF FILE******/