init
This commit is contained in:
BIN
01SDK/libs/arm64-v8a/libCommonInterface.so
Normal file
BIN
01SDK/libs/arm64-v8a/libCommonInterface.so
Normal file
Binary file not shown.
BIN
01SDK/libs/arm64-v8a/libPortCommunication.so
Normal file
BIN
01SDK/libs/arm64-v8a/libPortCommunication.so
Normal file
Binary file not shown.
BIN
01SDK/libs/arm64-v8a/libTerminalProtocol.so
Normal file
BIN
01SDK/libs/arm64-v8a/libTerminalProtocol.so
Normal file
Binary file not shown.
BIN
01SDK/libs/arm64-v8a/libWltRS.so
Normal file
BIN
01SDK/libs/arm64-v8a/libWltRS.so
Normal file
Binary file not shown.
BIN
01SDK/libs/armeabi/libCommonInterface.so
Normal file
BIN
01SDK/libs/armeabi/libCommonInterface.so
Normal file
Binary file not shown.
BIN
01SDK/libs/armeabi/libPortCommunication.so
Normal file
BIN
01SDK/libs/armeabi/libPortCommunication.so
Normal file
Binary file not shown.
BIN
01SDK/libs/armeabi/libTerminalProtocol.so
Normal file
BIN
01SDK/libs/armeabi/libTerminalProtocol.so
Normal file
Binary file not shown.
BIN
01SDK/libs/armeabi/libWltRS.so
Normal file
BIN
01SDK/libs/armeabi/libWltRS.so
Normal file
Binary file not shown.
170
01SDK/src/com/sdses/BlueTooth.java
Normal file
170
01SDK/src/com/sdses/BlueTooth.java
Normal file
@@ -0,0 +1,170 @@
|
||||
package com.sdses;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothSocket;
|
||||
|
||||
public class BlueTooth
|
||||
{
|
||||
private static UUID SS_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
|
||||
private static BluetoothAdapter mAdapter = null;
|
||||
private static BluetoothDevice mDevice = null;
|
||||
private static BluetoothSocket mSocket = null;
|
||||
private static InputStream mInputStream = null;
|
||||
private static OutputStream mOutputStream = null;
|
||||
|
||||
public static long BthConnect(String BlueToothName)
|
||||
{
|
||||
mAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
if (mAdapter == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mAdapter.isEnabled())
|
||||
{
|
||||
return -2;
|
||||
/*
|
||||
mAdapter.enable();
|
||||
if (!mAdapter.isEnabled())
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
//获得已配对的蓝牙设备列表
|
||||
Set<BluetoothDevice> pairedDevices = mAdapter.getBondedDevices();
|
||||
if(pairedDevices.size() <= 0)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
|
||||
ArrayList<BluetoothDevice> ALBluetoothDevice = new ArrayList<BluetoothDevice>();
|
||||
for (BluetoothDevice device : pairedDevices)
|
||||
{
|
||||
ALBluetoothDevice.add(device);
|
||||
}
|
||||
|
||||
//mAdapter.cancelDiscovery();
|
||||
|
||||
//查找设备
|
||||
for(int i = 0; i < ALBluetoothDevice.size(); i++)
|
||||
{
|
||||
BluetoothDevice cDevice = (BluetoothDevice)ALBluetoothDevice.get(i);
|
||||
String theBlueToothName = cDevice.getName();
|
||||
if(theBlueToothName.indexOf(BlueToothName) < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//开始连接设备
|
||||
mDevice = cDevice;
|
||||
try
|
||||
{
|
||||
mSocket = mDevice.createRfcommSocketToServiceRecord(SS_UUID);
|
||||
mSocket.connect();
|
||||
mInputStream = mSocket.getInputStream();
|
||||
mOutputStream = mSocket.getOutputStream();
|
||||
return 0;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
|
||||
return -5; //没有配对设备
|
||||
}
|
||||
|
||||
public static long BthSendSocket(byte[] buffer, int len)
|
||||
{
|
||||
if(mOutputStream == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
mOutputStream.write(buffer, 0, len);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
public static long BthRecvSocket(byte[] buffer)
|
||||
{
|
||||
if(mInputStream == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// int nAvailable = mInputStream.available();
|
||||
// if(nAvailable <= 0)
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
return mInputStream.read(buffer, 0, 4096);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
public static void BthDisconnect()
|
||||
{
|
||||
if(mInputStream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mInputStream.close();
|
||||
mInputStream = null;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(mOutputStream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mOutputStream.close();
|
||||
mOutputStream = null;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(mSocket != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mSocket.close();
|
||||
mSocket = null;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
122
01SDK/src/com/sdses/JniCommonInterface.java
Normal file
122
01SDK/src/com/sdses/JniCommonInterface.java
Normal file
@@ -0,0 +1,122 @@
|
||||
package com.sdses;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class JniCommonInterface
|
||||
{
|
||||
static
|
||||
{
|
||||
System.loadLibrary("WltRS");
|
||||
System.loadLibrary("PortCommunication");
|
||||
System.loadLibrary("TerminalProtocol");
|
||||
System.loadLibrary("CommonInterface");
|
||||
}
|
||||
|
||||
public static long GetUsbPermission(Context ctx, int Vid, int Pid)
|
||||
{
|
||||
return UsbHidPort.GetUsbPermission(ctx, Vid, Pid);
|
||||
}
|
||||
|
||||
public static native long SetLogFileEx(String LogFileName);
|
||||
public static native long SetTerminalLibrary(String LibraryFileName);
|
||||
public static native long GetLibraryInfo(byte[] Version, byte[] Description);
|
||||
public static native long SetAutoPara(String PortType, String PortPara, String ExtendPara, String DllName, int UsingGA467);
|
||||
public static native long OpenDevice(String PortType, String PortPara, String ExtendPara);
|
||||
public static native long SetCurrentDevice(long DevHandle);
|
||||
public static native long GetCurrentDevice();
|
||||
public static native long CloseDevice();
|
||||
public static native long CommandTransmit(long Command, long CmdDataLength, byte[] CmdData, byte[] StatusWords, long[] RecvDataLength, byte[] RecvData, long TimeOut);
|
||||
public static native long GA467Transmit(long Command, long CmdDataLength, byte[] CmdData, byte[] StatusWords, long[] RecvDataLength, byte[] RecvData, long TimeOut);
|
||||
public static native long TerminalGetModel(byte[] TerminalModel);
|
||||
public static native long TerminalGetFirmVersion(byte[] FirmVersion, byte[]HardwareVersion);
|
||||
public static native long TerminalHeartBeat();
|
||||
public static native long LedOnOff(byte LedNo, byte OnOff);
|
||||
public static native long LedBlink(byte LedNo, long OnTimeMs, long OffTimeMs, byte BlinkCount, byte FinalState);
|
||||
public static native long GetLastRecvData(byte[] LastRecvData);
|
||||
|
||||
public static native long IdFindCard();
|
||||
public static native long IdSelectCard();
|
||||
public static native long IdReadBaseMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen);
|
||||
public static native long IdReadBaseFpMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen, byte[] pucFPMsg, long[] puiFPMsgLen);
|
||||
public static native long IdReadNewAppMsg(byte[] pucAppMsg, long[] puiAppMsgLen);
|
||||
public static native long IdReadSn(byte[] SN, long[] SNLen);
|
||||
public static native long IdApdu(long SendApduLen, byte[] SendApdu, byte[] RecvApdu, long[] RecvApduLen);
|
||||
public static native long SdtFindCard(byte[] pucManaInfo);
|
||||
public static native long SdtSelectCard(byte[] pucManaMsg);
|
||||
public static native long SdtReadBaseMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen);
|
||||
public static native long SdtReadBaseFpMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen, byte[] pucFPMsg, long[] puiFPMsgLen);
|
||||
public static native long SdtReadNewAppMsg(byte[] pucAppMsg, long[] puiAppMsgLen);
|
||||
public static native long SamGetStatus();
|
||||
public static native long SamGetId(byte[] SamId, long[] SamIdLen);
|
||||
public static native long SamGetIdStr(byte[] SamIdStr);
|
||||
public static native long SdtSamGetStatus();
|
||||
public static native long SdtSamGetId(byte[] SamId, long[] SamIdLen);
|
||||
public static native long SdtSamGetIdStr(byte[] SamIdStr);
|
||||
|
||||
public static native long IdReadCard(byte CardType, byte InfoEncoding, byte[] IdCardInfo, long TimeOutMs);
|
||||
public static native long SdtReadCard(byte CardType, byte InfoEncoding, byte[] IdCardInfo, long TimeOutMs);
|
||||
public static native long IdReadNewAddress(byte[] NewAddress);
|
||||
public static native long SdtReadNewAddress(byte[] NewAddress);
|
||||
public static native long IdCardGetName(byte[] Name);
|
||||
public static native long IdCardGetNameEn(byte[] NameEn);
|
||||
public static native long IdCardGetGender(byte[] Gender);
|
||||
public static native long IdCardGetGenderId(byte[] GenderId);
|
||||
public static native long IdCardGetNation(byte[] Nation);
|
||||
public static native long IdCardGetNationId(byte[] NationId);
|
||||
public static native long IdCardGetBirthDate(byte[] BirthDate);
|
||||
public static native long IdCardGetAddress(byte[] Address);
|
||||
public static native long IdCardGetIdNumber(byte[] IdNumber);
|
||||
public static native long IdCardGetSignOrgan(byte[] SignOrgan);
|
||||
public static native long IdCardGetBeginTerm(byte[] BeginTerm);
|
||||
public static native long IdCardGetValidTerm(byte[] ValidTerm);
|
||||
public static native long IdCardGetFPBuffer(byte[] FPBuffer, long[] FPBufferLen);
|
||||
public static native long IdCardGetPhotoFile(String PhotoFile);
|
||||
public static native long IdCardGetPhotoBuffer(byte WltBmpJpg, byte[] PhotoBuffer, long[] PhotoBufferLen);
|
||||
|
||||
public static native long MIdSamGetCert(byte[] Cert, long[] CertLen);
|
||||
public static native long MIdSamEnable(long EnableDataLen, byte[] EnableData);
|
||||
public static native long MIdSamDisable(long DisableDataLen, byte[] DisableData);
|
||||
public static native long MIdSamGetEnableState(byte[] EnableState, long[] RemainNum, byte[] EnableTime, byte[] DisableTime, byte[] SecondCert, long[] SecondCertLen, byte[] EncryptCert, long[] EncryptCertLen, byte[] SignCert, long[] SignCertLen);
|
||||
public static native long MIdSamAuthRequest(byte[] RequestData56);
|
||||
public static native long MIdSamAuthConfirm(byte[] ConfirmData89);
|
||||
public static native long MIdReadChkData(byte[] Random16, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] ShortCode16, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
|
||||
public static native long MIdReadChkDataPF(byte[] Random16, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] ShortCode16, byte[] CheckData, long[] CheckDataLen, byte[] Hash32, byte[] Sign64, byte[] PH, long[] PHLen, byte[] FP, long[] FPLen);
|
||||
public static native long MIdCheckShortLongCode(byte[] Random16, byte ShortCodeCount, byte[] ShortCode, byte LongCodeCount, byte[] LongCode, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] MatchCode, byte[] MatchCodeLen, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
|
||||
public static native long MIdCheckShortLongCodePF(byte[] Random16, byte ShortCodeCount, byte[] ShortCode, byte LongCodeCount, byte[] LongCode, byte[] RemainAuthNum, byte[] SamId22,byte[] BeginAndValidTerm32, byte[] MatchCode, byte[] MatchCodeLen, byte[] CheckData, long[] CheckDataLen, byte[] Hash32, byte[] Sign64, byte[] PH, long[] PHLen, byte[] FP, long[] FPLen);
|
||||
public static native long MIdCheckProperty(byte[] Random16, byte PropertyCode, byte PropertyValLen, byte[] PropertyVal, byte[] RemainAuthNum, byte[] SamId22, byte[] CheckResult, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
|
||||
|
||||
public static native long MagRead(byte Tracks, byte[] TrackData1, byte[] TrackData2, byte[] TrackData3, byte TimeOutSec);
|
||||
public static native long MagWrite(byte Tracks, String TrackData1, String TrackData2, String TrackData3, byte TimeOutSec);
|
||||
|
||||
public static native long QrRead(byte[] QrData, byte TimeOutSec);
|
||||
public static native long QrCancel();
|
||||
public static native long QrAsynEnable(byte TimeOutSec);
|
||||
public static native long QrAsynRead(byte[] QrData);
|
||||
public static native long QrAsynDisable();
|
||||
|
||||
public static native long M1FindCard(byte[] UID, long[] UIDLen);
|
||||
public static native long M1Authentication(byte KeyType, byte SecAddr, byte[] Key, byte[] UID);
|
||||
public static native long M1ReadBlock(byte BlockAddr, byte[] BlockData, long[] BlockDataLen);
|
||||
public static native long M1WriteBlock(byte BlockAddr, long BlockDataLen, byte[] BlockData);
|
||||
public static native long M1Halt();
|
||||
|
||||
public static native long FpCapFeature(byte[] Feature, long[] FeatureLen);
|
||||
public static native long FpMatchFeature(long FeatureLen1, byte[] Feature1, long FeatureLen2, byte[] Feature2, long[] Score);
|
||||
|
||||
public static native long SsseReadCard(int iType, byte[] SSCardInfo, byte[] SSErrorInfo);
|
||||
public static native long SsseReadCard2(int iType, byte[] SSCardInfo, byte[] SSErrorInfo);
|
||||
public static native long SsseGetCardInfo(String Tag, byte[] SSCardInfo);
|
||||
|
||||
public static native long CpuPowerOn(byte Slot, byte[] ATRS, long[] ATRSLen);
|
||||
public static native long CpuApdu(byte Slot, long SendApduLen, byte[] SendApdu, byte[] RecvApdu, long[] RecvApduLen);
|
||||
public static native long CpuPowerOff(byte Slot);
|
||||
|
||||
public static native long IccGetCardInfo(int ICtype, String AIDList, String TagList, byte[] IcCardInfo);
|
||||
public static native long IccGetARQC(int ICtype, String trData, String AIDList, byte[] ARQC, byte[] trAppData);
|
||||
public static native long IccARPCExeScript(int ICtype, String trData, String ARPC, String trAppData, byte[] ScriptResult, byte[] TC);
|
||||
public static native long IccGetTrDetail(int ICtype, String AIDList, byte[] TrDetail);
|
||||
public static native long IccGetLoadDetail(int ICtype, String AIDList, byte[] LoadDetail);
|
||||
|
||||
public static native long HexToAsc(byte[] Hex, long HexLength, byte[] Asc);
|
||||
public static native long AscToHex(String Asc, long HexLength, byte[] Hex);
|
||||
}
|
||||
273
01SDK/src/com/sdses/UsbHidPort.java
Normal file
273
01SDK/src/com/sdses/UsbHidPort.java
Normal file
@@ -0,0 +1,273 @@
|
||||
package com.sdses;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.usb.UsbConstants;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbDeviceConnection;
|
||||
import android.hardware.usb.UsbEndpoint;
|
||||
import android.hardware.usb.UsbInterface;
|
||||
import android.hardware.usb.UsbManager;
|
||||
|
||||
public class UsbHidPort
|
||||
{
|
||||
private static final String ACTION_USB_PERMISSION = "com.sdses.JniCommonInterface.USB_PERMISSION";
|
||||
|
||||
private static final BroadcastReceiver mUsbReceiver = new BroadcastReceiver()
|
||||
{
|
||||
public void onReceive(Context context, Intent intent)
|
||||
{
|
||||
String action = intent.getAction();
|
||||
if (action.equals(ACTION_USB_PERMISSION))
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
|
||||
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
|
||||
{
|
||||
if (device != null)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static UsbManager usbManager = null;
|
||||
public static UsbDevice usbDevice = null;
|
||||
public static UsbInterface usbInterface = null;
|
||||
public static UsbDeviceConnection usbConnection = null;
|
||||
public static UsbEndpoint epOut;
|
||||
public static UsbEndpoint epIn;
|
||||
public static int SendBlockSize = 0;
|
||||
public static int RecvBlockSize = 0;
|
||||
|
||||
public static synchronized long GetUsbPermission(Context ctx, int Vid, int Pid)
|
||||
{
|
||||
try
|
||||
{
|
||||
usbManager = (UsbManager)ctx.getSystemService(Context.USB_SERVICE);
|
||||
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
|
||||
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
|
||||
|
||||
usbDevice = null;
|
||||
while (deviceIterator.hasNext())
|
||||
{
|
||||
UsbDevice device = deviceIterator.next();
|
||||
if ((device.getVendorId() == Vid) && (device.getProductId() == Pid))
|
||||
{
|
||||
usbDevice = device;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (usbDevice == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(usbDevice.getInterfaceCount() <= 0)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
usbInterface = usbDevice.getInterface(0);
|
||||
if(usbInterface == null)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
// 判断是否有权限
|
||||
if(!usbManager.hasPermission(usbDevice))
|
||||
{
|
||||
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(ctx, 0, new Intent(ACTION_USB_PERMISSION), 0);
|
||||
IntentFilter permissionFilter = new IntentFilter(ACTION_USB_PERMISSION);
|
||||
ctx.registerReceiver(mUsbReceiver, permissionFilter);
|
||||
usbManager.requestPermission(usbDevice, mPermissionIntent);
|
||||
System.out.print("Requesting Usb Permission");
|
||||
while(!usbManager.hasPermission(usbDevice))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static long UsbOpenPort(int Vid, int Pid)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (usbDevice == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
usbConnection = usbManager.openDevice(usbDevice);
|
||||
if(usbConnection == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(usbInterface == null)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
if(!usbConnection.claimInterface(usbInterface, true))
|
||||
{
|
||||
usbConnection.close();
|
||||
usbConnection = null;
|
||||
return -2;
|
||||
}
|
||||
|
||||
for(int i = 0; i < usbInterface.getEndpointCount(); i++)
|
||||
{
|
||||
UsbEndpoint endPoint = usbInterface.getEndpoint(i);
|
||||
switch(endPoint.getType())
|
||||
{
|
||||
case UsbConstants.USB_ENDPOINT_XFER_BULK:
|
||||
case UsbConstants.USB_ENDPOINT_XFER_INT:
|
||||
{
|
||||
switch(endPoint.getDirection())
|
||||
{
|
||||
case UsbConstants.USB_DIR_OUT:
|
||||
{
|
||||
epOut = endPoint;
|
||||
break;
|
||||
}
|
||||
case UsbConstants.USB_DIR_IN:
|
||||
{
|
||||
epIn = endPoint;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case UsbConstants.USB_ENDPOINT_XFER_CONTROL:
|
||||
{
|
||||
epOut = endPoint;
|
||||
epIn = endPoint;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SendBlockSize = epOut.getMaxPacketSize();
|
||||
RecvBlockSize = epIn.getMaxPacketSize();
|
||||
|
||||
return SendBlockSize;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static long UsbWrite(byte[] buffer, int len, int timeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
return usbConnection.bulkTransfer(epOut, buffer, SendBlockSize, timeout);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static long UsbRead(byte[] buffer, int timeout)
|
||||
{
|
||||
/*
|
||||
try
|
||||
{
|
||||
Thread.sleep(10);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
*/
|
||||
|
||||
try
|
||||
{
|
||||
return usbConnection.bulkTransfer(epIn, buffer, RecvBlockSize, timeout);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static long UsbCtrlWrite(byte[] buffer, int len, int timeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
return usbConnection.controlTransfer(0x21, 0x09, 0x0200, 0x0000, buffer, SendBlockSize, timeout);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static long UsbCtrlRead(byte[] buffer, int timeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep(10);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return usbConnection.controlTransfer(0xA1, 0x01, 0x0100, 0x0000, buffer, RecvBlockSize, timeout);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
return -99;
|
||||
}
|
||||
}
|
||||
|
||||
public static void UsbClosePort()
|
||||
{
|
||||
try
|
||||
{
|
||||
usbConnection.releaseInterface(usbInterface);
|
||||
usbConnection.close();
|
||||
usbConnection = null;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
01SDK/神思标准化接口规范-设备接口层.doc
Normal file
BIN
01SDK/神思标准化接口规范-设备接口层.doc
Normal file
Binary file not shown.
201
01SDK/身份证接口文档提取.txt
Normal file
201
01SDK/身份证接口文档提取.txt
Normal file
@@ -0,0 +1,201 @@
|
||||
2.3.1 基本接口
|
||||
2.3.1.1 打开设备
|
||||
函数名称 打开设备
|
||||
函数声明 long OpenDevice(char *PortType, char *PortPara, char *ExtendPara);
|
||||
功能描述 与设备建立通讯连接,返回设备句柄。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 PortType IN 字符串 端口类型(详见参数补充说明)
|
||||
2 PortPara IN 字符串 端口参数(详见参数补充说明)
|
||||
3 ExtendPara IN 字符串 扩展参数(详见参数补充说明)
|
||||
返回值 大于0表示成功,数值为设备句柄;其他为失败。
|
||||
|
||||
参数补充说明:
|
||||
PortType PortPara ExtendPara
|
||||
串口 COMn 或 1~1000 波特率(9600、115200) 串口扩展盒参数(1B2541)
|
||||
USB USBn 或 1001~2000 VID_PID(261A0011、261A0012) 中断传输为:MI 控制传输为:MC
|
||||
网口 SKT IP:端口(192.168.0.1:8080)
|
||||
蓝牙 BTH 蓝牙名称(SS728M801)
|
||||
自动 AUTO
|
||||
注意事项:
|
||||
1、COMn和USBn中n∈1~1000,即COM1~COM1000(1~1000)和USB1~USB1000(1001~2000)
|
||||
2、Linux/Android下串口传参为:COM+串口文件路径,例如:COM/dev/ttyS4
|
||||
3、端口类型为AUTO时,是指各参数通过CommonInterface.ini配置文件获取,用法详见附录C方案二。
|
||||
神思USB读卡器的VID_PID对照表请参见附录B
|
||||
2.3.1.2 关闭设备
|
||||
函数名称 关闭设备
|
||||
函数声明 long CloseDevice();
|
||||
功能描述 断开与设备的通讯连接。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.1.3 设置当前设备(多设备操作)
|
||||
函数名称 设置当前设备
|
||||
函数声明 long SetCurrentDevice(long DevHandle);
|
||||
功能描述 一台PC连接多台读卡器时,通过设备句柄设置接下来要操作的设备。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 PortHandle IN 长整型 设备句柄
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.1.4 获取当前设备(多设备操作)
|
||||
函数名称 获取当前设备
|
||||
函数声明 long GetCurrentDevice();
|
||||
功能描述 一台PC连接多台读卡器时,获取当前操作的设备句柄。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
|
||||
返回值 返回当前设备的句柄。
|
||||
2.3.1.5 获取接口库信息
|
||||
函数名称 获取接口库信息
|
||||
函数声明 long GetLibraryInfo(char *Version, char * Description);
|
||||
功能描述 获取当前已加载的接口库详细信息。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 Version OUT 字符串 接口库版本
|
||||
2 Description OUT 字符串 接口库描述
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.1.6 获取设备型号
|
||||
函数名称 获取设备型号
|
||||
函数声明 long TerminalGetModel(char *TerminalModel);
|
||||
功能描述 获取读卡器的型号。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 TerminalModel OUT 字符串 设备型号
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.1.7 设备轮询心跳
|
||||
函数名称 设备轮询心跳
|
||||
函数声明 long TerminalHeartBeat();
|
||||
功能描述 与设备进行握手通讯,用于检测与读卡器是否已建立连接并且通讯正常。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
|
||||
返回值 0表示成功;非0表示失败。
|
||||
|
||||
2.3.1.8 获取接收数据
|
||||
函数名称 获取接收数据
|
||||
函数声明 long GetLastRecvData(unsigned char *LastRecvData);
|
||||
功能描述 获取最后一次通讯收到的数据,一般用于获取读卡器协议层错误信息。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 LastRecvData OUT 字节数组 返回最后一次通讯收到的数据
|
||||
返回值 返回收到的数据长度。
|
||||
|
||||
2.3.1.9 获取固件版本
|
||||
函数名称 获取设备固件版本
|
||||
函数声明 long TerminalGetFirmVersion(char *FirmVersion, char *HardwareVersion);
|
||||
功能描述 获取读卡器的固件版本号。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 FirmVersion OUT 字符串 设备固件版本号
|
||||
2 HardwareVersion OUT 字符串 设备硬件版本号
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.1.10 获取设备序列号
|
||||
函数名称 获取设备序列号
|
||||
函数声明 long TerminalGetSn(char *TerminalSn);
|
||||
功能描述 获取读卡器的固件版本号。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 TerminalSn OUT 字符串 设备序列号
|
||||
返回值 0表示成功;非0表示失败。
|
||||
|
||||
|
||||
|
||||
2.3.2 二代证接口(二代证/外国人/港澳台)
|
||||
2.3.2.1 读取二代证
|
||||
函数名称 读取二代证
|
||||
函数声明 long IdReadCard(unsigned char CardType, unsigned char InfoEncoding, char *IdCardInfo,
|
||||
long TimeOutMs);
|
||||
long SdtReadCard(unsigned char CardType, unsigned char InfoEncoding, char *IdCardInfo,
|
||||
long TimeOutMs);(GA467协议)
|
||||
功能描述 读取第二代居民身份证或外国人永久居留证或港澳台居民居住证
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 CardType IN 字节 读取卡类型
|
||||
0x00 :读取二代证或外国人或港澳台
|
||||
0x01 :只读二代证
|
||||
0x02 :只读外国人
|
||||
0x03 :只读港澳台
|
||||
|
||||
以上参数不含指纹信息
|
||||
以下参数包含指纹信息
|
||||
|
||||
0x10 :读取二代证或外国人或港澳台 (含指纹)
|
||||
0x11 :只读二代证(含指纹)
|
||||
0x12 :只读外国人(含指纹)
|
||||
0x13 :只读港澳台(含指纹)
|
||||
2 InfoEncoding IN 字节 返回信息的编码方式
|
||||
0x01 :GB18030编码(GBK)
|
||||
0x02 :UTF16-LE编码
|
||||
0x03 :UTF-8编码
|
||||
3 IdCardInfo OUT 字符串 读取到的二代证/外国人/港澳台信息
|
||||
(至少分配10240字节的内存)
|
||||
4 TimeOutMs IN 长整型 读卡超时时间,单位为毫秒
|
||||
= 0 :不等待,无卡立即返回
|
||||
> 0 :等待放卡,指定时间内等待放卡
|
||||
返回值 0表示成功;非0表示失败。
|
||||
|
||||
读卡返回信息IdCardInfo格式为以英文冒号分割的信息项,具体如下:
|
||||
证件类型:中文姓名:英文姓名:性别:性别代码:民族:民族代码:出生日期:住址:身份证号码:签发机关:发卡日期:卡有效期:证件版本号:头像JPG照片base64编码:指纹特征值base64编码
|
||||
以上信息为二代证、外国人、港澳台信息项的并集,如果当前类型的证件中不存在该项信息,则该项为空,具体证件中包含的信息项如下:
|
||||
序号 信息项 二代证 外国人 港澳台 自动解析函数
|
||||
0 证件类型 A I或Y J IdCardGetTypeFlag
|
||||
1 中文姓名 姓名 中文姓名 姓名 IdCardGetName
|
||||
2 英文姓名 英文姓名 IdCardGetNameEn
|
||||
3 性别 性别 性别 性别 IdCardGetGender
|
||||
4 性别代码 性别代码 性别代码 性别代码 IdCardGetGenderId
|
||||
5 民族 民族 国籍或所在地区 IdCardGetNation
|
||||
6 民族代码 民族代码 国籍或所在地区代码 通行证号码 IdCardGetNationId
|
||||
7 出生日期 出生日期 出生日期 出生日期 IdCardGetBirthDate
|
||||
8 住址 住址 /永久居留证号码关联项 住址 IdCardGetAddress
|
||||
9 身份证号码 公民身份号码 永久居留证号码/证件号码 公民身份号码 IdCardGetIdNumber
|
||||
10 签发机关 签发机关 当次申请受理机关代码 签发机关 IdCardGetSignOrgan
|
||||
11 发卡日期 有效期
|
||||
起始日期 证件签发日期 有效期
|
||||
起始日期 IdCardGetBeginTerm
|
||||
12 卡有效期 有效期
|
||||
截止日期 证件终止日期 有效期
|
||||
截止日期 IdCardGetValidTerm
|
||||
13 证件版本号 证件版本号/换证次数 签发次数 IdCardGetVersion
|
||||
14 头像JPG照片base64编码 头像照片base64编码 头像照片base64编码 头像照片base64编码
|
||||
15 指纹特征值base64编码 指纹特征值base64编码 指纹特征值base64编码
|
||||
|
||||
各信息项建议通过拆分IdCardInfo字符串得到,不建议使用以下函数获取:
|
||||
long IdCardGetName(char *Name);
|
||||
long IdCardGetNameEn(char *NameEn);
|
||||
long IdCardGetGender(char *Gender);
|
||||
long IdCardGetGenderId(char *GenderId);
|
||||
long IdCardGetNation(char *Nation);
|
||||
long IdCardGetNationId(char *NationId);
|
||||
long IdCardGetBirthDate(char *BirthDate);
|
||||
long IdCardGetAddress(char *Address);
|
||||
long IdCardGetIdNumber(char *IdNumber);
|
||||
long IdCardGetSignOrgan(char *SignOrgan);
|
||||
long IdCardGetBeginTerm(char *BeginTerm);
|
||||
long IdCardGetValidTerm(char *ValidTerm);
|
||||
long IdCardGetTypeFlag(char *TypeFlag);
|
||||
long IdCardGetVersion(char *Version);
|
||||
long IdCardGetFPBuffer(unsigned char *FPBuffer, long *FPBufferLen);//返回1024字节指纹信息(两个手指)
|
||||
long IdCardGetPhotoFile(char *PhotoFile);//入参PhotoFile为生成头像文件的全路径,支持扩展名wlt/bmp/jpg
|
||||
long IdCardGetPhotoBuffer(unsigned char WltBmpJpg, unsigned char *PhotoBuffer, long *PhotoBufferLen);
|
||||
WltBmpJpg入参:0x01 :wlt格式 0x02 :bmp格式 0x03 :jpg格式
|
||||
|
||||
//获取二代证原始信息
|
||||
long IdCardGetRawInfo(unsigned char *CHMsg, long *CHMsgLen, //文字信息
|
||||
unsigned char *PHMsg, long *PHMsgLen, //照片信息
|
||||
unsigned char *FPMsg, long *FPMsgLen); //指纹信息
|
||||
|
||||
2.3.2.2 读取追加住址
|
||||
函数名称 读取追加住址
|
||||
函数声明 long IdReadNewAddress(char *NewAddress);
|
||||
long SdtReadNewAddress(char *NewAddress); (GA467协议)
|
||||
功能描述 读取二代证的追加住址信息
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 NewAddress OUT 字符串 返回读取到的追加住址信息
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.2.3 获取SAM模块状态
|
||||
函数名称 获取SAM模块状态
|
||||
函数声明 long SamGetStatus();
|
||||
long SdtSamGetStatus();(GA467协议)
|
||||
功能描述 获取公安部SAM安全模块状态。
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
|
||||
返回值 0表示成功;非0表示失败。
|
||||
2.3.2.4 获取SAM模块编号字符串
|
||||
函数名称 获取SAM模块编号字符串
|
||||
函数声明 long SamGetIdStr(char *SamIdStr);
|
||||
long SdtSamGetIdStr(char *SamIdStr); (GA467协议)
|
||||
功能描述 获取公安部SAM安全模块编号字符串。(内部将编号转换为字符串)
|
||||
参数说明 序号 参数 输入/输出 类型 含义
|
||||
1 SamIdStr OUT 字符串 SAM模块编号字符串
|
||||
返回值 0表示成功;非0表示失败。
|
||||
|
||||
Reference in New Issue
Block a user