密码键盘

键初始化及使用步骤:

1.设置PINpad参数  Pinpad_SetPPType()

2.检测Pinpad是否连接正常 Pinpad_Connect()或者Pinpad_connect2()

3.下载主密钥到index0,    Pinpad_LoadMasterKey()

4.检测0号主密钥是否存在,Pinpad_Checkkey(0);

5.选择0号主密钥,输入用户密码  Pinpad_GetPin();


在QMF项目里面,EvdIFunc_OnCallFunc()里面的      VMAC_InitDevices();里面的Device_Init_Pinpad()函数,对密码键盘进行了初始化

void Device_Init_Pinpad(Term_Config *T_Config)
{

  /*设置内外置类型 -加密模式*/
  switch(T_Config->mfixPrm.PP_In_Ext)
  {
    case INTERNAL_PINPAD:
      Pinpad_SetPPType(INTERNAL_PINPAD, T_Config->mfixPrm .PP_DesType, CLEAR_FORMAT);
      break;
    case EXTERNAL_PINPAD:
      Pinpad_SetPPType(EXTERNAL_PINPAD, T_Config->mfixPrm .PP_DesType, CLEAR_FORMAT);
      break;
    default:
      return;
  }
  
  //if (T_Config->mfixPrm.PP_In_Ext == EXTERNAL_PINPAD) //无论内置外置都需要Pinpad_Connect()
  {
    /*检测PINpad是否正常连接
    MmiUtil_DispChinese("检测密码键盘",1,3);*/
    Pinpad_Close();
    
    if(Pinpad_Connect() != VS_SUCCESS)
    {
      MmiUtil_DispChinese("检测密码键盘失败", 1, 3);
      SVC_WAIT(2000);
    }
    else
    {
      MmiUtil_DispChinese("检测密码键盘成功", 1, 3);
    }
  }
  MmiUtil_Reset();
  
  return;
}

在mobile里面

EvdIFunc_OnActive()函数里面的      VMAC_InitDevices(0);函数里面的 

  open_pinpad(flag);函数对密码键盘进行了初始化

/***************************************************************************
** pinpad_open() -- open the pin pad communications port.
***************************************************************************/
void open_pinpad(int flag)
{

// flag == 0
  char buf[20];
  int type ;
  
  
  NF_Get_Env("#ENCYPT", buf, 1);  //获得加密算法的类型 
  
  if(buf[0] == '1')
    pos_cfg.tdes = 1;  //3//3DES
  else
    pos_cfg.tdes = 0;  //DES
    
  type = MmiUtil_GetTerminalType();  //获取设备型号
  
  if(type == _VX610 || type == _VX670 || type == _VX680 || type == _VX680C || type == _VX810 || type == _VX820)
  {
    NF_Put_Env("#PINPAD", "0", 1);  //把密码键盘类型改为外置
  }

  
  NF_Get_Env("#PINPAD", buf, 1);
  pos_cfg.pinpad_type = (buf[0] == '1');




  /*设置键盘参数,这个必须有*/
  if(pos_cfg.tdes)  //如果3DES 加密
  {
    /*设置PINpad参数*/
    if(pos_cfg.pinpad_type == 1)  
      Pinpad_SetPPType(EXTERNAL_PINPAD, PP222_3DES_MODE, CLEAR_FORMAT);                   
    else// 执行内置键盘
      Pinpad_SetPPType(INTERNAL_PINPAD, PP222_3DES_MODE, CLEAR_FORMAT);
  }
  else //如果DES加密
  {
    /*设置PINpad参数*/
    if(pos_cfg.pinpad_type == 1)
      Pinpad_SetPPType(EXTERNAL_PINPAD, PP222_DES_MODE, CLEAR_FORMAT);
    else
      Pinpad_SetPPType(INTERNAL_PINPAD, PP222_DES_MODE, CLEAR_FORMAT);
  }


  
  /*检测PINpad是否正常连接*/
  if(flag)  //flag == 0 这一步不执行
  {
    if(pos_cfg.pinpad_type == 1)
      disp_msg3("检测外置密码键盘");
    else
      disp_msg3("检测内置密码键盘");
  }
  
  if(pos_cfg.pinpad_type == 1)  //执行这个
  {


     MmiUtil_UserClr(LINE2);
  MmiUtil_DisplayLine((char*)"测试密码键盘2", LINE2);
  wait_key(60);
  
    buf[NF_Get_Env("#PINPORT", buf, sizeof(buf))] = 0; //加了一个结尾/0
    
    if(strlen(buf) <= 0)  //如果没有默认com1就设置为com2
      strcpy(buf, "/dev/com2");
      
    if(Pinpad_Connect2(buf) != VS_SUCCESS) //Iinpad_Connect2 检查有没有连接
    {
      if(flag)
      {
        disp_msg3("密码键盘检测失败");
        SVC_WAIT(2000);
      }
    }
    else if(flag)
      disp_msg3("密码键盘检测OK");
  } // end if(pos_cfg)
  else
  {
    MmiUtil_UserClr(LINE2);
  
  MmiUtil_DisplayLine((char*)"测试密码键盘1", LINE2);
  wait_key(60);
    if(Pinpad_Connect() != VS_SUCCESS)
    {
      if(flag)
      {
        disp_msg3("密码键盘检测失败");
        SVC_WAIT(2000);
      }
    }
    else if(flag)
      disp_msg3("密码键盘检测OK");
  }
}



在签到的时候

会重新打开密码键盘,并检测主密钥是否存在

然后

在消费的时候

先主密钥检测是否存在,然后通过Pinpad_GetPin获得密码,


在退货的时候获取主管密码,没有进行主密钥检测

  if(MmiUtil_InputPWD(LINE2, (char*)Disp, (char*)tmp, passwd_min_len, passwd_len, RIGHT_JST) < 0)
获取输入密码



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值