feat: KT mBMS 펌웨어 3종(HW1/2/3) 및 통합 빌드 환경 초기 커밋 (V4.0.0.1)
This commit is contained in:
669
APP_R3221/App/Source/console.c
Normal file
669
APP_R3221/App/Source/console.c
Normal file
@@ -0,0 +1,669 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file console.c
|
||||
* @author AMG Energy Solution Team
|
||||
* @version V1.0.0
|
||||
* @date 07-Feb-2022
|
||||
* @brief This file provides all the code of the debug console 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.
|
||||
*
|
||||
* <h2><center>© COPYRIGHT 2022 AMG</center></h2>
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup mBMS2
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#ifdef CONSOLE_DEBUG
|
||||
#include "screen.h"
|
||||
#endif
|
||||
|
||||
#include <includes.h>
|
||||
#include "console.h"
|
||||
#include "delay.h"
|
||||
#include "app_ver.h"
|
||||
#include "usart.h"
|
||||
#include "can.h"
|
||||
#include "relay.h"
|
||||
#include "brtc.h"
|
||||
#include "w25qxx.h"
|
||||
#include "flash_if.h"
|
||||
#include "asutil.h"
|
||||
#include "ff.h"
|
||||
#include "ff_shell.h"
|
||||
#include "adc.h"
|
||||
#include "temp.h"
|
||||
#include "vi.h"
|
||||
#include "display_status.h"
|
||||
#include "dflash_sf1.h"
|
||||
#include "dflash_sbs.h"
|
||||
#include "dflash_chg_ctrl.h"
|
||||
#include "dflash_cal.h"
|
||||
#include "log.h"
|
||||
#include "afe_comm.h"
|
||||
#include "can_comm.h"
|
||||
#include "can_inv_data_process.h"
|
||||
#include "device_param.h"
|
||||
//#include "modbus.h"
|
||||
#include "io.h"
|
||||
#include "calc_soc.h"
|
||||
#include "task_manager.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
int8_t screenmode;
|
||||
uint8_t position;
|
||||
|
||||
uint32_t BakOSCtxSwCtr; /* Counter of number of context switches */
|
||||
uint32_t BakLocalTime; /* this variable is used to create a time reference incremented by 10ms */
|
||||
|
||||
uint8_t console_text[128];
|
||||
uint8_t display_text[81];
|
||||
|
||||
/* Private prototype functions -----------------------------------------------*/
|
||||
void DebugConsole(void);
|
||||
void Console(uint8_t *one);
|
||||
void Prompt(void);
|
||||
|
||||
int8_t Process_Data(uint8_t *text, uint16_t size);
|
||||
int8_t Process_DataSet(uint8_t *text, uint16_t size);
|
||||
int8_t Process_CurrentDataSet(uint8_t *text, uint16_t size);
|
||||
int8_t Process_DataDiagnostic(uint8_t *text, uint16_t size);
|
||||
int8_t Process_DataNetSet(uint8_t *text, uint16_t size);
|
||||
int8_t Process_OSStatus(uint8_t *text, uint16_t size);
|
||||
int8_t Process_DataChgCtrlCfgSet(uint8_t *text, uint16_t size);
|
||||
|
||||
extern void ff_process(void);
|
||||
|
||||
void Console_Initial(void)
|
||||
{
|
||||
position = 0;
|
||||
screenmode = OP_MODE;
|
||||
}
|
||||
|
||||
void AppTaskDebug(void)
|
||||
{
|
||||
InitTimer();
|
||||
Console_Initial();
|
||||
SOC_Init();
|
||||
|
||||
while (DEF_TRUE)
|
||||
{
|
||||
#ifdef CONSOLE_DEBUG
|
||||
DebugConsole();
|
||||
#endif
|
||||
ProcessSOC();
|
||||
|
||||
if (device_status.battery_status.bit.INIT == true)
|
||||
{
|
||||
LoggingProcess();
|
||||
SaveStoreSOC();
|
||||
CheckTimeOutFatfsSem();
|
||||
}
|
||||
/* Reload IWDG counter */
|
||||
WDT_RefreshCounter();
|
||||
|
||||
delay_os_ms(1);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONSOLE_DEBUG
|
||||
|
||||
uint16_t debug_recv_data(uint8_t *data)
|
||||
{
|
||||
uint16_t len = 0;
|
||||
|
||||
if (Debug_GetChar(data) == true) len = 1;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
void DebugConsole(void)
|
||||
{
|
||||
uint8_t one[20];
|
||||
uint16_t i, len;
|
||||
|
||||
len = debug_recv_data(one);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
Console(&one[i]);
|
||||
|
||||
DisplayScreen(false);
|
||||
}
|
||||
|
||||
void Console(uint8_t *one)
|
||||
{
|
||||
uint8_t i, ok;
|
||||
|
||||
ok = 0;
|
||||
|
||||
switch (one[0])
|
||||
{
|
||||
case 0x0d: /* ENTER (CR) value */
|
||||
if (position == 0)
|
||||
{
|
||||
ViewScreen();
|
||||
Prompt(); /* Print prompt */
|
||||
position = 0;
|
||||
for (i = 0; i < 80; i++) console_text[i] = 0x00;
|
||||
break;
|
||||
}
|
||||
switch (screenmode)
|
||||
{
|
||||
case OP_MODE: /* operating state */
|
||||
ok = Process_Data(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case SET_MODE: /* setting state */
|
||||
ok = Process_DataSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case OS_STATUS_MODE: /* OS Status */
|
||||
ok = Process_OSStatus(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case DIAG_MODE: /* diagnostic */
|
||||
ok = Process_DataDiagnostic(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case INVENTORY_MODE:
|
||||
ok = Process_InvDataSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case SF1_MODE:
|
||||
ok = Process_DataSF1Set(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case CHG_CTRL_CFG_MODE:
|
||||
ok = Process_DataChgCtrlCfgSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case SBS_MODE:
|
||||
ok = Process_DataSBSSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case CAL_MODE:
|
||||
ok = Process_DataCalSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case CC_MODE:
|
||||
ok = Process_DataCcModeSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
case AFE_MODE:
|
||||
ok = Process_DataAfeModeSet(console_text, position);
|
||||
if (!ok) {UserMessage(" [Invalid Command]");}
|
||||
break;
|
||||
default:
|
||||
screenmode = OP_MODE;
|
||||
break;
|
||||
}
|
||||
Prompt();
|
||||
position = 0;
|
||||
for (i = 0; i < 80; i++) console_text[i] = 0x00;
|
||||
break;
|
||||
case 0x08: /* BACKSPACE (BS) value */
|
||||
case 0x7F: /* BACKSPACE (BS) value */
|
||||
if (position > 0)
|
||||
{
|
||||
printf("%c %c", 0x08, 0x08);
|
||||
position--;
|
||||
}
|
||||
break;
|
||||
case 0x0A: /* enter */
|
||||
break;
|
||||
default :
|
||||
if (one[0] >= 0x20)
|
||||
{
|
||||
printf("%c", one[0]);
|
||||
if (position < 80)
|
||||
{
|
||||
console_text[position++] = one[0];
|
||||
console_text[position] = 0x00;
|
||||
}
|
||||
else
|
||||
{
|
||||
position = 0;
|
||||
Prompt();
|
||||
for (i = 0; i < 80; i++) console_text[i] = 0x00;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t relay_test_mode;
|
||||
extern uint8_t chg_relay_test;
|
||||
extern uint8_t dch_relay_test;
|
||||
extern uint8_t pre_relay_test;
|
||||
|
||||
/* Command processing in OPERATING STATE */
|
||||
int8_t Process_Data(uint8_t *text, uint16_t size) /* console_text[0]=0x00, size =0 (default) */
|
||||
{
|
||||
int ret;
|
||||
|
||||
if(size > 1) {
|
||||
if (text[1] != ' ') return(0); /* Invalid command if space is in first position */
|
||||
}
|
||||
text[size] = 0x00;
|
||||
ret = 1;
|
||||
switch (text[0]) {
|
||||
case 's':
|
||||
screenmode = SET_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'd':
|
||||
screenmode = DIAG_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'a':
|
||||
screenmode = AFE_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '0':
|
||||
if (relay_test_mode) { relay_test_mode = false; }
|
||||
else { relay_test_mode = true; }
|
||||
break;
|
||||
case '1':
|
||||
if (chg_relay_test) { chg_relay_test = false; }
|
||||
else { chg_relay_test = true; }
|
||||
break;
|
||||
case '2':
|
||||
if (dch_relay_test) { dch_relay_test = false; }
|
||||
else { dch_relay_test = true; }
|
||||
break;
|
||||
case '3':
|
||||
if (pre_relay_test) { pre_relay_test = false; }
|
||||
else { pre_relay_test = true; }
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/* Command processing in SETTING STATE */
|
||||
int8_t Process_DataSet(uint8_t *text, uint16_t size)
|
||||
{
|
||||
uint16_t ret, i;
|
||||
|
||||
/* 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 'd': /* Switch to diagnostic mode */
|
||||
screenmode = DIAG_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'z':
|
||||
screenmode = OS_STATUS_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '1':
|
||||
screenmode = SF1_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '2':
|
||||
screenmode = CHG_CTRL_CFG_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '3':
|
||||
screenmode = SBS_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '4':
|
||||
screenmode = CAL_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'C':
|
||||
screenmode = CC_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case '!': /* INIT */
|
||||
Param_Init(true, false);
|
||||
Save_Param();
|
||||
break;
|
||||
case 't': /* Date Time Set */
|
||||
i = Set_Time(&text[2]);
|
||||
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;
|
||||
default :
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
// Command processing in OPERATING STATE
|
||||
int8_t Process_OSStatus(uint8_t *text, uint16_t size) // console_text[0]=0x00, size =0 (default)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (size > 1)
|
||||
if (text[1] != ' ') return(0); /* Invalid command if space is in first position */
|
||||
|
||||
text[size] = 0x00;
|
||||
ret = 1;
|
||||
switch (text[0])
|
||||
{
|
||||
case 'o':
|
||||
screenmode = OP_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 's':
|
||||
screenmode = SET_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'd':
|
||||
screenmode = DIAG_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
extern void RTC_TimeShow(void);
|
||||
|
||||
/* Command processing in diagnostic mode */
|
||||
int8_t Process_DataDiagnostic(uint8_t *text, uint16_t size)
|
||||
{
|
||||
int8_t ret;
|
||||
|
||||
if (size > 1)
|
||||
{
|
||||
if (text[1] != ' ')
|
||||
{
|
||||
ret = 0;
|
||||
if (memcmp(text, "log start", 9) == 0)
|
||||
{
|
||||
LogEnable(5);
|
||||
ret = 1;
|
||||
}
|
||||
if (memcmp(text, "log stop", 8) == 0)
|
||||
{
|
||||
LogDisable();
|
||||
ret = 1;
|
||||
}
|
||||
if (memcmp(text, "log print", 9) == 0)
|
||||
{
|
||||
LogPrint("0:/log/cyclelognow");
|
||||
ret = 1;
|
||||
}
|
||||
if (memcmp(text, "log delete", 10) == 0)
|
||||
{
|
||||
LogDelete();
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
text[size] = 0x00;
|
||||
ret = 1;
|
||||
uint32_t test = 0;
|
||||
|
||||
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 'I':
|
||||
screenmode = INVENTORY_MODE;
|
||||
ViewScreen();
|
||||
break;
|
||||
case 'G' : /* Memory Dump */
|
||||
if (size > 2)
|
||||
dump_mem(TextToAddr((uint8_t *)&text[2]));
|
||||
break;
|
||||
case '0':
|
||||
test = *(uint32_t *)(mBMS_FW_DN_ADDRESS + 4);
|
||||
printf(" mBMS_FW_DN_ADDRESS = %08X\r\n", test);
|
||||
break;
|
||||
// case '0':
|
||||
// case '1':
|
||||
// // PL455 COMM MONITOR
|
||||
// ret = DPl455CommCommand(text[0]);
|
||||
// break;
|
||||
case '2':
|
||||
case '3':
|
||||
// CAN COMM MONITOR
|
||||
ret = DCanCommCommand(text[0]);
|
||||
break;
|
||||
case 'a':
|
||||
// PrintTempAdData(6);
|
||||
DisplayAdc2DmaBufferValue(0);
|
||||
break;
|
||||
case 'b':
|
||||
// PrintTempAdData(7);
|
||||
DisplayAdc2DmaBufferValue(1);
|
||||
break;
|
||||
case 'c':
|
||||
printf("Relay Status1: %d\r\n", Relay_Status(DI_DISCHA_RELAY ));
|
||||
printf("Relay Status2: %d\r\n", Relay_Status(DI_CHARGE_RELAY ));
|
||||
printf("Relay Status3: %d\r\n", Relay_Status(DI_PRE_CHG_RELAY ));
|
||||
break;
|
||||
case 'f':
|
||||
ff_process();
|
||||
break;
|
||||
case 'q': /* Exit Application */
|
||||
UserMessage("Exit Application ? (Y or N)");
|
||||
switch (WaitUserCMD((uint8_t *)"YyNn"))
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
UserMessage("System Reset !!");
|
||||
delay_os_ms(500);
|
||||
NVIC_SystemReset();
|
||||
while(1);
|
||||
case 3:
|
||||
case 4:
|
||||
UserMessage("Exit Application Cancel !!");
|
||||
break;
|
||||
default:
|
||||
UserMessage("Command Timeout !!");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
void Prompt()
|
||||
{
|
||||
uint8_t ver[4];
|
||||
|
||||
switch (screenmode)
|
||||
{
|
||||
case 0 :
|
||||
case 1 :
|
||||
case 2 :
|
||||
case 3 :
|
||||
case 4 :
|
||||
case 5 :
|
||||
case 6 :
|
||||
case 7 :
|
||||
case 8 :
|
||||
case 9 :
|
||||
case 10 :
|
||||
case 11 :
|
||||
case 12 :
|
||||
case 13 :
|
||||
case 14 :
|
||||
case 21 :
|
||||
case 22 :
|
||||
case 23 :
|
||||
case 24 :
|
||||
case 25 :
|
||||
case 26 :
|
||||
case 27 :
|
||||
case 28 :
|
||||
case 29 :
|
||||
case 30 :
|
||||
case 31 :
|
||||
case 32 :
|
||||
case 33 :
|
||||
case 34 :
|
||||
case 40 :
|
||||
case 41 :
|
||||
case 42 :
|
||||
case 100 :
|
||||
case 101 :
|
||||
GetAppVersion(ver);
|
||||
|
||||
printf("%1c[%02d;%02dH", 0x1b, 23, 1);
|
||||
printf("%s %d.%d.%d.%d>"
|
||||
, BD_MODEL
|
||||
, ver[0]
|
||||
, ver[1]
|
||||
, ver[2]
|
||||
, ver[3]
|
||||
);
|
||||
break;
|
||||
case GUI_MODE:
|
||||
break;
|
||||
default :
|
||||
GetAppVersion(ver);
|
||||
|
||||
printf("%s %d.%d.%d.%d>"
|
||||
, BD_MODEL
|
||||
, ver[0]
|
||||
, ver[1]
|
||||
, ver[2]
|
||||
, ver[3]
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayScreen(uint8_t p)
|
||||
{
|
||||
switch(screenmode)
|
||||
{
|
||||
case OP_MODE:
|
||||
ODisplayAdcStatus(p);
|
||||
ODisplayDevice(p);
|
||||
ODisplayBalancingValue(p);
|
||||
ODisplayDateTime(p);
|
||||
break;
|
||||
case SET_MODE:
|
||||
SDisplayDateTime(p);
|
||||
break;
|
||||
case OS_STATUS_MODE:
|
||||
osDisplayTaskStatus(p);
|
||||
break;
|
||||
case DIAG_MODE:
|
||||
// DDisplay_Pl455Comm(p);
|
||||
DDisplay_CanComm(p);
|
||||
break;
|
||||
case SF1_MODE:
|
||||
SF1Display(p);
|
||||
break;
|
||||
case CHG_CTRL_CFG_MODE:
|
||||
ChgCfgDisplay(p);
|
||||
break;
|
||||
case SBS_MODE:
|
||||
SBSDisplay(p);
|
||||
break;
|
||||
case CAL_MODE:
|
||||
CalDisplay(p);
|
||||
SDisplayCurrentAdcRealValue(p);
|
||||
break;
|
||||
case CC_MODE:
|
||||
SDisplayCurrentStatus(p);
|
||||
break;
|
||||
case AFE_MODE:
|
||||
AfeDisplayStatus(p);
|
||||
break;
|
||||
case INVENTORY_MODE:
|
||||
InvDataDisplay(p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ViewScreen() /* Draw background screen according to Screen Mode */
|
||||
{
|
||||
ClearConsol();
|
||||
switch (screenmode)
|
||||
{
|
||||
case OP_MODE : /* View Status */
|
||||
APPVerDisplay();
|
||||
OmodeScreen();
|
||||
break;
|
||||
case SET_MODE : /* View Setting Status */
|
||||
SmodeScreen();
|
||||
break;
|
||||
case OS_STATUS_MODE: /* View OS Task Status */
|
||||
OSmodeScreen();
|
||||
break;
|
||||
case DIAG_MODE: /* View Diagnostic Status */
|
||||
DmodeScreen();
|
||||
break;
|
||||
case SF1_MODE:
|
||||
SF1modeScreen();
|
||||
break;
|
||||
case CHG_CTRL_CFG_MODE:
|
||||
ChgCtrlCfgmodeScreen();
|
||||
break;
|
||||
case SBS_MODE:
|
||||
SBSmodeScreen();
|
||||
break;
|
||||
case CAL_MODE:
|
||||
CalmodeScreen();
|
||||
break;
|
||||
case CC_MODE:
|
||||
CcModeScreen();
|
||||
break;
|
||||
case AFE_MODE:
|
||||
AfemodeScreen();
|
||||
break;
|
||||
case INVENTORY_MODE:
|
||||
InvModeScreen();
|
||||
break;
|
||||
default :
|
||||
printf("UNDEFINE SCREEN MODE");
|
||||
screenmode = 0;
|
||||
break;
|
||||
}
|
||||
DisplayScreen(true);
|
||||
}
|
||||
|
||||
#endif // #ifdef CONSOLE_DEBUG
|
||||
|
||||
/*******************(C)COPYRIGHT 2022 AMG ********************END OF FILE******/
|
||||
Reference in New Issue
Block a user