/**
******************************************************************************
* @file cmdhandle.c
* @author TMC Scan Team
* @version V1.0.0
* @date 09/07/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.
*
*
© COPYRIGHT 2016 TMC
******************************************************************************
**/
#include
#include "global.h"
uint8_t g_SysModal = SYSMODE_CLOSE;
uint16_t gBufLen = 0x00;
uint8_t respSuccess[2] = {'O', 'K'};
uint8_t respError[3] = {'E', 'R','R'};
extern uint8_t gPackType;
extern uint32_t gFunTrace;
extern uint8_t gReceiveKey;
extern void AppScanCodeInit(void);
/**
* @function SetPackType
* @brief set comunication pack type
* @param[in] type
* @return 无
*/
void SetPackType(uint8_t type)
{
gPackType = type;
}
/**
* @function SetSysPackType
* @brief set comunication pack type as sys pack type
* @return 无
*/
void SetSysPackType(void)
{
gPackType = SYS_PACK_TYPE;
}
/**
* @function my_itoa
* @brief transfer an integer into string
* @param[in] n
* @param[out] buf
* @return length of string
*/
int my_itoa(long long n, char *buf)
{
int i, sign = 0, bits = 0;
if(n < 0)
{
buf[0] = '-';
n = -n;
buf = buf + 1;
sign = 1;
}
for(i = 19; i >= 0; i--)
{
buf[i] = (n % 10) + '0';
bits++;
n = n / 10;
if(n == 0)
{
break;
}
}
for(i = 0; i < bits; i++)
{
buf[i] = buf[20 - bits + i];
}
buf[bits] = 0;
return bits + sign;
}
//返回字符串长度
int my_strappend(char *dst, const char *src)
{
int i;
for(i = 0; src[i] != 0; i++)
{
dst[i] = src[i];
}
dst[i] = 0;
return i;
}
void print_int(const char *prv, int32_t x, const char *suf)
{
char msg[256];
char *str;
int n, off = 0;
str = msg;
n = my_strappend(str, prv);
str += n;
off += n;
n = my_itoa(x, str);
str += n;
off += n;
n = my_strappend(str, suf);
str += n;
off += n;
SetOutputData((uint8_t *)msg, off);
}
/**
* @function StringToHex
* @brief 将16进制的字符串转换成16进制数,不区分大小写
* @param[in] pSrc 源数据
* @param[in] pDst 存放结果数据
* @param[in] pLen 长度
* @return 转换好结果的长度
*/
int StringToHex(uint8_t *pSrc, uint8_t *pDst, uint16_t pLen)
{
uint8_t *s = pSrc;
uint8_t high = 0, low = 0;
uint16_t tmplen = pLen, cnt = 0;
while(cnt < (tmplen / 2))
{
high = ((*s > '9') && ((*s <= 'F') || (*s <= 'f'))) ? *s - 48 - 7 : *s - 48;
low = ((*(++s) > '9') && ((*s <= 'F') || (*s <= 'f'))) ? *(s) - 48 - 7 : *(s) - 48;
pDst[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
s++;
cnt++;
}
if(tmplen % 2 != 0)
{
pDst[cnt] = ((*s > '9') && ((*s <= 'F') || (*s <= 'f'))) ? *s - 48 - 7 : *s - 48;
}
return tmplen / 2 + tmplen % 2;
}
/**
* @function StringToDec
* @brief 将16进制的字符串转换成十进制
* @param[in] pSrc 源数据
* @param[in] pLen 长度
* @return 转换后的十进制数
*/
uint32_t StringToDec(uint8_t *pSrc, uint8_t pLen)
{
uint8_t *s = pSrc;
uint32_t tmp = 0;
uint8_t cnt = 0, character;
uint32_t table[] = {0, 1, 10, 100, 1000, 10000, 100000, 1000000};
if(pLen > 7)
{
return 0;
}
for(cnt = pLen; cnt > 0; cnt--)
{
character = ((*s > '9') && ((*s <= 'F') || (*s <= 'f'))) ? *s - 48 - 7 : *s - 48;
tmp += (character * table[cnt]);
s++;
}
return tmp;
}
//更新配置区的同时更新算法配置
uint8_t UpdateALCfg(void)
{
uint8_t bStatus;
gFunTrace = 29;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
AppScanCodeInit();
}
gFunTrace = 30;
return bStatus;
}
/**
* @function UpdateApp
* @brief 写bootloader首页,进入bootloaer状态
*/
uint8_t UpdateApp(BarData *pCode)
{
uint8_t status;
gFunTrace = 31;
if((pCode->bartype == Communication_Id) || (((TMC_GetTick() - gReturnBLCnt) < LIMIT_TIME)))
{
gFunTrace = 32;
status = WriteBLFirstPage();
gFunTrace = 33;
//返回值是TMC_OK,说明写BL首页成功,可以进行复位,进入BL状态
if(status == TMC_OK)
{
ResetChip(1);
}
}
return TMC_ERROR;
}
//读取版本信息
uint8_t OutVersion(BarData *pCode)
{
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"S0000030", 8);
SetOutputData((uint8_t *)CVERSION, VERSIONLEN);
ReportData(pCode->bartype);
return TMC_NONE;
}
//恢复出厂设置
uint8_t RestoreFactorySetting(BarData *pCode)
{
uint8_t pretype = gConfgBuf.comunitationType;
uint8_t status;
gFunTrace = 27;
status = RestoreCfg();
gFunTrace = 28;
AppScanCodeInit();
//串口初始化
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//如果通信接口没有变化,则不需要复位
if(pretype != gConfgBuf.comunitationType)
{
ResetChip(2);
}
SetOutputData((uint8_t *)"S_CMD_FFFF",10);
return status;
}
uint8_t FC0RestoreFactorySetting(BarData *pCode)
{
uint8_t pretype = gConfgBuf.comunitationType;
uint8_t status;
gFunTrace = 27;
status = RestoreCfg();
gFunTrace = 28;
AppScanCodeInit();
//串口初始化
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//如果通信接口没有变化,则不需要复位
if(pretype != gConfgBuf.comunitationType)
{
ResetChip(2);
}
SetOutputData((uint8_t *)"Fnclear0",8);
return status;
}
uint8_t KeyRestoreFactorySetting(BarData *pCode)
{
uint8_t pretype = gConfgBuf.comunitationType;
uint8_t status;
gFunTrace = 27;
status = RestoreCfg();
gFunTrace = 28;
AppScanCodeInit();
//串口初始化
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//如果通信接口没有变化,则不需要复位
if(pretype != gConfgBuf.comunitationType)
{
ResetChip(2);
}
return status;
}
uint8_t Fn82RestoreFactorySetting(BarData *pCode)
{
uint8_t pretype = gConfgBuf.comunitationType;
uint8_t status;
gFunTrace = 27;
status = RestoreCfg();
gFunTrace = 28;
AppScanCodeInit();
//串口初始化
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//如果通信接口没有变化,则不需要复位
if(pretype != gConfgBuf.comunitationType)
{
ResetChip(2);
}
SetOutputData((uint8_t *)"Fn82",4);
return status;
}
/*********************************************************************************
* 以下是扫码模块命令,注意扫码模块使用时,DefaultCfg.scanCodeMode应设置为1:命令 模式
*********************************************************************************/
//命令模式下,开启扫码(是否写入命令模式)
uint8_t ScanOn(BarData *pCode)
{
gCmdStartFlag = TRUE;
//如果是命令时间模式则开timer
if(gConfgBuf.scanCodeMode == CMDTIMEMODE)
{
//定时则开启
TimerHSIClockCount(TIM5, START_TIMER);
}
SetOutputData((uint8_t *)"SR030301",8);
return TMC_OK;
}
//命令模式下,关闭扫码
uint8_t ScanOff(BarData *pCode)
{
gCmdStartFlag = FALSE;
//如果是命令时间模式则关timer
if(gConfgBuf.scanCodeMode == CMDTIMEMODE)
{
//定时则关闭
TimerHSIClockCount(TIM5, STOP_TIMER);
}
SetOutputData((uint8_t *)"SR030300",8);
return TMC_OK;
}
//进入sleep
uint8_t Sleep(BarData *pCode)
{
SetPackType(PACK_TYPEA);
SetOutputData(respSuccess,2);
ReportData(Communication_Id);
//ScanOff
gCmdStartFlag = FALSE;
AppLEDControl(LED_WHITE_TURN_OFF);
//--
Sleep_Mode();
return TMC_OK;
}
//唤醒
uint8_t StopSleep(BarData *pCode)
{
return TMC_OK;
}
#if SETTINGCODE_MODE_0
/*********************************************************************************
* 以下是扫码盒子通用命令,opensyssetting函数开启系统设置,close函数会将设置值写入flash,否则在ram中
*********************************************************************************/
//设置码开关
/**
* @function OpenSysSetting
* @brief 开启系统设置码,进入系统设置模式
*/
uint8_t OpenSysSetting(BarData *pCode)
{
g_SysModal = SYSMODE_OPEN;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
return TMC_OK;
}
/**
* @function CloseSysSetting
* @brief 关闭系统设置码,复位
*/
uint8_t CloseSysSetting(BarData *pCode)
{
uint8_t pretype = gConfgBuf.comunitationType, status;
if(g_SysModal == SYSMODE_OPEN)
{
g_SysModal = SYSMODE_CLOSE;
status = UpdateCfg(); //关闭设置码时,更新配置区
if(status == TMC_OK)
{
AppScanCodeInit();
AppScanModeInit();
//串口初始化
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
//如果通信接口没有变化,则不需要复位
if(pretype != gConfgBuf.comunitationType)
{
ResetChip(3);
}
return TMC_OK;
}
}
return TMC_ERROR;
}
//补光灯亮
uint8_t SCMD_LedOn(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ledStatus = ON;
return TMC_OK;
}
return TMC_ERROR;
}
//补光灯灭
uint8_t SCMD_LedOff(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ledStatus = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
//关闭LED闪烁
uint8_t SCMD_LEDFlashOff(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ledFlash = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
//开启LED闪烁提示
uint8_t SCMD_LEDFlashOn(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ledFlash = ON;
return TMC_OK;
}
return TMC_ERROR;
}
//开启声音
uint8_t SCMD_OpenAllVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceStatus = ON;
return TMC_OK;
}
return TMC_ERROR;
}
//开机声配置切换,切换盒子原开机声
uint8_t SCMD_OpenVoice1(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.OpenvoiceChangeFlag = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
//开机声配置切换,切换"欢迎使用"
uint8_t SCMD_OpenVoice2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.OpenvoiceChangeFlag = ON;
return TMC_OK;
}
return TMC_ERROR;
}
//关闭支付类提示音
uint8_t SCMD_ClosePayVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceStatus = VOICE_NO_PAY;
return TMC_OK;
}
return TMC_ERROR;
}
//关闭声音
uint8_t SCMD_CloseAllVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceStatus = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t ReviseVolume(BarData *pCode)
{
uint8_t volume;
if(g_SysModal == SYSMODE_OPEN)
{
volume = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(volume > 15)
{
return TMC_ERROR;
}
gConfgBuf.voiceVolume = volume;
return TMC_OK;
}
return TMC_ERROR;
}
//开启叮咚
uint8_t SCMD_OpenDingdongVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceScanFinish = VOICE_FINISH_DINGDONG;
return TMC_OK;
}
return TMC_ERROR;
}
//开启扫码完成,开始打印
uint8_t SCMD_OpenPrintVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceScanFinish = VOICE_FINISH_PRINT;
return TMC_OK;
}
return TMC_ERROR;
}
//开启扫码成功
uint8_t SCMD_ScanSuccessVoice(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.voiceScanFinish = VOICE_SCAN_SUCCESS;
return TMC_OK;
}
return TMC_ERROR;
}
//打开蜂鸣器
uint8_t SCMD_OpenBuzzer(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.buzzerStatus = ON;
return TMC_OK;
}
return TMC_ERROR;
}
//关闭蜂鸣器
uint8_t SCMD_CloseBuzzer(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.buzzerStatus = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function ScanToneFrequency
* @brief 提示音频率
*/
uint8_t ScanToneFrequency(BarData *pCode)
{
uint16_t fre;
if(g_SysModal == SYSMODE_OPEN)
{
fre = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
gConfgBuf.buzzerFrequency = fre;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function ScanToneDuty
* @brief 提示音占空比
*/
uint8_t ScanToneDuty(BarData *pCode)
{
uint8_t duty;
if(g_SysModal == SYSMODE_OPEN)
{
duty = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(duty >= 100)
{
return TMC_ERROR;
}
gConfgBuf.buzzerDuty = duty;
return TMC_OK;
}
return TMC_ERROR;
}
//命令模式
uint8_t CmdMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.scanCodeMode = CMDMODE;
return TMC_OK;
}
return TMC_ERROR;
}
//命令超时模式
uint8_t CmdTimeMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.scanCodeMode = CMDTIMEMODE;
gConfgBuf.comunitationType = USBDEVTYPE_VSP;
return TMC_OK;
}
return TMC_ERROR;
}
//自动模式
uint8_t AutoMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.scanCodeMode = AUTOMODE;
return TMC_OK;
}
return TMC_ERROR;
}
//移动感应模式
uint8_t SensorMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.scanCodeMode = SENSORMODE;
return TMC_OK;
}
return TMC_ERROR;
}
//单次模式
uint8_t SingleScanMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.scanCodeMode = SINGLEMODE;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function ReviseCmdTimeMode
* @brief 修改命令超时时间,最小1ms,最大65535ms
*/
uint8_t ReviseCmdTimeMode(BarData *pCode)
{
uint16_t time;
//读码时长设定
if(g_SysModal == SYSMODE_OPEN)
{
time = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(time >= CMD_MODE_TIME_MAX)
{
time = CMD_MODE_TIME_MAX;
}
if(time <= CMD_MODE_TIME_MIN)
{
time = CMD_MODE_TIME_MIN;
}
gConfgBuf.cmdModeTime = time;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function ReviseSameCodeInterval
* @brief 修改相同条码间隔
*/
uint8_t ReviseSameCodeInterval(BarData *pCode)
{
uint16_t scantime;
//读码时长设定
if(g_SysModal == SYSMODE_OPEN)
{
scantime = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(scantime > SAME_CODE_INTERVAL_MAX)
{
return TMC_ERROR;
}
gConfgBuf.sameCodeInterval = scantime;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function ReviseDifferentCodeInterval
* @brief 修改相异条码间隔
*/
uint8_t ReviseDifferentCodeInterval(BarData *pCode)
{
uint16_t scantime;
//读码时长设定
if(g_SysModal == SYSMODE_OPEN)
{
scantime = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(scantime > DIFFERENT_CODE_INTERVAL_MAX)
{
return TMC_ERROR;
}
gConfgBuf.differentCodeInterval = scantime;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function SMReviseSensitivity
* @brief 修改灵敏度
*/
uint8_t SMReviseSensitivity(BarData *pCode)
{
uint16_t sensor;
sensor = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(sensor > SENSORTIVITY_VALUE_MAX)
{
return TMC_ERROR;
}
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.sensitivity = sensor;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function SMReviseImageStableTime
* @brief 修改稳像时长
*/
uint8_t SMReviseImageStableTime(BarData *pCode)
{
uint32_t time;
time = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(time > STABLE_TIME_MAX)
{
return TMC_ERROR;
}
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.stableTime = time;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t HIDKBW(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.comunitationType = USBDEVTYPE_HIDKBD;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t HIDKBWAuto(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.comunitationType = USBDEVTYPE_HIDKBD;
gConfgBuf.scanCodeMode = AUTOMODE;
return TMC_OK;
}
return TMC_ERROR;
}
/*修改键间延时*/
uint8_t ReviseKeyInterval(BarData *pCode)
{
uint8_t timedelay;
//长度检查
if(pCode->datalen > (SETCODELEN + 2))
{
return TMC_ERROR;
}
//延时设定
timedelay = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(timedelay > KEY_DELAY_MAX)
{
return TMC_ERROR;
}
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.HIDKBValToRelInterval = timedelay;
gConfgBuf.HIDKBRelToValInterval = timedelay;
return TMC_OK;
}
return TMC_ERROR;
}
/*修改轮询间隔*/
uint8_t RevisePollSpeed(BarData *pCode)
{
uint8_t speed;
//码长判定
if(pCode->datalen != (SETCODELEN + 2))
{
return TMC_ERROR;
}
speed = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if((speed == 0x00) || (speed > KEY_POLL_SPEED_MAX))
{
return TMC_ERROR;
}
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.HIDPollRate = speed;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t HIDPOS(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.comunitationType = USBDEVTYPE_HIDPOS;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t USBVirtualCOM(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.comunitationType = USBDEVTYPE_VSP;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t TTLUART(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.comunitationType = UART;
return TMC_OK;
}
return TMC_ERROR;
}
//设置波特率
uint8_t SetUARTBaudRate(BarData *pCode)
{
uint32_t baudrate;
baudrate = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.uartBaudRate = (Uart_BaudRate_Value) baudrate;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataInGBK
* @brief 输入GBK
*/
uint8_t DataInGBK(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.inputCodeType = GBK;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataInUTF8
* @brief 输入UTF8
*/
uint8_t DataInUTF8(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.inputCodeType = UTF8;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataInAuto
* @brief 输入自动识别
*/
uint8_t DataInAuto(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.inputCodeType = AUTO;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataOutGBK
* @brief 输出GBK
*/
uint8_t DataOutGBK(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.outputCodeType = GBK;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataOutUnicode
* @brief 输出Unicode
*/
uint8_t DataOutUnicode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.outputCodeType = UNICODE;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DataOutUTF8
* @brief 输出UTF8
*/
uint8_t DataOutUTF8(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.outputCodeType = UTF8;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function EnableBillMode
* @brief 允许发票模式
*/
uint8_t EnableBillMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.billModeStatus = ON;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DisableBillMode
* @brief 不允许发票模式
*/
uint8_t DisableBillMode(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.billModeStatus = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t SetTail_CR(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.endCode = END_DOCE_CR;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t SetTail_CTLF(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.endCode = END_DOCE_CRLF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t SetTail_ON(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.endCode = END_DOCE_NO;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t SetTail_TAB(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.endCode = END_DOCE_TAB;
return TMC_OK;
}
return TMC_ERROR;
}
/***********************************Start of Code Setting*************************************/
/**
* @function EnableRaedALl
* @brief 允许识读所有类型
*/
uint8_t EnableRaedALl(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13 = ON;
gConfgBuf.EAN8 = ON;
gConfgBuf.UPCA = ON;
gConfgBuf.UPCE0 = ON;
gConfgBuf.UPCE1 = ON;
gConfgBuf.Code128 = ON;
gConfgBuf.CodeBar = ON;
gConfgBuf.Code39 = ON;
gConfgBuf.Code93 = ON;
gConfgBuf.Interleaved25 = ON;
gConfgBuf.QR = ON;
gConfgBuf.DM = ON;
gConfgBuf.PDF417 = ON;
gConfgBuf.Matrix25 = ON;
gConfgBuf.Industrial_25 = ON;
gConfgBuf.IATA25 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function DisableRaedALl
* @brief 禁止识读所有类型,除了设置码
*/
uint8_t DisableRaedALl(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13 = OFF;
gConfgBuf.EAN8 = OFF;
gConfgBuf.UPCA = OFF;
gConfgBuf.UPCE0 = OFF;
gConfgBuf.UPCE1 = OFF;
gConfgBuf.Code128 = OFF;
gConfgBuf.Code39 = OFF;
gConfgBuf.Code93 = OFF;
gConfgBuf.CodeBar = OFF;
gConfgBuf.Interleaved25 = OFF;
gConfgBuf.QR = OFF;
gConfgBuf.DM = OFF;
gConfgBuf.PDF417 = OFF;
gConfgBuf.Matrix25 = OFF;
gConfgBuf.Industrial_25 = OFF;
gConfgBuf.IATA25 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
/**
* @function EnableDefault
* @brief 打开默认识读类型
*/
uint8_t EnableDefault(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13 = DefaultCfg.EAN13;
gConfgBuf.EAN8 = DefaultCfg.EAN8;
gConfgBuf.UPCA = DefaultCfg.UPCA;
gConfgBuf.UPCE0 = DefaultCfg.UPCE0;
gConfgBuf.UPCE1 = DefaultCfg.UPCE1;
gConfgBuf.Code128 = DefaultCfg.Code128;
gConfgBuf.Code39 = DefaultCfg.Code39;
gConfgBuf.Code93 = DefaultCfg.Code93;
gConfgBuf.CodeBar = DefaultCfg.CodeBar;
gConfgBuf.Interleaved25 = DefaultCfg.Interleaved25;
gConfgBuf.QR = DefaultCfg.QR;
gConfgBuf.DM = DefaultCfg.DM;
gConfgBuf.PDF417 = DefaultCfg.PDF417;
gConfgBuf.Matrix25 = DefaultCfg.Matrix25;
gConfgBuf.Industrial_25 = DefaultCfg.Industrial_25;
gConfgBuf.IATA25 = DefaultCfg.IATA25;
return TMC_OK;
}
return TMC_ERROR;
}
//*************************条码使能*************************//
uint8_t EnableEAN13Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN13Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableEAN13Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13_2 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN13Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13_2 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableEAN13Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13_5 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN13Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN13_5 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableEAN8Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN8Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableEAN8Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8_2 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN8Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8_2 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableEAN8Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8_5 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableEAN8Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.EAN8_5 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCARead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPCARead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPCARead2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA_5 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCARead2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA_2 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPCARead5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA_5 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCARead5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCA_5 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCE0Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE0 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPE0Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE0 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCE1Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPE1Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPCE1Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1_2 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCE1Read2(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1_2 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableUPCE1Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1_5 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableUPCE1Read5(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.UPCE1_5 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableCode128Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code128 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableCode128Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code128 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableCode39Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableCode39Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableCode32(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39_32 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableCode32(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39_32 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableFullAsc(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39_32_Full_ASCII = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableFullAsc(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code39_32_Full_ASCII = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableCode93Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code93 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableCode93Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Code93 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableCodeBarRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.CodeBar = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableCodeBarRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.CodeBar = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableQRRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.QR = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableQRRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.QR = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableInterLeavedRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Interleaved25 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableInterLeavedRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Interleaved25 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableMatrixRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Matrix25 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableMatrixdRead(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Matrix25 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableIndustrial25Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Industrial_25 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableIndustrial25Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.Industrial_25 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t EnableIATA25Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.IATA25 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DisableIATA25Read(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.IATA25 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DMOn(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.DM = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t DMOff(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.DM = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t PDF417On(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.PDF417 = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t PDF417Off(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.PDF417 = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t ECIModeOn(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ECIMode = ON;
return TMC_OK;
}
return TMC_ERROR;
}
uint8_t ECIModeOff(BarData *pCode)
{
if(g_SysModal == SYSMODE_OPEN)
{
gConfgBuf.ECIMode = OFF;
return TMC_OK;
}
return TMC_ERROR;
}
/***********************************End of Code Setting*************************************/
#elif SETTINGCODE_MODE_1
/*********************************************************************************
* 以下是扫码盒子通用命令,opensyssetting函数开启系统设置,close函数会将设置值写入flash,否则在ram中
*********************************************************************************/
//设置码开关
/**
* @function OpenSysSetting
* @brief 开启系统设置码
*/
uint8_t OpenSysSetting(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.bSettingCodeFlag = ON;
return UpdateCfg();
}
/**
* @function CloseSysSetting
* @brief 关闭系统设置码
*/
uint8_t CloseSysSetting(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.bSettingCodeFlag = OFF;
SetOutputData((uint8_t *)"S_CMD_0301",10);
return UpdateCfg();
}
//补光灯亮
uint8_t SCMD_LedOn(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ledStatus = ON;
SetOutputData((uint8_t *)"S_CMD_0301",10);
return UpdateCfg();
}
//补光灯灭
uint8_t SCMD_LedOff(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ledStatus = OFF;
SetOutputData((uint8_t *)"S_CMD_0300",10);
return UpdateCfg();
}
//关闭LED闪烁
uint8_t SCMD_LEDFlashOff(BarData *pCode)
{
SetOutputData((uint8_t *)"S_CMD_0408",10);
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ledFlash = OFF;
return UpdateCfg();
}
//开启LED闪烁提示
uint8_t SCMD_LEDFlashOn(BarData *pCode)
{
SetOutputData((uint8_t *)"S_CMD_0409",10);
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ledFlash = ON;
return UpdateCfg();
}
//开启声音
uint8_t SCMD_OpenAllVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceStatus = ON;
return UpdateCfg();
}
//开机声配置切换,切换盒子原开机声
uint8_t SCMD_OpenVoice1(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.OpenvoiceChangeFlag = OFF;
return UpdateCfg();
}
//开机声配置切换,切换"欢迎使用"
uint8_t SCMD_OpenVoice2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.OpenvoiceChangeFlag = ON;
return UpdateCfg();
}
//关闭支付类提示音
uint8_t SCMD_ClosePayVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceStatus = VOICE_NO_PAY;
return UpdateCfg();
}
//关闭声音
uint8_t SCMD_CloseAllVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceStatus = OFF;
return UpdateCfg();
}
uint8_t ReviseVolume(BarData *pCode)
{
uint8_t volume;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
volume = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
SetOutputData((uint8_t *)"S_CMD_04VL",10);
if(volume > 15)
{
return TMC_ERROR;
}
gConfgBuf.voiceVolume = volume;
return UpdateCfg();
}
//开启叮咚
uint8_t SCMD_OpenDingdongVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceScanFinish = VOICE_FINISH_DINGDONG;
return UpdateCfg();
}
//开启扫码完成,开始打印
uint8_t SCMD_OpenPrintVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceScanFinish = VOICE_FINISH_PRINT;
return UpdateCfg();
}
//开启扫码成功
uint8_t SCMD_ScanSuccessVoice(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.voiceScanFinish = VOICE_SCAN_SUCCESS;
return UpdateCfg();
}
//打开蜂鸣器
uint8_t SCMD_OpenBuzzer(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.buzzerStatus = ON;
return UpdateCfg();
}
//关闭蜂鸣器
uint8_t SCMD_CloseBuzzer(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.buzzerStatus = OFF;
return UpdateCfg();
}
/**
* @function ScanToneFrequency
* @brief 提示音频率
*/
uint8_t ScanToneFrequency(BarData *pCode)
{
uint16_t fre;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
fre = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
gConfgBuf.buzzerFrequency = fre;
return UpdateCfg();
}
/**
* @function ScanToneDuty
* @brief 提示音占空比
*/
uint8_t ScanToneDuty(BarData *pCode)
{
uint8_t duty;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
duty = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(duty >= 100)
{
return TMC_ERROR;
}
gConfgBuf.buzzerDuty = duty;
return UpdateCfg();
}
//命令模式
uint8_t CmdMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.scanCodeMode = CMDMODE;
return UpdateCfg();
}
//命令超时模式
uint8_t CmdTimeMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.scanCodeMode = CMDTIMEMODE;
gConfgBuf.comunitationType = USBDEVTYPE_VSP;
return UpdateCfg();
}
//自动模式
uint8_t AutoMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.scanCodeMode = AUTOMODE;
return UpdateCfg();
}
//移动感应模式
uint8_t SensorMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.scanCodeMode = SENSORMODE;
return UpdateCfg();
}
//单次模式
uint8_t SingleScanMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.scanCodeMode = SINGLEMODE;
return UpdateCfg();
}
/**
* @function ReviseCmdTimeMode
* @brief 修改命令超时时间,最小1ms,最大65535ms
*/
uint8_t ReviseCmdTimeMode(BarData *pCode)
{
uint16_t time;
//读码时长设定
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
time = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(time >= CMD_MODE_TIME_MAX)
{
time = CMD_MODE_TIME_MAX;
}
if(time <= CMD_MODE_TIME_MIN)
{
time = CMD_MODE_TIME_MIN;
}
gConfgBuf.cmdModeTime = time;
return UpdateCfg();
}
/**
* @function ReviseSameCodeInterval
* @brief 修改相同条码间隔
*/
uint8_t ReviseSameCodeInterval(BarData *pCode)
{
uint16_t scantime;
//读码时长设定
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
scantime = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(scantime > SAME_CODE_INTERVAL_MAX)
{
return TMC_ERROR;
}
gConfgBuf.sameCodeInterval = scantime;
return UpdateCfg();
}
/**
* @function ReviseDifferentCodeInterval
* @brief 修改相异条码间隔
*/
uint8_t ReviseDifferentCodeInterval(BarData *pCode)
{
uint16_t scantime;
//读码时长设定
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
scantime = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(scantime > DIFFERENT_CODE_INTERVAL_MAX)
{
return TMC_ERROR;
}
gConfgBuf.differentCodeInterval = scantime;
return UpdateCfg();
}
/**
* @function SMReviseSensitivity
* @brief 修改灵敏度
*/
uint8_t SMReviseSensitivity(BarData *pCode)
{
uint16_t sensor;
sensor = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(sensor > SENSORTIVITY_VALUE_MAX)
{
return TMC_ERROR;
}
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.sensitivity = sensor;
return UpdateCfg();
}
/**
* @function SMReviseImageStableTime
* @brief 修改稳像时长
*/
uint8_t SMReviseImageStableTime(BarData *pCode)
{
uint32_t time;
time = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(time > STABLE_TIME_MAX)
{
return TMC_ERROR;
}
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.stableTime = time;
return UpdateCfg();
}
uint8_t HIDKBW(BarData *pCode)
{
uint8_t bStatus;
uint8_t bPretype = gConfgBuf.comunitationType;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.comunitationType = USBDEVTYPE_HIDKBD;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
if(bPretype != gConfgBuf.comunitationType)
{
//USB初始化
AppUSBInit(gConfgBuf.comunitationType);
}
}
return bStatus;
}
uint8_t HIDKBWAuto(BarData *pCode)
{
uint8_t bStatus;
uint8_t bPretype = gConfgBuf.comunitationType;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.comunitationType = USBDEVTYPE_HIDKBD;
gConfgBuf.scanCodeMode = AUTOMODE;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
if(bPretype != gConfgBuf.comunitationType)
{
//USB初始化
AppUSBInit(gConfgBuf.comunitationType);
}
}
return bStatus;
}
/*修改键间延时*/
uint8_t ReviseKeyInterval(BarData *pCode)
{
uint8_t timedelay;
//长度检查
if(pCode->datalen > (SETCODELEN + 2))
{
return TMC_ERROR;
}
//延时设定
timedelay = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if(timedelay > KEY_DELAY_MAX)
{
return TMC_ERROR;
}
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.HIDKBValToRelInterval = timedelay;
gConfgBuf.HIDKBRelToValInterval = timedelay;
return UpdateCfg();
}
/*修改轮询间隔*/
uint8_t RevisePollSpeed(BarData *pCode)
{
uint8_t speed;
//码长判定
if(pCode->datalen != (SETCODELEN + 2))
{
return TMC_ERROR;
}
speed = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
if((speed == 0x00) || (speed > KEY_POLL_SPEED_MAX))
{
return TMC_ERROR;
}
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.HIDPollRate = speed;
return UpdateCfg();
}
uint8_t HIDPOS(BarData *pCode)
{
uint8_t bStatus;
uint8_t bPretype = gConfgBuf.comunitationType;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.comunitationType = USBDEVTYPE_HIDPOS;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
if(bPretype != gConfgBuf.comunitationType)
{
//USB初始化
AppUSBInit(gConfgBuf.comunitationType);
}
}
return bStatus;
}
uint8_t USBVirtualCOM(BarData *pCode)
{
uint8_t bStatus;
uint8_t bPretype = gConfgBuf.comunitationType;
if(bPretype!=USBDEVTYPE_VSP)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.comunitationType = USBDEVTYPE_VSP;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
//if(bPretype != gConfgBuf.comunitationType)
{
//USB初始化
AppUSBInit(gConfgBuf.comunitationType);
}
}
} else bStatus = TMC_OK;
return bStatus;
}
uint8_t TTLUART(BarData *pCode)
{
uint8_t bStatus;
uint8_t bPretype = gConfgBuf.comunitationType;
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.comunitationType = UART;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
if(bPretype != gConfgBuf.comunitationType)
{
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
}
}
return bStatus;
}
//设置波特率
uint8_t SetUARTBaudRate(BarData *pCode)
{
uint8_t bStatus;
uint32_t baudrate;
baudrate = StringToDec(&pCode->bardata[SETCODELEN], pCode->datalen - SETCODELEN);
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.uartBaudRate = (Uart_BaudRate_Value) baudrate;
bStatus = UpdateCfg();
if(bStatus == TMC_OK)
{
AppUartInit(gConfgBuf.uartBaudRate, UART_PARITY_MODE_NONE);
}
return bStatus;
}
/**
* @function DataInGBK
* @brief 输入GBK
*/
uint8_t DataInGBK(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.inputCodeType = GBK;
return UpdateCfg();
}
/**
* @function DataInUTF8
* @brief 输入UTF8
*/
uint8_t DataInUTF8(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.inputCodeType = UTF8;
return UpdateCfg();
}
/**
* @function DataInAuto
* @brief 输入自动识别
*/
uint8_t DataInAuto(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.inputCodeType = AUTO;
return UpdateCfg();
}
/**
* @function DataOutGBK
* @brief 输出GBK
*/
uint8_t DataOutGBK(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.outputCodeType = GBK;
return UpdateCfg();
}
/**
* @function DataOutUnicode
* @brief 输出Unicode
*/
uint8_t DataOutUnicode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.outputCodeType = UNICODE;
return UpdateCfg();
}
/**
* @function DataOutUTF8
* @brief 输出UTF8
*/
uint8_t DataOutUTF8(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.outputCodeType = UTF8;
return UpdateCfg();
}
/**
* @function EnableBillMode
* @brief 允许发票模式
*/
uint8_t EnableBillMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.billModeStatus = ON;
return UpdateCfg();
}
/**
* @function DisableBillMode
* @brief 不允许发票模式
*/
uint8_t DisableBillMode(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.billModeStatus = OFF;
return UpdateCfg();
}
uint8_t SetTail_CR(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.endCode = END_DOCE_CR;
return UpdateCfg();
}
uint8_t SetTail_CTLF(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.endCode = END_DOCE_CRLF;
return UpdateCfg();
}
uint8_t SetTail_ON(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.endCode = END_DOCE_NO;
return UpdateCfg();
}
uint8_t SetTail_TAB(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.endCode = END_DOCE_TAB;
return UpdateCfg();
}
/***********************************Start of Code Setting*************************************/
/**
* @function EnableRaedALl
* @brief 允许识读所有类型
*/
uint8_t EnableRaedALl(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13 = ON;
gConfgBuf.EAN8 = ON;
gConfgBuf.UPCA = ON;
gConfgBuf.UPCE0 = ON;
gConfgBuf.UPCE1 = ON;
gConfgBuf.Code128 = ON;
gConfgBuf.CodeBar = ON;
gConfgBuf.Code39 = ON;
gConfgBuf.Code93 = ON;
gConfgBuf.Interleaved25 = ON;
gConfgBuf.QR = ON;
gConfgBuf.DM = ON;
gConfgBuf.PDF417 = ON;
gConfgBuf.Matrix25 = ON;
gConfgBuf.Industrial_25 = ON;
gConfgBuf.IATA25 = ON;
return UpdateALCfg();
}
/**
* @function DisableRaedALl
* @brief 禁止识读所有类型,除了设置码
*/
uint8_t DisableRaedALl(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13 = OFF;
gConfgBuf.EAN8 = OFF;
gConfgBuf.UPCA = OFF;
gConfgBuf.UPCE0 = OFF;
gConfgBuf.UPCE1 = OFF;
gConfgBuf.Code128 = OFF;
gConfgBuf.Code39 = OFF;
gConfgBuf.Code93 = OFF;
gConfgBuf.CodeBar = OFF;
gConfgBuf.Interleaved25 = OFF;
gConfgBuf.QR = OFF;
gConfgBuf.DM = OFF;
gConfgBuf.PDF417 = OFF;
gConfgBuf.Matrix25 = OFF;
gConfgBuf.Industrial_25 = OFF;
gConfgBuf.IATA25 = OFF;
return UpdateALCfg();
}
/**
* @function EnableDefault
* @brief 打开默认识读类型
*/
uint8_t EnableDefault(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13 = DefaultCfg.EAN13;
gConfgBuf.EAN8 = DefaultCfg.EAN8;
gConfgBuf.UPCA = DefaultCfg.UPCA;
gConfgBuf.UPCE0 = DefaultCfg.UPCE0;
gConfgBuf.UPCE1 = DefaultCfg.UPCE1;
gConfgBuf.Code128 = DefaultCfg.Code128;
gConfgBuf.Code39 = DefaultCfg.Code39;
gConfgBuf.Code93 = DefaultCfg.Code93;
gConfgBuf.CodeBar = DefaultCfg.CodeBar;
gConfgBuf.Interleaved25 = DefaultCfg.Interleaved25;
gConfgBuf.QR = DefaultCfg.QR;
gConfgBuf.DM = DefaultCfg.DM;
gConfgBuf.PDF417 = DefaultCfg.PDF417;
gConfgBuf.Matrix25 = DefaultCfg.Matrix25;
gConfgBuf.Industrial_25 = DefaultCfg.Industrial_25;
gConfgBuf.IATA25 = DefaultCfg.IATA25;
return UpdateALCfg();
}
//*************************条码使能*************************//
uint8_t EnableEAN13Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN13Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13 = OFF;
return UpdateALCfg();
}
uint8_t EnableEAN13Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13_2 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN13Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13_2 = OFF;
return UpdateALCfg();
}
uint8_t EnableEAN13Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13_5 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN13Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN13_5 = OFF;
return UpdateALCfg();
}
uint8_t EnableEAN8Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN8Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8 = OFF;
return UpdateALCfg();
}
uint8_t EnableEAN8Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8_2 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN8Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8_2 = OFF;
return UpdateALCfg();
}
uint8_t EnableEAN8Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8_5 = ON;
return UpdateALCfg();
}
uint8_t DisableEAN8Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.EAN8_5 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCARead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA = ON;
return UpdateALCfg();
}
uint8_t DisableUPCARead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA = OFF;
return UpdateALCfg();
}
uint8_t DisableUPCARead2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA_5 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCARead2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA_2 = ON;
return UpdateALCfg();
}
uint8_t DisableUPCARead5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA_5 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCARead5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCA_5 = ON;
return UpdateALCfg();
}
uint8_t EnableUPCE0Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE0 = ON;
return UpdateALCfg();
}
uint8_t DisableUPE0Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE0 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCE1Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1 = ON;
return UpdateALCfg();
}
uint8_t DisableUPE1Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1 = OFF;
return UpdateALCfg();
}
uint8_t DisableUPCE1Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1_2 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCE1Read2(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1_2 = ON;
return UpdateALCfg();
}
uint8_t DisableUPCE1Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1_5 = OFF;
return UpdateALCfg();
}
uint8_t EnableUPCE1Read5(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.UPCE1_5 = ON;
return UpdateALCfg();
}
uint8_t EnableCode128Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code128 = ON;
return UpdateALCfg();
}
uint8_t DisableCode128Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code128 = OFF;
return UpdateALCfg();
}
uint8_t EnableCode39Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39 = ON;
return UpdateALCfg();
}
uint8_t DisableCode39Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39 = OFF;
return UpdateALCfg();
}
uint8_t DisableCode32(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39_32 = OFF;
return UpdateALCfg();
}
uint8_t EnableCode32(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39_32 = ON;
return UpdateALCfg();
}
uint8_t DisableFullAsc(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39_32_Full_ASCII = OFF;
return UpdateALCfg();
}
uint8_t EnableFullAsc(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code39_32_Full_ASCII = ON;
return UpdateALCfg();
}
uint8_t EnableCode93Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code93 = ON;
return UpdateALCfg();
}
uint8_t DisableCode93Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Code93 = OFF;
return UpdateALCfg();
}
uint8_t EnableCodeBarRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.CodeBar = ON;
return UpdateALCfg();
}
uint8_t DisableCodeBarRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.CodeBar = OFF;
return UpdateALCfg();
}
uint8_t EnableQRRead(BarData *pCode)
{
// Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
SetOutputData((uint8_t *)"C_CMD_QR01",10);
gConfgBuf.QR = ON;
return UpdateALCfg();
}
uint8_t DisableQRRead(BarData *pCode)
{
// Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
SetOutputData((uint8_t *)"C_CMD_QR00",10);
gConfgBuf.QR = OFF;
return UpdateALCfg();
}
uint8_t EnableInterLeavedRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Interleaved25 = ON;
return UpdateALCfg();
}
uint8_t DisableInterLeavedRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Interleaved25 = OFF;
return UpdateALCfg();
}
uint8_t EnableMatrixRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Matrix25 = ON;
return UpdateALCfg();
}
uint8_t DisableMatrixdRead(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Matrix25 = OFF;
return UpdateALCfg();
}
uint8_t EnableIndustrial25Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Industrial_25 = ON;
return UpdateALCfg();
}
uint8_t DisableIndustrial25Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.Industrial_25 = OFF;
return UpdateALCfg();
}
uint8_t EnableIATA25Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.IATA25 = ON;
return UpdateALCfg();
}
uint8_t DisableIATA25Read(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.IATA25 = OFF;
return UpdateALCfg();
}
uint8_t DMOn(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.DM = ON;
return UpdateALCfg();
}
uint8_t DMOff(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.DM = OFF;
return UpdateALCfg();
}
uint8_t PDF417On(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.PDF417 = ON;
return UpdateALCfg();
}
uint8_t PDF417Off(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.PDF417 = OFF;
return UpdateALCfg();
}
uint8_t ECIModeOn(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ECIMode = ON;
return UpdateALCfg();
}
uint8_t ECIModeOff(BarData *pCode)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.ECIMode = OFF;
return UpdateALCfg();
}
#endif
uint8_t PlayVoice(BarData *pCode)
{
// AppVoicePlay((uint8_t *)scanFinishVoiceFile, sizeof(scanFinishVoiceFile), gConfgBuf.voiceVolume);
addPlayList(VOICEDATA,(uint8_t *)scanFinishVoiceFile, sizeof(scanFinishVoiceFile));
return TMC_NONE;
}
/*********************************************************************************
* 以下是生产写SN相关工序函数,分别是获取SN,如果没有SN,进行写入SN;已有SN,提供清除SN的操作
*********************************************************************************/
//获取SN
uint8_t ProductGetSN(BarData *pCode)
{
uint8_t *p_sn = (uint8_t *) TUSNADDR;
//读标记,如果已存在,返回SN值,如果不存在,返回错误
if(*(p_sn + SN_SFLAG_OFFS) == 'S' && *(p_sn + SN_NFLAG_OFFS) == 'N')
{
ClearOutputLen();
SetOutputData((uint8_t *)"S0000RSN",8);
if(!gReceiveKey)
{
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"NOKEY",5);
ReportData(Communication_Id);
} else {
SetOutputData((p_sn + SN_NFLAG_OFFS+1),*(p_sn+SN_LEN_OFFS) - SN_SNFLAG_LEN);
ReportData(Communication_Id);
}
return TMC_NONE;
}
else
{
SetOutputData((uint8_t *)"S0000RSN",8);
return TMC_ERROR;
}
}
//写SN
uint8_t ProductWriteSN(BarData *pCode)
{
uint8_t uLen;
uint8_t tmpbuf[FLASHPAGESIZE];
uint8_t status;
uLen = pCode->datalen - SN_PROTOCOL_WSN_OFFS;//该长度包含SN字符长度
tmpbuf[SN_LEN_OFFS] = uLen;
memcpy(tmpbuf + SN_SFLAG_OFFS, pCode->bardata + SN_PROTOCOL_WSN_OFFS, uLen);
status = FLASH_NormalErase((uint8_t *)TUSNADDR);
if(status != TMC_OK)
{
SetOutputData((uint8_t *)"S0000WSN",8);
return TMC_ERROR;
}
status = FLASH_WriteDoubleWords((uint32_t)TUSNADDR, (uint32_t)&tmpbuf, FLASHPAGESIZE / 2);
if(status != TMC_OK)
{
SetOutputData((uint8_t *)"S0000WSN",8);
return TMC_ERROR;
}
SetOutputData((uint8_t *)"S0000WSN",8);
return TMC_OK;
// return SN_EXIT;
}
//清除SN
uint8_t ProductClearSN(BarData *pCode)
{
uint8_t status;
status = FLASH_NormalErase((uint8_t *)TUSNADDR);
if(status != TMC_OK)
{
return TMC_ERROR;
}
return TMC_OK;
}
//输出SN
uint8_t OutputSN(BarData *pCode)
{
uint8_t *p_sn = (uint8_t *) TUSNADDR;
//读标记,如果已存在,返回SN值,如果不存在,输出"FFFF"
if(*(p_sn + SN_SFLAG_OFFS) == 'S' && *(p_sn + SN_NFLAG_OFFS) == 'N')
{
SetOutputData((uint8_t *)(TUSNADDR + SN_DATA_OFFS), (uint8_t)(*((uint32_t *)TUSNADDR) - SN_SNFLAG_LEN));
// SetOutputData((uint8_t *)"\n", CRLF_LEN);
ReportData(pCode->bartype);
}
else
{
SetOutputData((uint8_t *)"FFFF", NO_SN_LEN);
ReportData(pCode->bartype);
}
return TMC_OK;
}
//置生产标记,如果这个标记是特定值,端口根据配置区;否则,默认端口是虚拟串口
uint8_t SetProductFlag(BarData *pCode)
{
uint8_t tmpbuf[FLASHPAGESIZE] = PRODUCT_FLAG_VALUE;
uint8_t status;
status = FLASH_NormalErase((uint8_t *)PRODUCT_FLAG_ADDR);
if(status != TMC_OK)
{
return TMC_ERROR;
}
status = FLASH_WriteDoubleWords((uint32_t)PRODUCT_FLAG_ADDR, (uint32_t)&tmpbuf, FLASHPAGESIZE / 2);
if(status != TMC_OK)
{
return TMC_ERROR;
}
return TMC_OK;
}
//读取生产标记,如果这个标记是特定值,端口根据配置区;否则,默认端口是虚拟串口
uint8_t GetProductFlag(BarData *pCode)
{
uint8_t *pFlag = (uint8_t *) PRODUCT_FLAG_ADDR;
if(memcmp(pFlag, PRODUCT_FLAG_VALUE, PRODUCT_FLAG_LEN))
{
return TMC_ERROR;
}
return TMC_OK;
}
//清生产标记,如果这个标记是特定值,端口根据配置区;否则,默认端口是虚拟串口
uint8_t ClearProductFlag(BarData *pCode)
{
uint8_t status;
status = FLASH_NormalErase((uint8_t *)PRODUCT_FLAG_ADDR);
if(status != TMC_OK)
{
return TMC_ERROR;
}
return TMC_OK;
}
//获取芯片SN
uint8_t GetChipSN(BarData *pCode)
{
uint8_t *pSn = (uint8_t *) SNADDR;
SetOutputData((uint8_t *)pSn, SNLEN);
ReportData(pCode->bartype);
return TMC_NONE;
}
void GetChipSNStr(int commtype)
{
char tmp[SNLEN*2+10];
uint8_t c1,c2,len;
uint8_t *pSn = (uint8_t *) SNADDR;
len = 0;
for(int i=0;i>4;
if(c2>9) tmp[len] = 'A' + c2 - 10;
else tmp[len] = c2 + '0';
len++;
if(c1>9) tmp[len] = 'A' + c1 - 10;
else tmp[len] = c1 + '0';
len++;
}
// tmp[len++] = '\n';
SetOutputData((uint8_t *)tmp, len);
ReportData(commtype);
}
//写入License
uint8_t WriteLicense(BarData *pCode)
{
uint8_t license[SNLEN + SNFLAGLEN], status;
if((pCode->datalen - SETCODELEN_MODULE) == SNLEN)
{
memcpy(&license, pCode->bardata + SETCODELEN_MODULE, SNLEN);
memcpy(&license[SNLEN], (uint8_t *) "LICENSE.", SNFLAGLEN);
status = FLASH_NormalErase((uint8_t *)LINSCENCE);
if(status != TMC_OK)
{
return TMC_ERROR;
}
status = FLASH_WriteDoubleWords((uint32_t)LINSCENCE, (uint32_t)&license, SNLEN + SNFLAGLEN);
if(status != TMC_OK)
{
return TMC_ERROR;
}
return TMC_OK;
}
return TMC_ERROR;
}
//读取License
uint8_t GetLicense(BarData *pCode)
{
uint8_t *pLicense = (uint8_t *) LINSCENCE;
if(memcmp(pLicense + SNLEN, (uint8_t *) "LICENSE.", SNFLAGLEN))
{
return TMC_ERROR;
}
SetOutputData((uint8_t *)pLicense, SNLEN);
ReportData(pCode->bartype);
return TMC_NONE;
}
//验证License是否有效
uint8_t CheckLicense(BarData *pCode)
{
uint8_t *pLicense = (uint8_t *) LINSCENCE;
if(TMC_Scan_Init(pLicense) == 0)
{
return TMC_OK;
}
else
{
return TMC_ERROR;
}
}
/**
* @function EnableKeyVoice
* @brief press key voice on
* @param[in] pCode
* @return
*/
uint8_t EnableKeyVoice(BarData *pCode)
{
SetOutputData((uint8_t *)"S_CMD_VC01",10);
if(gConfgBuf.statusKeyVoice!=ON)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.statusKeyVoice = ON;
return UpdateCfg();
}
return TMC_OK;
}
/**
* @function DisableKeyVoice
* @brief press key voice off
* @param[in] pCode
* @return
*/
uint8_t DisableKeyVoice(BarData *pCode)
{
SetOutputData((uint8_t *)"S_CMD_VC00",10);
if(gConfgBuf.statusKeyVoice!=OFF)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.statusKeyVoice = OFF;
return UpdateCfg();
}
return TMC_OK;
}
uint8_t PayCodeEnable(BarData *pCode)
{
SetOutputData(pCode->bardata,pCode->datalen);
if(pCode->bardata[9]=='1')
{
if(gConfgBuf.payCodeEnable==OFF)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.payCodeEnable = ON;
return UpdateCfg();
}
return TMC_OK;
} else {
if(gConfgBuf.payCodeEnable==ON)
{
Memcpy((uint8_t *) &gConfgBuf, (uint8_t *) gCurrentSysCfg, sizeof(CfgSetting));
gConfgBuf.payCodeEnable = OFF;
return UpdateCfg();
}
return TMC_OK;
}
}
/**
* @function PlayLockVoice
* @brief
*/
extern void CmdPlayVoice(uint8_t *cmd);
uint8_t PlayLockVoice(BarData *pCode)
{
CmdPlayVoice(pCode->bardata + SETCODELEN + 6);
SetOutputData(pCode->bardata,pCode->datalen);
// SetOutputData((uint8_t *)"S_CMD_PLAYVOICE",15);
return TMC_OK;
}
extern uint8_t RN[];//random number
uint8_t CmdGetRan(BarData *pCode)
{
uint8_t i,r[5],r16[12],cmd[20];
srand(TMC_GetTick());
for(i=0;i<5;i++)
{
r[i] = rand()%0xff;
RN[i+5] = r[i];
}
for(i=10;i<20;i++)RN[i] = RN[i-10];
for(i=20;i<30;i++)RN[i] = RN[i-20];
BinToCode16(r,r16,5);
strcpy(cmd,"LRRAN");
strcat(cmd,r16);
SetOutputData((uint8_t *)cmd, strlen(cmd));
SetPackType(PACK_TYPEA);
ReportData(pCode->bartype);
return TMC_NONE;
}
extern uint8_t ShowVersion(BarData *pCode);
extern uint8_t ChangeToCom(BarData *pCode);
extern uint8_t ChangeToHIDKBW(BarData *pCode);
extern uint8_t EnOrDisOneDimCode(BarData *pCode);
extern uint8_t EnOrDisTwoDimCode(BarData *pCode);
extern uint8_t EnOrDisKey(BarData *pCode);
extern uint8_t IncreaseVolume(BarData *pCode);
extern uint8_t DecreaseVolume(BarData *pCode);
extern uint8_t Fn29ShowSN(BarData *pCode);
extern uint8_t Fn88ShowDevicemod(BarData *pCode);
/*********************************************************************************
* 命令表
*********************************************************************************/
const ScanCodeHandle CommCmdTable[] =
{
{{"S_CMD_PLAY"}, SETCODELEN, PlayLockVoice}, //play vpoce
/*********************************************************************************
* 以下是扫码模块命令,注意扫码模块使用时,DefaultCfg.scanCodeMode应设置为1:命令 模式
*********************************************************************************/
{{"S0000030"}, SETCODELEN_MODULE, OutVersion}, //获取版本
{{"SU0000FF"}, SETCODELEN_MODULE, UpdateApp}, //更新固件
/*********************************************************************************
* 以下是串口写SN命令
*********************************************************************************/
{{"S0000RSN"}, SETCODELEN_MODULE, ProductGetSN}, //获取SN
{{"S0000WSN"}, SETCODELEN_MODULE, ProductWriteSN}, //写SN
/*********************************************************************************
* 以下是扫码盒子通用命令,opensyssetting函数开启系统设置,close函数会将设置值写入flash,否则在ram中
*********************************************************************************/
{{"S_CMD_FFFF"}, SETCODELEN, RestoreFactorySetting},
{{"S_CMD_0301"}, SETCODELEN, SCMD_LedOn}, //白色灯常亮设置
{{"S_CMD_0300"}, SETCODELEN, SCMD_LedOff}, //白色灯普通设置
{{"S_CMD_04VL"}, SETCODELEN, ReviseVolume}, //修改语音大小
{{"S_CMD_0409"}, SETCODELEN, SCMD_LEDFlashOn}, //开启LED闪烁
{{"S_CMD_0408"}, SETCODELEN, SCMD_LEDFlashOff}, //关闭LED闪烁
{{"S_CMD_VC01"}, SETCODELEN, EnableKeyVoice}, //开按键音
{{"S_CMD_VC00"}, SETCODELEN, DisableKeyVoice}, //关按键音
{{"C_CMD_QR00"}, SETCODELEN, DisableQRRead},
{{"C_CMD_QR01"}, SETCODELEN, EnableQRRead},
{{"ENABLEBARCODE"}, 13, EnOrDisOneDimCode},
{{"ENABLEKEYBOARD"}, 14, EnOrDisKey},
{{"INCREASEV+"}, 10, IncreaseVolume},
{{"DECREASEV-"}, 10, DecreaseVolume},
{{"PAYENABLE"}, 9, PayCodeEnable},
{{"DEVICEMOD"}, 9, Fn88ShowDevicemod},
};
//扫码命令表,可自行修改和扩展
const ScanCodeHandle scanCodeCmdTable[] =
{
{{"S_CMD_PLAY"}, SETCODELEN, PlayLockVoice}, //play vpoce
/*********************************************************************************
* 以下是扫码模块命令,注意扫码模块使用时,DefaultCfg.scanCodeMode应设置为1:命令 模式
*********************************************************************************/
{{"S0000030"}, SETCODELEN_MODULE, OutVersion}, //获取版本
{{"SU0000FF"}, SETCODELEN_MODULE, UpdateApp}, //更新固件
/*********************************************************************************
* 以下是串口写license
*********************************************************************************/
/*********************************************************************************
* 以下是串口写SN命令
*********************************************************************************/
{{"S0000RSN"}, SETCODELEN_MODULE, ProductGetSN}, //获取SN
{{"S0000WSN"}, SETCODELEN_MODULE, ProductWriteSN}, //写SN
/*********************************************************************************
* 以下是扫码盒子通用命令,opensyssetting函数开启系统设置,close函数会将设置值写入flash,否则在ram中
*********************************************************************************/
{{"S_CMD_FFFF"}, SETCODELEN, RestoreFactorySetting},
{{"S_CMD_0301"}, SETCODELEN, SCMD_LedOn}, //白色灯常亮设置
{{"S_CMD_0300"}, SETCODELEN, SCMD_LedOff}, //白色灯普通设置
{{"S_CMD_04VL"}, SETCODELEN, ReviseVolume}, //修改语音大小
{{"S_CMD_0409"}, SETCODELEN, SCMD_LEDFlashOn}, //开启LED闪烁
{{"S_CMD_0408"}, SETCODELEN, SCMD_LEDFlashOff}, //关闭LED闪烁
{{"S_CMD_VC01"}, SETCODELEN, EnableKeyVoice}, //开按键音
{{"S_CMD_VC00"}, SETCODELEN, DisableKeyVoice}, //关按键音
{{"C_CMD_QR00"}, SETCODELEN, DisableQRRead},
{{"C_CMD_QR01"}, SETCODELEN, EnableQRRead},
{{"Fn89"}, 4, ShowVersion},
{{"Fn82"}, 4, Fn82RestoreFactorySetting},
{{"Fnclear2"}, 8, UpdateApp}, //更新固件
{{"Fn57"}, 4, EnOrDisOneDimCode},
{{"Fn59"}, 4, EnOrDisTwoDimCode},
{{"Fnclear5"}, 8, EnOrDisKey},
{{"Fn81"}, 4, IncreaseVolume},
{{"Fn83"}, 4, DecreaseVolume},
{{"Fn29"}, 4, Fn29ShowSN},
{{"Fn88"}, 4, Fn88ShowDevicemod},
{{"Fnclear0"}, 8, FC0RestoreFactorySetting},
{{"PAYENABLE"}, 9, PayCodeEnable},
};
const ScanCodeHandle BCmdTable[] =
{
{{"CRRAN"}, 5, CmdGetRan},
};
const ScanCodeHandle ACmdTable[] =
{
{{"S0000030"}, SETCODELEN_MODULE, OutVersion}, //获取版本
{{"Fn89"}, 4, ShowVersion},
};
void ScanCodeCmdHandle(BarData *pCode)
{
uint8_t bStatus;
uint16_t i = 0, TableLen;
TableLen = sizeof(scanCodeCmdTable) / sizeof(ScanCodeHandle);
#if SETTINGCODE_MODE_0
for(i = 0; i < TableLen; i++)
{
if(Memcmp((uint8_t *)scanCodeCmdTable[i].HandleMsg, pCode->bardata, scanCodeCmdTable[i].MsgLen))
{
bStatus = scanCodeCmdTable[i].pFunc(pCode);
SetCodeReport(bStatus); //设置码输出提示
return;
}
}
//在关闭QR码时,设置码仍可以识别,其他QR码无反应
if((!gConfgBuf.QR) && (pCode->bartype == QR_Id))
{
return;
}
#elif SETTINGCODE_MODE_1
//关闭设置码的条件下,仅识别开启设置码
if((pCode->datalen == SETCODELEN) && (Memcmp((uint8_t *) "S_CMD_0001", pCode->bardata, SETCODELEN)))
{
bStatus = OpenSysSetting(pCode);
SetCodeReport(bStatus); //设置码输出提示
return;
}
for(i = 0; i < TableLen; i++)
{
if(Memcmp((uint8_t *)scanCodeCmdTable[i].HandleMsg, pCode->bardata, scanCodeCmdTable[i].MsgLen))
{
if(gConfgBuf.bSettingCodeFlag)
{
bStatus = scanCodeCmdTable[i].pFunc(pCode);
}
else
{
bStatus = TMC_ERROR;
}
SetCodeReport(bStatus); //设置码输出提示
SetPackType(PACK_TYPEA);
if(bStatus==TMC_OK)
{
SetOutputData((uint8_t *)"OK",2);
} else {
SetOutputData((uint8_t *)"ERR",3);
}
ReportData(Communication_Id);
return;
}
}
//在关闭QR码时,设置码仍可以识别,其他QR码无反应
if((!gConfgBuf.Code128) && (pCode->bartype == Code_128_Id))
{
return;
}
#endif
//非设置码输出提示
PayCodeReport(pCode);
}
/**
* @function CommunicationCmdHandle
* @brief 通信命令分发处理,通信协议可自行定义
* @return 无
*/
void ACmdHandle(BarData *comdata)
{
uint16_t i = 0, TableLen;
uint8_t status;
gFunTrace = 35;
TableLen = sizeof(ACmdTable) / sizeof(ScanCodeHandle);
for(i = 0; i < TableLen; i++)
{
if(!memcmp((uint8_t *)ACmdTable[i].HandleMsg, comdata->bardata, ACmdTable[i].MsgLen))
{
status = ACmdTable[i].pFunc(comdata);
switch(status)
{
case TMC_OK:
//通信命令处理成功返回9000
//通信命令处理成功返回OK
SetPackType(PACK_TYPEA);
SetOutputData(respSuccess, 2);
ReportData(comdata->bartype);
break;
case TMC_ERROR:
//通信命令处理失败返回6A89
//通信命令处理失败返回ERR
SetPackType(PACK_TYPEA);
SetOutputData(respError, 3);
ReportData(comdata->bartype);
break;
default:
break;
}
// break;
return;
}
}
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"ILLEGALCMD", 10);
ReportData(comdata->bartype);
}
/**
* @function CommunicationCmdHandle
* @brief 通信命令分发处理,通信协议可自行定义
* @return 无
*/
void BCmdHandle(BarData *comdata)
{
uint16_t i = 0, TableLen;
uint8_t status;
gFunTrace = 35;
TableLen = sizeof(BCmdTable) / sizeof(ScanCodeHandle);
for(i = 0; i < TableLen; i++)
{
if(!memcmp((uint8_t *)BCmdTable[i].HandleMsg, comdata->bardata, BCmdTable[i].MsgLen))
{
status = BCmdTable[i].pFunc(comdata);
switch(status)
{
case TMC_OK:
//通信命令处理成功返回9000
//通信命令处理成功返回OK
SetPackType(PACK_TYPEA);
SetOutputData(respSuccess, 2);
ReportData(comdata->bartype);
break;
case TMC_ERROR:
//通信命令处理失败返回6A89
//通信命令处理失败返回ERR
SetPackType(PACK_TYPEA);
SetOutputData(respError, 3);
ReportData(comdata->bartype);
break;
default:
break;
}
return;
}
}
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"ILLEGALCMD", 10);
ReportData(comdata->bartype);
}
/**
* @function CommunicationCmdHandle
* @brief 通信命令分发处理,通信协议可自行定义
* @return 无
*/
void CCmdHandle(BarData *comdata)
{
uint16_t i = 0, TableLen;
uint8_t status;
gFunTrace = 35;
uint8_t *p_sn = (uint8_t *) TUSNADDR;
TableLen = sizeof(CommCmdTable) / sizeof(ScanCodeHandle);
for(i = 0; i < TableLen; i++)
{
if(!memcmp((uint8_t *)CommCmdTable[i].HandleMsg, comdata->bardata, CommCmdTable[i].MsgLen))
{
status = CommCmdTable[i].pFunc(comdata);
switch(status)
{
case TMC_OK:
//通信命令处理成功返回OK
SetPackType(PACK_TYPEA);
SetOutputData(respSuccess, 2);
ReportData(comdata->bartype);
break;
case TMC_ERROR:
//通信命令处理失败返回ERR
SetPackType(PACK_TYPEA);
SetOutputData(respError, 3);
ReportData(comdata->bartype);
break;
case SN_EXIT:
SetOutputData(p_sn + 1, *p_sn);
ReportData(comdata->bartype);
break;
default:
break;
}
return;
}
}
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"ILLEGALCMD", 10);
ReportData(comdata->bartype);
}
/**
* @function CommunicationCmdHandle
* @brief 通信命令分发处理,通信协议可自行定义
* @return 无
*/
void CommunicationCmdHandle(BarData *comdata)
{
if(comdata->packType==PACK_TYPEA)
{
ACmdHandle(comdata);
} else if(comdata->packType==PACK_TYPEB)
{
BCmdHandle(comdata);
} else if(comdata->packType==PACK_TYPEC)
{
CCmdHandle(comdata);
} else {
SetPackType(PACK_TYPEA);
SetOutputData((uint8_t *)"ILLEGALCMD", 10);
ReportData(comdata->bartype);
}
}
/**
* @function SettingCodeBatch
* @brief 批处理设置码
* @param[in] pCode 解码数据
* @return
*/
uint8_t SettingCodeBatch(BarData *pCode)
{
BarData setcode;
uint16_t i = 0, j = 0, batchcodelen = 0;
uint8_t setcodebuf[MAX_BATCH_SETCODE_LEN];
gFunTrace = 37;
//校验数据格式
if(!Memcmp((uint8_t *)"S_CMD_0001;", pCode->bardata, SETCODELEN + 1))
{
return FALSE;
}
if(!Memcmp((uint8_t *)"S_CMD_0000;", &pCode->bardata[pCode->datalen - SETCODELEN - 1], SETCODELEN + 1))
{
return FALSE;
}
Memcpy(setcodebuf, pCode->bardata, pCode->datalen);
setcode.bartype = pCode->bartype;
batchcodelen = pCode->datalen;
while(i < batchcodelen)
{
if(setcodebuf[i] == ';')
{
setcode.bardata = &setcodebuf[j];
setcode.datalen = i - j;
setcode.barinfo = NULL;
ScanCodeCmdHandle(&setcode);
j = i + 1;
}
i++;
}
return TRUE;
}
/**
* @function DisableKeyboard
* @brief
* @param[in] pCode
* @return
*/
uint8_t DisableKeyboard(BarData *pCode)
{
gConfgBuf.statusKey = OFF;
return UpdateCfg();
}
/**
* @function EnableKeyboard
* @brief
* @param[in] pCode
* @return
*/
uint8_t EnableKeyboard(BarData *pCode)
{
gConfgBuf.statusKey = ON;
return UpdateCfg();
}
/**
* @function EnableOneDimRead
* @brief
*/
uint8_t EnableOneDimRead(BarData *pCode)
{
gConfgBuf.EAN13 = ON;
gConfgBuf.EAN8 = ON;
gConfgBuf.UPCA = ON;
gConfgBuf.UPCE0 = ON;
gConfgBuf.UPCE1 = ON;
gConfgBuf.Code128 = ON;
gConfgBuf.CodeBar = ON;
gConfgBuf.Code39 = ON;
gConfgBuf.Code93 = ON;
gConfgBuf.Interleaved25 = ON;
gConfgBuf.DM = ON;
gConfgBuf.PDF417 = ON;
gConfgBuf.Matrix25 = ON;
gConfgBuf.Industrial_25 = ON;
gConfgBuf.IATA25 = ON;
return UpdateALCfg();
}
uint8_t DisableOneDimRead(BarData *pCode)
{
gConfgBuf.EAN13 = OFF;
gConfgBuf.EAN8 = OFF;
gConfgBuf.UPCA = OFF;
gConfgBuf.UPCE0 = OFF;
gConfgBuf.UPCE1 = OFF;
gConfgBuf.Code128 = OFF;
gConfgBuf.CodeBar = OFF;
gConfgBuf.Code39 = OFF;
gConfgBuf.Code93 = OFF;
gConfgBuf.Interleaved25 = OFF;
gConfgBuf.DM = OFF;
gConfgBuf.PDF417 = OFF;
gConfgBuf.Matrix25 = OFF;
gConfgBuf.Industrial_25 = OFF;
gConfgBuf.IATA25 = OFF;
return UpdateALCfg();
}
uint8_t DisableOneDimReadNoUpd(BarData *pCode)
{
gConfgBuf.EAN13 = OFF;
gConfgBuf.EAN8 = OFF;
gConfgBuf.UPCA = OFF;
gConfgBuf.UPCE0 = OFF;
gConfgBuf.UPCE1 = OFF;
gConfgBuf.Code128 = OFF;
gConfgBuf.CodeBar = OFF;
gConfgBuf.Code39 = OFF;
gConfgBuf.Code93 = OFF;
gConfgBuf.Interleaved25 = OFF;
gConfgBuf.DM = OFF;
gConfgBuf.PDF417 = OFF;
gConfgBuf.Matrix25 = OFF;
gConfgBuf.Industrial_25 = OFF;
gConfgBuf.IATA25 = OFF;
// return UpdateALCfg();
return TMC_OK;
}
uint8_t EnableOneDimReadNoUpd(BarData *pCode)
{
gConfgBuf.EAN13 = ON;
gConfgBuf.EAN8 = ON;
gConfgBuf.UPCA = ON;
gConfgBuf.UPCE0 = ON;
gConfgBuf.UPCE1 = ON;
gConfgBuf.Code128 = ON;
gConfgBuf.CodeBar = ON;
gConfgBuf.Code39 = ON;
gConfgBuf.Code93 = ON;
gConfgBuf.Interleaved25 = ON;
gConfgBuf.DM = ON;
gConfgBuf.PDF417 = ON;
gConfgBuf.Matrix25 = ON;
gConfgBuf.Industrial_25 = ON;
gConfgBuf.IATA25 = ON;
return TMC_OK;
}