• 1
  • 2
  • 3
  • 4

高频RFID读写器、IC卡读写器在Android环境下的应用

2014年07月16日

    Android安卓系统是目前主流手机的应用操作系统,同时也是许多IPAD平板电脑的操作系统,因平板电脑的便携性和Android系统的开放性,IPAD平板电脑逐渐成为主流的移动应用设备。平板电脑在后期的应用如移动支付,电子身份认证等涉及到智能IC卡的广泛推广,其它包括有接触式IC卡读卡器系列产品和非接触式读卡器系列产品。诺塔斯智能科技从根据用户需求和市场发展规律,从创新和应用角度出发,研发了L1-A支持Android系统环境的13.56MHz频率的基于ISO14443 Type A协议的非接触式Android IC卡读写器

 

    技术规格
  计算机接口
  标准 USB传输数据、USB供电
  电源 USB取电
  速率 12Mbps(全速)
  工作电压 5V
  电流 200mA(工作);50mA(待机);100mA(常规)
  接口类型通用USB接口
  非接触式智能卡接口
  标准协议 ISO14443 TypeA
  操作频率 13.56MHZ
  读卡距离 0-10CM(与卡片质量有关)
  读写模式只读
  是否支持固件设计支持
  是否支持第三方兼容服务可以根据用户需求定制第三方兼容服务和提供硬件接口(2000台起订)
  人机界面
  指示灯电源、数据通讯指示灯
  绿色指示灯亮表示已插卡,闪烁表示读写器通讯中,红灯表示正在读卡。
  蜂鸣器单调音
  产品外观
  物理尺寸 105 mm(长)x 70 mm(宽)x 13 mm(高)
  颜色黑色
  连接线
  连接线长度 1.5米
  认证标准
  认证符合CE、FCC、RoHS
  环境要求
  工作温度-20~50°C
  支持的操作系统
  支持操作系统 Windows 2000,XP 32,XP64,Vista 32和 Vista 64/Windows 7(32位),64位)/Windows 8/Linux系列/Android系统
  典型应用
  电子商务e 电信、邮政管理系统税务管理
  网络访问电子钱包余额查询客户积分优惠
  身份验证物流及供应链管理商场、餐饮店
  社保应用医疗管理应用系统工商收费系统

 

部分源代码

 

  private LotusCardDriver mLotusCardDriver;
    private Button CardNoTest =null;
    private TextView ShowCardNo = null;
    private UsbManager m_UsbManager = null;
    private UsbDevice m_LotusCardDevice = null;
    private UsbInterface m_LotusCardInterface = null;
    private UsbDeviceConnection m_LotusCardDeviceConnection = null;
    private final int m_nVID = 1306;
    private final int m_nPID = 20763;
    private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        InitWiget();//调用界面初始化控件
        // 设置USB读写回调 串口可以不用此操作
        SetUsbCallBack();

        // LotusCardParam tLotusCardParam = new LotusCardParam();
        mLotusCardDriver = new LotusCardDriver();
        // int nDeviceHandle = mLotusCardDriver.OpenDevice("/dev/ttyTCC1", 0,
        // 0);
        // int nDeviceHandle = mLotusCardDriver.OpenDevice("/dev/ttyS3", 0, 0);

        int nDeviceHandle = mLotusCardDriver.OpenDevice("", 0, 0,true);

        if (nDeviceHandle > 0) {

            testIcCardReader(nDeviceHandle);
            mLotusCardDriver.CloseDevice(nDeviceHandle);
        }
    }
    private void InitWiget(){
        CardNoTest = (Button) findViewById(R.id.CardNoTest);
        ShowCardNo = (TextView) findViewById(R.id.ShowCardNo);
    }
    //按钮点击事件
    public void GetCardNo(View v){
        
        ShowCardNo.setText("当前测试卡片的卡号为:");
        
        
    }
    private void testIcCardReader(int nDeviceHandle) {
        boolean bResult = false;
        int nRequestType;
        LotusCardParam tLotusCardParam1 = new LotusCardParam();
        bResult = mLotusCardDriver.Beep(nDeviceHandle, 10);
        bResult = mLotusCardDriver.Beep(nDeviceHandle, 10);
        if (!bResult)
            return;
        nRequestType = LotusCardDriver.RT_NOT_HALT;
        //以下3个函数可以用GetCardNo替代
//        bResult = mLotusCardDriver.Request(nDeviceHandle, nRequestType,
//                tLotusCardParam1);
//        if (!bResult)
//            return;
//        bResult = mLotusCardDriver.Anticoll(nDeviceHandle, tLotusCardParam1);
//        if (!bResult)
//            return;
//        bResult = mLotusCardDriver.Select(nDeviceHandle, tLotusCardParam1);
//        if (!bResult)
//            return;
        bResult = mLotusCardDriver.GetCardNo(nDeviceHandle, nRequestType,
                tLotusCardParam1);
        if (!bResult)
            return;    
        tLotusCardParam1.arrKeys[0] = (byte) 0xff;
        tLotusCardParam1.arrKeys[1] = (byte) 0xff;
        tLotusCardParam1.arrKeys[2] = (byte) 0xff;
        tLotusCardParam1.arrKeys[3] = (byte) 0xff;
        tLotusCardParam1.arrKeys[4] = (byte) 0xff;
        tLotusCardParam1.arrKeys[5] = (byte) 0xff;
        tLotusCardParam1.nKeysSize = 6;
        
        bResult = mLotusCardDriver.LoadKey(nDeviceHandle, LotusCardDriver.AM_A,
                0, tLotusCardParam1);
        if (!bResult)
            return;
        bResult = mLotusCardDriver.Authentication(nDeviceHandle,
                LotusCardDriver.AM_A, 0, tLotusCardParam1);
        if (!bResult)
            return;
        bResult = mLotusCardDriver.Read(nDeviceHandle, 1, tLotusCardParam1);
        if (!bResult)
            return;

        tLotusCardParam1.arrBuffer[0] = (byte) 0x10;
        tLotusCardParam1.arrBuffer[1] = (byte) 0x01;
        tLotusCardParam1.arrBuffer[2] = (byte) 0x02;
        tLotusCardParam1.arrBuffer[3] = (byte) 0x03;
        tLotusCardParam1.arrBuffer[4] = (byte) 0x04;
        tLotusCardParam1.arrBuffer[5] = (byte) 0x05;
        tLotusCardParam1.arrBuffer[6] = (byte) 0x06;
        tLotusCardParam1.arrBuffer[7] = (byte) 0x07;
        tLotusCardParam1.arrBuffer[8] = (byte) 0x08;
        tLotusCardParam1.arrBuffer[9] = (byte) 0x09;
        tLotusCardParam1.arrBuffer[10] = (byte) 0x0a;
        tLotusCardParam1.arrBuffer[11] = (byte) 0x0b;
        tLotusCardParam1.arrBuffer[12] = (byte) 0x0c;
        tLotusCardParam1.arrBuffer[13] = (byte) 0x0d;
        tLotusCardParam1.arrBuffer[14] = (byte) 0x0e;
        tLotusCardParam1.arrBuffer[15] = (byte) 0x0f;
        tLotusCardParam1.nBufferSize = 16;
        bResult = mLotusCardDriver.Write(nDeviceHandle, 1, tLotusCardParam1);
        if (!bResult)
            return;
    }

    private void SetUsbCallBack() {
        PendingIntent pendingIntent;
        pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(
                ACTION_USB_PERMISSION), 0);
        m_UsbManager = (UsbManager) getSystemService(USB_SERVICE);
        if (null == m_UsbManager)
            return;

        HashMap<String, UsbDevice> deviceList = m_UsbManager.getDeviceList();
        if (!deviceList.isEmpty()) {
            for (UsbDevice device : deviceList.values()) {
                if ((m_nVID == device.getVendorId())
                        && (m_nPID == device.getProductId())) {
                    m_LotusCardDevice = device;
                    break;
                }
            }
        }
        if (null == m_LotusCardDevice)
            return;
        m_LotusCardInterface = m_LotusCardDevice.getInterface(0);
        if (null == m_LotusCardInterface)
            return;
        if (false == m_UsbManager.hasPermission(m_LotusCardDevice)) {
            m_UsbManager.requestPermission(m_LotusCardDevice, pendingIntent);
        }
        UsbDeviceConnection conn = null;
        if (m_UsbManager.hasPermission(m_LotusCardDevice)) {
            conn = m_UsbManager.openDevice(m_LotusCardDevice);
        }

        if (null == conn)
            return;

        if (conn.claimInterface(m_LotusCardInterface, true)) {
            m_LotusCardDeviceConnection = conn;
        } else {
            conn.close();
        }
        if (null == m_LotusCardDeviceConnection)
            return;
        // 把上面获取的对性设置到接口中用于回调操作
        LotusCardDriver.m_UsbDeviceConnection = m_LotusCardDeviceConnection;
        if (m_LotusCardInterface.getEndpoint(1) != null) {
            LotusCardDriver.m_OutEndpoint = m_LotusCardInterface.getEndpoint(1);
        }
        if (m_LotusCardInterface.getEndpoint(0) != null) {
            LotusCardDriver.m_InEndpoint = m_LotusCardInterface.getEndpoint(0);
        }

    }

产品外观图

   

来源:重庆诺塔斯智能科技有限公司

联系我们

地址:重庆市北部新区青枫北路18号凤凰座A579(452000)

电话:023-68798110

手机:18166486520

QQ:843718693

http://www.lotuscard.cc

 

在线客服

在线时间

周一至周五
9:00-17:00