精品久久香蕉国产线看观看亚洲丨aⅴ一级片丨无码人妻一区二区三区精品视频丨国产精品亚洲精品一区二区丨99视频久久丨国产肥老妇对白清丨国产在线第一页丨国产男女嘿咻视频在线观看丨性色综合丨少妇高清一区二区免费看丨久久久久久久久久久久丨亚洲中文字幕无码中文丨久久ク成人精品中文字幕丨午夜视频免费在线丨国精品人妻无码一区二区三区3d丨国产精品jk白丝在线播放丨欧美色插丨真人作爱90分钟免费看视频丨玖玖爱资源站丨国产黄a三级三级看三级丨九色视频导航丨天堂网在线中文丨四虎影视国产精品永久地址丨亚洲免费福利视频丨久久天天躁狠狠躁夜夜夜

Android系統接入IC卡讀寫器 Android系統IC卡讀寫器二次開發說明

2019-07-01 14:41:00
諾塔斯智能科技
原創
5573
摘要:目前,市面上支持Android系統的智能卡讀寫器還是比較少,有部分采用串口通信的IC卡讀寫,在與Android設備進行接入和二次開發過程中非常不方便。因此,諾塔斯智能科技有限公司早在2013年就推出了基于Android系統免驅的USB 和串口,藍牙,WIFI、RJ45有線網絡等多種通信方式的智能卡讀寫器。

隨著國家2035年計劃的提出,以及國家十三五規劃等全面的提出信息安全被提升到國家安全的層面,工業領域的發展更是提高到新的高度,搭載Android系統的設備被廣泛用于電力行業、石油石化行業軌道交通及先進制造業。目前,市面上支持Android系統的智能卡讀寫器還是比較少,有部分采用串口通信的IC卡讀寫,在與Android設備進行接入和二次開發過程中非常不方便。因此,諾塔斯智能科技有限公司早在2013年就推出了基于Android系統免驅的USB 和串口,藍牙,WIFI、RJ45有線網絡等多種通信方式的智能卡讀寫器。

以下內容是針對諾塔斯L3-U非接觸式IC卡讀寫器在Android系統中的二次開發范例說明,其它型號的智能卡讀寫器在Android系統中的二次開發,大致相同,修改設備初始化參數即可,具體可以在開發過程中咨詢技術支持。

首先,需要Android設備支持USB HOST或者OTG通信,在AndroidManifest.xml文件中進行USB權限配置。


Android配置文件要求

        在你使用以上API進行開發之前,你需要在你的AndroidManifest.xml文件中添加以下內容:

   1.因為并不能保證所有的安卓設備都支持以上API,所以你需要聲明:

<uses-sdk android:minSdkVersion="12" />12以下的版本是不支持以上APId的。

<uses-feature android:name="android.hardware.usb.host" />     

   2.如果你想有一個USB設備接入你的安卓設備時能夠通知你的應用程序,那么你需要在你的Activity標簽中聲明以下內容

<intent-filter>

<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />


</intent-filter>

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />

Resource屬性指定了要過濾的數據設備信息,包括:

    1)  vendor-id 設備生產商id

    2)  product-id 設備id

    3)  class 設備類別

    4)  subclass 設備子類

    5)  protocol(device or interface) 協議類別      

  device_filter.xml文件放在res\xml目錄下,其中文件名不包括擴展名部分需要與<meta-data/> 標簽中聲明的一致。示例如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" />
</resources>

開發步驟

1、在Android開發工程文件夾libs文件夾中導入外部.so庫文件,我們為客戶提供了多種平臺的庫。包括,arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86、x86_64等,具體可以參考Android IC卡讀寫器二次開發范例。

2、定義關鍵參數,以ISO14443 A卡為例,定義相關參數如下:

package cc.lotuscard;
public class LotusCardParam {
	public LotusCardParam()
	{
		arrCardNo = new byte[8];
		arrBuffer = new byte[64];
		arrKeys = new byte[64];
		arrCosResultBuffer =  new byte[256];
		arrCosSendBuffer = new byte[256];
	}
	/**
	 * 卡片類型
	 */
	public int nCardType;
	/**
	 * 8字節卡號
	 */
	public byte[] arrCardNo;
	
	/**
	 * 卡片容量大小
	 */
	public int nCardSize;
	
	/**
	 * 讀寫緩沖
	 */
	public byte[] arrBuffer;
	
	/**
	 * 緩沖大小
	 */
	public int nBufferSize;
	/**
	 * 密鑰
	 */
	public byte[] arrKeys;
	
	/**
	 * KEYs大小
	 *
	 */
	public int nKeysSize;
	/**
	 * pCosResultBuffer COS執行結果緩沖
	 */
	public byte[] arrCosResultBuffer;
	/**
	 * unCosReultBufferLength COS執行結果緩沖長度 
	 */
	public int unCosReultBufferLength;	
	
	/**
	 * pCosSendBuffer COS指令發送緩沖
	 */
	public byte[] arrCosSendBuffer;
	/**
	 * unCosSendBufferLength COS指令發送緩沖長度 
	 */
	public int unCosSendBufferLength;	
}

注意:包名必須按照 package cc.lotuscard;這種格式。

3、針對Mifare S50非接觸式IC卡的讀寫操作,如下:


package cn.highwillow.m1test;
import android.app.PendingIntent;
import android.content.Intent;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import cc.lotuscard.ILotusCallBack;
import cc.lotuscard.LotusCardDriver;
import cc.lotuscard.LotusCardParam;
import static cc.lotuscard.LotusCardDriver.m_InEndpoint;
import static cc.lotuscard.LotusCardDriver.m_OutEndpoint;
import static cc.lotuscard.LotusCardDriver.m_UsbDeviceConnection;
public class MainActivity extends AppCompatActivity implements ILotusCallBack {
    private EditText m_edtLog;
    private ImageView m_imgIdPhoto;
    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";
    private Boolean m_bUseUsbHostApi = true;
    private Boolean m_bCanUseUsbHostApi = true;
    private String m_strDeviceNode;
    private long m_nDeviceHandle = -1;
    private Handler m_Handler = null;
    private LotusCardDriver mLotusCardDriver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        m_edtLog = (EditText) findViewById(R.id.edtLog);
        m_imgIdPhoto = (ImageView) findViewById(R.id.imgIdPhoto);
        // 設置USB讀寫回調 串口可以不用此操作
        m_bCanUseUsbHostApi = SetUsbCallBack();
        if (m_bCanUseUsbHostApi) {
            AddLog("Find LotusSmart IC Reader!");
            AddLog("Device Node:" + m_strDeviceNode);
        } else {
            AddLog("Not Find LotusSmart IC Reader!");
        }
        mLotusCardDriver = new LotusCardDriver();
        mLotusCardDriver.m_lotusCallBack = this;
    }
    public void OnClearLogListener(View arg0) {
        if (null != m_imgIdPhoto) {
            m_imgIdPhoto.setBackgroundColor(0);
        }
        if (null == m_edtLog)
            return;
        m_edtLog.setText("");
    }
    private Boolean SetUsbCallBack() {
        Boolean bResult = false;
        PendingIntent pendingIntent;
        pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(
                ACTION_USB_PERMISSION), 0);
        m_UsbManager = (UsbManager) getSystemService(USB_SERVICE);
        if (null == m_UsbManager)
            return bResult;
        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;
                    m_strDeviceNode = m_LotusCardDevice.getDeviceName();
                    break;
                }
            }
        }
        if (null == m_LotusCardDevice)
            return bResult;
        m_LotusCardInterface = m_LotusCardDevice.getInterface(0);
        if (null == m_LotusCardInterface)
            return bResult;
        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 bResult;
        if (conn.claimInterface(m_LotusCardInterface, true)) {
            m_LotusCardDeviceConnection = conn;
        } else {
            conn.close();
        }
        if (null == m_LotusCardDeviceConnection)
            return bResult;
        // 把上面獲取的對性設置到接口中用于回調操作
        m_UsbDeviceConnection = m_LotusCardDeviceConnection;
        if (m_LotusCardInterface.getEndpoint(1) != null) {
            m_OutEndpoint = m_LotusCardInterface.getEndpoint(1);
        }
        if (m_LotusCardInterface.getEndpoint(0) != null) {
            m_InEndpoint = m_LotusCardInterface.getEndpoint(0);
        }
        bResult = true;
        return bResult;
    }
    public void AddLog(String strLog) {
        //SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        //SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        SimpleDateFormat formatter = new SimpleDateFormat("MM-dd HH:mm:ss:SSS");
        Date curDate = new Date(System.currentTimeMillis());// 獲取當前時間
        String strDate = formatter.format(curDate);
        if (null == m_edtLog)
            return;
        String strLogs = m_edtLog.getText().toString().trim();
        if (strLogs.equals("")) {
            strLogs = strDate + " " + strLog;
        } else {
            strLogs += "\r\n" + strDate + " " + strLog;
        }
        m_edtLog.setText(strLogs);
    }
    public void OnTestM1Listener(View arg0) {
        if (null == mLotusCardDriver)
            return;
        if (m_nDeviceHandle == -1) {
            m_nDeviceHandle = mLotusCardDriver.OpenDevice("", 0, 0, 0, 0,// 使用內部默認超時設置
                    true);
        }
        if (m_nDeviceHandle != -1) {
             AddLog("Open Device Success!");
            testIcCardReader(m_nDeviceHandle);
        } else {
            AddLog("Open Device False!");
        }
    }
    public long bytes2long(byte[] byteNum) {
        long num = 0;
        for (int ix = 3; ix >= 0; --ix) {
            num <<= 8;
            if (byteNum[ix] < 0) {
                num |= (256 + (byteNum[ix]) & 0xff);
            } else {
                num |= (byteNum[ix] & 0xff);
            }
        }
        return num;
    }
    public String leftString(String strText, int nLeftLength) {
        if (1 == strText.length())
            strText = "0" + strText;
        if (strText.length() <= nLeftLength)
            return strText;
        return strText.substring(strText.length() - nLeftLength,
                strText.length());
    }
    private void testIcCardReader(long nDeviceHandle) {
        boolean bResult = false;
        int nRequestType;
        long lCardNo = 0;
        LotusCardParam tLotusCardParam1 = new LotusCardParam();
        bResult = mLotusCardDriver.Beep(nDeviceHandle, 10);
        // bResult = mLotusCardDriver.Beep(nDeviceHandle, 10);
        if (!bResult) {
            AddLog("Call Beep Error!");
            return;
        }
        AddLog("Call Beep Ok!");
        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) {
            AddLog("Call GetCardNo Error!");
            return;
        }
        lCardNo = bytes2long(tLotusCardParam1.arrCardNo);
        AddLog("Call GetCardNo Ok!");
        AddLog("CardNo(DEC):" + lCardNo);
        AddLog("CardNo(HEX):"
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrCardNo[3]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrCardNo[2]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrCardNo[1]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrCardNo[0]), 2)
                .toUpperCase());
        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;
        boolean bUseLoadKey = false;
        if(true == bUseLoadKey) {
            bResult = mLotusCardDriver.LoadKey(nDeviceHandle, LotusCardDriver.AM_A,
                    0, tLotusCardParam1);
            if (!bResult) {
                AddLog("Call LoadKey Error!");
                return;
            }
            AddLog("Call LoadKey Ok!");
            bResult = mLotusCardDriver.Authentication(nDeviceHandle,
                    LotusCardDriver.AM_A, 0, tLotusCardParam1);
        }
        else {
            //直接使用參數里面的密碼
            bResult = mLotusCardDriver.AuthenticationWithPassword(nDeviceHandle,
                    LotusCardDriver.AM_A, 0, tLotusCardParam1);
        }
        if (!bResult) {
            AddLog("Call Authentication(A) Error!");
            return;
        }
        AddLog("Call Authentication(A) Ok!");
        bResult = mLotusCardDriver.Read(nDeviceHandle, 1, tLotusCardParam1);
        if (!bResult) {
            AddLog("Call Read Error!");
            return;
        }
        AddLog("Call Read Ok!");
        AddLog("Buffer(HEX):"
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[1]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[2]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[3]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[4]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[5]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[6]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[7]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[8]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[9]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xa]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xb]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xc]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xd]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xe]), 2)
                .toUpperCase()
                + leftString(
                Integer.toHexString(tLotusCardParam1.arrBuffer[0xf]), 2)
                .toUpperCase());
        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) {
            AddLog("Call Write Error!");
            return;
        }
        AddLog("Call Write Ok!");
    }
    @Override
    public boolean callBackExtendIdDeviceProcess(Object objUser, byte[] arrBuffer) {
        return false;
    }
    @Override
    public boolean callBackReadWriteProcess(long nDeviceHandle, boolean bRead, byte[] arrBuffer) {
		int nResult = 0;
		boolean bResult = false;
		int nBufferLength = arrBuffer.length;
		int nWaitCount = 0;
		if (null == m_UsbDeviceConnection)
			return false;
		if (null == m_OutEndpoint)
			return false;
		if (null == m_InEndpoint)
			return false;
        //AddLog("callBackReadWriteProcess nBufferLength:" + nBufferLength);
		if (nBufferLength < 65)
			return false;
		if (true == bRead) {
			arrBuffer[0] = 0;
			while (true) {
				nResult = m_UsbDeviceConnection.bulkTransfer(m_InEndpoint,
						arrBuffer, 64, 3000);
				if (nResult <= 0)
					break;
				if (arrBuffer[0] != 0) {
					//此處調整一下
					System.arraycopy(arrBuffer, 0, arrBuffer, 1, nResult);
					arrBuffer[0] = (byte)nResult;
					break;
				}
				nWaitCount++;
				if (nWaitCount > 1000)
					break;
			}
            //AddLog("m_InEndpoint bulkTransfer Read:"+nResult);
			if (nResult == 64) {
				bResult = true;
			} else {
				bResult = false;
			}
		} else {
			nResult = m_UsbDeviceConnection.bulkTransfer(m_OutEndpoint,
					arrBuffer, 64, 3000);
            //AddLog("m_OutEndpoint bulkTransfer Write:"+nResult);
			if (nResult == 64) {
				bResult = true;
                //AddLog("m_OutEndpoint bulkTransfer Write Ok!");
			} else {
				bResult = false;
			}
		}
		return bResult;
    }
}

以上內容是關于Android系統接入IC卡讀寫器,以讀寫Mifare One S50非接觸式IC卡為例的非接觸式IC卡讀寫器Android開發范例。更多IC卡讀寫器Android開發范例,請下載我們的SDK范例源碼。

發表評論
評論通過審核后顯示。
熱門文章推薦
關于PSAM卡、SAM卡、SIM卡的特征和區別 2019-03-22 由于人們對PSAM卡、SAM卡、SIM卡的概念理解不到位加之很少仔細的對PSAM卡、SAM卡、SIM卡實物進行區別,容易將PSAM卡、SAM卡、SIM卡混為一談。諾塔斯智能科技就PSAM卡、SAM卡、SIM卡三者特征和作用進行介紹,幫助大家對PSAM卡、SAM卡、SIM卡進行深刻的認識和區分。
M1卡常見問題和處理方法 2019-02-21 M1卡是恩智浦出品的芯片縮寫,全稱為NXP Mifare1系列,常用的有S50及S70兩種型號,截止到2013年11月4日,已經有國產芯片與其兼容,利用PVC封裝M1芯片、感應天線,然后壓制成型后而制作的卡即是智能卡行業所說的M1卡。M1卡的優點是可讀可寫的多功能卡,缺點是:價格稍貴,感應距離短,目前適合非定額消費系統、停車場系統、門禁考勤系統等,目前應用最廣泛的非接觸式IC卡。
NFC數據交換格式(NDEF)規范 2019-05-28 為實現標簽和NFC設備,及NFC設備之間的交互通信,NFC論壇定義了稱為NFC數據交換格式(NDEF)的通用數據格式。 NDEF是輕量級的緊湊的二進制格式,可帶有URL,vCard和NFC定義的各種數據類型。
非接觸式IC卡(M1卡)區塊讀寫控制 2019-02-21 非接觸式IC卡系列中的Mifare One (M1卡)的優點是可讀可寫的多功能卡,缺點是:價格稍貴,感應距離短,目前適合非定額消費系統、停車場系統、門禁考勤系統等,目前應用最廣泛的 非接觸式IC卡。諾塔斯智能科技專業從事非接觸式IC卡讀寫器的研發與銷售,為各行業用戶提供專業的IC卡系統解決方案。
聯系我們
聯系人: 張經理
電話: 400-023-6659
傳真: 023-68798110
Email: 843718693@qq.com
QQ: 843718693
微信: Lotus-Smart
微博: lotusreader
旺旺: 諾塔斯智能科技有限公司
地址: 重慶市江北區宏帆路36號宏帆天地1棟6樓
  • 諾塔斯智能科技在線客服
    在線客服
  • 重慶諾塔斯智能科技有限公司微信公眾號
    關注微信
  • 諾塔斯智能科技網上商城
    網上商城
移動訪問
欧美综合一区| 成人男女网24免费| 激情婷婷| 欧美图片一区| 天天做天天爱夜夜夜爽毛片| a色网站| a亚洲精品| 国产精品高潮呻| 美女大量吞精在线观看456| 在线观看日韩| 国产精品99精品久久免费| 日本乱码视频| 久久免费资源| 丁香色婷婷| 中文字幕在线播放不卡| 麻豆精品91| 艳妇臀荡乳欲伦交换av1| 1111111少妇在线观看| 欧美一级一区| 国产传媒专区| 海角国产乱辈乱精品视频| 国产一区免费在线| 久久作爱| 久久天天躁狠狠躁夜夜2020| 2022一本久道久久综合狂躁| 麻豆影视| 老色批av| 欧美 亚洲 日韩 中文2019| 亚洲欧美中文字幕日韩一区二区| 丰满的少妇邻居中文bd| 伦埋琪琪电影院久久| 国产日批视频在线观看| 尤物视频免费在线观看| jzzijzzij亚洲农村妇女| 美国av毛片| 性久久久久久久久久久久| 亚欧成a人无码精品va片| 激情图片区| 久久久精品视频网站| 欧美成人tv| 日日麻批免费40分钟无码| 国产成人精品一区二区| 麻豆果冻传媒精品一区| 中国内地毛片免费高清| 国产一区二区精品久久岳| 成人黄色网址在线观看| 国产欧美精品一区二区三区| 国产做a爱片久久毛片| 久久久青| 久久亚洲精品国产精品| 毛片毛片毛片毛片毛片毛片 | xxxx日本黄色| 91av麻豆| 中文字幕一线产区和二线| 成人综合在线观看| 成色网| 丁香七月婷婷| youjizz亚洲女人| 人人妻人人爽日日人人| 亚洲精品一品区二品区三品区| 在线免费看av片| 三区在线视频| 免费国产高清毛不卡片基地| 五月综合激情婷婷六月色窝| 欧美日本三级| 变态另类久久变态变态| 精品国产成人高清在线观看| av黄色在线播放| 国产ts丝袜人妖系列视频| 黄色5级片| 日韩亚洲国产中文字幕欧美| 98视频在线| 韩国主播福利一区二区三区| 成人自慰女黄网站免费大全| 麻豆福利在线观看| 天海翼一二三区| 亚洲欧美在线视频| 亚洲中文字幕日本在线观看| 欧美精品密入口播放| 在线播放国产精品| 欧美性生 活18~19| 明神亚贵在线免费观看| 超碰在线香蕉| 双性美人强迫叫床喷水h| 中文成人无码精品久久久动漫| 免费精品国产人妻国语三上悠亚| 精品久久久久久久久亚洲| 日本资源在线| 欧美色图国产精品| 午夜男女爽爽爽免费体验区| 做爰xxxⅹ高潮69网站| 人人妻人人妻人人妻碰碰| 99re这里只有精品在线观看| 日韩欧美精品在线| 91色| 亚洲福利专区| av片子在线观看| 亚洲图片欧美在线| 狠狠色噜噜狠狠狠777米奇| 久久久久久久国产精品毛片| 欧美成人精品视频在线不卡| 91福利在线看| 成人高潮片免费视频欧美| 97色成人综合网站| 两性色午夜免费视频| 国产真人作爱免费视频道歉| 婷婷干| 又爽又黄又无遮挡网站动态图| 日韩免费成人| se69色成人网wwwsex| av片国产| 黄色日本网站| 四虎新网址| 少妇与子乱在线观看| 欧美在线91| 色窝窝无码一区二区三区| 亚洲色图视频网站| 精品国产中文字幕在线视频| 日本泡妞xxxx免费视频软件| 91精品国产综合久久久久久蜜臀| 亚洲毛片在线播放| 黄色免费看视频| 国产顶级熟妇高潮xxxxx| 久久国产影视| 免费asmr色诱娇喘呻吟外国| 日本九九视频| 国产精品乱码久久久久久小说| 免费成人激情视频| 亚洲熟女片嫩草影院| 日本道精品一区二区三区| 色婷婷我要去我去也| 动漫av在线| 精品一卡2卡三卡4卡乱码理论| 丰满大爆乳波霸奶| 成人免费ā片在线观看| 免费看黄色一级大片| 精品人伦一区二区三电影| 麻豆影视在线免费观看| 91黑丝视频| 国产精品久久二区| 国产成人精品免费视频app软件 | 人妻无码一区二区三区欧美熟妇| 国产亚洲福利| 国产精品18久久久久久久| 欧美爱爱免费视频| 国产精品内射后入合集| 久久www免费人成精品| 国产妇女馒头高清泬20p多毛| 超碰97人人在线| 动漫av在线免费观看| 黄色3级视频| 亚洲丁香网| 天堂综合网| 中国一级片在线观看| 亚州激情视频| 成人午夜视频精品一区| 欧美日韩中日| 性一级视频| 亚洲一区二区三区av无码| 欧洲女女同videos| 午夜福利1000集在线观看| 国产精品久久久久久婷婷| 麻豆视频精品| 巨胸喷奶水www视频网站| 乳女教师の诱惑juliamagnet| 国产黄a三级三级看三级| 黄色片特级| 午夜影院在线看| 国产亚洲aⅴ在线电影| 日韩免费一区二区| 国产网站一区二区| 中文字幕大香视频蕉免费| 69国产成人综合久久精品| 五月婷综合网| 国产欧美中文字幕| 精产国品一二三产品99麻豆| 青青草.com| 天堂久久精品忘忧草| 近亲伦l中文字幕| ass日本寡妇pics| 久久免费精品视频| 亚洲午夜片| 黄色香蕉网| 日本黄色性视频| 十八禁毛片| 国产精品视频在线看| 色欲久久九色一区二区三区| 96亚洲精品久久| av无码av天天av天天爽| 永久免费精品视频| 人妻丰满熟妇av无码区app| 亚洲码视频| 日本亚洲欧洲无免费码在线| 亚洲精品午夜久久久| 老熟妇仑乱视频一区二区| 少妇愉情理伦片丰满丰满午夜| 91福利视频网站| 爱情岛论坛成人av| 亚洲日韩精品射精日| 老牛影视av一区二区在线观看| 国产欧美精品在线观看| 男女晚上日日麻批视频| 成人国产综合| 成人免费淫片aa视频免费| 日韩免费无码专区精品观看| 人人妻人人藻人人爽欧美一区| 沙奈朵狂揉下部羞羞动漫| 精品少妇久久久久久888优播| 美女一区二区三区| 久热这里| 国产精自产拍久久久久久蜜小说| 亚洲色爱免费观看视频| www.av在线视频| 黄色av免费播放| 日本卡2卡3卡4卡5卡精品视频| 女警高潮潮一夜一区二区三区毛片 | 成人在线观看亚洲| 9l蝌蚪porny中文自拍| 日韩国产一区二区三区四区五区| 亚洲色一色噜一噜噜噜| 成年女人毛片免费观看97| 日日爱886| 亚洲欧洲日产国码av老年人| 国产亚洲aⅴ在线电影| 91天堂在线| 国产 精品 自在 线免费| 婷婷丁香在线| 国产aaa| 国产激情久久久久久熟女老人| 玖玖热麻豆国产精品图片| 日本精品不卡| 免费在线播放毛片| ww又激又色又爽又免费视频| 乱人伦xxxx国语对白| 国产欧美又粗又猛又爽| 77777亚洲午夜久久多喷| 国产传媒专区| 风间由美性色一区二区三区| 天天影视网色香欲综合网| 亚洲在线色| 99精品欧美一区二区三区综合在线 | 中文字幕无码热在线视频| 黄色片女人| 六月婷婷啪啪| 果冻传媒剧国产剧情mv在线| 久久综合伊人77777麻豆| 新婚若妻侵犯中文字幕 | 日产中文字幕一码| 天堂网www天堂在线中文| 国产精品资源一区二区| 国产自产v一区二区三区c| 亚洲v国产v| 国产与黑人在线播放| 亚洲精品无码永久电影在线| 深夜福利网站在线观看| 亚洲一个色| 国产精品无码a∨麻豆| 99久热在线精品| 国产呻吟对白刺激无套视频在线| 丰满熟妇乱又伦在线无码视频| 青青伊人久久| 国产精品pans私拍| 成人午夜电影福利免费| 亚洲人成综合网站7777香蕉| 亚洲第一天堂av| 五月天婷婷亚洲| heyzo北岛玲在线播放| 亚洲精品av羞羞禁网站| 91黄色小视频| 中文成人久久久久影院免费观看| 成人日韩欧美| 99爱精品| 亚洲成人网在线播放| 成人国产网站v片免费观看| 国产精品成人久久电影| 国产又粗又猛又大爽| 琪琪午夜理论片福利在线观看| 91av视频网站| 老牛嫩草一区二区三区眼镜 | 欧美一区二区三区视频在线| av免费网页| 国产精品日本亚洲777| 国产综合视频在线| 日韩久久不卡| 成人在线观看视频网站| 欧美性videos高清精品| 特级毛片在线| 日本乱淫a∨片| 色女人在线| 冲田杏梨在线| 久久精品99av高久久精品| 狠狠色丁香婷婷| 天堂网www在线资源| 久久久久久av无码免费网站下载| 麻豆文化传媒精品一区| 亚洲色偷拍另类无码专区| av免费毛片| 国产高清精品福利私拍国产写真| 强开小婷嫩苞又嫩又紧视频| 成年人在线观看视频免费| 人妻 色综合网站| 婷婷五月深爱憿情网| 午夜福利理论片在线观看| 97人人超| 国产精品极品白嫩| 国产一区二区三区av网站 | 18禁美女黄网站色大片免费看| 欧美另类性| 亚洲国产av玩弄放荡人妇| 欧美激情 国产精品| 99久久久99久久国产片鸭王| 激情黄色小说视频| 性按摩玩人妻hd中文字幕| 亚洲欧洲av在线| 日本免费更新一二三区不卡| 亚洲另类伦春色综合图片| 蜜乳av一区二区| 在线免费看黄色片| 亚洲欧美成人久久一区| 在线免费小视频| 性刺激的欧美三级视频中文字幕| 久久青草免费视频| 日韩成人一级片| yy6080午夜八戒国产亚洲| 亚洲免费视频一区二区三区| 国产成人亚洲精品无码蜜芽| 亚洲欧美色图在线| 婷婷六月综合网| 在线色av| 日本特黄网站| 丝袜 中出 制服 人妻 美腿| 国产精品国产三级国产在线观看| www.看毛片| 国产极品视频在线观看| 亚洲欧美自偷自拍视频图片| 波多野结av衣东京热无码专区| 广东少妇大战黑人34厘米视频| 揉捏奶头高潮呻吟视频| 美女福利一区| 一区二区三区四区五区视频 |