first commit

This commit is contained in:
cheney
2026-05-22 17:19:03 +08:00
commit 40b6856fff
33 changed files with 13979 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
#ifndef _IC_API_H_
#define _IC_API_H_
int Read_hsm_model(char * data_out,char * data_len);
int Read_role_type(char * data_out,char * data_len);
int CARD_format(char* hsm_model);
int CARD_PRESSENT(void);
int IC_PIN_change(char * PIN_new, unsigned char new_len);
int IC_PIN_verify(char * PIN_str, unsigned char PIN_len);
int IC_crypt_change(char*key);
int IC_int_change(char*key);
int write_trans_key(char *index_str,unsigned char str_len,char * data_in,unsigned short in_len);
int read_trans_key(char *index_str,unsigned char str_len,char * data_out,unsigned short *out_len);
int write_memery_data(unsigned short offset,char * data_in, unsigned short in_len);
int read_memery_data(unsigned short offset,char * data_out, unsigned short out_len);
int reg_cardholder(char* role_type);
int reg_dev(char record_num,char* HSM);
int read_reg(char data_out[0x10][0x10]);
int IC_poweron(void);
int Publish_Card(char* hsm_model);
void Check_LRC(unsigned char *BCD,unsigned short LEN);
int chk8024(void);
int IC_SUPIN_verify(char * PIN_str,unsigned char PIN_len);
int IC_SUPIN_change(char * PIN_new,unsigned char new_len);
#endif
+281
View File
@@ -0,0 +1,281 @@
#ifndef _SJL19_h_
#define _SJL19_h_
#define PCI_DEVNAME "/dev/SJK1117Card0"
#define PCI_KEY 0x400
#define ERR_RESPOND_LEN -1
#define ERR_PARAM_FAILED -2
#define ERR_RESPOND_TIMEOUT -3
#define ERR_DEAL_CHK -4
#define ERR_PARAM -7
#define ERR_OPENDEV -8
#define ERR_FORK -9
#define CI_NOCI 0xFF
#define CI_DES 0x10
#define CI_3DES 0x20
#define CI_IDEA 0x30
#define CI_SEA 0x40
#define CI_SP02 0x50
#define CI_RSA128 0x60
#define CI_RSA256 0x70
#define KI_ZMK 0
#define KI_ZPK 1
#define KI_ZAK 2
#define KI_ZEK 3
#define KI_TMK 4
#define KI_TPK 5
#define KI_TAK 6
#define KI_TEK 7
#define KI_PVK 8
#define KI_CVK 9
#define KI_RAK 10
#define KI_PEK 11
#define KI_PMK 12
#define KI_ICKEY 13
//加解密PIN BLOCK的PIK
#define KI_PIK 49
#ifndef HAVE_
#define HAVE_
typedef struct _DEV_HANDLE {
int handle;
int msgqid;
int pid;
}DevHandle;
#endif
/*
ZMK: LMK0
ZPK: LMK1
ZAK: LMK2
ZEK: LMK3
TMK: LMK4
TPK: LMK5
TAK: LMK6
TEK: LMK7
PVK: LMK8
CVK: LMK9
RAK: LMK10
PEK: LMK11
PMK: LMK12
IC_KEY:LMK13(旧IC卡,除交易签名密钥外的其他IC卡密钥)
IC_KEY:LMK14(旧IC卡,IC卡交易签名密钥)
PCK: LMK15
IC_KEY:LMK16(新IC卡,所有密钥)
RPK: LMK17
*/
struct SJL19_Head
{
unsigned char head[32];
unsigned char command;
unsigned char cipher;
unsigned char datalen_h;
unsigned char datalen_l;
};
#define ERR_RESPOND_LEN -1
#define ERR_PARAM_FAILED -2
#define ERR_RESPOND_TIMEOUT -3
#define ERR_DEAL_CHK -4
#define PUTU32(ct, st) \
{ (ct)[0] = (unsigned int8_t)((st) >> 24); \
(ct)[1] = (unsigned int8_t)((st) >> 16); \
(ct)[2] = (unsigned int8_t)((st) >> 8); \
(ct)[3] = (unsigned int8_t)(st); }
extern int GetCRC(unsigned char *data, int len, unsigned char crc[2]);
/*
状态管理指令集(Group=1)
编号 功能 代码 函数名称
1加密卡硬件自检 0x10 int SJL19_SelfTest(int hPCI)
2加密卡初始化 0x11 int SJL19_CardInit(int hPCI)
3取得加密卡状态 0x12
*/
extern int SJL19_SelfTest(int hPCI);
extern int SJL19_CardInit(int hPCI);
extern int SJL19_GetCardInfo(int hPCI,
unsigned char CardSerial[8],
unsigned char CardVersion[4],
unsigned char LMKCheckString[16],
unsigned char *CardState,
unsigned char LoginState[3]);
/*
2.2 安全管理指令集(Group=2)
编号 指令内容 指令代码 函数定义
1 管理员登录 0x20 int SJL19_OperLogin(int hPCI,unsigned char OperIndex,unsigned char OperPasswd[8])
2 退到正常状态 0x21 int SJL19_LogoutToNormal(int hPCI)
3 退到未登录状态 0x22 int SJL19_LogoutToNologin(int hPCI)
4 修改管理员口令 0x23 int SJL19_ChangePassword(int hPCI,unsigned char OperIndex,unsigned char OldPwd[8],unsigned char NewPwd[8])
*/
extern int SJL19_OperLogin(int hPCI, unsigned char OperIndex, unsigned char OperPasswd[8]);
extern int SJL19_LogoutToNormal(int hPCI);
extern int SJL19_LogoutToNologin(int hPCI);
extern int SJL19_ChangePassword(int hPCI, unsigned char OperIndex, unsigned char OldPwd[8], unsigned char NewPwd[8]);
extern int SJL19_GenerateRand(int hPCI, unsigned char rand[16]);
extern int SJL19_ReadFlash(int hPCI, unsigned int address, unsigned char *data, unsigned int datalen);
extern int SJL19_SetLmkToTemp(int hPCI, unsigned char lmk[800]);
extern int SJL19_MoveLmkToWork(int hPCI);
extern int SJL19_ConvertDataByLMK_TempToWork(int hPCI, int Cipher, int Index, unsigned char Data[16]);
extern int SJL19_ConvertDataByLMK_WorkToTemp(int hPCI, int Cipher, int Index, unsigned char Data[16]);
extern int SJL19_EncryptByLMK(int hPCI, int Cipher, int Index, unsigned char *Data, unsigned int data_len);
extern int SJL19_DecryptByLMK(int hPCI, int Cipher, int Index, unsigned char *Data, unsigned int data_len);
extern int SJL19_EncryptByWorkKey(int hPCI, int Cipher, unsigned char WorkKey[16], unsigned char *Data, unsigned int data_len);
extern int SJL19_DecryptByWorkKey(int hPCI, int Cipher, unsigned char WorkKey[16], unsigned char *Data, unsigned int data_len);
/*用工作密钥(密文)加密数据*/
extern int SJL19_EncryptByEncWorkKey(int hPCI, int Cipher, int Index, int LMKCipher,
unsigned char WorkKey[16], unsigned char *Data,
unsigned int data_len);
/*用工作密钥(密文)解密数据*/
extern int SJL19_DecryptByEncWorkKey(int hPCI, int Cipher, int Index, int LMKCipher,
unsigned char WorkKey[16], unsigned char *Data,
unsigned int data_len);
/* 产生RSA密钥对(私钥明文)*/
extern int SJL19_GenerateRsaKey(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char PrivateKey[256]);
/* 产生RSA密钥对(私钥密文)*/
extern int SJL19_GenerateRsaEncKey(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PublicKey[256], unsigned char PrivateKey[256]);
/* 用RSA公钥加密数据*/
extern int SJL19_EncryptByPublicKey_RSA(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char *Data, int data_len);
/* 用RSA公钥解密数据*/
extern int SJL19_DecryptByPublicKey_RSA(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥明文加密数据*/
extern int SJL19_EncryptByPrivateKey_RSA(int hPCI, int Cipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥明文解密数据*/
extern int SJL19_DecryptByPrivateKey_RSA(int hPCI, int Cipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥密文加密数据*/
extern int SJL19_EncryptByEncPrivateKey_RSA(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥密文加密数据*/
extern int SJL19_DecryptByEncPrivateKey_RSA(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/*数据由LMK加密转换为用工作密钥(密文)加密*/
extern int SJL19_EncryptBy_LMKToEncWorkkey(int hPCI, int Cipher, int Index1, int Index2, int LMKCipher, unsigned char WorkKey[16], unsigned char *Data, int data_len);
/*数据由工作密钥(密文)加密转换为用LMK加密*/
extern int SJL19_EncryptBy_EncWorkkeyToLMK(int hPCI, int Cipher, int Index1, int Index2, int LMKCipher, unsigned char WorkKey[16], unsigned char *Data, int data_len);
/*数据由工作密钥一(密文)加密转换为用工作密钥二(密文)加密*/
extern int SJL19_EncryptBy_EncWorkkey1ToEncWorkkey2(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher,
unsigned char WorkKey1[16],
unsigned char WorkKey2[16],
unsigned char *Data, int data_len);
/*数据在同一LMK下进行加密算法转换*/
extern int SJL19_ConvertByLMK(int hPCI, int Index,
int LMKCipher1, int LMKCipher2,
unsigned char *Data, int data_len);
/*数据在同一工作密钥(密文)下进行加密算法转换*/
extern int SJL19_ConvertByWorkKey(int hPCI, int Index,
int LMKCipher, int KeyCipher1, int KeyCipher2,
unsigned char WorkKey[16],
unsigned char *Data, int data_len);
/*PINBLOCK由工作密钥一(密文)加密转为PIN用工作密钥二(密文)加密*/
extern int SJL19_PinblockToPin(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher, unsigned char PINFormat,
unsigned char WorkKey1[16], unsigned char WorkKey2[16],
unsigned char PAN[8], unsigned char PINBLOCK[8]/*PinBlock(In)Pin(Out)*/);
/* PIN用工作密钥一(密文)转为PINBLOCK用工作密钥二(密文)加密*/
extern int SJL19_PinToPinblock(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher, unsigned char PINFormat,
unsigned char WorkKey1[16], unsigned char WorkKey2[16],
unsigned char PAN[8], unsigned char PINBLOCK[8]/*Pin(In)PinBlock(Out)*/);
extern int SJL19_MD5(int hPCI, unsigned char *Data, unsigned int data_len, unsigned char Code[16]);
extern int GetCRC(unsigned char *data, int len, unsigned char crc[2]);
/*
2.1 状态管理指令集(Group=1)
编号 功能 代码 函数名称
1 加密卡硬件自检 0x10 int SJL19_SelfTest(int hPCI)
2 加密卡初始化 0x11 int SJL19_CardInit(int hPCI)
3 取得加密卡状态 0x12
*/
extern int SJL19_SelfTest(int hPCI);
extern int SJL19_CardInit(int hPCI);
extern int SJL19_GetCardInfo(int hPCI,
unsigned char CardSerial[8],
unsigned char CardVersion[4],
unsigned char LMKCheckString[16],
unsigned char *CardState,
unsigned char LoginState[3] );
/*
2.2 安全管理指令集(Group=2)
编号 指令内容 指令代码 函数定义
1 管理员登录 0x20 int SJL19_OperLogin(int hPCI,unsigned char OperIndex,unsigned char OperPasswd[8])
2 退到正常状态 0x21 int SJL19_LogoutToNormal(int hPCI)
3 退到未登录状态 0x22 int SJL19_LogoutToNologin(int hPCI)
4 修改管理员口令 0x23 int SJL19_ChangePassword(int hPCI,unsigned char OperIndex,unsigned char OldPwd[8],unsigned char NewPwd[8])
*/
extern int SJL19_OperLogin(int hPCI, unsigned char OperIndex, unsigned char OperPasswd[8]);
extern int SJL19_LogoutToNormal(int hPCI);
extern int SJL19_LogoutToNologin(int hPCI);
extern int SJL19_ChangePassword(int hPCI, unsigned char OperIndex, unsigned char OldPwd[8], unsigned char NewPwd[8]);
extern int SJL19_GenerateRand(int hPCI, unsigned char rand[16]);
extern int SJL19_ReadFlash(int hPCI, unsigned int address, unsigned char *data, unsigned int datalen);
extern int SJL19_WriteFlash(int hPCI, unsigned int address, unsigned char *data, unsigned int datalen);
extern int SJL19_SetLmkToTemp(int hPCI, unsigned char lmk[800]);
extern int SJL19_MoveLmkToWork(int hPCI);
extern int SJL19_ConvertDataByLMK_TempToWork(int hPCI, int Cipher, int Index, unsigned char Data[16]);
extern int SJL19_ConvertDataByLMK_WorkToTemp(int hPCI, int Cipher, int Index, unsigned char Data[16]);
extern int SJL19_EncryptByLMK(int hPCI, int Cipher, int Index, unsigned char *Data, unsigned int data_len);
extern int SJL19_DecryptByLMK(int hPCI, int Cipher, int Index, unsigned char *Data, unsigned int data_len);
extern int SJL19_EncryptByWorkKey(int hPCI, int Cipher, unsigned char WorkKey[16], unsigned char *Data, unsigned int data_len);
extern int SJL19_DecryptByWorkKey(int hPCI, int Cipher, unsigned char WorkKey[16], unsigned char *Data, unsigned int data_len);
/*用工作密钥(密文)加密数据*/
extern int SJL19_EncryptByEncWorkKey(int hPCI, int Cipher, int Index, int LMKCipher,
unsigned char WorkKey[16], unsigned char *Data,
unsigned int data_len);
/*用工作密钥(密文)解密数据*/
extern int SJL19_DecryptByEncWorkKey(int hPCI, int Cipher, int Index, int LMKCipher,
unsigned char WorkKey[16], unsigned char *Data,
unsigned int data_len);
/* 产生RSA密钥对(私钥明文)*/
extern int SJL19_GenerateRsaKey(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char PrivateKey[256]);
/* 产生RSA密钥对(私钥密文)*/
extern int SJL19_GenerateRsaEncKey(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PublicKey[256], unsigned char PrivateKey[256]);
/* 用RSA公钥加密数据*/
extern int SJL19_EncryptByPublicKey_RSA(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char *Data, int data_len);
/* 用RSA公钥解密数据*/
extern int SJL19_DecryptByPublicKey_RSA(int hPCI, int Cipher, unsigned char PublicKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥明文加密数据*/
extern int SJL19_EncryptByPrivateKey_RSA(int hPCI, int Cipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥明文解密数据*/
extern int SJL19_DecryptByPrivateKey_RSA(int hPCI, int Cipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥密文加密数据*/
extern int SJL19_EncryptByEncPrivateKey_RSA(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/* 用RSA私钥密文加密数据*/
extern int SJL19_DecryptByEncPrivateKey_RSA(int hPCI, int Cipher, int Index, int LMKCipher, unsigned char PrivateKey[256], unsigned char *Data, int data_len);
/*数据由LMK加密转换为用工作密钥(密文)加密*/
extern int SJL19_EncryptBy_LMKToEncWorkkey(int hPCI, int Cipher, int Index1, int Index2, int LMKCipher, unsigned char WorkKey[16], unsigned char *Data, int data_len);
/*数据由工作密钥(密文)加密转换为用LMK加密*/
int SJL19_EncryptBy_EncWorkkeyToLMK(int hPCI, int Cipher, int Index1, int Index2, int LMKCipher, unsigned char WorkKey[16], unsigned char *Data, int data_len);
/*数据由工作密钥一(密文)加密转换为用工作密钥二(密文)加密*/
extern int SJL19_EncryptBy_EncWorkkey1ToEncWorkkey2(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher,
unsigned char WorkKey1[16],
unsigned char WorkKey2[16],
unsigned char *Data, int data_len);
/*数据在同一LMK下进行加密算法转换*/
extern int SJL19_ConvertByLMK(int hPCI, int Index,int LMKCipher1, int LMKCipher2,unsigned char *Data, int data_len);
/*数据在同一工作密钥(密文)下进行加密算法转换*/
extern int SJL19_ConvertByWorkKey(int hPCI, int Index,int LMKCipher, int KeyCipher1, int KeyCipher2,
unsigned char WorkKey[16],unsigned char *Data, int data_len);
/*PINBLOCK由工作密钥一(密文)加密转为PIN用工作密钥二(密文)加密*/
extern int SJL19_PinblockToPin(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher, unsigned char PINFormat,
unsigned char WorkKey1[16], unsigned char WorkKey2[16],
unsigned char PAN[8], unsigned char PINBLOCK[8]//PinBlock(In)Pin(Out)
);
/* PIN用工作密钥一(密文)转为PINBLOCK用工作密钥二(密文)加密*/
extern int SJL19_PinToPinblock(int hPCI, int Cipher, int Index1, int Index2,
int LMKCipher, unsigned char PINFormat,
unsigned char WorkKey1[16], unsigned char WorkKey2[16],
unsigned char PAN[8], unsigned char PINBLOCK[8]//Pin(In)PinBlock(Out)
);
extern int SJL19_MD5(int hPCI, unsigned char *Data, unsigned int data_len, unsigned char Code[16]);
#endif
+119
View File
@@ -0,0 +1,119 @@
#ifndef _ASC16_H_
#define _ASC16_H_
extern unsigned char ASC16_Begin;
/* 8*16点阵数字 */
extern unsigned char ASC16_Num[10][16];
/*8*16点阵斜杠符号*/
extern unsigned char ASC16_Slash[16];
/* 8*16点阵星号*/
extern unsigned char ASC16_Star[16];
/* 8*16点阵小数点*/
extern unsigned char ASC16_Dot[16];
/* 8*16点阵逗号*/
extern unsigned char ASC16_Comma[16];
/* 8*16点阵空格*/
extern unsigned char ASC16_Space[16];
/* 8*16点阵减号*/
extern unsigned char ASC16_Sub[16];
/* 8*16点阵实心左箭头*/
extern unsigned char ASC16_Arrow[16];
/* 8*16点阵大于号*/
extern unsigned char ASC16_Above[16];
/* 8*16点阵小于号*/
extern unsigned char ASC16_Below[16];
/* 8*16点阵惊叹号*/
extern unsigned char ASC16_Claim[16];
/* 8*16点阵冒号*/
extern unsigned char ASC16_Colon[16];
/* 8*16点阵左括号*/
extern unsigned char ASC16_LBrack[16];
/* 8*16点阵右括号*/
extern unsigned char ASC16_RBrack[16];
/* 8*16点阵对勾*/
//unsigned char ASC16_Right[16]={0x80,0x00,0x00,0x00,0x80,0xC0,0x60,0x00,0x01,0x03,0x06,0x03,0x01,0x00,0x00,0x00};
/* 8*16点阵问号*/
extern unsigned char ASC16_What[16];
/* 8*16点阵左方括号*/
extern unsigned char ASC16_LFBrack[16];
/* 8*16点阵右方括号*/
extern unsigned char ASC16_RFBrack[16];
/*8*16点阵 I */
extern unsigned char ASC16_IChar[16];
/*8*16点阵 P */
extern unsigned char ASC16_PChar[16];
/*8*16点阵D*/
extern unsigned char ASC16_DChar[16];
/*8*16点阵N*/
extern unsigned char ASC16_NChar[16];
/*8*16点阵S*/
extern unsigned char ASC16_SChar[16];
/*8*16点阵T*/
extern unsigned char ASC16_TChar[16];
/*8*16点阵a*/
extern unsigned char ASC16_aChar[16];
/*8*16点阵g*/
extern unsigned char ASC16_gChar[16];
/*8*16点阵x*/
extern unsigned char ASC16_xChar[16];
/*8*16点阵A*/
extern unsigned char ASC16_A_Char[16];
/*8*16点阵B*/
extern unsigned char ASC16_BChar[16];
/*8*16点阵B*/
extern unsigned char ASC16_B_Char[16];
/*8*16点阵C*/
extern unsigned char ASC16_CChar[16];
/*8*16点阵D*/
extern unsigned char ASC16_D_Char[16];
/*8*16点阵E*/
extern unsigned char ASC16_EChar[16];
/*8*16点阵E*/
extern unsigned char ASC16_E_Char[16];
/*8*16点阵F*/
extern unsigned char ASC16_F_Char[16];
/*8*16点阵U*/
extern unsigned char ASC16_U_Char[16];
/*8*16点阵K*/
extern unsigned char ASC16_K_Char[16];
/*8*16点阵M*/
extern unsigned char ASC16_M_Char[16];
/*8*16点阵L*/
extern unsigned char ASC16_L_Char[16];
/*8*16点阵G*/
extern unsigned char ASC16_G_Char[16];
/*8*16点阵W*/
extern unsigned char ASC16_WChar[16];
/*8*16点阵O*/
extern unsigned char ASC16_OChar[16];
/*8*16点阵X*/
extern unsigned char ASC16_X_Char[16];
/*8*16点阵Y*/
extern unsigned char ASC16_Y_Char[16];
/*8*16点阵Z*/
extern unsigned char ASC16_Z_Char[16];
/*8*16点阵R*/
extern unsigned char ASC16_R_Char[16];
/* *8*16点阵'N' */
extern unsigned char ASC16_N_Char[16];
/* *8*16点阵'S' */
extern unsigned char ASC16_S_Char[16];
/* *8*16点阵'J' */
extern unsigned char ASC16_J_Char[16];
/* *8*16点阵'H' */
extern unsigned char ASC16_H_Char[16];
/* *8*16点阵'r' */
extern unsigned char ASC16_r_Char[16];
/* *8*16点阵'd' */
extern unsigned char ASC16_d_Char[16];
/* *8*16点阵'L' */
extern unsigned char ASC16_L_Char[16];
/* *8*16点阵'V' */
extern unsigned char ASC16_V_Char[16];
extern unsigned char ASC16_End;
#endif /* ASC16_H_ */
+29
View File
@@ -0,0 +1,29 @@
#ifndef _ASC8_H_
#define _ASC8_H_
/* 6*8点阵数字*/
unsigned char ASC8_Num[16][6];
/* 6*8点阵小数点*/
unsigned char ASC8_Dot[6];
/* 6*8点阵逗号*/
unsigned char ASC8_Comma[6];
/* 6*8点阵空格*/
unsigned char ASC8_Space[6];
/* 6*8点阵减号*/
//unsigned char ASC8_Sub[6];
/* 6*8点阵星号*/
unsigned char ASC8_Star[6];
/* 6*8点阵下划线*/
unsigned char ASC8_Line[6];
/* 6*8点阵冒号*/
unsigned char ASC8_Colon[6];
/* 6*8点阵对勾*/
//unsigned char ASC8_Right[6]={0x10,0x20,0x10,0x08,0x04,0x02};
/* 6*8点阵叉号*/
//unsigned char ASC8_Cross[6]={0x42,0x24,0x18,0x18,0x24,0x42};
/* 6*8点阵斜线*/
unsigned char ASC8_Bias[6];
#endif
+157
View File
@@ -0,0 +1,157 @@
#ifndef __COMMON_H__
#define __COMMON_H__
#include <dirent.h>
#include <stdio.h>
void PrintHex(char *prompt,unsigned char * data,int len);
void PrintHex_1(unsigned char *data,int len);
void PrintAscii(unsigned char *data,int len);
void trim(char *str);
int my_getdate( char date[9] );
int my_getyear();
int my_getmonth();
int my_getwday();
int my_getday();
int my_gethour();
int my_getmin();
int my_getsec();
void my_swap4byte(char text[4]);
unsigned int my_getrnd(int cnt);
int CalcLenByDir(char *dir);
void my_GenerateMK(unsigned char *rand,int len);
int my_checkdate(char date[8]);
int alltrim(char *s);
void byte_not(unsigned char *desc,unsigned char *src,int len);
void byte_xor(unsigned char *desc,unsigned char *src,int len);
void byte_sub(unsigned char *desc,unsigned char *src,int len);
void byte_add(unsigned char *desc,unsigned char *src,int len);
void getcrc_one(unsigned char *crc,unsigned char *data,int len);
void GetErrMsg(int ErrNo,char *msg);
char * GetLogTime(void);
int SystemCmd(char * cmd);
FILE * PopenCmd(char * cmd,char * flag);
int FindProcess(char * name);
void signal_set();
//函数功能接口定义区
void read_ini_file();
//按密钥结构将密钥内容写文件
int WritekeyToFile(unsigned char *keyfile,
unsigned char *key_organizationnum,
unsigned char *key_type,
unsigned char *key_serialnum,
unsigned int key_len,
unsigned char *key_cryptograph,
unsigned char *key_mac,
unsigned char *key_starttime,
unsigned char *key_endtime,
unsigned char * key_index,
unsigned char * key_algid);
//从某个密钥文件中按密钥结构取该密钥的内容
int ReadkeyFromFile(unsigned char *keyfile,
unsigned char *key_organizationnum,
unsigned char *key_type,
unsigned char *key_serialnum,
unsigned int *key_len,
unsigned char *key_cryptograph,
unsigned char *key_mac,
unsigned char *key_starttime,
unsigned char *key_endtime,
unsigned char * key_index,
unsigned char * key_algid);
//从某个密钥文件中取该密钥所属的机构号
int GetKeyOrganizationnumFromFile(unsigned char *keyfile, unsigned char *key_organizationnum, unsigned char *Key_Value);
//从某个密钥文件中取该密钥所属的类型
int GetKeyTypeFromFile(unsigned char *keyfile, unsigned char *key_type, unsigned char *Key_Value);
//从某个密钥文件中取该密钥的编号
int GetKeySerialnumFromFile(unsigned char *keyfile, unsigned char *key_serialnum, unsigned char *Key_Value);
//从某个密钥文件中取该密钥的长度
int GetKeylenFromFile(unsigned char *keyfile, unsigned char *key_len, unsigned char *Key_Value, int *keylen);
//从某个密钥文件中取该密钥的密文值
int GetKeyCryptographFromFile(unsigned char *keyfile, unsigned char *key_cryptograph, unsigned char *Key_Value);
//从某个密钥文件中取该密钥明文md5_MAC
int GetKeyMacFromFile(unsigned char *keyfile, unsigned char *key_mac, unsigned char *Key_Value);
//从某个密钥文件中取该密钥的起始生命周期
int GetKeyStarttimeFromFile(unsigned char *keyfile, unsigned char *key_starttime, unsigned char *Key_Value);
//从某个密钥文件中取该密钥的截至生命周期
int GetKeyEndtimeFromFile(unsigned char *keyfile, unsigned char *key_endtime, unsigned char *Key_Value);
//从某个密钥文件中取该密钥主密钥加密索引
int GetKeyIndexFromFile(unsigned char *keyfile, unsigned char *key_index, unsigned char *Key_Value);
//从某个密钥文件中取该密钥的算法模式
int GetKeyAlgidFromFile(unsigned char *keyfile, unsigned char *key_algid, unsigned char *Key_Value);
//执行某个linux指令的函数
int MSystemCmd(char * cmd);
//创建密钥文件夹
int SetKeyDir(unsigned char *dir, unsigned char *key_organizationnum, unsigned char *key_type);
//获取当前密钥类型目录字符串 以及 字符串的长度
int GetKeyDir(unsigned char *dir, unsigned char *key_organizationnum, unsigned char *key_type);
//文件名约束函数
int select_dir(const struct dirent *dir);
void get_system_time();
void set_system_time(char * time);
unsigned char GetKey(void);
unsigned char WaitKeyin(void);
unsigned char WaitKeyin_Combine_key();
int GetKeyValueFile(char *filename, char* Key, char *KeyValue);
int SetKeyValueFile(char *file_name, char *key_name, char *key_value);
void append_key(char * file_name,char * key,char * value);
#define E_SYS_USER 0x70
#define E_SYS_PWD_ERROR 0x71
int check_sys_pwd(const char *pwdtext);
void modify_sys_pwd_behave(char * user_name ,char * pwd);
void modify_sys_pwd(int old_pwd_len,char * old_pwd,int new_pwd_len,char * new_pwd);
void system_login(unsigned char * pwd, int pwd_len);
void sysUsecTime(long * sec, long *usec);
int CheckHex(int length, unsigned char *hex);
int CheckDec(int length, unsigned char *dec);
int GetDecLen(int length, unsigned char *dec);
int GetHexLen(int length, unsigned char *Hex);
int CheckLen(int inlen, int length);
int CheckDataLen(int inlen, int length);
int check_K(int length, unsigned char *hex);
void AddOddParity(int len, unsigned char *key);
int VerifyOddParity(int len, unsigned char *key);
char variant(unsigned char ch);
int check_N(unsigned char len,unsigned char *data);
void ScanDec(int len, unsigned char *inBuf, unsigned char *outBuf);
void ScanDecForCSC(int len, unsigned char *inBuf, unsigned char *outBuf);
void bcd_to_dsp(char * bcd, int len, char *dsp);
void read_ini_file();
void reduced_bcd_to_dsp(char * bcd, int len, char *dsp);
void vip_dsp_to_bcd(char * dsp, int len, char *bcd);
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef __CTRANSCODE_H__
#define __CTRANSCODE_H__
void Byte2String(int len, unsigned char *InBuf, unsigned char *OutBuf);
void String2Byte(int len, unsigned char *InBuf, unsigned char *OutBuf);
void hextoasc(unsigned char *asc,unsigned char *hex,int len);
void asctohex(unsigned char *hex,unsigned char *asc,int len);
#endif
+24
View File
@@ -0,0 +1,24 @@
#ifndef __CUSTOM__H__
#define __CUSTOM__H__
#include "ctranscode.h"
#include "asc16.h"
#include "asc8.h"
#include "hzk16.h"
#include "lcddisplay.h"
#include "paneldeal.h"
#include "global.h"
#include "common.h"
#include "serial.h"
#include "error_no.h"
#include "SJL19.h"
#include "sham.h"
#include "usboperate.h"
#include "IC_API.h"
#include "utils.h"
#include "usb.h"
#include "define.h"
#endif
+1506
View File
File diff suppressed because it is too large Load Diff
+671
View File
@@ -0,0 +1,671 @@
#ifndef _ERROR_NO_H_
#define _ERROR_NO_H_
#define RET_SUCCESS 0x00
#define ERR_CARD_SELFTEST 0x01 //卡自检硬件错误
#define ERR_NOLMK 0x02 //卡中LMK数据无效
#define ERR_FPGA_SELFTEST 0x03 //FPGA自检错误
#define ERR_TIMECHIP 0x04 //时钟芯片异常
#define ERR_CARDCMD 0x10 //命令代码错误
#define ERR_CARDDATA_LEN 0x11 //数据长度错误
#define ERR_CARDDATA_CRC 0x12 //数据包CRC校验错误
#define ERR_OPER_ID 0x20 //管理员ID号错误
#define ERR_OPER_PWD 0x21 //管理员口令错误
#define ERR_OPER_CHK0 0x22 //管理员口令容错次数为0
#define ERR_NOAUTH 0x23 //非二人登录(非授权状态)
#define ERR_NOLOGIN 0x24 //无管理员登录(未登录状态)
#define ERR_ALREADY_LOGIN 0x25 //管理员已经登录
#define ERR_AIRTHMETIC 0x30 //指定的算法无效
#define ERR_DATALEN_8 0x31 //数据长度错误,不能被8整除
#define ERR_DATALEN_16 0x32 //数据长度错误,不能被16整除
#define ERR_DATALEN_128 0x33 //数据长度错误,不能被128整除
#define ERR_DATALEN_256 0x34 //数据长度错误,不能被256整除
#define ERR_AUTH_LMK 0x35 //指定索引的LMK被禁止
#define ERR_FLASH_ADD 0x40 //数据FLASH读写地址越界
#define ERR_FLASH_WRITE 0x41 //写数据FLASH异常
#define ERR_RANDCHIP 0x42 //随机数芯片操作异常
#define ERR_CENCCHIP 0x43 //国密算法芯片操作异常
#define ERR_KEY_DATE 0x50 //密钥日期错误
#define ERR_ADMINNO 0x51 //管理员号错误
#define ERR_ADMINAGIN 0x52 //管理员已登录
#define ERR_ADMINPWD 0x53 //管理员口令错误
#define ERR_CHECKTAG 0x54 //Tag校验错误
#define ERR_CHECKDAC 0x55 //DAC校验错误
#define ERR_KEYFLAG 0x56 //密钥标志错误
#define ERR_BANKNO 0x57 //银行行号错误
#define ERR_DATALEN 0x58 //加密数据长度错误
#define ERR_LOGINTWO 0x59 //登录的管理员人数少于两人
#define ERR_SELFTEST 0x5A //自检失败
#define ERR_ENCODE 0x5B //密押错误
#define ERR_LOGINTHREE 0x5C //登录的管理员人数少于三人
#define ERR_CHECKLMK 0x5D //系统主密钥较验错误
#define ERR_COMMAND 0x5E //未知命令
#define ERR_KEYAGIN 0x5F //密钥已设置
#define ERR_LENGTH 0x66 //数据包长度错误
#define ERR_DATAFORMAT 0x67 //数据包格式错误
#define ERR_DATACRC 0x68 //数据包CRC错误
#define ERR_BANKNO_ISEMPTY 0x69 //行号为空
#define ERR_CARDTIMEOUT 0x6A //密押卡处理超时
#define ERR_CARDWRITE 0x6B //写密押卡错误
#define ERR_CARDREAD 0x6C //读密押卡错误
#define ERR_CARDBANKNO 0x6D //行号已满
#define ERR_OPENPCI 0x6E //密押卡打开失败
#define ERR_CARDLEN 0x6F //卡数据长度错误
#define ERR_SYSTEM 0x73 //系统调用错误
#define ERR_MSGSEND 0x74 //msgsnd系统调用失败
#define ERR_MSGRECV 0x75 //msgrcv系统调用失败
#define ERR_TCPLEN 0x76 //TCP数据包长度错误
#define ERR_INVAILD_KEY 0x77 //密钥过期
#define ERR_FUTURE_KEY 0x78 //密钥未启用
#define ERR_CHECK_VALUE_NOT_EXIST 0x88
#define ERR_KEY_EMPTY 0xA0 //没有任何密钥
#define ERR_PORT_SAME 0xA2 //端口相同
#define ERR_ALREADY_EXIST 0xA3 //密钥已启用
#define ERR_IMPORT_OLD_KEY1 0xA4 //分量一导入失败
#define ERR_IMPORT_OLD_KEY2 0xA8 //分量二密钥导入失败
#define ERR_NOT_MANAGE 0xA5 //非管理状态
#define ERR_NOT_LISTEN 0xA6 //非编核押状态
#define ERR_WRITE_OFF_OLD_KEY 0xA9 //旧密钥注销失败
#define ERR_SET_OLD_KEY 0XAA
#define ERR_OLD_KEY_NOT_EXIST 0xCE //旧密钥不存在
#define ERR_IC_POWERON 0x01
#define ERR_IC_PRESSENT 0x02
#define ERR_IC_PASSWD 0x03
#define ERR_IC_GET_HSMMODEL 0x04
#define ERR_IC_SET_HSMMODEL 0x05
#define ERR_IC_GET_CARDHOLDER 0x06
#define ERR_IC_SET_CARDHOLDER 0x07
#define ERR_IC_WRITE 0x08
#define ERR_IC_READ 0x09
#define ERR_IC_INIT 0x0A
#define ERR_IC_NOTSYSICCARD 0x0B
#define ERR_IC_LMK_ONE 0x0D
#define ERR_IC_LMK_TWO 0x0E
#define ERR_IC_LMK_THREE 0x0F
#define ERR_ROLE_NOTLMK 0x10
#define ERR_ROLE_NOTCOM 0x11
#define ERR_ROLE_NOTOPR 0x12
#define ERR_IC_GET_REGISTER_HSM 0x13
#define ERR_IC_HSM_REGISTERED 0x14
#define ERR_IC_HSM_REGISTERE 0x15
#define ERR_IC_COM_ONE 0x20
#define ERR_IC_COM_TWO 0x21
#define ERR_IC_OPR_ONE 0x22
#define ERR_IC_REGISTER_LOCAL 0X23
#define ERR_IC_NOT_REGISTER_HSM 0x24
#define ERR_IC_NO_CARD 0x25
#define ERR_IC_NO_ISSUE 0x26
#define ERR_IC_HSM_CANCEL 0x27
#define ERR_IC_CANCEL_LOCAL 0X28
#define ERR_IC_NOT_CLEAR 0x29
#define ERR_IC_REGISTERE_FULL 0x2A
#define ERR_LMK_GENERATE 0x30
#define ERR_LMK_DISPERSE 0x31
#define ERR_LMK_MOVE 0x32
#define ERR_LMK_BACK 0x33
#define ERR_LMK_RECOVER 0x34
#define ERR_LMK_RMSEED 0x35
#define ERR_LMK_NOSEED 0x36
#define ERR_LMK_INEXISTENCE 0x37
#define ERR_LMK_TEST 0x38
#define ERR_LMK_LOCK 0x39
#define ERR_LMK_TMP_TEST 0x3A //临时去主密钥异常
#define ERR_LMK_DESTROY 0x3B ///*销毁主密钥*/
#define ERR_LOG_SETING 0x40
#define ERR_GET_HSM_CODE 0x41
#define ERR_GET_HSM_VERSIONS 0x42
#define ERR_GETLMK_GENERATE_FLAG 0x43
#define ERR_GENERATE_TMPKEY 0x50
#define ERR_ENCRYPT_BYTMPKEY 0x51
#define ERR_TMPKEY_TOLMK 0x52
#define ERR_LMK_WORK_TO_TMP 0x53 //主密钥工作区到临时去转机密失败
#define ERR_OPEN_SERIALPORT 0x60
#define ERR_SET_SERIALPORT 0x61
#define ERR_FORK_PID 0x62
#define ERR_CLOSE_SERIALPORT 0x63
#define ERR_KILL_PID 0x64
#define ERR_COM_NO 0x65
#define ERR_BOTT_NO 0x66
#define ERR_GET_COM_NO 0x67
#define ERR_GET_BOTT_NO 0x68
#define ERR_GET_BINDIR 0x69 //获取工作目录失败
#define ERR_NOT_KEYDIR 0x6A //密钥管理目录不存在
#define ERR_OPGAN_NOT_EXIST 0x6B //机构号不存在
#define ERR_GET_KEY 0x6C //获取密钥失败
#define ERR_GENERATE_KEYMAC 0x6D //计算密钥MAC失败
#define ERR_CHECK_MAC 0x6E //密钥MAC校验失败
#define ERR_SAVE_KEY 0x6F //保存密钥失败
#define ERR_INIFILE_NOT_EXIST 0x70 //文件不存在
#define ERR_FILE_BACK 0x71 //文件备份失败
#define ERR_FILE_RECOVER 0x72 //文件恢复失败
#define ERR_FILE_GET 0x73 //文件获取失败
#define ERR_FILE_SAVE 0x74 //文件保存失败
#define ERR_SYS_CMD 0x75 //指令错误
#define ERR_COM_TIME_OUT 0x76 //等待客户端连接超时
#define ERR_HAVE_INIT 0x77 //IC卡已被初始化过
#define ERR_COM_TIME_FORM 0xB0 //日期格式错误
#define ERR_KEYDB_OPEN_FAIL 0xB1 //数据库打开失败
#define ERR_KEYDB_OPERATE_FAIL 0xB2 //数据库操作失败
#define ERR_ENCRYPTCARD_OPERATE_FAIL 0xB3 //操作加密卡失败
#define ERR_ORGAN_NOT_EXIST 0x8D//0xB4 //机构号不存在
#define ERR_TYPE_NOT_EXIST 0xB5 //密钥类型不存在
#define ERR_KEYSERIAL_EXIST 0x8E//0xBC //密钥已存在
#define ERR_ORGAN_SERIAL_EXIST 0xB9 //机构号已存在
#define ERR_TYPE_SERIAL_EXIST 0xBA //密钥类型已存在
#define ERR_KEY_CPS_FAIL 0x8F//0xBC //合成密钥失败
#define ERR_KEY_PASSWD_FAIL 0xBD //传输密钥口令错误
#define ERR_IMPORT_KEY_DIF 0xBE //分量录入不一致
#define ERR_IMPORT_CHECK 0x8C//0xBF //分量校验失败
#define ERR_PACKET_LEN 0x9A ///*报文头应小于32:*/
#define ERR_PACKET_TAIL_BYTES 0x9B /*报文尾应小于256:*/
#define ERR_PACKET_FIELD_GET 0x9C //报文域设置失败
#define ERR_COM_TIME_END 0x9D //截止日期错误
#define ERR_COM_TIME_START 0x9E //启用日期错误
#define ERR_PACKET_TYPE 0x9F//报文类型设置失败
#define ERR_COM_GET_BINDIR 0x01 //获取工作目录失败
#define ERR_COM_GET_KEYDIR 0x02 //获取密钥管理目录失败
#define ERR_COM_NOT_KEYDIR 0x03 //密钥管理目录不存在
#define ERR_COM_CREAT_ORGANINFO 0x04 //创建机构信息文件失败
#define ERR_COM_OPEN_TORGANINFO 0x05 //打开机构信息文件失败
#define ERR_COM_CREAT_TYPEINFO 0x06 //创建密钥类型信息文件失败
#define ERR_COM_OPEN_TYPEINFO 0x07 //打开密钥类型信息文件失败
#define ERR_COM_OPGAN_EXIST 0x08 //机构号已存在
#define ERR_COM_OPGAN_NOT_EXIST 0x09 //机构号不存在
#define ERR_COM_TYPE_EXIST 0x0A //密钥类型已存在
#define ERR_COM_TYPE_NOT_EXIST 0x0B //密钥类型不存在
#define ERR_COM_CREAT_OPGAN 0x0C //创建机构目录失败
#define ERR_COM_CREAT_TYPE 0x0D //创建密钥类型目录失败
#define ERR_COM_TYPEKEY_EXIST 0x0E //密钥类型已存在密钥
#define ERR_COM_CREAT_RSA 0x0F //创建RSA密钥类型目录失败
#define ERR_COM_CREAT_SM2 0x10 //创建SM2密钥类型目录失败
#define ERR_COM_OPEN_TYPE_NUM 0x11 //打开类型密钥编号文件
#define ERR_COM_WRITE_TYPE_NUM 0x12 //写类型密钥编号文件
#define ERR_COM_TMKTYPE_NOT_EXIST 0x13 //通讯密钥类型不存在
#define ERR_COM_CREAT_TYPE_NUM 0x15 //创建类型密钥编号文件
#define ERR_COM_GENERATE_KEY 0x20 //产生对称密钥失败
#define ERR_COM_GENERATE_KEYMAC 0x21 //计算密钥MAC失败
#define ERR_COM_SAVE_KEY 0x22 //保存密钥失败
#define ERR_COM_DISPERSE_KEY 0x23 //对称密钥分散失败
#define COM_DISPERSE_KEY_OK 0x24 //对称密钥分散成功
#define COM_PRINT_COMPOSE_OK 0x25 //打印分量N完成
#define ERR_COM_PRINT_NOT_PAPER 0x26 //打印机无打印纸
#define ERR_COM_PRINT 0x27 //打印失败
#define COM_PRINT_OK 0x28 //打印所有分量完成
#define ERR_COM_COMPOSE 0x29 //密钥合成失败
#define ERR_COM_GET_KEYNO 0x2A //获取密钥编号失败
#define ERR_COM_UPDATE_KEYNO 0x2B //更新密钥编号失败
#define ERR_COM_GENERATE_SM2 0x2C //产生SM2密钥失败
#define ERR_COM_KEY_EXIST 0x2D //密钥已存在
#define ERR_COM_CREAK_TMPFILE 0x2E //创建通信密钥临时文件失败
#define ERR_COM_GET_TMPFILE 0x38 //获取通信密钥临时文件失败
#define ERR_COM_TMK_ENCRYPT 0x2F //通信密钥加密失败
#define ERR_COM_TMK_DECRYPT 0x30 //通信密钥解密失败
#define ERR_COM_ASYMMETRYKEY_ENCRYPT 0x31 //非对称密钥加密失败
#define ERR_COM_ASYMMETRYKEY_DECRYPT 0x32 //非对称密钥解密失败
#define ERR_COM_CHECK_MAC 0x33 //密钥MAC校验失败
#define ERR_COM_CHECK_CRC 0x34 //密钥CRC校验失败
#define ERR_COM_GENERATE_MAC 0x35 //计算MAC失败
#define ERR_COM_KEY_NOT_EXIST 0x36 //密钥不存在
#define ERR_COM_GET_KEY 0x37 //获取密钥失败
#define COM_INPUT_TMK1_OK 0x39 //分量一导入成功
#define COM_OUTPUT_TMK1_OK 0x3D //分量一导出成功
#define ERR_COM_TMK_NOT_EXIST 0x3A //通信密钥不存在
#define ERR_COM_DATA_FILL 0x3B //填充数据失败
#define ERR_COM_DATA_TRIM 0x3C //剔除数据失败
#define ERR_COM_GENERATE_RSA 0x3E //产生RSA密钥失败
#define ERR_COM_NOT_IC1 0x3F //非分量一IC卡
#define ERR_COM_NOT_IC2 0x40 //非分量二IC卡
#define ERR_COM_NOT_CLEAR_IC 0x41 //非空白IC卡
#define ERR_COM_TMK_NOT16 0x42 //通讯密钥非16字节长度密钥
#define ERR_COM_IC_POWERON 0x50 //IC卡上电失败
#define ERR_COM_IC_PRESSENT 0x51 //IC卡状态异常
#define ERR_COM_IC_PASSWD 0x52 //IC卡原口令错误
#define ERR_COM_IC_PIN_CHANGE 0x53 //IC卡更改口令失败
#define ERR_COM_IC_WRITE 0x54 //IC卡写数据失败
#define ERR_COM_IC_READ 0x55 //IC卡读数据失败
#define ERR_COM_IC_WRITE_KEY 0x56 //IC卡写密钥失败
#define ERR_COM_IC_READ_KEY 0x57 //IC卡读密钥失败
#define ERR_COM_IC_NOT_SPACE 0x58 //IC卡空间已满
#define ERR_COM_IC_CHECK_CRC 0x59 //IC卡数据CRC校验失败
#define ERR_COM_IC_NEXT 0x5A //有后续IC卡
#define ERR_COM_IC_NOT_NUMBER 0x5B //非NIC卡
#define ERR_COM_IC_GET_ORGANIZA 0x5C //获取IC卡机构信息失败
#define ERR_COM_IC_NO_CARD 0x5D //IC卡不存在
#define ERR_COM_IC_NO_ISSUE 0x5E //IC卡未发卡
#define ERR_COM_UNKNOWN 0x60 //未知错误
#define ERR_USB_NOT_EXIST 0x86 //U盘不存在
#define ERR_KEY_NOT_EXIST 0x87 //密钥不存在
#define ERR_UPDATE_KEY 0x91 //密钥更新失败
#define ERR_GET_OLD_KEYNUM 0x94 //获取旧密钥个数失败
#define ERR_KEY_GENERATE_KEY 0x95 //产生对称密钥失败
#define ERR_KEY_GENERATE_KEYMAC 0x96 //计算密钥MAC失败
#define ERR_KEY_SCHEME 0x97 //密钥方案错误
#define ERR_NOT_FUC 0x98 //此功能不支持
#define ERR_UPDATE_FILE_NOT_EXIST 0xEA //提示升级文件不存在
#define ERR_ADMIN 0xD6 //管理员角色值不合法
#define ERR_MANAGEUSER 0xD7 //用户状态值不合法
#define ERR_REMOTEMANAGE 0xD8 //远程管理已占用
#define ERR_FUNCMANAGE 0xD9 //本地管理已占用
#define ERR_LMK_SHEME 0xC0 //导入LMK变种分量失败
#define ERR_LMK_IESSUE 0xCD //导入主密钥分量失败
#define ERR_CMD_NOT_EXIST 0x0100 //网络命令不存在
#define ERR_HEX_ERR 0x0101 //非十六进制字符
#define ERR_DEC_ERR 0x0102 //非十进制字符
#define ERR_MODE_ERR 0x0103 //模式错误
#define ERR_KEYTYPE_ERR 0x0104 //密钥类型错误
#define ERR_KEYSCHEME_ERR 0x0105 //密钥方案错误
#define ERR_LEN_ERR 0x0106 //数据长度错误
#define ERR_ZMK_NUMBER 0x0107 //密钥成份错误
#define ERR_SAFEFLAG_ERR 0x0108 //安全机制错误
#define ERR_ID_ERR 0x0109 //方案ID错误
#define ERR_DISNUM_ERR 0x010A //离散次数错误
#define ERR_ALGORITHM_ERR 0x010B //算法错误
#define ERR_PINLEN_ERR 0x010C //最大密码长度错误
#define ERR_PINFORMAT_ERR 0x010D //PIN格式错误
#define ERR_PVKI_ERR 0x010E //PIN校验密钥编号
#define ERR_DELIMITER_NOT_EXIST 0x010F //缺少分隔符号";"
#define ERR_HASHFLAG_ERR 0x0110 //哈希算法标识错误
#define ERR_FILLMODE_ERR 0x0111 //填充标识错误
#define ERR_KEYMODE_ERR 0x0112 //获取密钥方式错误
#define ERR_PARAM_NULL 0x0113 //入参为空
#define ERR_PINTRANSLATE_ERR 0x0114 //PIN格式转化错误
#define ERR_VERIFICATION_ERR 0x0115 //验证失败
#define ERR_FILE_NOT_EXIST 0x0116 //配置文件不存在
#define ERR_FILE_READ_FAIL 0x0117 //读取文件失败
#define ERR_FILE_WRITE_FAIL 0x0118 //写文件失败
#define ERR_ENLMK_ERR 0x0119 //LMK加密失败
#define ERR_DELMK_ERR 0x011A //LMK解密失败
#define ERR_ENWORKKEY_ERR 0x011B //工作密钥加密失败
#define ERR_DEWORKKEY_ERR 0x011C //工作密钥解密失败
#define ERR_MD5_ERR 0x011D //MD5失败
#define ERR_GENRSA_ERR 0x011E //产生RSA失败
#define ERR_PKCSSIGN_ERR 0x011F //产生签名失败
#define ERR_PKCSVERIFYSIGN_ERR 0x0120 //签名生成摘要失败
#define ERR_ENRSAPUBLICKEY_ERR 0x0121 //公钥加密失败
#define ERR_DERSAPUBLICKEY_ERR 0x0122 //公钥解密失败
#define ERR_ENRSAPRIKEY_ERR 0x0123 //私钥加密失败
#define ERR_DERSAPRIKEY_ERR 0x0124 //私钥加密失败
#define ERR_GETPUBLICINDEX_ERR 0x0125 //根据索引获取公钥失败
#define ERR_GETPRIINDEX_ERR 0x0126 //根据索引获取私钥失败
//交易错误码集
#define FDCM_SUCCESS 0x0000
#define FDCM_PARAM_NULL 0x1000 //交易入参为空
#define FDCM_FILLMODE_ERR 0x1001
#define FDCM_PCIWRITE_ERR 0x1002
#define FDCM_PCIREAD_ERR 0x1003
#define FDCM_PCILEN_ERR 0x1004
#define FDCM_DATACRC_ERR 0x1005
#define FDCM_MACTYPE_ERR 0x1006
#define FDCM_CMPMAC_ERR 0x1007
#define FDCM_CMPPVV_ERR 0x1008
#define FDCM_CMPOFFSET_ERR 0x1009
#define FDCM_CMPCVV_ERR 0x100A
#define FDCM_CMPCSC1_ERR 0x100B
#define FDCM_CMPCSC2_ERR 0x100C
#define FDCM_CMPCSC3_ERR 0x100D
#define FDCM_MSGLEN_ERR 0x100E
#define FDCM_MSGSEND_ERR 0x100F
#define FDCM_MSGRCV_ERR 0x1010
#define FDCM_LOGTYPE_ERR 0x1011
#define FDCM_OPENDIR_ERR 0x1012
#define FDCM_STAT_ERR 0x1013
#define FDCM_SCANDIR_ERR 0x1014
#define FDCM_FILE_NOT_EXIST 0x1015
#define FDCM_OPENFILE_ERR 0x1016
#define FDCM_READFILE_ERR 0x1017
#define FDCM_STATETYPE_ERR 0x1018
#define FDCM_POPEN_ERR 0x1019
#define FDCM_USBWRITE_ERR 0x101A
#define FDCM_USBREAD_ERR 0x101B
#define FDCM_CARDSTATE_ERR 0x101C
#define FDCM_CHECKHEX_ERR 0x101D
#define FDCM_CMD_ERR 0x101E
#define FDCM_APPMODE_ERR 0x101F
#define FDCM_PKINDEX_ERR 0x1020
#define FDCM_PKALGORITHM_ERR 0x1021
#define FDCM_CHECKDEC_ERR 0x1022
#define FDCM_8LEN_ERR 0x1023
#define FDCM_KEYFLAG_ERR 0x1024
#define FDCM_CHECKLEN_ERR 0x1025
#define FDCM_SALGORITHM_ERR 0x1026
#define FDCM_SPKINDEX_ERR 0x1027
#define FDCM_SPKALGORITHM_ERR 0x1028
#define FDCM_SKEYFALG_ERR 0x1029
#define FDCM_DALGORITHM_ERR 0x102A
#define FDCM_DPKINDEX_ERR 0x102B
#define FDCM_DPKALGORITHM_ERR 0x102C
#define FDCM_DKEYFLAG_ERR 0x102D
#define FDCM_ALGORITHM_ERR 0x102E
#define FDCM_DISALGORITHM_ERR 0x102F
#define FDCM_DISPKINDEX_ERR 0x1030
#define FDCM_DISPKALGORITHM_ERR 0x1031
#define FDCM_DISKEYFLAG_ERR 0x1032
#define FDCM_FLAG_ERR 0x1033
#define FDCM_PVKFLAG_ERR 0x1034
#define FDCM_PVKI_ERR 0x1035
#define FDCM_PINFORMAT_ERR 0x1036
#define FDCM_ZPKALGORITHM_ERR 0x1037
#define FDCM_ZPKLEN_ERR 0x1038
#define FDCM_ZPKFLAG_ERR 0x1039
#define FDCM_USERIDLEN_ERR 0x1040
#define FDCM_4LEN_ERR 0x1041
#define FDCM_CURVEPARA_ERR 0x1042
#define FDCM_CURVELEN_ERR 0x1043
#define FDCM_SEMICOLONS_ERR 0x1044
#define FDCM_HASHTYPE_ERR 0x1045
#define FDCM_NUMBEROFZMK_ERR 0x1046
#define FDCM_KEYLEN_ERR 0x1047
#define FDCM_CMPCSC_ERR 0x1048
#define FDCM_RANDOM_ERR 0x1049
#define FDCM_WRITE_ERR 0x1050
#define FDCM_PCISTATE_ERR 0x1051
#define FDCM_NOT_AUTHORISEC_ERR 0x1052
#define FDCM_AUTHORISEC_ERR 0x1053
#define FDCM_PINLEN_ERR 0x1054
#define FDCM_RANDOMLEN_ERR 0x1055
#define FDCM_DATALEN_ERR 0x1056
#define FDCM_MAC_ERR 0x1057
#define FDCM_ROLE_ERR 0x1058
//交易错误码集工行
//*******************************************************
#define ICBC_ID_ERR 0x9000 //通用指令 指令ID不正确
#define ICBC_KEYCLASS_ERR 0x9001 //通用指令 密钥种类错误
#define ICBC_KEYTYPE_ERR 0x9002//通用指令 密钥类型错误
#define ICBC_KEYLEN_ERR 0x9003 //通用指令 密钥长度错误
//2015,4,21 add
#define ICBC_KEYTEXT_ERR 0x9004//通用指令 密钥密文含有非法字符
#define ICBC_KEYKCI_ERR 0x9005//通用指令密钥的KCI 校验不过
#define ICBC_DATA_ERR 0x9006//通用指令数据含有非法字符
#define ICBC_DATA_LEN_OVER_ERR 0x9007//通用指令数据长度值超过报文8K ,表示少于8k 的数据长度不能支持时才报错.
#define ICBC_DATALEN_ERR 0x9008//通用指令 数据包长度异常
#define ICBC_MSGLEN_OVER_RANGE 0x9009//通用指令 数据包长度异常超过报文8K, 断开连接
#define ICBC_MSGLEN_OVER 0x9010//通用指令 实际接收的报文比数据包长度域长,断开连接
#define ICBC_SNDRCV_TIMEOUT 0x9011//通用指令 实际接收的报文比数据包长度域短,加密机超时,断开连接
//#define ICBC_IDLEN_ERR 0x9020//ID长度错误
#define ICBC_KEYUSE_ERR 0x9021//密钥用途错误
#define ICBC_INCOMPLETE_KEY_ERR 0x9022//非完整密钥
//2015/05/16 nifei add start
#define ICBC_VERIFYSIGN_ERR 0x1501//验证签名失败
#define ICBC_SIGN_ERR 0x1502//签名失败
#define ICBC_SIGNDATALEN_ERR 0x1503//签名数据原文长度错误
#define ICBC_SM2MODE_ERR 0x1504//SM2密钥产生模式错误
#define ICBC_SM3HASHMODE_ERR 0x1505//SM3杂凑模式错误
#define ICBC_IDLEN_ERR 0x1506//ID长度错误
#define ICBC_SIGNLEN_ERR 0x1601//签名值长度错误
#define ICBC_GENSM2KEY_ERR 0x1602//产生SM2 密钥对错误
#define ICBC_SM3HASH_ERR 0x1603//产生SM3 HASH 错误
#define ICBC_GENCSR_ERR 0x1604//产生SM2 证书请求错误
#define ICBC_CERTFORMAT_ERR 0x1605//证书格式错误
#define ICBC_CERTPUBKEY_ERR 0x1606//证书公钥和私钥的公钥部分不匹配
#define ICBC_IPFALG_ERR 0x1701//IP格式标识错误
#define ICBC_IPFORMAT_ERR 0x1702//IP格式错误
#define ICBC_IPISEXIST_ERR 0x1703//IP已存在
#define ICBC_IPCNTISOVER_ERR 0x1704//IP白名单个数已超过上限
#define ICBC_IPWHITEISNULL_ERR 0x1705//IP白名单为空
#define ICBC_IPNOTMATCH_ERR 0x1706//IP地址不匹配
#define ICBC_GETVERSIONINFO_ERR 0x1707//获取加密机版本信息失败
#define ICBC_USERRIGTH_ERR 0x1708//用户权限错误
#define ICBC_MNGIPDEL_ERR 0x1709//管理员IP不可删除
//2015/05/16 nifei add end
#define ICBC_PTR_FORMAT_ERR 0x1001 //D2S_PTR和S2D_PTR,DES_PTR PINBLOCK格式错误,字典只有0,4
#define ICBC_PTR_SPAN_ERR 0x1002 //D2S_PTR和S2D_PTR,DES_PTR 转换前PAN未输入
#define ICBC_PTR_NPAN_ERR 0x1003 //D2S_PTR和S2D_PTR,DES_PTR 转换后PAN未输入
#define ICBC_PTR_END_ERR 0x1004 //D2S_PTR和S2D_PTR,DES_PTR 结尾符号不是;
#define ICBC_PTR_CARDNO_ERR 0x1005 //D2S_PTR和S2D_PTR,DES_PTR卡号不是12-19位
#define ICBC_PASSWDLEN_ERR 0x1006 //DES_RPG 密码长度错
#define ICBC_PASSWD_PINBLOCK_ERR 0x1007//DES_EPD,DES_PTR,DES_PVG 密码,pinblock错或为空
#define ICBC_FORMAT_PAN_ERR 0x1008 //当pin格式不为1时pan不为空
#define ICBC_FORMAT_PAN_DATA_ERR 0x1009 //pin包含非法字符
#define ICBC_FILL_ERR 0x1101 //SM4_MAG和SM4_MAV DES_MPG,MAC数据补位方式错误,字典只有0,1
#define ICBC_DATAFLAG_ERR 0x1102 //SM4_MAG和SM4_MAV DES_MPG,MAC数据块标识错误,字典只有0,1,2,3
#define ICBC_DATA_LENGTH_OVER 0x1103
#define ICBC_MAC_CHECK_ERR 0x1105//DES_MAV,MAC校验失败
#define ICBC_IV_ERR 0x1106//DES_MAG,DES_MAV,SM4_CTT,初始向量错或者所需iv 错误
#define ICBC_DATA_FLAG_ERR 0x1107//DES_MPG,DES_MAG,DES_MAV,DES_ENC,DES_DEC,SM4_MAG,SM4_MAV,SM4_CTT,报文块1,2时,mac 数据不是8/16字节的整数倍(国密为16字节,国际为8字节),或者是补位模式为0- none 或者分组为1-非最后的一个分组时,数据长度不为分组长度的整数倍.
#define ICBC_MAC_CHECK_LEN_ERR 0x1109//SM4_MAV,DES_MAV 国密算法指明MAC校验长度错误,具体字典为4,6,8,0,国际算法指明MAC校验长度错误,具体字典为4,6,8
#define ICBC_ENC_MODE_ERR 0x1201//DES_ENC,DES_DEC,SM4_CTT,加密模式错
#define ICBC_ENC_DATA_ERR 0x1202//DES_ENC,DES_DEC,加密数据错误
#define ICBC_FILL_MODE_ERR 0x1203//DES_ENC,DES_DEC,SM4_CTT补位模式错
#define ICBC_GROUP_MODE_ERR 0x1204//DES_ENC,分组模式错 或者加密数据分组标识错误,字典只有0,1,2
#define ICBC_DKG_USE_ERR 0x1301//KGK 密钥密文中密钥用途第5位到第8位是0080 ,表示KGK
#define ICBC_TEMP_KEY_USE_FIRST_BIT_ERR 0x1302//DES_KPI中间密钥密钥用途第一位为非9
#define ICBC_DISPERSED_DATA_ERR 0x1303//DES_DKG分散数据异常,长度异常或含有非法字符.
#define ICBC_KEY_USE_BIT_ERR 0x1304//DES_KEXKEK 密钥用途第5-8位为非’0000’时,需被导出的密钥的密钥类型与KEK 密钥用途第5-8位不一致
#define ICBC_COMP_ERR 0x1305//DES_KPI ,SM4_KPI分量表示错误,字典只有0,1,2
#define ICBC_COMP_0_TEMP_KEY_ERR 0x1306//DES_KPI ,SM4_KPI分量为0时 ,中间密钥不为全0.
#define ICBC_KEY_TYPE_VALID 0x1307//ZTL key type failed
#define ICBC_KEY_LEN_VALID 0x1308// key len failed
#define ICBC_KEY_TYPE_ERR 0x1401//SM4_KXG 密钥类型错误,字典只有0050,0070
#define ICBC_MAC_NO_MAC 0x0004 //标识MAC 未校验
#define ICBC_MAC_MAG_ERR 0x0006 //MAC生成错误
#define ICBC_DESHASH_ALGORITHM_ERR 0x1220 //散列算法错误
#define ICBC_DESGROUP_DESCRIBE_ERR 0x1221 //分组描述错误只有0,1,2
#define ICBC_INDEX_ERR 0x1108//密钥索引值超出范围
#define ICBC_GENERATE_RANDOM_ERR 0x1222//生成随机数错误
#define ICBC_GENERTE_RANDOM_KEY_ERR 0x1223//产生随机密钥错误
#define ICBC_TRANS_TO_ICBC_ERR 0x1801//把本地密钥转换为ICBC错误
#define ICBC_TRANS_TO_DEFAULT_ERR 0x1802//把工行密钥转换为本地错误
#define ICBC_LMK_TO_KEK_ERR 0x1803//lmk转换为kek错误
#define ICBC_LMK_TO_LMK_ERR 0x1804//lmk转换为lmk错误
#define ICBC_KEK_TO_LMK_ERR 0x1805//kek转换为lmk错误
#define ICBC_ENC_ERR 0x1806//加密错误
#define ICBC_DEN_ERR 0x1807//解密错误
#define ICBC_CPT_KEY_ERR 0x1808//分量合成错误
#define ICBC_GENERATE_KCI_ERROR 0x1809//生成KCI错误
#define ICBC_SEARCH_KEY_ERR 0x1810//查找工行主密钥失败
#define ICBC_SET_KEY_ERR 0x1811//设置工行主密钥错误
#define ICBC_COM_DISPERSE_ERR 0x1812//分散ID卡子密钥错误
#define ICBC_HASH_ERR 0x1813//计算hash错误(主要用于SHA_OWH)
#define ICBC_SHA_CHAIN_VERCTORY_ERR 0x1901//SHA 的CHAIN VERCTORY值错误
#define ICBC_CARD_ID_ERR 0x1902//卡号+卡序列号数据长度错误或者含有非法字符
#define ICBC_CARD_ATC_ERR 0x1903//ATC含有非法字符
#define ICBC_CARD_ARQC_ERR 0x1904//ARQC含有非法字符
#define ICBC_CARD_ARC_ERR 0x1905//ARC含有非法字符
//非对称算法错误标识
//#define ICBC_SM2_MODE_ERR 0x1600//sm2 mode模式错误,数据字典只有0,1,2
//#define ICBC_SM2_HASH_FLAG_ERR 0x1601//sm2 HASH标识错误,数据字典只有0,1
//*******************************************************/
/****************************************************************
#define ICBC_KEY_CHECK_ERR 0x9004 //通用指令 密钥校验
#define ICBC_DATA_ERR 0x9005 //通用指令 数据包异常
#define ICBC_PTR_PAN_ERR 0x1006 //D2S_PTR和S2D_PTR PAN格式错误
#define ICBC_PTR_ACCOUNT_ERR 0x1007 //D2S_PTR和S2D_PTR 转换前PINBLOCK账号校验错误
#define ICBC_PTR_PINBLOCK_ERR 0x1008 //D2S_PTR和S2D_PTR PINBLOCK转换错误
#define ICBC_SM4MAC_DATALENOVER_ERR 0x1103 //SM4_MAG和SM4_MAV 数据长度值超过报文8K
#define ICBC_SM4MAC_DATALEN_ERR 0x1104 //SM4_MAG和SM4_MAV 数据包长度异常
#define ICBC_SM4MAC_MAV_ERR 0x1105 //SM4_MAV MAC校验失败
#define ICBC_SM4MAC_MAG_ERR 0x1106 //SM4_MAV MAC生成错误
#define ICBC_SM4MAC_NO_MAC 0x0004 //标识MAC 未校验
#define ICBC_DES_DATALEN_ERR 0x1201 //DES和3DES数据包长度异常
#define ICBC_DESMAC_FILL_ERR 0x1202 //DES_MAG和DES_MAV MAC数据补位方式错误,字典只有0,1
#define ICBC_DESMAC_DATAFLAG_ERR 0x1203 //DES_MAG和DES_MAV MAC数据块标识错误,字典只有0,1,2,3
#define ICBC_DESMAC_DATALENOVER_ERR 0x1204 //DES_MAG和DES_MAV 数据长度值超过报文8K
#define ICBC_PASSWD_LEN_ERR 0x1205 //随机密码长度错误
#define ICBC_PASSWD_PIN_LEN_ERR 0x1206 //输入密码PIN长度不是4-12
#define ICBC_PASSWD_PIN_END_ERR 0x1207 //输入密码PIN结束符不是;
#define ICBC_DESMAC_MAG_ERR 0x1208 //DES_MAV MAC生成错误
#define ICBC_DESMAC_MAV_ERR 0x1209 //DES_MAV MAC校验失败
#define ICBC_DESMAC_NO_MAC 0x0004 //标识MAC 未校验
#define ICBC_ENC_TO_PINBLOCK_ERR 0x1210 //密码使用PIK密钥加密为PINBLOCK失败
#define ICBC_DEC_PINBLOCK_TO_PLAINTEXT_ERR 0x121A //PINBLOCK密文解密为明文失败
#define ICBC_DESENC_MODE_ERR 0x121B//加密模式错误
#define ICBC_DESFILL_MODE_ERR 0x121C//补位模式错误
#define ICBC_DESGROUP_DESCRIBE_ERR 0x121D//分组描述错误
#define ICBC_DESCOMP_LEN_ERR 0x121E//分量长度错误
#define ICBC_DESCOMP_FLAG_ERR 0x121F//DES分量标识错误
#define ICBC_DESHASH_ALGORITHM_ERR 0x1220 //散列算法错误
#define ICBC_DESLENGTH_ERR 0x1221//指定的随机密码长度不正确
#define ICBC_SM4_DATALEN_ERR 0x1107//SM4数据包长度异常
#define ICBC_SM4KEY_INDEX_ERR 0x1108//密钥索引值超出范围
#define ICBC_SM4LEN_ERR 0x1109//SM4分量长度超出范围
#define ICBC_SM4COMP_FLAG_ERR 0x110A//SM4分量标识错误
**********************************************************************************/
//*************PCI ERROR CODE****************/
//如果加密卡支持奇偶校验不过,仍然返回结果
//那么定义该宏为0x3121,例如工银国际版本
#define ERR_PCI_ODD_CHECK_ERR 0x3121
//如果加密卡奇偶校验不过直接报错
//那么定义该宏为-1
//#define ERR_PCI_ODD_CHECK_ERR -1
//*********** Racal Error Code **************/
#define NO_ERRORS 0x00
#define ERR_VERIFICATION_FAILURE 0x01
#define ERR_VERIFICATION_PIN 0x02
#define ERR_KEYDATA_LENGTH 0x02
#define ERR_INVALID_MESSAGE_TYPE_CODE 0x03
#define ERR_INVALID_KEY_TYPE_CODE 0x04
#define ERR_INVALID_KEY_LENGTH_FLAG 0x05 // 根据标准而来,不可改dwb
#define ERR_INVALID_MESSAGE_BLOCK_NUMBER 0x05 // 根据标准而来,不可改 fuck zcb
#define ERR_INVALID_KEY_LENGTH_CODE 0x06
#define ERR_SOURCE_KEY_PARITY 0x10
#define ERR_DEST_KEY_PARITY 0x11
#define ERR_USER_STORAGE 0x12
#define ERR_MASTER_KEY_PARITY 0x13
#define ERR_LMK_PIN_BLOCK_INVALID 0x14
#define ERR_INPUT_DATA_INVALID 0x15
#define ERR_PRINTER_NOT_READY 0x16
#define ERR_HSM_NOT_AUTHORISED 0x17
#define ERR_FORMAT_NOT_DEFINITION 0x18
#define ERR_DIEBOLD_TABLE_INVALID 0x19
#define ERR_PIN_BLOCK 0x20
#define ERR_USER_STORAGE_INDEX 0x21
#define ERR_ACCOUNT_NUMBER_INVALID 0x22
#define ERR_PIN_FORMAT_INVALID 0x23
#define ERR_INVALID_PIN_LENGTH 0x24
#define ERR_DEC_TABLE 0x25
#define ERR_INVALID_KEY_SCHEMA 0x26
#define ERR_INVALID_KEY_LENGTH 0x27
#define ERR_INVALID_KEY_TYPE 0x28
#define ERR_INVALID_REFERENCE_NUMBER 0x30
#define ERR_SAME_PIN 0X75
#define ERR_INVALID_PRIVATAKEYLENGTH 0x78
#define ERR_DSP_ERR 0x47
#define ERR_DATA_LENGTH 0x80
#define ERR_TRADECMD_NOT_EXIST 0x81 //交易命令不存在
#define ERR_INVALID_DATALENGTH 0x92
#define ERR_DATA_THAN_MODULUS_BIG 0x98 //数据比模大
//***2015-11-11 11:11工银国际M6返回码*******************
#define ERR_INVALID_MODE_FLAG 0x02
#define ERR_INVALID_INPUT_FORMAT 0x03
#define ERR_INVALID_MAC_ALGORITHM 0x04
#define ERR_INVALID_KEY_TYPE_M6 0x05
#define ERR_INVALID_KEY_LENGTH_M6 0x06
#define ERR_INVALID_PADDING_METHOD 0x09
//******************************************************
//0x80~0xc0
//83,84,85,89,90,92,93,99,a1,a7,ab,ac,ad,ae...
#define ERR_USB_NOT_EXIST1 0x83 //U盾不存在
#define ERR_UKEY_LOGIN 0x84 //U盾登录失败
#define ERR_UKEY_MAKE 0x85 //U盾制作失败
#define ERR_UKEY_CZSB 0x89 //操作失败
#define ERR_JSSB 0x90 //解锁失败
#define ERR_KLCW 0x92 //口令错误
#define ERR_YKLCW 0x93 //原口令错误
#define ERR_GHKLSB 0xA1 //口令更改失败
#define ERR_UKEY_FILENULL 0xA7 //密钥备份文件不存在
#define ERR_UKEY_DEEXIST 0x8A//0xAB //数字信封已存在
#define ERR_RKEY_UNABLED 0xAC //非本机发行盾
#define ERR_BKEY_UNABLED 0xAD //非本机备份盾
#define ERR_BKEY_NULL 0xAE //该盾未备份密钥
#define ERR_UKEY_ILLEGAL 0xAF //非法U盾
#define ERR_UKEY_NONEMPTY 0x8B//0x86 //非空盾
/*********** 20141104 nifei add start(工银亚洲) **************/
#define ERR_MEM_ALLOC_FAIL 0x41 //内存申请失败
#define ERR_ZPK_PARITY 0x10 //ZPK错误
#define ERR_ENC_PIN 0x14 //error in encrypted pin
#define ERR_INVALID_SES_KEY 0x08 //invalid message session key or iv
#define ERR_INVALID_NEW_SES_KEY 0x09 //invalid New message session key or iv
#define ERR_KEY_LEN 0x27 //密钥长度错误
#define ERR_NUMERIC_FLAG 0x06 //invalid Numeric Flag
#define ERR_UPPERCASE_FLAG 0x07 //invalid Uppercase Flag
#define ERR_INVALID_AN_PIN_LEN 0x04 //invalid AN-PIN Length
#define ERR_INVALID_AN_PIN_VER_FLAG 0x76 //invalid AN-PIN Verification Flag
#define ERR_INVALID_PRI_KEY_INDEX 0x03 //invalid Private Key index
#define ERR_INVALID_MES_SES_KEY_LEN 0x71 //incorrect Message Session Key Length
#define ERR_SECRET_KEY_LEN 0x78 //secret key length error
#define ERR_INVALID_PUBKEY_ENC_TYPE 0x03 //Invalid public key encoding type
#define ERR_PUB_EXP_LEN 0x06 //Public exponent length error
#define ERR_SUP_PUB_EXP_IS_EVEN 0x08 //Supplied public exponent is even
/*********** 20141104 nifei add end(工银亚洲) **************/
/***********20141013 ywn add(工银国际E0指令错误码)***********/
#define ERR_DATA_FLAG_ERR 0x01//非法报文块标识域
#define ERR_ALGORITHM_MODE_ERR 0x02//非法算法操作模式域
#define ERR_INPUT_FLAG_ERR 0x03//非法输入数据格式域
#define ERR_OUTPUT_FLAG_ERR 0x04//非法输入数据格式域
#define ERR_KEY_TYPE_ERR 0x05//非法密钥类型域
#define ERR_DATA_LEN_ERR 0x06//非法保温长度域
#define ERR_ENC_FLAG_ERR 0x07//非法加解密标识域
#define ERR_FILL_MODE_ERR 0x08//非法填充模式域
#define ERR_FILL_CNT_FLAG_ERR 0x08//非法填充计数模式域
#define ERR_FILL_CHAR_ERR 0x09//填充字符域错误
#define ERR_KEY_SCHEMA_ERR 0x26//密钥方案错误
/***********20141013 ywn add(工银国际E0指令错误码)***********/
#endif
+347
View File
@@ -0,0 +1,347 @@
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include <sys/time.h>
#define KEY_0 0x00
#define KEY_1 0x01
#define KEY_2 0x02
#define KEY_3 0x03
#define KEY_4 0x04
#define KEY_5 0x05
#define KEY_6 0x06
#define KEY_7 0x07
#define KEY_8 0x08
#define KEY_9 0x09
#define KEY_A 0x0A
#define KEY_B 0x0B
#define KEY_C 0x0C
#define KEY_D 0x0D
#define KEY_E 0x0E
#define KEY_F 0x0F
#define KEY_POWER 0x11
#define KEY_FUNC 0x12
#define KEY_DEL 0x13
#define KEY_UP 0x04
#define KEY_DOWN 0x01
#define KEY_ESC 0x02
#define KEY_ENTER 0x03
#define KEY_FUNC_3S 0x18
#define KEY_ERROR 0xFF //多重按键错误
#define ITEM_1 7 //菜单项的Menu-ITEM?可以定位到0xF5-0xFF
#define ITEM_2 8
#define ITEM_3 9
#define ITEM_4 10
#define ITEM_5 11
#define ITEM_6 12
#define ITEM_7 13 //菜单项的Menu-ITEM?可以定位到0xF5-0xFF
#define ITEM_8 14
#define ITEM_9 15
#define ITEM_10 16
#define ITEM_11 17
#define ITEM_12 18
#define ITEM_13 19
#define ITEM_14 20
#define ITEM_15 21
#define ITEM_16 22
#define DEALOK 0
#define Admin 0
#define Operator 1
#define Menu_Init_Kao 0x01
#define Menu_Kao_Frame1 0x02
#define Menu_Kao_Frame2 0x03
#define Menu_EXAR 0x04
#define Menu_HYK16Test 0x05
#define Menu_1308Test 0x06
#define Menu_SYD1308_Test_1 0x07
#define Menu_SYD1308_Test_2 0x08
#define Menu_SYD1308_device_manage_1 0x09
#define Menu_SYD1308_device_manage_2 0x0a
#define Menu_SYD1308_lmk_manager_1 0x0b
#define Menu_Kao_Frame3 0xf4
#define Menu_Kao_Frame4 0xf5
#define Menu_CardTest_1 0xf6
#define Menu_CardTest_2 0xf7
#define Menu_Flash 0xf8
#define Menu_Sram 0xf9
#define Menu_Kai_Test 0xfA
#define Menu_Kao_Frame5 0xfB
#define Menu_CardTest 0xFC
#define Menu_CardTest_3 0xFD
#define Menu_Main_LOG 0xFE
#define Menu_Init_Test 0xFF
#define Menu_Login_Manage 0x04
#define Menu_Login_Server 0x05
#define Menu_Manage_AsymmetricalKey 0x06
#define Menu_Manage_ClientIP 0x07
#define Menu_Manage_LMK 0x08
#define Menu_Manage_Operator_1 0x09
#define Menu_Manage_Operator_2 0x0A
#define Menu_Manage_Operator_3 0xB2
#define Menu_Manage_System_1 0x0B
#define Menu_Manage_System_2 0x0C
#define Menu_Manage_Modify_Ethx 0x0D
#define Menu_Manage_SerialPort 0x0E
#define Menu_Manage_Organ 0x68
#define Menu_Manage_KeyType 0x69
#define Menu_Manage_KeyQuery 0x6A
#define Menu_Manage_KeyGenerate 0x99
#define Menu_Manage_KeyGenerate_1 0xA1
#define Menu_Manage_KeyGenerate_2 0xA2
#define Menu_Manage_KeyGenerate_3 0xA3
#define Menu_Manage_KeyGenerate_4 0xA4
#define Menu_Manage_KeyIssue1 0xA5
#define Menu_Manage_KeyIssue2 0xA6
#define Menu_Manage_KeyIssue3 0xA7
#define Menu_Manage_KeyIssue4 0xA8
#define Menu_Manage_KeyChange1 0xA9
#define Menu_Manage_KeyChange2 0xAA
#define Menu_Manage_KeyChange3 0xAB
#define Menu_Manage_KeyInit 0xB3
#define Menu_Manage_LMKIssue 0xC7
#define Menu_Manage_LMKIssue1 0xC8
#define Menu_Manage_LMKIssue2 0xC9
#define Menu_Manage_LMKIssue3 0xCA
#define Packet_Field_Set1 0xCB
#define Menu_Manage_System_3 0xCC
#define Menu_Manage_ClientIP_Menu 0xCD
#define UKey_Make_1 0xB4
#define UKey_Make_2 0xB5
#define UKey_Make_LMK_From_IC_1 0xBC
#define UKey_Make_LMK_From_IC_2 0xBD
#define UKey_Or_IC_ChangePwd_1 0xB6
#define UKey_Or_IC_ChangePwd_2 0xB7
#define UKey_Or_IC_ChangePwd_2l 0xBC
#define UKey_Or_IC_Deblock_1 0xB8
#define UKey_Or_IC_Deblock_2 0xB9
#define UKey_Manage_Operate_1 0xBA
#define UKey_Manage_Operate_2 0xBB
#define Menu_Manage_KeyBackups 0x7A
#define Menu_Manage_KeyChange 0xA0
#define Menu_Manage_KeyStop 0x7B
#define Menu_Manage_KeyDel 0x7C
#define Menu_Manage_Key_1 0x7D
#define Menu_Manage_Key_2 0x7E
#define Menu_Manage_Key_3 0x98
#define Menu_Manage_Key_4 0xAD
#define UD_Make_Manage 0xAC
#define UD_Make_Operator 0xAE
#define UD_Make_Windicate 0xAF
#define Dev_Key_Back_1 0x0F
#define Dev_Key_Back_2 0x10
#define Dev_Key_Back_3 0x11
#define Dev_Key_Back_4 0x12
#define Dev_Key_Recover_1 0x13
#define Dev_Key_Recover_2 0x14
#define Dev_Key_Recover_3 0x15
#define Dev_Key_Generate_1 0x16
#define Dev_Key_Generate_2 0x17
#define Dev_PublicKey_Inport 0x18
#define Dev_PublicKey_Outport_1 0x19
#define Dev_PublicKey_Outport_2 0x1A
#define Dev_UsbKey_Register 0x1B
#define IC_Init_1 0x1C
#define IC_Init_2 0x1D
#define IC_Card_Copy_1 0x1E
#define IC_Card_Copy_2 0x1F
#define IC_Card_Copy_3 0x20
#define IC_Card_Copy_4 0x21
#define IC_Card_Copy_5 0x22
#define IC_Card_Copy_6 0x23
//#define IC_Change_Oper_Passwd_1 0x24
//#define IC_Change_Oper_Passwd_2 0x25
#define IC_Init_Passwd 0x26
#define IC_Make_Net 0x27
#define IC_Make_Operator 0x28
#define IC_Make_Operator_1 0x61
#define IC_Make_Windicate 0x29
#define IC_HSM_Register_1 0x2A
#define IC_HSM_Register_2 0x2B
#define IC_HSM_Cancel_1 0x66
#define IC_HSM_Cancel_2 0x67
#define Init 0x2C
#define Init_1 0x2D
#define Init_2 0x2E
#define Init_3 0x2F
#define Init_4 0x30
#define LMK_Generate 0x31
#define LMK_Move 0x32
#define LMK_Move_1 0x62
#define LMK_Recover_1 0x33
#define LMK_Recover_2 0x34
#define LMK_Recover_3 0x35
#define LMK_Bak_1 0x36
#define LMK_Bak_2 0x37
#define LMK_Bak_3 0x38
#define LMK_Bak_4 0x39
#define LMK_Bak_5 0x60
#define Login_Admin_1 0x3A
#define Login_Admin_2 0x3B
#define Login_Operator_1 0x3C
#define Login_Operator_2 0x3D
#define Login_Windicate_1 0x3E
#define Login_Windicate_2 0x3F
#define Login_Net_1 0x63
#define Login_Net_2 0x64
#define FLogout 0x40
#define System_start 0x41
#define System_Modify_Ethx_1 0x42
#define System_Modify_Ethx_2 0x43
#define System_Modify_Ethx_3 0xC0
#define System_Modify_Ethx_4 0xC1
#define System_Modify_Ethx_5 0xC2
#define System_Modify_Ethx_6 0xC3
#define System_Modify_Ethx_7 0xC4
#define System_Modify_Ethx_8 0xC5
#define System_Modify_Ethx_9 0xC6
#define System_Port 0x44
#define System_Version_Query 0x46
#define System_LMK_KCV_Query 0x9A //查询lmk kcv
#define System_Time_Settings 0x47
#define System_Change_Passwd 0x48
#if 1
#define System_Restore_Factory_1 0x49
#define System_Restore_Factory_2 0x4A
#define System_Restore_Factory_3 0x4B
#define System_Restore_Factory_4 0x4C
#endif
#define System_SerialPort_Settings 0x4D
#define System_SerialPort_Settings_S 0x74
#define System_Upgrade_1 0x4E
#define System_Upgrade_2 0x4F
#define System_Upgrade_3 0x50
#define System_Upgrade_4 0x51
#define System_Power_Off_1 0x52
#define System_Power_Off_2 0x53
#define System_Succeed_Message 0x54
#define System_Fail_Message 0x55
#define System_ClientIP_Add 0x56
#define System_ClientIP_Del_1 0x57
#define System_ClientIP_Del_2 0x58
#define System_ClientIP_Que 0x59
#define SerialPort_Service 0x5A
#define Machine_No_Query 0x5B
#define Network_Service_1 0x5C
#define Network_Service_2 0x5D
#define Network_Service_3 0xBF
#define Network_Service_4 0xBE
#define LMK_Sys_Login 0x5E
#define System_Log 0x5F
#define Work_To_Tmp 0x65
#define KEK_RECOVER 0x66
#define Key_Organ_Add 0x6B
#define Key_Organ_Del 0x6C
#define Key_Organ_Que 0x6D
#define Key_Type_Add 0x6E
#define Key_Type_Del 0x6F
#define Key_Type_Que_1 0x70
#define Key_Type_Que_2 0x7F
#define Key_Query_ByOne_1 0x71
#define Key_Query_ByOne_2 0x81
#define Key_Query_ByMore_1 0x72
#define Key_Query_ByMore_2 0x80
#define Key_Issue_1 0x73
//#define Key_Backups 0x74
//#define Key_Recover 0x75
#define Key_Stop_ByOne 0x76
#define Key_Stop_ByMore 0x77
#define Key_Del_ByOne 0x78
#define Key_Del_ByMore 0x79
#define CardKey_Move_1 0X82 // 83
#define CardKey_Move_2 0x83
#define CardKey_Move_3 0x84
#define CardKey_Move_4 0x85
#define Key_Start_ByOne 0x86
#define Key_Start_ByMore 0x87
#define Key_Issue_2 0x91
#define Key_Issue_3 0x92
#define Key_Issue_4 0x93
#define Key_Issue_5 0x94
#define Packet_Field_Set 0x95
#define Part_Combine_Key 0x96
#define Part_Combine_PIN 0x97
extern int card_flag;
extern unsigned char Frame; //画面号
extern unsigned int MenuItem; //光标所在菜单项
extern unsigned int FreshItem; //记录上一个item
extern unsigned char TO_ADMIN_OR_MOR_FLAG; //初始化后,进入管理程序或编核押程序标志 1 管理程序 0 编核押
extern unsigned char ADMIN_LOCATE_FLAG; //安控员登录定位标志 0:安控员一登录界面 1:安控员二登录界面 2:管理菜单管理员登录界面
extern unsigned char UKEY_MAKE_FLAG;
extern unsigned char MANAGE_UMAKE_FLAG;
extern unsigned char SUPPER_UMAKE_FLAG;
extern unsigned char UKEY_OPERATE_FLAG;
extern unsigned char DEBLOCK_FLAG;
extern unsigned char PWD_CHANGE_FLAG;
extern unsigned char NETLOGIN_FLAG; //网络服务登录1:普通交易登录2:授权状态登录
extern unsigned char LMK_RECOVER_FLAG; //恢复主密钥定位标记1:恢复分量一2:恢复分量二3:恢复分量二
extern unsigned char LMK_BAK_FLAG; //备份主密钥定位标记1:备份分量一2:备份分量二3:备份分量三
extern unsigned char LMK_GENERATE_FLAG; //产生主密钥方式1:新生成2:分量恢复
extern unsigned char LMK_FLAG; //判断LMK 是否正常0:正常1:不正常
extern unsigned char MAKE_OPR_FLAG; //制作密钥管理员1:密钥管理员一2:密钥管理员二
extern unsigned char AUTHORIZATION_LOGIN; //网络交易授权状态1:授权登录0:配置管理员登录
extern unsigned char NetService_Change; //交易状态切换0,非切换状态1,普通到授权,2,授权到普通
extern unsigned char cmp_combine;
extern unsigned char MenuItem_num; //返回到上一帧菜单项被选中号,优先级高
extern unsigned char EXIT_Frame; //返回到上一帧界面号 比Function优先级高
extern unsigned char EXIT_Frame_Flag[8]; //存放一个功能菜单的EXIT_Frame
extern unsigned char MenuItem_num_Flag[8]; //存放一个功能菜单的MenuItem_num 返回到上一帧菜单项被选中号
extern unsigned char NETWARE_NUM; //网卡号
extern unsigned char XTZMY_Function_Num; //区分是第一次开机生成系统主密钥 0 /管理菜单选择生成系统主密钥 1
extern unsigned char Store_Card_Num; //备份下级行密钥的IC卡编号 默认为1
extern unsigned char TIMEOUT; //串口数据传输超时标志位 TIMEOUT=1表示超时
extern unsigned int TIMENUM_NUM; //超时时间倍数计数
extern unsigned int Timenum; //超时时间倍数计数
extern unsigned char INPUT_OR_OUTPUT_KEY_BIT; //导入或导出的密钥位数 2:两位 3:三位
extern int ExData; //全局变量,单字节共享时用
extern int totalnum;
extern unsigned int QueryCnt, QueryPtr, DispAddr;
extern unsigned char LED_STATUS;
extern unsigned char LED_ERROR;
extern unsigned char LEDSTATE;
// extern unsigned char *Buffer[22]; //用户行显示内容的指针全局变量
extern unsigned char *Buffer[44]; //用户行显示内容的指针全局变量
extern unsigned char DataTmp[256]; //全局变量,多字节共享
extern unsigned char Buf[256];
extern unsigned char inbuf[20];
extern unsigned char Int_flag;
extern unsigned char NUM_SERIER_REV;
extern int tlock;
extern unsigned char func_3s_flag;
extern unsigned char keybuff[20];
extern int bufindex;
extern int AllKeyLen;
extern unsigned char *g_key_buff;
extern unsigned char power;
extern int SerialPort_PID; //密钥管理串口进程ID
extern int PCfd;
extern unsigned char IC_Copy_tmp[12 * 1024];
extern char IC_Copy_role[17];
extern char IC_Copy_roleLen;
#endif /* GLOBAL_H_ */
+2284
View File
File diff suppressed because it is too large Load Diff
+58
View File
@@ -0,0 +1,58 @@
#ifndef _LCD_DISPLAY_H_
#define _LCD_DISPLAY_H_
void buffer_init();
void buffer_flush(unsigned char LineBit);
//void write_databyte(unsigned char databyte);
void write_databyte(unsigned int databyte);
void LcdSetPage(unsigned char Page);
void LcdSetCol(unsigned char Col);
void LcdClear();
void initLcdSystem(void);
void PrintASC8(unsigned char Page,unsigned char Col,unsigned char *Asc8,unsigned char Flag);
void PrintASC16(unsigned char Page,unsigned char Col,unsigned char *Asc16,unsigned char Flag);
void PrintHANZI(unsigned char Page,unsigned char Col,unsigned char *HanZi,unsigned char Flag);
void PrintString8(unsigned char Page,unsigned char Col,unsigned char * *ValBuf,unsigned char Num,unsigned char Flag);
void PrintString16(unsigned char Page,unsigned char Col,unsigned char * *ValBuf,unsigned char Num,unsigned char Flag);
void PrintFormatStr(unsigned char Page,unsigned char Col,unsigned char * *CodeStr,unsigned char Num,unsigned char Flag);
void SetItemCursor(unsigned int * CurItem,unsigned int AllItem,unsigned char Key);
void SetItemCursor_DownAndUp(unsigned int * CurItem,unsigned int AllItem,unsigned char Key);
void PrintEmptyLine(unsigned char Line,unsigned char Type);
void DispPrefix(unsigned char ItemCnt,unsigned int first_Item,unsigned char start_page,unsigned char place_len,unsigned char start_col);
void DispPrefix_NoDot(unsigned char ItemCnt,unsigned int first_Item,unsigned char start_page,unsigned char place_len,unsigned char start_col);
void DispPrefix_oneormore_col(unsigned int ItemCnt,unsigned int first_Item,unsigned char start_page,unsigned char start_col);
void ExitToMenu();
void DispDigits(unsigned char Page,unsigned char Col,unsigned char * Value,unsigned char Len,unsigned char Flag);
void DispVersion(unsigned char Page,unsigned char Col,unsigned char * Value,unsigned char Len,unsigned char Flag);
void DISP_TURN_ON_FLAG(unsigned char page,unsigned char col,unsigned char * FLAG,unsigned char REVERSE_Flag);
void ASCToBIN(unsigned char *ASCBuf,unsigned char ASCLen,unsigned char *BINBuf);
void BINToASC(unsigned char *BINBuf,unsigned char BINLen,unsigned char *ASCBuf);
void BCDToBIN(unsigned char *BCDBuf,unsigned char BCDLen,unsigned char *BINBuf);
void BINToBCD(unsigned char *BINBuf,unsigned char BINLen,unsigned char *BCDBuf);
void RefreshArrowPos(unsigned char CurSel,unsigned char AllSel,unsigned char first_page,unsigned char second_page);
void AddIntoBuf(unsigned char *ValBuf,unsigned char BufLen,unsigned char *CurLen,unsigned char Key);
void DelFromBuf(unsigned char *ValBuf,unsigned char BufLen,unsigned char *CurLen);
void Disp_error_no(void);
void Disp_digit_number(unsigned char * addr,unsigned char disp_len,unsigned char page,unsigned char col);
unsigned char Check_IP_Result(unsigned char * IP_value,unsigned char FLAG);
void Disp_IP_ADDR(unsigned char page,unsigned char col,unsigned char * IP_addr,unsigned char FLAG,unsigned char REVERSE_Flag);
void DISP_SYNC_FLAG(unsigned char page,unsigned char col,unsigned char * FLAG,unsigned char REVERSE_Flag);
void Display_Date(unsigned char page,unsigned char col,unsigned char * Date,unsigned char FLAG,unsigned char REVERSE_Flag);
void Display_Time(unsigned char page,unsigned char col,unsigned char * Time,unsigned char FLAG,unsigned char REVERSE_Flag);
void DispDigits_Reverse(unsigned char Page,unsigned char Col,unsigned char * Value,unsigned char Len,unsigned char Flag,unsigned char REVERSE_FLAG);
void Disp_LogSize(unsigned char Page,unsigned char Col,unsigned char * Value);
void Disp_num_failure(unsigned char Page,unsigned char Col,unsigned char * Value);
unsigned char Right_Or_Error_Time(unsigned char * time_value);
unsigned char Right_Or_Error_LongTime(unsigned char * time_value);
unsigned char Right_Or_Error_HourAndMinute(unsigned char * time_value);
void function_key_3s(unsigned char Key,unsigned char * key_flag_addr);
void function_key_first(unsigned char * key_flag_addr);
void Rev_Error_dealwith(int len);
void DispDigits2(unsigned char Page,unsigned char Col, unsigned char *Value,unsigned char Len);
#endif /* LCD_DIS_H_ */
+24
View File
@@ -0,0 +1,24 @@
#ifndef __PANEL_DEAL_H__
#define __PANEL_DEAL_H__
void chip_main();
void chip_main_reset();
unsigned int get_lrc(unsigned char * send_data,int len);
void rsp_ok_common(unsigned char rsp_ok_data);
void rsp_ok_data(unsigned char * rev_data,int len);
void rsp_ok(void);
void rsp_err(unsigned char type,unsigned char error);
void rsp_err_data(unsigned char type,unsigned char * buff,int len);
int chip_request(unsigned char tag,unsigned char * send_data,int len,unsigned char * ack);
void serialSendRsp();
void rsp_ok_common(unsigned char response_data);
void Frame_Menu_Manage_LMKIssue();
void Frame_Menu_Manage_LMKIssue1();
void Frame_Menu_Manage_LMKIssue2();
void Frame_Menu_Manage_LMKIssue3();
#endif
+71
View File
@@ -0,0 +1,71 @@
#ifndef __PUBLIC_H__
#define __PUBLIC_H__
/*
* ¹«¹²°üº¬µÄÍ·Îļþ
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>
#include <ctype.h>
#include <pwd.h>
#include <crypt.h>
#include <shadow.h>
#include <math.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <stdarg.h>
#include <dirent.h>
#include <sys/ioctl.h>
#include <sys/vfs.h>
#include <sys/epoll.h>
#include <pthread.h>
#include <sched.h>
#include <stdbool.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <termios.h>
#include <sys/wait.h>
#include <netdb.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <linux/lp.h>
#include <scsi/sg.h>
#include <linux/capability.h>
#include <openssl/rsa.h>
#include<openssl/pem.h>
#include<openssl/err.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include <openssl/pkcs12.h>
#include <openssl/bio.h>
#include <openssl/engine.h>
#include "define.h"
#ifdef MEMWATCH
#include "memwatch.h"
#endif
#endif
+27
View File
@@ -0,0 +1,27 @@
#ifndef _SERIAL_C_
#define _SERIAL_C_
//´íÎó´úÂë
#define E_UART_SIZE 0x50 //Unsupported data size
#define E_UART_parity 0x51 //Unsupported parity
#define E_UART_stop 0x52 //Unsupported stop bits
#define E_UART_Setup1 0x53 //SetupSerial 1
#define E_UART_Setup3 0x54 //SetupSerial 3
#define E_UART_OPEN 0x55 //Serial OPEN Error
#define E_UART_SPEED 0x56 //Serial OPEN Error
extern int icdev;
int serial_open(int baud_rate);
int serial_write(unsigned char * data,int len);
int serial_read(unsigned char * data,int len);
int serial_read_once(unsigned char * data,int len);
int serial_flush(unsigned char LineBit);
//int serial_write_buff(unsigned char page,unsigned char col,unsigned char dat);
int serial_write_buff(unsigned int page,unsigned int col,unsigned int dat);
int serial_buff_init();
int get_hmi_version(unsigned char *data, int len);
int serial_buff_black();
int serial_buff_init();
#endif
+13
View File
@@ -0,0 +1,13 @@
#ifndef _SHAM_H_
#define _SHAM_H_
int InitKeyCard(int semid);
int initsem(int *semid, key_t semkey);
int V(int Semid, int flag);
int P(int Semid, int flag, int senconds);
int CreateIpc();
int DeleteIpc();
int get_efd_lock(void);
int put_efd_lock(void);
#endif
+13
View File
@@ -0,0 +1,13 @@
#ifndef __USB_H__
#define __USB_H__
int usbWrite(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut);
int usbRead(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut);
#endif
+15
View File
@@ -0,0 +1,15 @@
#ifndef _USB_OPERATE_H_
#define _USB_OPERATE_H_
#include "define.h"
int OpenUDisk(int id, int * fd);
int scsi_inquiry(int sg_fd, unsigned char * pData);
int CD_SendPackage(int sg_fd, TPCCmd tPCCmd, unsigned char * pData);
int CD_RecvPackage(int sg_fd, unsigned char * pData, unsigned int * lRecvLen);
int CloseUsb(int fd);
int USBRead(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut);
int USBWrite(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut);
#endif
+15
View File
@@ -0,0 +1,15 @@
#ifndef _UTILS_H
#define _UTILS_H
#include "public.h"
int killprg(char *prgname,int sig);
int CreateIdFile(char* pszProgName);
void stopPrg(char* pszProgName);
int TestPrgStat(char* pszProgName);
int DaemonStart();
int ScanDir(const char *pszDirName, struct dirent ***pstruDirentList);
#endif
+29
View File
@@ -0,0 +1,29 @@
#生成目标
OBJ :=ggdisplay
OUTPATH :=./OBJ
SRC_PATH :=./API\
./USER
HEAD_PATH :=./INCLUDE\
./USER
#找到所有.c文件
SRC_FILE :=$(foreach tmp,$(SRC_PATH),$(wildcard $(tmp)/*.c))
#把所有.c文件换成.o文件
SRC_OFILE :=$(patsubst %.c,%.o,$(SRC_FILE))
OFILE :=$(notdir $(SRC_OFILE))
DIR_OFILE :=$(patsubst %,$(OUTPATH)/%,$(OFILE))
#包含头文件路径
INCLUDE :=$(patsubst %,-I %,$(HEAD_PATH))
VPATH := $(SRC_PATH)
$(OBJ):$(DIR_OFILE)
gcc $^ -o $@
$(DIR_OFILE):$(OUTPATH)/%.o:%.c
gcc $(INCLUDE) -c $< -o $@
clean:
rm ggdisplay $(OUTPATH)/*.o
echo:
@echo "OUTPATH"== $(OUTPATH)
+1022
View File
File diff suppressed because it is too large Load Diff
+179
View File
@@ -0,0 +1,179 @@
__attribute__((section(".data"))) unsigned char ASC16_Begin=0x00;
/* 8*16�������� */
__attribute__((section(".data"))) unsigned char ASC16_Num[10][16]=
{
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}, /* '0' */
{0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00}, /* '1' */
{0x30,0x18,0x08,0x08,0x88,0xF8,0x70,0x00,0x18,0x1C,0x16,0x13,0x11,0x18,0x18,0x00}, /* '2' */
{0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00}, /* '3' */
{0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24}, /* '4' */
{0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00}, /* '5' */
{0xC0,0xE0,0xB0,0x98,0x88,0x88,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x1F,0x0F,0x00}, /* '6' */
{0x18,0x18,0x08,0x88,0xC8,0x78,0x38,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00}, /* '7' */
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}, /* '8' */
{0x70,0xF8,0x88,0x88,0x88,0xF8,0xF0,0x00,0x00,0x10,0x10,0x18,0x0C,0x07,0x03,0x00} /* '9' */
};
/* 8*16�����Ǻ�*/
__attribute__((section(".data"))) unsigned char ASC16_Star[16]={0x20,0x80,0xC0,0xE0,0xC0,0x80,0x20,0x00,0x09,0x03,0x07,0x0F,0x07,0x03,0x09,0x00};
/*8*16����б�ܷ���*/
__attribute__((section(".data"))) unsigned char ASC16_Slash[16]={0x00,0x00,0x00,0x80,0x70,0x08,0x00,0x00,0x00,0x10,0x0E,0x01,0x00,0x00,0x00,0x00};
/* 8*16��������*/
__attribute__((section(".data"))) unsigned char ASC16_Dot[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00};
/* 8*16���󶺺�*/
__attribute__((section(".data"))) unsigned char ASC16_Comma[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1C,0x0C,0x00,0x00,0x00};
/* 8*16����ո�*/
__attribute__((section(".data"))) unsigned char ASC16_Space[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/* 8*16�������*/
__attribute__((section(".data"))) unsigned char ASC16_Sub[16]={0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/* 8*16������*/
__attribute__((section(".data"))) unsigned char ASC16_across[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
/* 8*16����ʵ�����ͷ*/
__attribute__((section(".data"))) unsigned char ASC16_Arrow[16]={0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F};
/* 8*16������ں�*/
__attribute__((section(".data"))) unsigned char ASC16_Above[16]={0x00,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x18,0x0C,0x06,0x03,0x01,0x00,0x00};
/* 8*16����С�ں�*/
__attribute__((section(".data"))) unsigned char ASC16_Below[16]={0x00,0x80,0xC0,0x60,0x30,0x18,0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18,0x00,0x00};
/* 8*16����̾��*/
__attribute__((section(".data"))) unsigned char ASC16_Claim[16]={0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00};
/* 8*16����ð��*/
__attribute__((section(".data"))) unsigned char ASC16_Colon[16]={0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00};
/* 8*16����������*/
__attribute__((section(".data"))) unsigned char ASC16_LBrack[16]={0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x0F,0x1F,0x30,0x20,0x00,0x00};
/* 8*16����������*/
__attribute__((section(".data"))) unsigned char ASC16_RBrack[16]={0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x20,0x30,0x1F,0x0F,0x00,0x00};
/* 8*16����Թ�*/
//__attribute__((section(".data"))) unsigned char ASC16_Right[16]={0x80,0x00,0x00,0x00,0x80,0xC0,0x60,0x00,0x01,0x03,0x06,0x03,0x01,0x00,0x00,0x00};
/* 8*16�����ʺ�*/
__attribute__((section(".data"))) unsigned char ASC16_What[16]={0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00};
/* 8*16����������*/
__attribute__((section(".data"))) unsigned char ASC16_LFBrack[16]={0x00,0x00,0x00,0xFC,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x00,0x00};
/* 8*16�����ҷ�����*/
__attribute__((section(".data"))) unsigned char ASC16_RFBrack[16]={0x00,0x00,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x00,0x00,0x00};
/*8*16���� I */
__attribute__((section(".data"))) unsigned char ASC16_IChar[16]={0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
/*8*16���� P */
__attribute__((section(".data"))) unsigned char ASC16_PChar[16]={0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00};
/*8*16����D*/
__attribute__((section(".data"))) unsigned char ASC16_DChar[16]={0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00};
/*8*16����N*/
__attribute__((section(".data"))) unsigned char ASC16_NChar[16]={0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00};
/*8*16����S*/
__attribute__((section(".data"))) unsigned char ASC16_SChar[16]={0x00,0x60,0x90,0x10,0x10,0x30,0x00,0x00,0x00,0x18,0x10,0x11,0x11,0x0E,0x00,0x00};
/*8*16����T*/
__attribute__((section(".data"))) unsigned char ASC16_TChar[16]={0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00};
/*8*16����a*/
__attribute__((section(".data"))) unsigned char ASC16_aChar[16]={0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20};
/*8*16����g*/
__attribute__((section(".data"))) unsigned char ASC16_gChar[16]={0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00};
/*8*16����x*/
__attribute__((section(".data"))) unsigned char ASC16_xChar[16]={0x00,0x40,0xC0,0x00,0x00,0xC0,0x40,0x00,0x00,0x10,0x18,0x07,0x07,0x18,0x10,0x00};
/*8*16����A*/
__attribute__((section(".data"))) unsigned char ASC16_A_Char[16]={0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20};//{0x00,0x00,0xC0,0x30,0xC0,0x00,0x00,0x00,0x10,0x1C,0x13,0x02,0x13,0x1C,0x10,0x00};
/*8*16����B*/
__attribute__((section(".data"))) unsigned char ASC16_BChar[16]={0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00};
/*8*16����B*/
__attribute__((section(".data"))) unsigned char ASC16_B_Char[16]={0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00};
/*8*16����C*/
__attribute__((section(".data"))) unsigned char ASC16_CChar[16]={0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0x00,0x0F,0x10,0x20,0x20,0x20,0x20,0x10,0x00};
/*8*16����D*/
__attribute__((section(".data"))) unsigned char ASC16_D_Char[16]={0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00};
/*8*16����E*/
__attribute__((section(".data"))) unsigned char ASC16_EChar[16]={0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x20,0x00};
/*8*16����E*/
__attribute__((section(".data"))) unsigned char ASC16_E_Char[16]={0x00,0xFC,0x84,0x84,0x84,0x84,0x04,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x10,0x00};
/*8*16����F*/
__attribute__((section(".data"))) unsigned char ASC16_F_Char[16]={0x04,0xFC,0x84,0x84,0xE4,0x04,0x04,0x00,0x10,0x1F,0x10,0x10,0x03,0x00,0x00,0x00};
/*8*16����U*/
__attribute__((section(".data"))) unsigned char ASC16_U_Char[16]={0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00};
/*8*16����K*/
__attribute__((section(".data"))) unsigned char ASC16_K_Char[16]={0x00,0x10,0xF0,0x90,0x40,0x30,0x10,0x00,0x00,0x10,0x1F,0x11,0x03,0x1C,0x10,0x00};
/*8*16����M*/
__attribute__((section(".data"))) unsigned char ASC16_M_Char[16]={0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00};
/*8*16����G*/
__attribute__((section(".data"))) unsigned char ASC16_G_Char[16]={0xE0,0x18,0x04,0x04,0x04,0x1C,0x00,0x00,0x03,0x0C,0x10,0x10,0x11,0x0F,0x01,0x00};
/*8*16����W*/
__attribute__((section(".data"))) unsigned char ASC16_WChar[16]={0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00};
/*8*16����O*/
__attribute__((section(".data"))) unsigned char ASC16_OChar[16]={0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00};
/*8*16����K*/
__attribute__((section(".data"))) unsigned char ASC16_KChar[16]={0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00};
/*8*16����_*/
__attribute__((section(".data"))) unsigned char ASC16_DnLine[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00};
/*8*16����X*/
__attribute__((section(".data"))) unsigned char ASC16_X_Char[16]={0x08,0x18,0x68,0x80,0x68,0x18,0x08,0x00,0x10,0x18,0x16,0x01,0x16,0x18,0x10,0x00};
/*8*16����Y*/
__attribute__((section(".data"))) unsigned char ASC16_Y_Char[16]={0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00};
/*8*16����Z*/
__attribute__((section(".data"))) unsigned char ASC16_Z_Char[16]={0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00};
/*8*16����R*/
__attribute__((section(".data"))) unsigned char ASC16_R_Char[16]={0x10,0xF0,0x90,0x90,0x90,0x60,0x00,0x00,0x10,0x1F,0x10,0x01,0x06,0x18,0x10,0x00};
/*8*16����L*/
__attribute__((section(".data"))) unsigned char ASC16_L_Char[16]={0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00};
/* *8*16����'N' */
__attribute__((section(".data"))) unsigned char ASC16_N_Char[16]={0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00};//{0x13,0xc7,0x20,0x13,0xc1,0x00,0x41,0xf4,0x03,0x31,0xf0,0x00,0x00,0x00,0x00,0x00};
/* *8*16����'S' */
__attribute__((section(".data"))) unsigned char ASC16_S_Char[16]={0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00};
/* *8*16����'J' */
__attribute__((section(".data"))) unsigned char ASC16_J_Char[16]={0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x40,0x80,0x80,0x80,0x7F,0x00,0x00,0x00};
/* *8*16����'H' */
__attribute__((section(".data"))) unsigned char ASC16_H_Char[16]={0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20};
/* *8*16����'r' */
__attribute__((section(".data"))) unsigned char ASC16_r_Char[16]={0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x20,0x3F,0x21,0x20,0x00,0x01,0x00};
/* *8*16����'d' */
__attribute__((section(".data"))) unsigned char ASC16_d_Char[16]={0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20};
/* 'V' */
__attribute__((section(".data"))) unsigned char ASC16_V_Char[16]={0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00};
/* *8*16����'o' */
__attribute__((section(".data"))) unsigned char ASC16_o_Char[16]={0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00};
/* *8*16����'m' */
__attribute__((section(".data"))) unsigned char ASC16_m_Char[16]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F};
/* *8*16����'a' */
__attribute__((section(".data"))) unsigned char ASC16_a_Char[16]={0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00};
/* *8*16����'l' */
__attribute__((section(".data"))) unsigned char ASC16_l_Char[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
/* *8*16����'e' */
__attribute__((section(".data"))) unsigned char ASC16_e_Char[16]={0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00};
/* *8*16����'n' */
__attribute__((section(".data"))) unsigned char ASC16_n_Char[16]={0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20};
/* *8*16����'t' */
__attribute__((section(".data"))) unsigned char ASC16_t_Char[16]={0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00};
/* *8*16����'y' */
__attribute__((section(".data"))) unsigned char ASC16_y_Char[16]={0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00};
/* 'S' */
__attribute__((section(".data"))) unsigned char ASC12_S_Char[16]={0x00,0x0E,0x11,0x10,0x10,0x10,0x1C,0x00,0x00,0x1C,0x04,0xC4,0x38,0x00,0x00,0x00};
/* 'Z' */
__attribute__((section(".data"))) unsigned char ASC12_Z_Char[16]={0x00,0x00,0x00,0x7E,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x42,0x42,0xFC,0x00,0x00};
/* 'M' */
__attribute__((section(".data"))) unsigned char ASC12_M_Char[16]={0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x50,0x50,0x00,0x00,0x00,0x00};
/* '0' */
__attribute__((section(".data"))) unsigned char ASC12_0_Char[16]={0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x50,0x50,0x00,0x00,0x00,0x00};
/* '4' */
__attribute__((section(".data"))) unsigned char ASC12_4_Char[16]={0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x50,0x50,0x00,0x00,0x00,0x00};
/* '-' */
__attribute__((section(".data"))) unsigned char ASC12_sub_Char[16]={0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x50,0x50,0x00,0x00,0x00,0x00};
/* 'B' */
__attribute__((section(".data"))) unsigned char ASC12_B_Char[16]={0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x50,0x50,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC16_End=0xFF;
+129
View File
@@ -0,0 +1,129 @@
/* 6*8点阵数字*/
unsigned char ASC8_Num[16][6]=
{
{0x3E,0x41,0x41,0x41,0x3E,0x00}, /*'0'*/
{0x00,0x42,0x7F,0x40,0x00,0x00}, /*'1'*/
{0x62,0x51,0x49,0x49,0x66,0x00}, /*'2'*/
{0x22,0x49,0x49,0x49,0x36,0x00}, /*'3'*/
{0x18,0x14,0x12,0x7F,0x10,0x00}, /*'4'*/
{0x2F,0x49,0x49,0x49,0x31,0x00}, /*'5'*/
{0x3C,0x4A,0x49,0x49,0x30,0x00}, /*'6'*/
{0x03,0x71,0x09,0x05,0x03,0x00}, /*'7'*/
{0x36,0x49,0x49,0x49,0x36,0x00}, /*'8'*/
{0x06,0x49,0x49,0x29,0x1E,0x00}, /*'9'*/
{0x60,0x1C,0x0B,0x1C,0x60,0x00}, /*'A'*/
{0x00,0x7F,0x49,0x49,0x36,0x00}, /*'B'*/
{0x1C,0x22,0x41,0x41,0x22,0x00}, /*'C'*/
{0x7F,0x41,0x41,0x22,0x1C,0x00}, /*'D'*/
{0x7F,0x49,0x49,0x49,0x41,0x00}, /*'E'*/
{0x7F,0x09,0x09,0x09,0x01,0x00} /*'F'*/
};
/* 6*8点阵小数点*/
unsigned char ASC8_Dot[6]={0x00,0x60,0x60,0x00,0x00,0x00};
/* 6*8点阵逗号*/
unsigned char ASC8_Comma[6]={0x00,0x40,0x30,0x10,0x00,0x00};
/* 6*8点阵空格*/
unsigned char ASC8_Space[6]={0x00,0x00,0x00,0x00,0x00,0x00};
/* 6*8点阵减号*/
//unsigned char ASC8_Sub[6]={0x08,0x08,0x08,0x08,0x08,0x00};
/* 6*8点阵星号*/
unsigned char ASC8_Star[6]={0x2A,0x1C,0x3E,0x1C,0x2A,0x00};
/* 6*8点阵下划线*/
unsigned char ASC8_Line[6]={0x80,0x80,0x80,0x80,0x80,0x00};
/* 6*8点阵冒号*/
unsigned char ASC8_Colon[6]={0x00,0x00,0x66,0x66,0x00,0x00};
/* 6*8点阵对勾*/
//unsigned char ASC8_Right[6]={0x10,0x20,0x10,0x08,0x04,0x02};
/* 6*8点阵叉号*/
//unsigned char ASC8_Cross[6]={0x42,0x24,0x18,0x18,0x24,0x42};
/* 6*8点阵斜线*/
unsigned char ASC8_Bias[6]={0x40,0x20,0x10,0x08,0x04,0x02};
__attribute__((section(".data"))) unsigned char ASC8_a[8]={0x06,0x60,0x54,0x54,0x54,0x7C,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_b[8]={0x06,0x7F,0x48,0x48,0x48,0x30,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_c[8]={0x05,0x38,0x44,0x44,0x44,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_d[8]={0x06,0x30,0x48,0x48,0x48,0x7F,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_e[8]={0x06,0x38,0x54,0x54,0x54,0x58,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_f[8]={0x04,0x08,0xFF,0x09,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_g[8]={0x06,0x98,0xA4,0xA4,0xA4,0x78,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_h[8]={0x05,0x7F,0x08,0x08,0x78,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_i[8]={0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_j[8]={0x03,0x80,0xFA,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_k[8]={0x06,0x7F,0x10,0x28,0x48,0x44,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_l[8]={0x03,0x7F,0x40,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_m[8]={0x06,0x7C,0x04,0x78,0x04,0x7C,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_n[8]={0x05,0x7C,0x04,0x04,0x7C,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_o[8]={0x06,0x38,0x44,0x44,0x44,0x38,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_p[8]={0x06,0xFC,0x24,0x24,0x24,0x18,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_q[8]={0x06,0x18,0x24,0x24,0x24,0xFC,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_r[8]={0x04,0x7C,0x08,0x04,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_s[8]={0x05,0x48,0x54,0x54,0x64,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_t[8]={0x04,0x04,0x7E,0x44,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_u[8]={0x05,0x7C,0x40,0x40,0x7C,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_v[8]={0x06,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_w[8]={0x06,0x3C,0x60,0x1C,0x60,0x3C,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_x[8]={0x06,0x44,0x28,0x10,0x28,0x44,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_y[8]={0x05,0x9C,0xA0,0x60,0x1C,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_z[8]={0x06,0x44,0x64,0x54,0x4C,0x44,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_space[8]={0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//逗号
__attribute__((section(".data"))) unsigned char ASC8_comma[8]={0x04,0x80,0x60,0x00,0x00,0x00,0x00,0x00};
//句号
__attribute__((section(".data"))) unsigned char ASC8_ponit[8]={0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x00};
//冒号
__attribute__((section(".data"))) unsigned char ASC8_colon[8]={0x04,0x00,0x24,0x00,0x00,0x00,0x00,0x00};
//感叹号
__attribute__((section(".data"))) unsigned char ASC8_exclam[8]={0x04,0x00,0x5E,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_slope[8]={0x04,0x80,0x70,0x1C,0x03,0x00,0x00,0x00};
//下划线
__attribute__((section(".data"))) unsigned char ASC8_down_line[8]={0x06,0x80,0x80,0x80,0x80,0x80,0x00,0x00};
//分号
__attribute__((section(".data"))) unsigned char ASC8_semicolon[8]={0x04,0x80,0x50,0x00,0x00,0x00,0x00,0x00};
//单引号
__attribute__((section(".data"))) unsigned char ASC8_sin_quotes[8]={0x03,0x08,0x0E,0x00,0x00,0x00,0x00,0x00};
//横线
__attribute__((section(".data"))) unsigned char ASC8_horiz[8]={0x04,0x08,0x08,0x08,0x08,0x00,0x00,0x00};
//横上线
__attribute__((section(".data"))) unsigned char ASC8_horiz_up[8]={0x04,0x08,0x0F,0x08,0x08,0x00,0x00,0x00};
//横下线
__attribute__((section(".data"))) unsigned char ASC8_horiz_down[8]={0x04,0x08,0xF8,0x08,0x08,0x00,0x00,0x00};
//竖线
__attribute__((section(".data"))) unsigned char ASC8_vert[8]={0x04,0x00,0xFF,0x00,0x00,0x00,0x00,0x00};
//竖左线
__attribute__((section(".data"))) unsigned char ASC8_vert_right[8]={0x04,0x08,0xFF,0x00,0x00,0x00,0x00,0x00};
//竖右线
__attribute__((section(".data"))) unsigned char ASC8_vert_left[8]={0x04,0x00,0xFF,0x08,0x08,0x00,0x00,0x00};
//十字线
__attribute__((section(".data"))) unsigned char ASC8_across[8]={0x04,0x08,0xFF,0x08,0x08,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_lefttop_corner[8]={0x04,0x00,0xF8,0x08,0x08,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_righttop_corner[8]={0x04,0x08,0xF8,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_leftbottom_corner[8]={0x04,0x00,0x0F,0x08,0x08,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_rightbottom_corner[8]={0x04,0x08,0x0F,0x00,0x00,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_0[8]={0x06,0x7E,0x81,0x81,0x81,0x7E,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_1[8]={0x06,0x00,0x81,0xFF,0x80,0x00,0x00,0x00};
//__attribute__((section(".data"))) unsigned char ASC8_2[8]={0x06,0xC2,0xA1,0x91,0x8E,0x00,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_2[8]={0x06,0xC2,0xA1,0x91,0x89,0x86,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_3[8]={0x06,0x42,0x89,0x89,0x89,0x76,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_4[8]={0x06,0x38,0x24,0x22,0xFF,0x20,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_5[8]={0x06,0x4F,0x89,0x89,0x89,0x70,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_6[8]={0x06,0x7E,0x89,0x89,0x89,0x72,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_7[8]={0x06,0x01,0x81,0x61,0x19,0x07,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_8[8]={0x06,0x76,0x89,0x89,0x89,0x76,0x00,0x00};
__attribute__((section(".data"))) unsigned char ASC8_9[8]={0x06,0x4E,0x91,0x91,0x91,0x7E,0x00,0x00};
+130
View File
@@ -0,0 +1,130 @@
/***
* @文件名称: ctranscode.c
* @系统名称: 公共库
* @模块名称: 底层函数库
* @功能说明: 编码转换函数
* @当前版本: 1.0.0
* @修改说明: 创建文件
*/
#include "public.h"
#include "define.h"
//static BYTE szHexByte[] =
//{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F'};
int Table_ASC_HEX[]={
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
};
const char HexToAsc1[]="0123456789ABCDEF";
void Byte2String(int len, unsigned char *InBuf, unsigned char *OutBuf)
{
for(; len>0; len--)
{
(*OutBuf++) = HexToAsc1[((*InBuf)>>4)&0xf];
(*OutBuf++) = HexToAsc1[(*InBuf++)&0xf];
}
}
void String2Byte(int len, unsigned char *InBuf, unsigned char *OutBuf)
{
for(; len>0; len-=2, InBuf+=2)
{
(*OutBuf++) = (Table_ASC_HEX[(*InBuf)]<<4)|Table_ASC_HEX[*(InBuf+1)];
}
}
void hextoasc(unsigned char *asc,unsigned char *hex,int len)
{
int i;
int ch;
for(i=0;i<len;i++)
{
ch=hex[i]>>4;
if(ch>=0&&ch<=9)
{
asc[i*2]=ch+'0';
}
if(ch>=0xA&&ch<=0xF)
{
asc[i*2]=ch-0xa+'A';
}
ch=hex[i]&0x0F;
if(ch>=0&&ch<=9)
{
asc[i*2+1]=ch+'0';
}
if(ch>=0xA&&ch<=0xF)
{
asc[i*2+1]=ch-0xa+'A';
}
}
}
void asctohex(unsigned char *hex,unsigned char *asc,int len)
{
int i;
unsigned char ch;
for(i=0;i<len;i++)
{
ch=asc[i];
if(ch>='0'&&ch<='9')
{
ch-='0';
}
if(ch>='a'&&ch<='f')
{
ch=ch-'a';
ch=ch+10;
}
if(ch>='A'&&ch<='F')
{
ch=ch-'A';
ch=ch+10;
}
if(i%2==0)
{
hex[i/2]=ch<<4;
}else
{
hex[i/2]=hex[i/2]|ch;
}
}
}
void asctoebcd(unsigned char *ebcd,unsigned char *asc,int len)
{
int i;
for(i=0;i<len;i++)
{
if((asc[i]>='0') && (asc[i]<='9'))
ebcd[i]=asc[i]-'0' + 0xF0;
if((asc[i]>='A') && (asc[i]<='F'))
ebcd[i]=asc[i]-'A' + 0xC1;
if((asc[i]>='a') && (asc[i]<='f'))
ebcd[i]=asc[i]-'a' + 0xC1;
}
}
+65
View File
@@ -0,0 +1,65 @@
unsigned char Frame; //画面号
unsigned int MenuItem; //光标所在菜单项
unsigned int FreshItem = 0;
int card_flag = 0x00;
unsigned char TO_ADMIN_OR_MOR_FLAG; //初始化后,进入管理程序或编核押程序标志 2串口服务1 管理程序 0 编核押
unsigned char ADMIN_LOCATE_FLAG; //安控员登录定位标志 0:安控员一登录界面 1:安控员二登录界面 2:管理菜单管理员登录界面
unsigned char MANAGE_UMAKE_FLAG; //管理员盾制作标志0:安控员一制作界面1:安控员二制作界面3:安控员三制作界面
unsigned char DEBLOCK_FLAG; //0;IC卡解锁1;U盾解锁
unsigned char UKEY_MAKE_FLAG; //管理员盾制作标志0:制作一级管理员盾1;制作二级管理员盾2;制作三级管理员盾3;制作密钥备份盾4;制作密钥发行盾5;发行卡制作
unsigned char SUPPER_UMAKE_FLAG; // 管理员盾制作标志 0 : 超级管理员 1: 非超级管理员( 针对超级管理员,需要插卡录入 )
unsigned char UKEY_OPERATE_FLAG; //0;U盾导出对称密钥分量1;U盾分量合成对称密钥2;U盾导出数字信封3;U盾导入数字信封
unsigned char PWD_CHANGE_FLAG; //0:IC卡口令1:IC卡管理口令 2:U盾口令 3:U盾管理口令
unsigned char NETLOGIN_FLAG; //网络服务登录1:普通交易登录2:授权状态登录
unsigned char LMK_RECOVER_FLAG; //恢复主密钥定位标记1:恢复分量一2:恢复分量二3:恢复分量三
unsigned char LMK_BAK_FLAG; //备份主密钥定位标记1:备份分量一2:备份分量二3:备份分量三
unsigned char LMK_GENERATE_FLAG; //产生主密钥方式1:新生成2:分量恢复
unsigned char LMK_FLAG; //判断LMK 是否正常0:正常1:不正常
unsigned char MAKE_OPR_FLAG; //制作密钥管理员1:密钥管理员一2:密钥管理员二
unsigned char AUTHORIZATION_LOGIN; //网络交易授权状态1:授权登录0:配置管理员登录
unsigned char NetService_Change; //交易状态切换0,非切换状态1,普通到授权,2,授权到普通
unsigned char cmp_combine;//对比错误
unsigned char MenuItem_num; //返回到上一帧菜单项被选中号,优先级高
unsigned char EXIT_Frame; //返回到上一帧界面号 比Function优先级高
unsigned char EXIT_Frame_Flag[8]; //存放一个功能菜单的EXIT_Frame
unsigned char MenuItem_num_Flag[8]; //存放一个功能菜单的MenuItem_num 返回到上一帧菜单项被选中号
unsigned char NETWARE_NUM; //网卡号
unsigned char XTZMY_Function_Num; //区分是第一次开机生成系统主密钥 0 /管理菜单选择生成系统主密钥 1
unsigned char Store_Card_Num; //备份下级行密钥的IC卡编号 默认为1
unsigned char TIMEOUT; //串口数据传输超时标志位 TIMEOUT=1表示超时
unsigned int TIMENUM_NUM; //超时时间倍数计数
unsigned int Timenum; //超时时间倍数计数
unsigned char INPUT_OR_OUTPUT_KEY_BIT; //导入或导出的密钥位数 2:两位 3:三位
int ExData; //全局变量,单字节共享时用
int totalnum = 0;
unsigned int QueryCnt,QueryPtr,DispAddr;
unsigned int P_Flag= 0 ;
unsigned char LEDSTATE ;
//unsigned char *Buffer[22]; //用户行显示内容的指针全局变量
unsigned char *Buffer[44]; //用户行显示内容的指针全局变量
unsigned char DataTmp[256] = {0x00}; //全局变量,多字节共享unsigned char Buf[256] = {0x00};
unsigned char SynBuf[80] = {0x00};
unsigned char inbuf[20] = {0x00};
unsigned char Buf[512] = {0x00};
unsigned char Int_flag;
unsigned char func_3s_flag = 0x00;
unsigned char keybuff[20] = {0x00};
int bufindex = 0;
int AllKeyLen = 0;
unsigned char *g_key_buff;
unsigned char power;
unsigned char NUM_SERIER_REV;
int SerialPort_PID;
int PCfd =-1;
unsigned char IC_Copy_tmp[12*1024] ={0x00};
char IC_Copy_role[17]={0x00};
char IC_Copy_roleLen = 0;
+22
View File
@@ -0,0 +1,22 @@
#include "define.h"
int main(int argc, char *argv[])
{
int rv;
rv = serial_open(115200);
if (rv < 0)
{
printf("[SRL] Open Serial Err");
sleep(1);
exit(0);
}
printf("Open Serial Success\n");
PrintFormatStr(1, 15, STR_QMYQFWQ, 7, NORMAL);
PrintFormatStr(3, 25, STR_SYD1888, 9, NORMAL);
PrintFormatStr(5, 40, STR_V300, 5, NORMAL);
buffer_flush(0xFF);
return 0;
}
+3430
View File
File diff suppressed because it is too large Load Diff
+1612
View File
File diff suppressed because it is too large Load Diff
+498
View File
@@ -0,0 +1,498 @@
#include "global.h"
#include "error_no.h"
#include "usboperate.h"
#include "define.h"
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
int icdev = -1;
static unsigned char serial_buf[4096];
//static unsigned char serial_buf[1030];
unsigned char Display_Stx[4]= {0x55,0xAA,0x88,0x66};
unsigned char CleanScr_Stx[4]= {0x55,0xAA,0x66,0x88};
int serial_buff_init()
{
memset(serial_buf,0,1030);
return 0;
}
int serial_buff_black()
{
memset(serial_buf,0xff,1030);
return 0;
}
//int serial_write_buff(unsigned char page,unsigned char col,unsigned char dat)
int serial_write_buff(unsigned int page,unsigned int col,unsigned int dat)
{
if(page<0||page>7)
return -1;
if(col<0||col>127)
return -1;
unsigned int pos=0;
/* modify for the header by mukesong from 3 to 4 */
pos=page*128+col+4;
serial_buf[pos]=dat;
return 0;
}
/************************************************************************************
* serial_open [history:15:06:12,23-06-2009]
* Discription : -无阻塞模式打开串口: 数据位8;停止位1;效应位无;流控制无 ;DTR无; RTS无;
* Parameter : - baud_rate:波特率
* Return : - 文件名描述符
************************************************************************************/
void icdev_get(char *dev)
{
FILE * FP = NULL;
char cmd[512];
sprintf(cmd,"sg_map -i | grep SUNYARD | awk '{ print $2}'");
FP = popen(cmd,"r");
int num = fread(dev,8,1,FP);
if(num == -1)
printf("fread error\n");
pclose(FP);
}
#if 0
int serial_open(int baud_rate)
{
char dev_path[12];
char outbuf[128];
int k;
sprintf(dev_path, "/dev/sdg");
if((icdev = open(dev_path, O_RDONLY)) < 0)
{
printf(dev_path);
printf(" open fail ret:%d\n",icdev);
return 0;
}
/* It is prudent to check we have a sg device by trying an ioctl */
if ((ioctl(icdev, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000))
{
printf("%s is not an sg device, or old sg driver\n", dev_path);
close(icdev);
return 0;
}
if(scsi_inquiry(icdev, (unsigned char *)outbuf) == 0)
{
if(memcmp(outbuf + 8, "SUNYARD", 6) == 0) //find ukey
{
// *fd = icdev;
return 1;
}
else
{
close(icdev);
return 0;
}
}
close(icdev);
return 0;
}
#else
int serial_open(int baud_rate)
{
char dev[20];
icdev_get(dev);
dev[8]='\0';
if((icdev=open(dev,O_RDONLY))<0)
{
printf("device open err\n");
return -1;
}
return 0;
}
#endif
/************************************************************************************
* serial_write [history:16:12:12,22-06-2009]
* Discription : - 写接口
* Parameter : -
* Return : -
************************************************************************************/
int serial_write(unsigned char * data,int len)
{
/*
int rv;
unsigned char buff[2048];
read(FD,buff,sizeof(buff));//clear the data cache
//PrintHex("write",data,len);
rv=write(FD,data,len);
return rv;
*/
printf("serial write ");
close(icdev);
return 0;
}
/************************************************************************************
* serial_read [history:16:12:48,22-06-2009]
* Discription : - 读接口
* Parameter : -
* Return : -
************************************************************************************/
int serial_read(unsigned char * data,int len)
{
//int rv = 0,remain;
//int state;
int ret,pos=0;
//int i,j;
unsigned char tmpstr[2048];
unsigned char tmprstr[2048];
unsigned char bufw[4096];
unsigned char bufr[4096];
unsigned char head[4]= {0x55,0xaa,0x88,0x66};
//unsigned char tmp[6] = {0x00};
memset(data,0,len);
//add by louyunchuan 20130107
// printf("begin to usbicwrite\n");
// printf("end open shebei \n");
do
{
pos = 0;
memset(data,0,len);
memset(bufw,0,sizeof(bufw));
memset(bufr,0,sizeof(bufr));
memset(tmpstr,0,sizeof(tmpstr));
memset(tmprstr,0,sizeof(tmprstr));
tmpstr[pos++]=0x00; //SEQ
tmpstr[pos++]=0x47;//0x47; //TAG
tmpstr[pos++]=0; //LEN
tmpstr[pos++]=0;//0x00; //LEN
Check_LRC(tmpstr,pos);
pos+=2;
memcpy(bufw,head,4);
// hextoasc(bufw+4,tmpstr,pos);
memcpy(bufw+4,tmpstr,pos);
bufw[pos+4]=3;
// PrintHex("wdata",bufw,64);
// PrintHex("write data1",bufw,64);
ret = USBWrite(icdev,bufw,pos+5,SCSI_TIMEOUT);
if(ret != 0)
{
printf("write hid failed!\n");
return IC_READ_ERR;
}
memset(bufr,0,sizeof(bufr));
// printf("retb2 = %d \n",ret);
ret = USBRead(icdev,bufr,len+12,SCSI_TIMEOUT);//sizeof(bufr));
// PrintHex("rdata",bufr,64);
if(ret != 0)
{
printf("read hid failed!\n");
// close(icdev);
return IC_READ_ERR;
}
// printf("retb3 = %d \n",ret);
// asctohex(tmprstr,bufr+4,64-5);
// printf("data of write:\t%s\n",bufw+4);
// printf("A!\n");
if(bufr[8] == 0x00 && bufr[5] == 0x47)
{
// close(icdev);
data[0]=0x55;
data[1]=0xAA;
data[2]=0x88;
data[3] = 0x66;
data[4] = 0x02;
memcpy(data+5,bufr+9,1);
return ret;
}
// printf("waitkeyin\n");
}
while(1);
return 0;
}
int serial_read_once(unsigned char * data,int len)
{
//int rv,timeout;
//int state;
int ret,pos=0;
//int i,j;
unsigned char tmpstr[2048];
unsigned char tmprstr[2048];
unsigned char bufw[4096];
unsigned char bufr[4096];
unsigned char head[4]= {0x55,0xaa,0x88,0x66};
// sleep(1);
// do{
pos = 0;
memset(data,0,len);
memset(bufw,0,sizeof(bufw));
memset(bufr,0,sizeof(bufr));
memset(tmpstr,0,sizeof(tmpstr));
memset(tmprstr,0,sizeof(tmprstr));
tmpstr[pos++]=0x00; //SEQ
tmpstr[pos++]=0x47;//0x47; //TAG
tmpstr[pos++]=0; //LEN
tmpstr[pos++]=0;//0x00; //LEN
Check_LRC(tmpstr,pos);
pos+=2;
memcpy(bufw,head,4);
// hextoasc(bufw+4,tmpstr,pos);
memcpy(bufw+4,tmpstr,pos);
bufw[pos+4]=3;
// PrintHex("wdata",bufw,64);
// PrintHex("write data1",bufw,64);
ret = USBWrite(icdev,bufw,pos+5,SCSI_TIMEOUT);
if(ret != 0)
{
printf("write hid failed!\n");
// close(icdev);
return IC_WRITE_ERR;
}
memset(bufr,0,sizeof(bufr));
// printf("retb2 = %d \n",ret);
ret = USBRead(icdev,bufr,4096,SCSI_TIMEOUT);//sizeof(bufr));
// PrintHex("rdata",bufr,64);
if(ret!=0)
{
printf("read hid failed!\n");
// close(icdev);
return IC_READ_ERR;
}
// printf("retb3 = %d \n",ret);
// asctohex(tmprstr,bufr+4,64-5);
// printf("data of write:\t%s\n",bufw+4);
// printf("A!\n");
if(bufr[8] == 0x00 && bufr[5] == 0x47)
{
// close(icdev);
data[0]=0x55;
data[1]=0xAA;
data[2]=0x88;
data[3] = 0x66;
data[4] = 0x02;
memcpy(data+5,bufr+9,1);
return ret;
}
else if(bufr[8] == 0x00&& bufr[5] == 0x47)
{
//timeout--;
memset(data,0,len);
//continue;
}
else
{
// PrintHex("rdata",bufr,64);
// close(icdev);
memset(data,0,len);
return ret;
}
// timeout--;
//PrintHex("rec data is :", data, 6);
// }while(((data[0]!=0x55)||(data[1]!=0xAA)
// || (data[2] != 0x88) || (data[3] != 0x66) ||(data[4] != 0x02)));
//tcflush(FD, TCIFLUSH);
// close(icdev);
return 0;
}
/************************************************************************************
* serial_flush [history:16:12:12,22-06-2009]
* Discription : - 清空缓存接口
* Parameter : -
* Return : -
************************************************************************************/
int serial_flush(unsigned char LineBit)
{
int pos = 0, loop = 0;
//int rv = 0, remain = 0, inLoop = 0;
// int timeout, timeout1;
//UINT lrc = 0;
unsigned char rush[20] = {0x00}, line = 0;
unsigned char Send_buf[136] = {0X00};
//int fd;
unsigned char tmpstr[2048];
unsigned char tmprstr[2048];
unsigned char bufw[4096];
unsigned char bufr[4096];
unsigned char head[4]= {0x55,0xaa,0x88,0x66};
int ret;
//int i;
// int j;
memset(rush,0,10);
// timeout=9000000;
// timeout1=9000000;
memcpy(Send_buf, Display_Stx, 4);
for(loop=0; loop < 8; loop++)
{
pos =0;
if(0x01 == (LineBit>>loop &0x01) )
{
line = (unsigned char)loop;
memset(bufw,0,sizeof(bufw));
memset(tmpstr,0,sizeof(tmpstr));
memset(tmprstr,0,sizeof(tmprstr));
tmpstr[pos++]=0x00; //SEQ
tmpstr[pos++]=0x46;//0x46; //TAG
tmpstr[pos++]=133/256; //LEN
tmpstr[pos++]=133%256;//0x00; //LEN
if(0x04 == (LEDSTATE&0x04))
{
tmpstr[pos++]=0xF0;
}
else
{
tmpstr[pos++]=0x0F; //ADDR
}
tmpstr[pos++]=line; //ADDR
tmpstr[pos++]=0x00; //ADDR
tmpstr[pos++]=128/256;
tmpstr[pos++]=128%256;
memcpy(tmpstr + pos,serial_buf+loop*128 + 3,128);
pos = pos + 128;
Check_LRC(tmpstr,pos);
pos+=2;
memcpy(bufw,head,4);
memcpy(bufw+4,tmpstr,pos);
bufw[pos+4]=3;
ret = USBWrite(icdev,bufw,pos+5,SCSI_TIMEOUT);
if(ret != 0)
{
printf("write hid failed!\n");
return IC_NOT_EXIST;
}
memset(bufr,0,sizeof(bufr));
// j=0;
ret = USBRead(icdev,bufr,4096,SCSI_TIMEOUT);
if(ret!=0){
printf("read hid failed!\n");
return IC_READ_ERR;
}
if(bufr[8] == 0x00 && bufr[5] == 0x46){
;
}else{
printf("|%s|%s|%d| : the data return from USBRead is wrong !\n", __FILE__, __func__, __LINE__);
return ERR_SYSTEM;
}
}
}
return 0;
}
/******************************************************************************************
** Function name: make_Protocol_Package
** Descriptions: 数据组包
** input parameters: ucCmd:操作命令
pData:发送的数据
DataLen:发送的数据长度
** output parameters: pPackData:组包后的数据
packLen:组包后的数据长度
** Returned value:
** Created by: zheh.zhang
** Created date: 2022/8/5
**-----------------------------------------------------------------------------------------
** Modified by:
** Modified date:
******************************************************************************************/
void make_Protocol_Package(unsigned char ucCmd, unsigned char *pData, unsigned short usDataLen, unsigned char *pPackData, unsigned short *packLen)
{
unsigned char packageBuf[2048];
unsigned char Packagelen = 0;
unsigned char packageHead[4]= {0X55, 0XAA, 0X88, 0X66};
memcpy(packageBuf, packageHead, 4); /* 协议头 */
packageBuf[4] = 0x00; /* SEQ */
packageBuf[5] = ucCmd; /* CMD */
/* 数据长度 */
packageBuf[6] = usDataLen>>8;
packageBuf[7] = usDataLen&0xff;
/* 包数据 */
memcpy(packageBuf + 8, pData, usDataLen);
/* LRC校验码 */
Packagelen = usDataLen + 8;
Check_LRC(packageBuf+4, Packagelen - 4);
Packagelen += 2;
packageBuf[Packagelen++] = 0x03; /* 协议尾 */
*packLen = Packagelen;
memcpy(pPackData, packageBuf, Packagelen);
}
/******************************************************************************************
** Function name: get_hmi_version
** Descriptions: 获取液晶控制面板版本
** input parameters: len:buf的长度
** output parameters: data:返回的数据
** Returned value: none
** Created by: zheh.zhang
** Created date: 2022/9/28
**-----------------------------------------------------------------------------------------
** Modified by:
** Modified date:
******************************************************************************************/
int get_hmi_version(unsigned char *data, int len)
{
int ret;
unsigned int sendLen = 0;
unsigned int recvLen = 16;
unsigned char usbSendBuf[32] = {0};
unsigned char usbRecvBuf[32] = {0};
make_Protocol_Package(0x45, 0, 0, usbSendBuf, (unsigned short *)&sendLen);
// showhexbuf("CMD_KEY send", usbSendBuf, sendLen);
ret = USBWrite(icdev, usbSendBuf, sendLen, SCSI_TIMEOUT);
if(ret<0){
printf(" get_hmi_version write failed!\n");
return ret;
}
ret = USBRead(icdev, usbRecvBuf, recvLen, SCSI_TIMEOUT);
if(ret<0){
printf("get_hmi_version read failed! ret = %d \n",ret);
return ret;
}
// showhexbuf("CMD_KEY recv", usbRecvBuf, recvLen);
if(usbRecvBuf[8] == 0x00 && usbRecvBuf[5] == 0x45) {
data[0] = usbRecvBuf[9];
data[1] = usbRecvBuf[10];
return ret;
} else {
memset(data, 0, len);
}
return 0;
}
+175
View File
@@ -0,0 +1,175 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include "public.h"
#include "define.h"
#include "custom.h"
int msgid_recvq;
int msgid_sendq;
int msgid_print; //message queue to printer
int msgid_log; //message queue to log process
int msgid_fd;
int efd;
key_t SemKeyCard = 0x46B;//密码卡信号量键值
struDataPA *g_PA = NULL; // 20141104 nifei add
unsigned long long g_TradeCount = 0;
/*信号*/
int semid_KeyCard;//密码卡信号量
/*信号键*/
key_t SemHourKey=0x461;
key_t SemDayKey=0x462;
key_t SemCountKey=0x463;
key_t SemConnectionsKey=0x464;
key_t SemMsgInQueueCountKey=0x465;
key_t SemKeycountKey=0x466;
key_t SemTradeStatus=0x467;
key_t SemPrintErrorCode=0x468;
key_t SemThreadSwitch = 0x469;
key_t SemManageUser = 0x46A;
int _icdev; //IC卡读卡器
key_t _icdevKey = 0x570;
/*******初始化IC卡个数初始值*********/
int InitKeyCard(int semid)
{
return semctl(semid, 0, SETVAL, 1);
}
/* ------------------------------- 建立信号量 ----------------------------- */
int initsem(int *semid, key_t semkey)
{
int status = 0;
if ((*semid = semget(semkey, 1, IPC_CREAT | 0666)) == -1) /* 全局变量 */
{
perror("semget");
}
else
status = semctl(*semid, 0, SETVAL, 1);
if (*semid == -1 || status == -1)
{
return -1;
}
else
return 0;
}
/* ------------------------------- V 操作 ---------up-------------------------- */
int V(int Semid, int flag)
{
struct sembuf sops[1];
int rtn;
sops[0].sem_num = flag;
sops[0].sem_op = +1;
sops[0].sem_flg = SEM_UNDO;
rtn = semop(Semid, sops, 1);
if(rtn == -1)
{
printf("V error\n");
return -1;
}
return 0;
}
/* ------------------------------- P 操作 ------down----------------------------- */
int P(int Semid, int flag, int senconds)
{
struct sembuf sops[1];
int rtn;
sops[0].sem_num = flag;
sops[0].sem_op = -1;
sops[0].sem_flg = SEM_UNDO;
rtn=semop(Semid,sops,1);
if(rtn==-1)
{
printf("P error\n");
return -1;
}
return 0;
}
/* ------------------------ 建消息队列,共享内存,信号量 --------------------- */
int CreateIpc()
{
initsem(&_icdev,_icdevKey);
//访问密码卡信号量
initsem(&semid_KeyCard, SemKeyCard);
InitKeyCard(semid_KeyCard);
return 0;
}
/* ------------------ delete 消息队列,共享内存,信号量 ------------------- */
int DeleteIpc()
{
//struct shmid_ds shmds;
semctl(_icdev,_icdevKey,IPC_RMID, 0);
//访问密码卡信号量
semctl(semid_KeyCard, SemKeyCard, IPC_RMID, 0);
return 0;
}
/* ------------------------------- 建立消息队列 ----------------------------- */
int CreateMsgQueue(int *msgid, key_t msgkey)
{
int status = 0;
if((status = msgget(msgkey, IPC_CREAT | 0666)) == -1) /* 全局变量 */
{
perror("msgget error!");
return -1;
}
*msgid=status;
return 0;
}
int get_efd_lock(void)
{
uint64_t e_val = 0;
int ret;
ret = read(efd, &e_val, sizeof(uint64_t));
if(ret > 0)
return 0;
else
return -1;
}
int put_efd_lock(void)
{
uint64_t e_val = 1;
int ret;
ret = write(efd, &e_val, sizeof(uint64_t));
if(ret > 0)
return 0;
else
{
printf("Failed to write efd.\n");
return -1;
}
}
+134
View File
@@ -0,0 +1,134 @@
#include "usb.h"
#include "public.h"
int usbWrite(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut)
{
unsigned char pCDB[12]={0};
int nCDBLen=12;
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
//int rv = 0;
pCDB[0]=0xfe;
pCDB[1]=1;
if(sg_fd < 0)
{
//perror(" fd invalid");
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen;
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一般用于错误信息返回)
io_hdr.dxfer_direction = SG_DXFER_TO_DEV; //写入标记
io_hdr.dxfer_len = nLength; //写入数据长度
io_hdr.dxferp = pData; //写入数据
io_hdr.cmdp = pCDB; //命令
io_hdr.sbp = sense_buffer; //存储错误返回信息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Write-> SG_IO ioctl error");
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Write-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Write-> SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Write-> host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Write-> driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
int usbRead(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut)
{
unsigned char pCDB[12]={0};
int nCDBLen=12;
//int rv = 0;
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
pCDB[0]=0xfe;
pCDB[1]=2;
if(sg_fd < 0)
{
perror(" fd invalid");
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen; //命令长度
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一般用于错误信息返回)
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; //读标记
io_hdr.dxfer_len = nLength; //读入数据长度
io_hdr.dxferp = pData; //读入数据
io_hdr.cmdp = pCDB; //命令
io_hdr.sbp = sense_buffer; //存储错误返回信息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Read-> SG_IO ioctl error");
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Read-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Read SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Read host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Read driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
+490
View File
@@ -0,0 +1,490 @@
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <scsi/sg.h> /* take care: fetches glibc's /usr/include/scsi/sg.h */
#include <linux/capability.h>
#include "public.h"
#include "define.h"
#include "sham.h"
//INQUIRY COMMAND
extern int _icdev;
int USBWrite(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut)
{
unsigned char pCDB[12]={0};
int nCDBLen=12;
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
int rv = 0;
// rv = P(_icdev, 0, 10);
// if(rv == -1)
// {
// return -1;
// }
pCDB[0]=0xfe;
pCDB[1]=1;
if(sg_fd < 0)
{
perror(" fd invalid 111");
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen; //锟斤拷锟筋长锟斤拷
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷息锟斤拷锟斤拷)
io_hdr.dxfer_direction = SG_DXFER_TO_DEV; //写锟斤拷锟斤拷
io_hdr.dxfer_len = nLength; //写锟斤拷锟斤拷锟捷筹拷锟斤拷
io_hdr.dxferp = pData; //写锟斤拷锟斤拷锟斤拷
io_hdr.cmdp = pCDB; //锟斤拷锟斤拷
io_hdr.sbp = sense_buffer; //锟芥储锟斤拷锟襟返伙拷锟斤拷息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Write-> SG_IO ioctl error");
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Write-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Write-> SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Write-> host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Write-> driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
int USBRead(int sg_fd, unsigned char * pData,unsigned int nLength,int nTimeOut)
{
unsigned char pCDB[12]={0};
int nCDBLen=12,rv = 0;
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
pCDB[0]=0xfe;
pCDB[1]=2;
if(sg_fd < 0)
{
perror(" fd invalid 222");
// rv = V(_icdev, 0);
// if(rv == -1)
// {
// return -1;
// }
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen; //锟斤拷锟筋长锟斤拷
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷息锟斤拷锟斤拷)
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; //锟斤拷锟斤拷锟?
io_hdr.dxfer_len = nLength; //锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷
io_hdr.dxferp = pData; //锟斤拷锟斤拷锟斤拷锟斤拷
io_hdr.cmdp = pCDB; //锟斤拷锟斤拷
io_hdr.sbp = sense_buffer; //锟芥储锟斤拷锟襟返伙拷锟斤拷息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Read-> SG_IO ioctl error");
// rv = V(_icdev, 0);
// if(rv == -1)
// {
// return -1;
// }
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Read-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Read SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Read host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Read driver_status=0x%x\n", io_hdr.driver_status);
// rv = V(_icdev, 0);
// if(rv == -1)
// {
// return -1;
// }
return -1;
}
// rv = V(_icdev, 0);
// if(rv == -1)
// {
// return -1;
// }
return 0;
}
int scsi_inquiry(int sg_fd, unsigned char * pData)
{
/* This is a "standard" SCSI INQUIRY command. It is standard because the
* CMDDT and EVPD bits (in the second byte) are zero. All SCSI targets
* should respond promptly to a standard INQUIRY */
unsigned char inqCmdBlk[INQ_CMD_LEN] = {INQ_CMD_CODE, 0, 0, 0, INQ_REPLY_LEN, 0};
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
if(sg_fd < 0)
{
perror("Inquiry fd invalid 333");
return -1;
}
/* Prepare INQUIRY command */
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = sizeof(inqCmdBlk);//锟斤拷锟筋长锟斤拷
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
io_hdr.dxfer_len = INQ_REPLY_LEN; //锟斤拷锟截筹拷锟斤拷?
io_hdr.dxferp = pData; //锟斤拷锟斤拷buffer?
io_hdr.cmdp = inqCmdBlk; //锟斤拷锟斤拷buffer
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 20000; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("Inquiry SG_IO ioctl error");
// return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf(" sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("INQUIRY SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("INQUIRY host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("INQUIRY driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
int USBSCSIWrite(int sg_fd, unsigned char * pCDB,int nCDBLen, unsigned char * pData,unsigned int nLength,int nTimeOut)
{
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
if(sg_fd < 0)
{
perror(" fd invalid 444 ");
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen; //锟斤拷锟筋长锟斤拷
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷息锟斤拷锟斤拷)
io_hdr.dxfer_direction = SG_DXFER_TO_DEV; //写锟斤拷锟斤拷
io_hdr.dxfer_len = nLength; //写锟斤拷锟斤拷锟捷筹拷锟斤拷
io_hdr.dxferp = pData; //写锟斤拷锟斤拷锟斤拷
io_hdr.cmdp = pCDB; //锟斤拷锟斤拷
io_hdr.sbp = sense_buffer; //锟芥储锟斤拷锟襟返伙拷锟斤拷息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Write-> SG_IO ioctl error");
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Write-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Write-> SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Write-> host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Write-> driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
int USBSCSIRead(int sg_fd, unsigned char * pCDB,int nCDBLen, unsigned char * pData,unsigned int * nLength,int nTimeOut)
{
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
if(sg_fd < 0)
{
perror(" fd invalid 555");
return -1;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = nCDBLen; //锟斤拷锟筋长锟斤拷
/* io_hdr.iovec_count = 0; */ /* memset takes care of this */
io_hdr.mx_sb_len = sizeof(sense_buffer); //max sense buffer length(一锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷息锟斤拷锟斤拷)
io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; //锟斤拷锟斤拷锟?
io_hdr.dxfer_len = *nLength; //锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷
io_hdr.dxferp = pData; //锟斤拷锟斤拷锟斤拷锟斤拷
io_hdr.cmdp = pCDB; //锟斤拷锟斤拷
io_hdr.sbp = sense_buffer; //锟芥储锟斤拷锟襟返伙拷锟斤拷息
io_hdr.timeout = nTimeOut; /* 20000 millisecs == 20 seconds */
/* io_hdr.flags = 0; */ /* take defaults: indirect IO, etc */
/* io_hdr.pack_id = 0; */
/* io_hdr.usr_ptr = NULL; */
if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
{
perror("USB Read-> SG_IO ioctl error");
return -1;
}
/* now for the error processing */
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK)
{
if (io_hdr.sb_len_wr > 0)
{
printf("USB Read-> sense data: ");
int k;
for (k = 0; k < io_hdr.sb_len_wr; ++k)
{
if ((k > 0) && (0 == (k % 10)))
printf("\n ");
printf("0x%02x ", sense_buffer[k]);
}
printf("\n");
}
if (io_hdr.masked_status)
printf("USB Read SCSI status=0x%x\n", io_hdr.status);
if (io_hdr.host_status)
printf("USB Read host_status=0x%x\n", io_hdr.host_status);
if (io_hdr.driver_status)
printf("USB Read driver_status=0x%x\n", io_hdr.driver_status);
return -1;
}
return 0;
}
//----------do with package---------------------------
/*
func: send data and command
para:
return: success-RT_OK
fail-RT_FAIL
*/
int CD_SendPackage(int sg_fd, TPCCmd tPCCmd, unsigned char * pData)
{
unsigned char CDB[12];
CDB[0] = 0xFE;
CDB[1] = 0x01;
memcpy(CDB + 2, &tPCCmd, sizeof(tPCCmd));
if(USBSCSIWrite(sg_fd,CDB, 12, pData, tPCCmd.LC, SCSI_TIMEOUT) < 0)
return -1;
return 0;
}
/*
func: receive status and data package
para:
return: success-RT_OK
fail-RT_FAIL
*/
int CD_RecvPackage(int sg_fd, unsigned char * pData, unsigned int * lRecvLen)
{
unsigned char CDB[12]={0};
CDB[0]=0xFE;
CDB[1]=0x02;
if(USBSCSIRead(sg_fd,CDB,10,pData, lRecvLen, SCSI_TIMEOUT) < 0)
return -1;
return 0;
}
#if 0
int OpenUDisk(int id, int * fd)
{
char dev_path[12];
//char outbuf[128];
int sg_fd, k;
//for(i = 0; i < 10; i++)
{
sprintf(dev_path, "/dev/sr0");
if((sg_fd = open(dev_path, O_RDONLY)) < 0)
{
printf(dev_path);
printf(" open fail ret:%d\n",sg_fd);
return 0;
}
/* It is prudent to check we have a sg device by trying an ioctl */
if ((ioctl(sg_fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000))
{
printf("%s is not an sg device, or old sg driver\n", dev_path);
close(sg_fd);
return 0;
}
// if(scsi_inquiry(sg_fd, (unsigned char *)outbuf) == 0)
{
// if(memcmp(outbuf + 8, "Sydtec", 6) == 0) //find ukey
{
*fd = sg_fd;
// return 1;
}
// else
{
// puts(outbuf);
// printf("compare sydtec fail\n");
}
}
// close(sg_fd);
}
return 0;
}
#else
int OpenUDisk(int id, int * fd)
{
char dev_path[12];
char outbuf[128];
int sg_fd, k;
//for(i = 0; i < 10; i++)
{
sprintf(dev_path, "/dev/sr0");
if((sg_fd = open(dev_path, O_RDONLY)) < 0)
{
printf("%s\n",dev_path);
printf(" open fail ret:%d\n",sg_fd);
return 0;
}
/* It is prudent to check we have a sg device by trying an ioctl */
if ((ioctl(sg_fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000))
{
printf("%s is not an sg device, or old sg driver\n", dev_path);
close(sg_fd);
return 0;
}
if(scsi_inquiry(sg_fd, (unsigned char *)outbuf) == 0)
{
if(memcmp(outbuf + 8, "SUNYARD", 6) == 0) //find ukey
{
*fd = sg_fd;
return 1;
}
else
{
close(sg_fd);
return 0;
}
}
close(sg_fd);
}
return 0;
}
#endif
int CloseUsb(int fd)
{
if(fd > 0)
{
printf("\nCloseUsb \n");
close(fd);
}
return 1;
}
+369
View File
@@ -0,0 +1,369 @@
/***
* @文件名称: utils.cpp
* @系统名称: 公共库
* @模块名称: 底层函数操作库
* @功能说明: 工具类函数
* @当前版本: 1.0.0
* @修改人员: 吕世健
* @修改日期: 2012-06-01
* @修改说明: 创建文件
*/
#include "utils.h"
void EntireSleep(UINT nEntireSecs)
{
struct timeval struTimeout;
struTimeout.tv_sec = nEntireSecs % 10000000;
struTimeout.tv_usec = 0;
select(0, NULL, NULL, NULL, &struTimeout);
return;
}
void MilliSleep(UINT nMilliSecs)
{
struct timeval struTimeout;
struTimeout.tv_sec = nMilliSecs / 1000;
struTimeout.tv_usec = (nMilliSecs % 1000) * 1000;
select(0, NULL, NULL, NULL, &struTimeout);
return;
}
int killprg(char *prgname,int sig)
{
FILE *fp;
char *p1, *p2;
int i;
long pid[200];
int ret=0;
char temp_prgname[80];
int account = 0;
char buffer[256];
signal(SIGTERM, SIG_IGN); /*防止被自己kill掉*/
memset(temp_prgname, 0, sizeof(temp_prgname));
p1 = strtok(prgname, "/");
if (p1 == NULL)
return 0;
p2 = p1;
for ( ; ; )
{
p1 = strtok(NULL, "/");
if (p1 == NULL)
break;
else
p2 = p1;
}
strcpy(temp_prgname, p2);
memset(buffer, 0, sizeof(buffer));
sprintf(buffer, "ps -ef|grep -v grep|grep %s|grep start|awk '{print $2}'|cut -c -5", temp_prgname);
if ((fp = popen(buffer, "r")) == NULL)
return -1;
while (!feof(fp))
{
memset(buffer, '\0', sizeof(buffer));
ret=fscanf(fp, "%s", buffer);
if( ret == -1)
return ret;
pid[account++] = atoi(buffer);
}
pclose(fp);
for (i = 0;i < account - 1;i++)
{
if(kill(pid[i],sig) == -1)
{
//fprintf(stderr,"向进程发送SIGTERM信号失败,可能是进程已经被关闭!\n");
}
}
/*如果上面没有关闭程序,那么进行强行关闭*/
MilliSleep(200);
account = 0;
memset(buffer, 0, sizeof(buffer));
sprintf(buffer, "ps -ef|grep -v grep|grep %s|grep start|awk '{print $2}'|cut -c -5", temp_prgname);
if ((fp = popen(buffer, "r")) == NULL)
return -1;
while (!feof(fp))
{
memset(buffer, '\0', sizeof(buffer));
ret = fscanf(fp, "%s", buffer);
if( ret == -1)
return ret;
pid[account++] = atoi(buffer);
}
pclose(fp);
for (i = 0;i < account - 1;i++)
{
if(kill(pid[i], SIGKILL) == -1)
{
fprintf(stderr,"Send Singal SIGKILL hsm_test Failed ,maybe hsm_test Closed \n");
return account;
}
fprintf(stderr,"exit hsm_test successful \n");
}
return account;
}
/**
* @函数说明:创建进程号记录文件
* @pszProgName: 要创建的进程文件名称
* @返回说明: 成功NO_ERROR 失败 ERROR_FALSE
*/
int CreateIdFile(PSTR pszProgName)
{
FILE *pstruFile;
STR szFileName[MAX_PATH_LEN];
memset(szFileName, 0, sizeof(szFileName));
/* snprintf(szFileName, sizeof(szFileName),"%s/.%sid", \
getenv("HOME"), pszProgName);*/
snprintf(szFileName, sizeof(szFileName),"/tmp/.%sid", pszProgName);
pstruFile = fopen(szFileName,"w");
if(pstruFile == NULL)
{
return ERROR_FALSE;
}
fprintf(pstruFile,"%d",getpid());
fclose(pstruFile);
chmod(szFileName, 0600);
return NO_ERROR;
}
/**
* @函数说明:停止进程的执行
* @pszProgName: 要停止的进程名称
* @返回说明: 无
*/
void stopPrg(PSTR pszProgName)
{
FILE *pstruFile;
STR szFileName[MAX_PATH_LEN];
UINT nProgId;
int ret;
memset(szFileName, 0, sizeof(szFileName));
/* snprintf(szFileName, sizeof(szFileName), "%s/.%sid", \
getenv("HOME"), pszProgName);*/
snprintf(szFileName, sizeof(szFileName), "/tmp/.%sid", pszProgName);
pstruFile = fopen(szFileName,"r");
if(pstruFile == NULL)
{
fprintf(stderr,
"close %s failed ... the process maybe not start or Access denied\n", \
pszProgName);
return;
}
ret = fscanf(pstruFile, "%d", &nProgId);
if( ret == -1)
return;
if(kill(nProgId, SIGTERM) == -1)
{
EntireSleep(1);
if(kill(nProgId, SIGKILL) == -1)
{
fprintf(stderr,
"close %s failed ... the process maybe not start or Access denied\n", \
pszProgName);
}
}
else
{
fprintf(stderr,"close %s successful \n", pszProgName);
}
fclose(pstruFile);
unlink(szFileName);
return;
}
/**
* @函数说明:判断进程是否启动
* @pszProgName: 要判断的进程名称
* @返回说明: 进程启动返回NO_ERROR 否则返回ERROR_FALSE
*/
int TestPrgStat(PSTR pszProgName)
{
STR szFileName[MAX_PATH_LEN];
STR szShellCmd[MAX_STR_LEN];
UINT nProgId;
UINT nTempLen;
FILE *pstruFile;
int ret;
memset(szFileName, 0, sizeof(szFileName));
/* snprintf(szFileName, sizeof(szFileName), "%s/.%sid", \
getenv("HOME"), pszProgName);*/
snprintf(szFileName, sizeof(szFileName), "/tmp/.%sid", pszProgName);
pstruFile = fopen(szFileName, "r");
if(pstruFile == NULL)
{
return ERROR_FALSE;
}
nProgId = 0;
ret = fscanf(pstruFile, "%d", &nProgId);
if( ret == -1)
return ret;
fclose(pstruFile);
if(nProgId < 1)
{
return ERROR_FALSE;
}
memset(szShellCmd, 0, sizeof(szShellCmd));
snprintf(szShellCmd, sizeof(szShellCmd), \
"ps -e|awk '$1 == %d {print $4}'", nProgId);
pstruFile = popen(szShellCmd, "r");
if(pstruFile == NULL)
{
return ERROR_FALSE;
}
char * iRet = fgets(szFileName, sizeof(szFileName), pstruFile);
if( iRet == NULL)
return ERROR_FALSE;
fclose(pstruFile);
nTempLen = strlen(szFileName);
if(nTempLen < 1)
{
return ERROR_FALSE;
}
szFileName[nTempLen - 1]='\0';
if(strcmp(szFileName, pszProgName) == 0)
{
return NO_ERROR;
}
return ERROR_FALSE;
}
/**
* @函数说明:将进程变为后台起动进程
* @返回说明: 进程启动返回NO_ERROR 否则返回ERROR_FALSE
*/
RESULT DaemonStart()
{
register int nChildProgId;
signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTSTP, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
nChildProgId = fork();
if(nChildProgId < 0)
{
printf("create pid error %s\n", strerror(errno));
return ERROR_FALSE;
}
else if(nChildProgId > 0)
exit(0);
if (setpgrp() == -1)
{
printf("setpgrp 设置进程组错误 %s\n", \
strerror(errno));
exit(0);
}
signal(SIGHUP, SIG_IGN);
if((nChildProgId = fork()) < 0)
{
printf("创建第2个子进程错误 %s\n", \
strerror(errno));
exit(0);
}
else if(nChildProgId > 0)
exit(0);
//chdir("/");
umask(0);
return NO_ERROR;
}
/**
* @函数说明: 扫描目录
* @pszDirName: 目录名称
* @pstruDirentList: 目录结构
* @返回说明: 成功操作返回NO_ERROR 失败操作返回ERROR_FALSE
*/
int ScanDir(const char *pszDirName, struct dirent ***pstruDirentList)
{
#ifdef SYSTEM_LINUX
return scandir(pszDirName, pstruDirentList, NULL, alphasort);
#else
DIR *pstruDir;
struct dirent *pstruDirent, *pFirst, *pSecond;
struct dirent **pDirent;
int nNumber, nLeftNumber, nSize;
int i,j;
/*
* 打开目录
*/
if((pstruDir = opendir(pszDirName)) == NULL)
{
printf("打开目录错误[%s][%s]\n",
pszDirName, strerror(errno));
return -1;
}
nNumber = 0;
pDirent = (struct dirent **)
malloc((nNumber + 100) * sizeof(struct dirent *));
nLeftNumber = 100;
/*
* 生成数组
*/
while((pstruDirent = readdir(pstruDir)) != NULL)
{
nSize = sizeof(struct dirent) + pstruDirent->d_reclen;
pDirent[nNumber] = (struct dirent *)malloc(nSize);
memset(pDirent[nNumber], 0, nSize);
memcpy(pDirent[nNumber], pstruDirent, nSize);
nNumber++;
nLeftNumber--;
if(nLeftNumber == 0)
{
pDirent = (struct dirent **)realloc(pDirent,
(nNumber + 100) * sizeof(struct dirent *));
nLeftNumber = 100;
}
}
/*
* 数组排序
*/
for(i = 0;i < (nNumber - 1);i++)
{
pFirst = pDirent[i];
for(j = i + 1;j < nNumber;j++)
{
pSecond = pDirent[j];
if(strcmp(pFirst->d_name, pSecond->d_name) > 0)
{
pstruDirent = pFirst;
pDirent[i] = pDirent[j];
pDirent[j] = pstruDirent;
pFirst = pDirent[i];
}
}
}
*pstruDirentList = pDirent;
return nNumber;
#endif
}