/**
******************************************************************************
* @file cmdhandle.h
* @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
******************************************************************************
**/
#ifndef __CMDHANDLE_H__
#define __CMDHANDLE_H__
#include "global.h"
//设置码长度
#define SETCODELEN 10
#define CODEMSGLEN 9
#define SYSMSGELEN 9
#define PARTCODELEN (SETCODELEN - 2)
#define MAX_SETCODELEN 20
#define SETCODELEN_MODULE 8
#define MAX_BATCH_SETCODE_LEN 256
#define HALF_BUF_SIZE (320 * 240)
#define MAXCODELEN 2070
#define CLK_BASE 12000
#define SENSOR_TIME_OUT (CLK_BASE * 5000) //如果感应模式5s未识读成功,则退出
#define COMMUNICATION_CMD_LEN 10
#define ONE_BYTE_SUCCESS ((uint8_t) 0x00)
#define ONE_BYTE_FAIL ((uint8_t) 0x01)
#define SYSMODE_OPEN ((uint8_t) 0x01)
#define SYSMODE_CLOSE ((uint8_t) 0x00)
#define KEY_DELAY_MAX 50
#define KEY_POLL_SPEED_MAX 10
#define STABLE_TIME_MAX 5000 //稳像时长最大值
#define SENSORTIVITY_VALUE_MAX 8000
#define SAME_CODE_INTERVAL_MAX 8000
#define CMD_MODE_TIME_MAX 65535
#define CMD_MODE_TIME_MIN 500
#define DIFFERENT_CODE_INTERVAL_MAX 8000
/** @defgroup write SN protocal
* @{
*/
#define TUSNADDR 0x00000200
#define PRODUCT_FLAG_ADDR 0x00000400
#define PRODUCT_FLAG_LEN 5
#define PRODUCT_FLAG_VALUE "IDATA"
#define SN_PROTOCOL_WSN_OFFS 0x06 // 5A+FID+LEN(2)+DAT
#define SN_LEN_OFFS 0x00 // [Len][S][N][DATA]
#define SN_SFLAG_OFFS 0x01 // [Len][S][N][DATA]
#define SN_NFLAG_OFFS 0x02 // [Len][S][N][DATA]
#define SN_DATA_OFFS 0x03 // [Len][S][N][DATA]
#define SN_SNFLAG_LEN 0x02
#define CRLF_LEN 0x01
#define NO_SN_LEN 0x05
/**
* @}
*/
//memory definition
#define KEY_BASE_ADDR 0x00000800
#define CRYPTO_CMD_OFFS 4
//response status definition
#define P3ERROR 0x6C // P3 error,6C00
#define WRERROR 0x65 // Flash write error,6501
#define P1P2ERR 0x6A // P1 and/or P2 error,6A00
#define ALGOERR 0x6B // Alogrithm error,6507
#define RDERROR 0x6E
//标记使用哪种配置方式
#define SETTINGCODE_MODE_0 0x00 //表明先扫一个开始配置,再扫其他配置,最后再扫结束配置才生效
#define SETTINGCODE_MODE_1 0x01 //开启设置码的条件下,扫配置码直接生效
typedef enum
{
SN_EXIT = 0x06U,
} SN_StatusTypeDef;
typedef struct
{
uint8_t HandleMsg[MAX_SETCODELEN]; //码的内容
uint8_t MsgLen;
uint8_t (*pFunc)(BarData *pCode); //码对应的操作
} ScanCodeHandle;
uint8_t OUTPicture(BarData *pCode);
uint8_t WriteBLFirstPage(void);
uint8_t UpdateApp(BarData *pCode);
//读取版本信息
uint8_t OutVersion(BarData *pCode);
//恢复出厂设置
uint8_t RestoreFactorySetting(BarData *pCode);
void ScanCodeCmdHandle(BarData *pCode);
uint8_t SettingCodeBatch(BarData *pCode);
uint8_t SM2_Oper(BarData *pCode);
uint8_t RSA_Oper(BarData *pCode);
uint8_t WriteKey(BarData *pCode);
uint8_t SM3_Oper(BarData *pCode);
uint8_t SM4_Oper(BarData *pCode);
uint8_t DES_Oper(BarData *pCode);
#endif /*__CMDHANDLE_H__*/