TMC32_QJB/App/scanmode.c

534 lines
13 KiB
C
Raw Normal View History

2026-04-30 08:23:12 +00:00
/**
******************************************************************************
* @file scanmode.c
* @author TMC Scan Team
* @version V1.0.0
* @date 09/06/2019
* @brief This file provides the different modes of scanning.
******************************************************************************
*
* 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"
uint8_t gAutoModeOverTimeFlag = TRUE; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EBB2BB>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>һֱ<D2BB><D6B1><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ
uint8_t gCmdStartFlag = FALSE; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>FALSE<53><45>ʾ<EFBFBD><CABE>ֹɨ<D6B9>룬TRUE<55><45>ʾʹ<CABE><CAB9>ɨ<EFBFBD><C9A8>
uint8_t gSensorChangeFlag = FALSE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>,FALSE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ仯<DEB1><E4BBAF>TRUE<55><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б
ImageSizeType gLastPictureSize = DCMI_640_480; //<2F><>Ӧģʽ<C4A3><CABD><EFBFBD><EFBFBD>һ<EFBFBD>β<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD>RAM<41><4D><EFBFBD><EFBFBD><E3A3AC>Ҫ<EFBFBD>ɼ<EFBFBD>Сͼ<D0A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1><EFBFBD>ɼ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ߴ<EFBFBD><DFB4>ָ<EFBFBD><D6B8><EFBFBD>640*480
uint32_t gCurrentPictureAddr = DCMIBUFADDR; //<2F><>Ӧģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>񣬱<EFBFBD><F1A3ACB1>ǵ<EFBFBD>ǰ<EFBFBD>ɼ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD>ַ
uint8_t gPreImage[MAXCODELEN] = {0};
uint32_t gPrebarcodelen = 0;
int gPreCodeType = Communication_Id;
uint8_t gCmdModeTimeFlag = FALSE; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ĭ<EFBFBD><C4AC>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
extern uint8_t gLicenseFlag;
extern uint32_t gFunTrace;
/**
* @function AppScanModeInit
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AppScanModeInit(void)
{
switch(gConfgBuf.scanCodeMode)
{
case AUTOMODE:
gAutoModeOverTimeFlag = TRUE;
break;
case CMDMODE:
gCmdStartFlag = TRUE; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>FALSE<53><45>ʾ<EFBFBD><CABE>ֹɨ<D6B9>룬TRUE<55><45>ʾʹ<CABE><CAB9>ɨ<EFBFBD><C9A8>
break;
case CMDTIMEMODE:
gCmdStartFlag = FALSE; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>FALSE<53><45>ʾ<EFBFBD><CABE>ֹɨ<D6B9>룬TRUE<55><45>ʾʹ<CABE><CAB9>ɨ<EFBFBD><C9A8>
break;
case SENSORMODE:
gAutoModeOverTimeFlag = TRUE;
gSensorChangeFlag = FALSE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>,FALSE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ仯<DEB1><E4BBAF>TRUE<55><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б
gLastPictureSize = DCMI_640_480;
gCurrentPictureAddr = DCMIBUFADDR;
break;
default:
break;
}
}
/**
* @function AutoScanMode
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD>״̬
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int AutoScanMode(BarData *pCode)
{
int result = 0;
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//<2F>ɼ<EFBFBD>ͼ<EFBFBD><CDBC>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, DCMI_640_480))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
if(result > 0)
{
if(gPrebarcodelen && (gPrebarcodelen == pCode->datalen))
{
if(!memcmp(gPreImage, pCode->bardata, pCode->datalen))
{
//ͬ<><CDAC><EFBFBD><EFBFBD>ʱ,<2C><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
if((gAutoModeOverTimeFlag == TRUE) || (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.sameCodeInterval * CLK_BASE)))
{
gPrebarcodelen = pCode->datalen;
Memcpy(gPreImage, pCode->bardata, pCode->datalen);
gAutoModeOverTimeFlag = FALSE;
TimerHSIClockCount(TIM4, STOP_TIMER);
TimerHSIClockCount(TIM4, START_TIMER);
return TRUE;
}
else
{
return FALSE;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
if((gAutoModeOverTimeFlag == TRUE) || (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.differentCodeInterval * CLK_BASE)))
{
gPrebarcodelen = pCode->datalen;
Memcpy(gPreImage, pCode->bardata, pCode->datalen);
gAutoModeOverTimeFlag = FALSE;
TimerHSIClockCount(TIM4, STOP_TIMER);
TimerHSIClockCount(TIM4, START_TIMER);
return TRUE;
}
}
else
{
if((TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.sameCodeInterval * CLK_BASE))
&& (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.differentCodeInterval * CLK_BASE)))
{
gAutoModeOverTimeFlag = TRUE;
}
}
return FALSE;
}
/**
* @function CmdScanMode
* @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>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int CmdScanMode(BarData *pCode)
{
int result = 0;
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(gCmdStartFlag)
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//<2F>ɼ<EFBFBD>ͼ<EFBFBD><CDBC>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, DCMI_640_480))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
//ʶ<><CAB6><EFBFBD>ɹ<EFBFBD>
if(result > 0)
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gPreCodeType = pCode->bartype;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gCmdStartFlag = FALSE; //<2F>ر<EFBFBD>ɨ<EFBFBD><C9A8>
TimerHSIClockCount(TIM5, STOP_TIMER);
return result;
}
}
else
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
}
return result;
}
/**
* @function CmdScanTimeMode
* @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><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD>ر<EFBFBD>ɨ<EFBFBD><EFBFBD>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int CmdScanTimeMode(BarData *pCode)
{
int result = 0;
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(gCmdStartFlag)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>δ<EFBFBD><CEB4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
if(TimerHSIClockCount(TIM5, GET_TIMER) <= gConfgBuf.cmdModeTime * 12000)
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//<2F>ɼ<EFBFBD>ͼ<EFBFBD><CDBC>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, DCMI_640_480))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
//ʶ<><CAB6><EFBFBD>ɹ<EFBFBD>
if(result > 0)
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gPreCodeType = pCode->bartype;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gCmdStartFlag = FALSE; //<2F>ر<EFBFBD>ɨ<EFBFBD><C9A8>
TimerHSIClockCount(TIM5, STOP_TIMER);
return result;
}
}
else
{
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>ɨ<EFBFBD><C9A8>
gCmdStartFlag = FALSE;
TimerHSIClockCount(TIM5, STOP_TIMER);
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
}
}
else
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
}
return result;
}
#ifdef LIGHTING
/**
* @function SensorScanMode
* @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>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SensorScanMode(BarData *pCode)
{
int result = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>б<D0B1><E4BBAF>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5>"<22>ޱ仯"
if(!gSensorChangeFlag) //<2F><><EFBFBD><EFBFBD><EFBFBD>ޱ仯
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
//<2F>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD>β<EFBFBD>ͼ<EFBFBD>ߴ<EFBFBD><DFB4>Ƿ<EFBFBD>Ϊ640*480<38><30><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
if(gLastPictureSize == DCMI_640_480)
{
TimerDelay(TIM2, gConfgBuf.stableTime);
gLastPictureSize = DCMI_320_240;
gCurrentPictureAddr = DCMIBUFADDR;
if(!DCMI_CaptureOnePic(gCurrentPictureAddr, gLastPictureSize))return FALSE;
gCurrentPictureAddr += HALF_BUF_SIZE;
}
if(!DCMI_CaptureOnePic(gCurrentPictureAddr, gLastPictureSize))return FALSE;
if(gCurrentPictureAddr == DCMIBUFADDR)
{
gCurrentPictureAddr += HALF_BUF_SIZE;
}
else
{
gCurrentPictureAddr = DCMIBUFADDR;
}
//ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
if(DCMI_Differ(HALF_BUF_SIZE) == TMC_OK)
{
gSensorChangeFlag = TRUE;
gLastPictureSize = DCMI_640_480;
TimerHSIClockCount(TIM5, START_TIMER);
}
else
{
return result;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//ͼ<><CDBC><EFBFBD>ɼ<EFBFBD>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, gLastPictureSize))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
//ʶ<><CAB6><EFBFBD>ɹ<EFBFBD> <20><> <20><>ʱ
if(result > 0)
{
if(gPrebarcodelen && (gPrebarcodelen == pCode->datalen))
{
if(!memcmp(gPreImage, pCode->bardata, pCode->datalen))
{
//ͬ<><CDAC><EFBFBD><EFBFBD>ʱ,<2C><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
if((gAutoModeOverTimeFlag == TRUE) || (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.sameCodeInterval * CLK_BASE)))
{
Memcpy(gPreImage, pCode->bardata, pCode->datalen);
gPrebarcodelen = pCode->datalen;
gAutoModeOverTimeFlag = FALSE;
TimerHSIClockCount(TIM4, STOP_TIMER);
TimerHSIClockCount(TIM4, START_TIMER);
TimerHSIClockCount(TIM5, STOP_TIMER);
gSensorChangeFlag = FALSE;
return TRUE;
}
return FALSE;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
if((gAutoModeOverTimeFlag == TRUE) || (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.differentCodeInterval * CLK_BASE)))
{
Memcpy(gPreImage, pCode->bardata, pCode->datalen);
gPrebarcodelen = pCode->datalen;
gAutoModeOverTimeFlag = FALSE;
TimerHSIClockCount(TIM4, STOP_TIMER);
TimerHSIClockCount(TIM4, START_TIMER);
TimerHSIClockCount(TIM5, STOP_TIMER);
gSensorChangeFlag = FALSE;
return TRUE;
}
return FALSE;
}
else
{
if((TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.sameCodeInterval * CLK_BASE)) && (TimerHSIClockCount(TIM4, GET_TIMER) >= (gConfgBuf.differentCodeInterval * CLK_BASE)))
{
gAutoModeOverTimeFlag = TRUE;
TimerHSIClockCount(TIM4, STOP_TIMER);
}
}
if ((TimerHSIClockCount(TIM5, GET_TIMER) >= SENSOR_TIME_OUT))
{
TimerHSIClockCount(TIM5, STOP_TIMER);
gSensorChangeFlag = FALSE;
}
return result;
}
#else
/**
* @function SensorScanMode
* @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>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SensorScanMode(BarData *pCode)
{
int result = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>б<D0B1><E4BBAF>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5>"<22>ޱ仯"
if(!gSensorChangeFlag) //<2F><><EFBFBD><EFBFBD><EFBFBD>ޱ仯
{
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
//<2F>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD>β<EFBFBD>ͼ<EFBFBD>ߴ<EFBFBD><DFB4>Ƿ<EFBFBD>Ϊ640*480<38><30><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
if(gLastPictureSize == DCMI_640_480)
{
gLastPictureSize = DCMI_320_240;
gCurrentPictureAddr = DCMIBUFADDR;
if(!DCMI_CaptureOnePic(gCurrentPictureAddr, gLastPictureSize))return FALSE;
gCurrentPictureAddr += HALF_BUF_SIZE;
}
if(!DCMI_CaptureOnePic(gCurrentPictureAddr, gLastPictureSize))return FALSE;
if(gCurrentPictureAddr == DCMIBUFADDR)
{
gCurrentPictureAddr += HALF_BUF_SIZE;
}
else
{
gCurrentPictureAddr = DCMIBUFADDR;
}
//ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
if(DCMI_Differ(HALF_BUF_SIZE) == TMC_OK)
{
gSensorChangeFlag = TRUE;
gLastPictureSize = DCMI_640_480;
TimerHSIClockCount(TIM4, START_TIMER);
memset(gPreImage, 0, MAXCODELEN);
}
else
{
return result;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//ͼ<><CDBC><EFBFBD>ɼ<EFBFBD>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, gLastPictureSize))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
//ʶ<><CAB6><EFBFBD>ɹ<EFBFBD> <20><> <20><>ʱ
if(result > 0)
{
if(!memcmp(gPreImage, pCode->bardata, pCode->datalen)) //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
{
TimerHSIClockCount(TIM4, START_TIMER);
return FALSE;
}
else
{
Memcpy(gPreImage, pCode->bardata, pCode->datalen);
TimerHSIClockCount(TIM4, START_TIMER);
return TRUE;
}
}
if(TimerHSIClockCount(TIM4, GET_TIMER) >= TIME_OUT)
{
gSensorChangeFlag = FALSE;
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(!gConfgBuf.ledStatus);
TimerHSIClockCount(TIM4, STOP_TIMER);
}
return result;
}
#endif
/**
* @function SingleMode
* @brief ɨ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>һ<EFBFBD>Σ<EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ųɹ<EFBFBD>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SingleMode(BarData *pCode)
{
int result = 0;
//<2F>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
AppLEDControl(gConfgBuf.ledStatus);
//<2F>ɼ<EFBFBD>ͼ<EFBFBD><CDBC>
if(!DCMI_CaptureOnePic(DCMIBUFADDR, DCMI_640_480))return FALSE;
//<2F><><EFBFBD><EFBFBD>
result = TMC_Scan_Decode(pCode);
//ʶ<><CAB6><EFBFBD>ɹ<EFBFBD>
if(result > 0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(gPrebarcodelen && (gPrebarcodelen == pCode->datalen))
{
if(memcmp(pCode->bardata, gPreImage, gPrebarcodelen)) //<2F>벻ͬ
{
gPrebarcodelen = pCode->datalen;
memcpy(gPreImage, pCode->bardata, gPrebarcodelen);
return TRUE;
}
}
else //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2>ȣ<EFBFBD><C8A3>벻ͬ
{
gPrebarcodelen = pCode->datalen;
memcpy(gPreImage, pCode->bardata, gPrebarcodelen);
return TRUE;
}
}
else
{
gPrebarcodelen = 0;
memset(gPreImage, 0, MAXCODELEN);
}
return FALSE;
}
/**
* @function ScanModeReceiveData
* @brief ɨ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
* @param[in] BarData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return TRUE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* FALSE <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
*/
uint8_t ScanModeReceiveData(BarData *bardata)
{
int ret = 0;
if(gLicenseFlag)
{
return FALSE;
}
gFunTrace = 36;
switch(gConfgBuf.scanCodeMode)
{
case AUTOMODE:
ret = AutoScanMode(bardata);
break;
case CMDMODE: //<2F><><EFBFBD><EFBFBD>ģʽ
ret = CmdScanMode(bardata);
break;
case CMDTIMEMODE: //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ
ret = CmdScanTimeMode(bardata);
break;
case SENSORMODE://<2F><>Ӧģʽ
ret = SensorScanMode(bardata);
break;
case SINGLEMODE: //<2F><><EFBFBD><EFBFBD>ģʽ
ret = SingleMode(bardata);
break;
default:
ret = AutoScanMode(bardata);
break;
}
if(ret > 0)
{
return TRUE;
}
return FALSE;
}