534 lines
13 KiB
C
534 lines
13 KiB
C
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @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>© 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;
|
|||
|
|
}
|