TMC32_QJB/App/main.c

398 lines
8.8 KiB
C
Raw Normal View History

2026-04-30 08:23:12 +00:00
/**
******************************************************************************
* @file main.c
* @author TMC Scan Team
* @version V1.0.0
* @date 09/12/2019
* @brief
******************************************************************************
*
* 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, TMC 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>&copy; COPYRIGHT 2016 TMC</center></h2>
******************************************************************************
**/
#include "global.h"
#include "Key.h"
#include "LCD.h"
void SysTickInit(void);
void HardwareInit(void);
void PowerOnShow(void);
void AppScanCodeInit(void);
void Delay_us(uint32_t us);
extern void BctcTestAppScanCodeInit(void);
extern void JJJ_Prompt(char *buf);
extern void Voice_Play(void);
extern uint8_t UpdateALCfg(void);
extern void KeyVoiceInit(void);
extern uint32_t gFunTrace;
uint8_t gCfgUpdateFlag = 0;
uint8_t gLicenseFlag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>License<73><65>gLicenseFlag = 0<><30><EFBFBD><EFBFBD>license<73><65>Ч
uint32_t HeartBeatTick = 0;
uint32_t HeartBeatTime = 3;
/**
** @function NVIC_SetVectorTable
** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
** @param NVIC_VectTab <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
** @param Offset ƫ<EFBFBD>Ƶ<EFBFBD>ַ
** @return
**/
void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)
{
SCB->VTOR = NVIC_VectTab | (Offset & (u32)0x1FFFFF80);
}
/**
** @function CheckHeartBeat
** @brief check heart beat
** @return
**/
void CheckHeartBeat(void)
{
if(gConfgBuf.heartbeatInterval>0)
{
if((TMC_GetTick()-HeartBeatTick)>HeartBeatTime)
{
HeartBeatTick = TMC_GetTick();
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"HEARTBEAT",9);
ReportData(Communication_Id);
}
}
}
/**
** @function main
** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** @param
** @return
**/
int main(void)
{
BarData comData, codeBar;
uint8_t nCmdCount = 0;
//<2F><>ȡӦ<C8A1><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SystemCfgInit();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʹ<EFBFBD>õ<EFBFBD>Ӳ<EFBFBD><D3B2>ģ<EFBFBD><C4A3>
HardwareInit();
//<2F>ָ<EFBFBD>BL<42><4C>ʱ<EFBFBD><CAB1>
gReturnBLCnt = TMC_GetTick();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
PowerOnShow();
Key_Init();
KeyVoiceInit();
LCD_Init();
uint8_t d[11] = {1,1,1,1,1,1,1,1,1,1,1};
LCD_Display(d,11);
TMC_Delay(500);
LCD_Erase();
AppRefreshWDT();
TimerHSIClockCount(TIM4, START_TIMER);//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD>붨ʱ<EBB6A8><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ɨ<EFBFBD><C9A8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gCmdStartFlag = TRUE;
AppTIMxInterrupt(TIM6,2);//keyboard use
// if(gConfgBuf.heartbeatInterval==0xff||gConfgBuf.heartbeatInterval==0)gConfgBuf.heartbeatInterval=3;
// HeartBeatTime = gConfgBuf.heartbeatInterval*1000;
// HeartBeatTick = TMC_GetTick();
// startShowDevicemod();
2026-04-30 08:23:12 +00:00
while(1)
{
Voice_Play();
if(gCfgUpdateFlag==UPDATECFG)
{
//<2F>ڼ<EFBFBD><DABC>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>дFLASH<53><48>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>дFLASH
UpdateCfg();
gCfgUpdateFlag = 0;
}
if(gCfgUpdateFlag==UPDATEALCFG)
{
//<2F>ڼ<EFBFBD><DABC>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>дFLASH<53><48>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>дFLASH
UpdateALCfg();
gCfgUpdateFlag = 0;
}
2026-04-30 08:23:12 +00:00
//ͨ<>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EEA3AC><D6B8><EFBFBD>ַ<EFBFBD>
nCmdCount = 0;
// while(RecieveData(&comData))
// {
// CommunicationCmdHandle(&comData);
// Delay_us(1000);
// nCmdCount++;
// if(nCmdCount>100)break;
// }
2026-04-30 08:23:12 +00:00
//ɨ<><C9A8><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ַ<EFBFBD>
if(ScanModeReceiveData(&codeBar) == TRUE)
{
if(SettingCodeBatch(&codeBar) == FALSE)
{
ScanCodeCmdHandle(&codeBar);
}
}
// CheckHeartBeat();
2026-04-30 08:23:12 +00:00
gFunTrace = 38;
#ifndef DEBUG
//<2F><><EFBFBD>Ź<EFBFBD>ι<EFBFBD><CEB9>
AppRefreshWDT();
#endif
}
}
/**
** @function PowerOnShow
** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** @param
** @return
**/
void PowerOnShow(void)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD>
switch(gConfgBuf.scanCodeMode)
{
case AUTOMODE:
AppLEDControl(gConfgBuf.ledStatus);
break;
case CMDMODE:
AppLEDControl(!gConfgBuf.ledStatus);
break;
case CMDTIMEMODE:
AppLEDControl(!gConfgBuf.ledStatus);
break;
case SENSORMODE:
AppLEDControl(!gConfgBuf.ledStatus);
break;
default:
AppLEDControl(gConfgBuf.ledStatus);
break;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
if(gConfgBuf.buzzerStatus)
{
if((*(uint32_t *)RESETFLAGADDR) != RESET_FLAG) //<2F>ϵ縴λʱ<CEBB><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
{
*(uint32_t *)RESETFLAGADDR = RESET_FLAG;
BuzzerSelect(POWERON_BUZZER);
}
else
{
BuzzerSelect(SET_CODE_SUCEESS);
}
}
SpeakerOn();
AppVoicePlay((uint8_t *)welcomeFile, sizeof(welcomeFile), gConfgBuf.voiceVolume);
}
/**
** @function HardwareInit
** @brief Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<EFBFBD>ӿڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>led<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
** @param <EFBFBD><EFBFBD>
** @return
**/
void HardwareInit(void)
{
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> copy to ram1
Memcpy((void *)RAM_BASE_ADDR, (void *)IR_VECTOR_TABLE_ADDR, IR_VECTOR_TABLE_SIZE);
NVIC_SetVectorTable(RAM_BASE_ADDR, 0);
//Systick<63><6B>ʼ<EFBFBD><CABC>
SysTickInit();
//ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>
AppScanCodeInit();
//<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//USB<53><42>ʼ<EFBFBD><CABC>
gConfgBuf.comunitationType = USBDEVTYPE_HIDKBD;
2026-04-30 08:23:12 +00:00
AppUSBInit(gConfgBuf.comunitationType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
AppBuzzerInit();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
AppVoiceInit();
//LED<45><44>ʼ<EFBFBD><CABC>
AppLEDInit();
//<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
AppCameraInit();
#ifndef DEBUG
//<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʼ<EFBFBD><CABC>
AppWDTInit();
#endif
//ģʽ<C4A3><CABD>ʼ<EFBFBD><CABC>
AppScanModeInit();
}
/**
** @function AppScanCodeInit
** @brief ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** @param <EFBFBD><EFBFBD>
** @return
**/
void AppScanCodeInit(void)
{
uint8_t *pliscence = (uint8_t *) LINSCENCE;
gLicenseFlag = TMC_Scan_Init(pliscence);
#if BCTCTEST
BctcTestAppScanCodeInit();
#else
/*EAN_13<31><33><EFBFBD><EFBFBD>*/
TMC_Scan_Set(EAN_13, gConfgBuf.EAN13);
TMC_Scan_Set(EAN_13_2, gConfgBuf.EAN13_2);
TMC_Scan_Set(EAN_13_5, gConfgBuf.EAN13_5);
/*EAN_8<5F><38><EFBFBD><EFBFBD>*/
TMC_Scan_Set(EAN_8, gConfgBuf.EAN8);
TMC_Scan_Set(EAN_8_2, gConfgBuf.EAN8_2);
TMC_Scan_Set(EAN_8_5, gConfgBuf.EAN8_5);
/*UPC_A<5F><41><EFBFBD><EFBFBD>*/
TMC_Scan_Set(UPC_A, gConfgBuf.UPCA);
TMC_Scan_Set(UPC_A_2, gConfgBuf.UPCA_2);
TMC_Scan_Set(UPC_A_5, gConfgBuf.UPCA_5);
/*UPC_E0<45><30><EFBFBD><EFBFBD>*/
TMC_Scan_Set(UPC_E0, gConfgBuf.UPCE0);
/*UPC_E1<45><31><EFBFBD><EFBFBD>*/
TMC_Scan_Set(UPC_E1, gConfgBuf.UPCE1);
TMC_Scan_Set(UPC_E1_2, gConfgBuf.UPCE1_2);
TMC_Scan_Set(UPC_E1_5, gConfgBuf.UPCE1_5);
/*Code_128<32><38><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Code_128_Min, gConfgBuf.Code128MinLen);
TMC_Scan_Set(Code_128_Max, gConfgBuf.Code128MaxLen);
/*Code_39<33><39><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Code_39, gConfgBuf.Code39);
TMC_Scan_Set(Code_39_32, gConfgBuf.Code39_32);
TMC_Scan_Set(Code_39_Full_Ascii, gConfgBuf.Code39_32_Full_ASCII);
TMC_Scan_Set(Code_39_Min, gConfgBuf.Code39MinLen);
TMC_Scan_Set(Code_39_Max, gConfgBuf.Code39MaxLen);
/*Code_93<39><33><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Code_93, gConfgBuf.Code93);
TMC_Scan_Set(Code_93_Min, gConfgBuf.Code93MinLen);
TMC_Scan_Set(Code_93_Max, gConfgBuf.Code93MaxLen);
/*code bar<61><72><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Codebar, gConfgBuf.CodeBar);
TMC_Scan_Set(Codabar_Min, gConfgBuf.CodeBarMinLen);
TMC_Scan_Set(Codabar_Max, gConfgBuf.CodeBarMaxLen);
/*ITF<54><46><EFBFBD><EFBFBD>*/
TMC_Scan_Set(ITF, gConfgBuf.Interleaved25);
TMC_Scan_Set(ITF_Min, gConfgBuf.Interleaved25MinLen);
TMC_Scan_Set(ITF_Max, gConfgBuf.Interleaved25MaxLen);
/*PDF417<31><37><EFBFBD><EFBFBD>*/
TMC_Scan_Set(PDF_417, gConfgBuf.PDF417);
/*DM<44><4D><EFBFBD><EFBFBD>*/
TMC_Scan_Set(DM_NOT_MIRROR, gConfgBuf.DM);
TMC_Scan_Set(DM_MIRROR, gConfgBuf.DM);
#if SETTINGCODE_MODE_0
TMC_Scan_Set(Code_128, gConfgBuf.Code128);
#elif SETTINGCODE_MODE_1
/*QR<51><52><EFBFBD><EFBFBD>*/
TMC_Scan_Set(QR_NOT_MIRROR, gConfgBuf.QR);
TMC_Scan_Set(QR_MIRROR, gConfgBuf.QR );
#endif
/*Industrial25<32><35><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Industrial25, gConfgBuf.Industrial_25);
TMC_Scan_Set(Industrial_Min, gConfgBuf.Industrial_25MinLen);
TMC_Scan_Set(Industrial_Max, gConfgBuf.Industrial_25MaxLen);
/*Matrix25<32><35><EFBFBD><EFBFBD>*/
TMC_Scan_Set(Matrix25, gConfgBuf.Matrix25);
TMC_Scan_Set(Matrix25_Min, gConfgBuf.Matrix25MinLen);
TMC_Scan_Set(Matrix25_Max, gConfgBuf.Matrix25MaxLen);
/*IATA25<32><35><EFBFBD><EFBFBD>*/
TMC_Scan_Set(IATA25, gConfgBuf.IATA25);
TMC_Scan_Set(IATA25_Min, gConfgBuf.IATA25MinLen);
TMC_Scan_Set(IATA25_Max, gConfgBuf.IATA25MaxLen);
/*ECIģʽ<C4A3><CABD><EFBFBD><EFBFBD>*/
TMC_Scan_Set(ECI_Mode, gConfgBuf.ECIMode);
#endif
}
//Systick<63><6B>ʼ<EFBFBD><CABC>
void SysTickInit(void)
{
//Systick<63><6B>ʼ<EFBFBD><CABC>
SysTick_Config(SystemCoreClock/1000);
/* SysTick_IRQn interrupt clear pending */
NVIC_ClearPendingIRQ(SysTick_IRQn);
/* SysTick_IRQn interrupt enable */
NVIC_EnableIRQ(SysTick_IRQn);
/* Initialization clock */
TMC_InitTick(TICK_INT_PRIORITY);
NVIC_SetPriority(SysTick_IRQn, TICK_INT_PRIORITY);
}
void assert_failed(uint8_t *file, uint32_t line)
{
//while(1);
ResetChip(11);
}
/**
* @function JJJ_Prompt
* @brief send to computer for display
*/
void JJJ_Prompt(char *buf)
{
uint16_t len = strlen(buf);
SetOutputData((uint8_t *)buf, len);
ReportData(Communication_Id);
}
/**
* @function Delay_us
* @brief delay micro seconds
*/
void Delay_us(uint32_t us)
{
int n=0;
us = us*10;
while(n++<us);
}