/**************************************************************************************** ** 函数原型: void M1Initval(void) ** 函数功能: 初始化钱包 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Initval(void) { char status; c_RecvBuf[16] = ~c_RecvBuf[12]; c_RecvBuf[17] = ~c_RecvBuf[13]; c_RecvBuf[18] = ~c_RecvBuf[14]; c_RecvBuf[19] = ~c_RecvBuf[15]; c_RecvBuf[20] = c_RecvBuf[12]; c_RecvBuf[21] = c_RecvBuf[13]; c_RecvBuf[22] = c_RecvBuf[14]; c_RecvBuf[23] = c_RecvBuf[15]; c_RecvBuf[24] = c_RecvBuf[5]; c_RecvBuf[25] = ~c_RecvBuf[5]; c_RecvBuf[26] = c_RecvBuf[5]; c_RecvBuf[27] = ~c_RecvBuf[5]; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[6], c_CardSrlNum); if (MI_OK == status) //验证密钥 { if (MI_OK == PcdWrite(c_RecvBuf[5],&c_RecvBuf[12])) //写块数据 { status = 0; } else { status = 0x04; } } else { status = 0x02; } COM_Send(0,0,status); }
/**************************************************************************************** ** 函数原型: void M1Transfer(void) ** 函数功能: 备份钱包 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Transfer(void) { char status; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[7], c_CardSrlNum); if (MI_OK == status) //验证密钥 { PcdRestore(c_RecvBuf[5]); //块数据写入FIFO if (MI_OK == PcdTransfer(c_RecvBuf[6])) //块数据转移 { status = 0; } else { status = 0x03; } } else { status = 0x02; } COM_Send(0,0,status); }
/**************************************************************************************** ** 函数原型: void M1Identify(void) ** 函数功能: 卡片识别,包含寻卡、防冲突和选择卡 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Identify(void) { char status; status = PcdRequest(PICC_REQIDL, c_CardType); if (status != MI_OK ) { PcdRequest(PICC_REQIDL, c_CardType); #ifdef DEBUG_UART printf("PcdRequest fail 0x%x, CardType 0x%x%x\r\n", status, c_CardType[1], c_CardType[0]); #endif } PcdAnticoll(c_CardSrlNum); if (MI_OK == PcdSelect(c_CardSrlNum, sak1)) { #ifdef DEBUG_UART printf("PcdSelect success\r\n"); #endif status = 0; } else { #ifdef DEBUG_UART printf("PcdSelect fail\r\n"); #endif status = 0x01; //选卡失败 } COM_Send(c_CardSrlNum,4,status); }
/**************************************************************************************** ** 函数原型: void M1Halt(void) ** 函数功能: 卡片休眠 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Halt(void) { char status = MI_COM_ERR; PcdHalt(); status = PcdHalt(); if (status == MI_OK) { status = 0; } else { status = 0xf1; } COM_Send(0,0,status); }
int RS232_Send(char *buffer, int size) { int ret = -1; if (buffer==NULL || size<=0) { return -1; } if (g_rs232_com < 0) { return -1; } ret = COM_Send(g_rs232_com, buffer, size); if (ret < 0) { return -1; } return 0; }
/**************************************************************************************** ** 函数原型: void M1Increment(void) ** 函数功能: 钱包充值 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Increment(void) { char status; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[6], c_CardSrlNum); if (MI_OK == status) //验证密钥 { if (MI_OK == PcdValue(PICC_INCREMENT,c_RecvBuf[5],&c_RecvBuf[12])) //钱包充值 { status = 0; } else { status = 0x03; } } else { status = 0x02; } COM_Send(0,0,status); }
/**************************************************************************************** ** 函数原型: void M1ReadVal(void) ** 函数功能: 读取钱包值 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1ReadVal(void) { char status; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[6], c_CardSrlNum); if (MI_OK == status) //验证密钥 { if (MI_OK == PcdRead(c_RecvBuf[5],&c_RecvBuf[14])) //读块数据 { status = 0; } else { status = 0x03; } } else { status = 0x02; } COM_Send(&c_RecvBuf[14],0x04,status); }
/**************************************************************************************** ** 函数原型: void M1Write(void) ** 函数功能: 写卡块值 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Write(void) { char status; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[6], c_CardSrlNum); if (MI_OK == status) { //密钥验证成功 if (MI_OK == PcdWrite(c_RecvBuf[5],&c_RecvBuf[12])) { status = 0x0; //写块数据成功 } else { status = 0x04; //写块数据失败 } } else { status = 0x02; //密钥验证失败 } COM_Send(0,0,status); }
/**************************************************************************************** ** 函数原型: void M1Read(void) ** 函数功能: 读卡块值 ** 入口参数: - ** 出口参数: - ** 返 回 值: - ** 描 述: ****************************************************************************************/ void M1Read(void) { char status; status = PcdAuthentication(c_RecvBuf[4], c_RecvBuf[5], &c_RecvBuf[6], c_CardSrlNum); if (status == MI_OK) { //密钥验证成功 if (MI_OK == PcdRead(c_RecvBuf[5],&c_RecvBuf[14])) { status = 0; //读卡成功 } else { status = 0x03; //读卡失败 } } else { status = 0x02; //密钥验证失败 } COM_Send(&c_RecvBuf[14],0x10,status); }