精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

當 USB 設備連接到 Android 設備時會發生什么?

移動開發 Android
當USB設備掛載連接到時,操作系統會檢測設備的VID和PID,根據這些信息加載相應的驅動程序,確保設備能夠正常工作。

當USB設備連接到Android設備時,我們會收到如下系統廣播數據,通過UsbDevice對象,你可以獲取設備的VID、PID、產品名稱、制造商名稱等基本信息。

UsbDevice[
    mName=/dev/bus/usb/002/005,
    mVendorId=1008,
    mProductId=1694,
    mClass=0,
    mSubclass=0,
    mProtocol=0,
    mManufacturerName=HP Inc.,
    mProductName=HP Laser 1008a,
    mVersion=2.0,
    mSerialNumber=CNB1RC683F,
    mConfigurations=[
        UsbConfiguration[
            mId=1,
            mName=null,
            mAttributes=192,
            mMaxPower=1,
            mInterfaces=[
                UsbInterface[
                    mId=0,
                    mAlternateSetting=0,
                    mName=null,
                    mClass=7,
                    mSubclass=1,
                    mProtocol=2,
                    mEndpoints=[
                        UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                        UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                    ]
                UsbInterface[
                    mId=0,
                    mAlternateSetting=1,
                    mName=null,
                    mClass=7,
                    mSubclass=1,
                    mProtocol=4,
                    mEndpoints=[
                        UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                        UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                    ]
                UsbInterface[
                    mId=1,
                    mAlternateSetting=0,
                    mName=null,
                    mClass=255,
                    mSubclass=4,
                    mProtocol=1,
                    mEndpoints=[
                        UsbEndpoint[mAddress=6,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                        UsbEndpoint[mAddress=133,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                    ]
                UsbInterface[
                    mId=1,
                    mAlternateSetting=1,
                    mName=null,
                    mClass=7,
                    mSubclass=1,
                    mProtocol=4,
                    mEndpoints=[
                        UsbEndpoint[mAddress=6,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                        UsbEndpoint[mAddress=133,mAttributes=2,mMaxPacketSize=512,mInterval=10]
                    ]
                ]
            ]

VID

(Vendor ID)是USB設備的一個標識符,由USB Implementers Forum(USB-IF)分配給設備制造商的一個16位的十六進制數,用于標識其生產的設備。每個設備制造商都有一個唯一的VID。

在USB設備中,VID與PID(Product ID)一起使用,用于識別和管理設備。當USB設備連接到計算機時,操作系統會檢測設備的VID和PID,并根據這些信息加載相應的驅動程序,確保設備能夠正常工作。

廠商在開發USB產品前,需要從USB-IF取得廠商標識符(Vendor ID)。申請VID的方式包括成為USB-IF會員并繳納年費,或者通過第三方機構進行申請。獲得VID后,廠商可以進行USB測試,并將測試結果連同USB商標許可協議遞交給USB-IF協會進行審核。

PID

(Product ID)是USB設備的一個標識符,用于標識同一制造商生產的不同設備。PID由設備制造商定義,長度通常為8位,由低4位的類型字段和高4位的校驗字段組成。類型字段的不同組合用于標識不同類型的USB數據包,如令牌包、握手包、數據包和特殊包。

在USB通信中,PID字段用于指明數據傳輸的方向、幀開始、數據傳輸的結果以及數據包的奇偶性等。

在USB設備的識別和管理中,VID和PID一起發揮著關鍵作用。當USB設備掛載連接到時,操作系統會檢測設備的VID和PID,根據這些信息加載相應的驅動程序,確保設備能夠正常工作。VID和PID還用于設備管理,包括設備的連接和斷開、設備的狀態監測和控制等。

ADB WiFi中USB連接處理

通用獲取USB設備方法:

UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);  
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();  
if (!deviceList.isEmpty()) {  
    for (Map.Entry<String, UsbDevice> entry : deviceList.entrySet()) {  
        UsbDevice device = entry.getValue();  
        int vendorId = device.getVendorId();  
        int productId = device.getProductId();  
        String deviceName = device.getDeviceName();  
        String productName = device.getProductName();  
        String manufacturerName = device.getManufacturerName();  
          
        // 打印設備信息  
        Log.d("USB設備信息", "Vendor ID: " + vendorId);  
        Log.d("USB設備信息", "Product ID: " + productId);  
        Log.d("USB設備信息", "Device Name: " + deviceName);  
        Log.d("USB設備信息", "Product Name: " + productName);  
        Log.d("USB設備信息", "Manufacturer: " + manufacturerName);  
    }  
} else {  
    Log.d("USB設備信息", "沒有USB設備連接.");  
}

廣播實時監聽USB設備接入拔出:

public class MainActivity extends AppCompatActivity {  
    private UsbReceiver usbReceiver;  
    private UsbManager usbManager;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);  
        usbReceiver = new UsbReceiver();  
        IntentFilter filter = new IntentFilter();  
        filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);  
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);  
        registerReceiver(usbReceiver, filter);  
    }  
  
    @Override  
    protected void onResume() {  
        super.onResume();  
        registerReceiver(usbReceiver, new IntentFilter(UsbManager.ACTION_USB_PERMISSION));  
    }  
  
    @Override  
    protected void onPause() {  
        super.onPause();  
        unregisterReceiver(usbReceiver);  
    }  
  
    private final class UsbReceiver extends BroadcastReceiver {  
        public void onReceive(Context context, Intent intent) {  
            String action = intent.getAction();  
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {  
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);  
                if (device != null) {  
                    // 請求USB設備訪問權限  
                    PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0);  
                    usbManager.requestPermission(device, pi);  
                }  
            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {  
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);  
                if (device != null) {  
                    // 處理USB設備拔出事件  
                }  
            } else if (UsbManager.ACTION_USB_PERMISSION.equals(action)) {  
                synchronized (this) {  
                    UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);  
                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {  
                        if (device != null) {  
                            // USB設備權限被授予,可以進行通信了  
                        }  
                    } else {  
                        // 權限被拒絕,處理邏輯  
                    }  
                }  
            }  
        }  
    }  
}

ADB WiFi實時監聽USB設備接入處理:

public class ADBControlEntrance {

    private static final String TAG = ADBControlEntrance.class.getSimpleName();

    private static volatile ADBControlEntrance sInstance;

    private UsbManager mUsbManager;
    private UsbDevice mUsbDevice;
    private AdbCrypto mCrypto;
    private AdbConnection mConnection;
    private AdbStream mStream;

    private final List<TerminalDataListener> mTerminalDataListenerList = Collections.synchronizedList(new ArrayList<>());

    private final List<String> mWriteDataList = new ArrayList<>();
    private final Object mWriteSyncLock = new Object();

    private ReadDataThread mReadDataThread;
    private WriteDataThread mWriteDataThread;
    private Thread mConnectThread;

    private ADBControlEntrance() {

    }

    public static ADBControlEntrance getInstance() {
        if (sInstance == null) {
            synchronized (ADBControlEntrance.class) {
                if (sInstance == null) {
                    sInstance = new ADBControlEntrance();
                }
            }
        }
        return sInstance;
    }

    public void init(Context context) {
        mUsbManager = (UsbManager) context.getApplicationContext().getSystemService(Context.USB_SERVICE);

        try {
            mCrypto = AdbCrypto.generateAdbKeyPair(new Base64Impl());
            mCrypto.saveAdbKeyPair(new File(context.getFilesDir(), "private_key"), new File(context.getFilesDir(), "public_key"));
        } catch (NoSuchAlgorithmException | IOException e) {
            Log.e(TAG, "初始化創建密鑰對失敗:", e);
        }

        mReadDataThread = new ReadDataThread();
        mReadDataThread.start();

        mWriteDataThread = new WriteDataThread();
        mWriteDataThread.start();

        //注冊USB廣播
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Constants.USB_PERMISSION);
        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.registerReceiver(mUsbDeviceReceiver, intentFilter, Context.RECEIVER_EXPORTED);
        } else {
            context.registerReceiver(mUsbDeviceReceiver, intentFilter);
        }

        //遍歷USB設備
        HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
        for (UsbDevice device : deviceList.values()) {
            if (mUsbManager.hasPermission(device)) {
                asyncRefreshConnection(device);
            } else {
                //請求權限
                requestPermission(context, device);
            }
        }
    }

    public void addTerminalDataListener(TerminalDataListener terminalDataListener) {
        mTerminalDataListenerList.add(terminalDataListener);
    }

    public void removeTerminalDataListener(TerminalDataListener terminalDataListener) {
        mTerminalDataListenerList.remove(terminalDataListener);
    }

    public void removeAllTerminalDataListener() {
        mTerminalDataListenerList.clear();
    }

    public void release() {
        closeConnection(false);
        if (mReadDataThread != null) {
            mReadDataThread.interrupt();
            mReadDataThread = null;
        }
        if (mWriteDataThread != null) {
            mWriteDataThread.interrupt();
            mWriteDataThread = null;
        }
        mTerminalDataListenerList.clear();
    }

    public boolean isConnected() {
        return mConnection != null && mConnection.isConnected();
    }

    private void asyncRefreshConnection(UsbDevice device) {
        closeConnection(true);
        if (device == null) return;
        UsbInterface usbInterface = null;
        for (int index = 0; index < device.getInterfaceCount(); index++) {
            UsbInterface interface1 = device.getInterface(index);
            if (interface1.getInterfaceClass() == 255 && interface1.getInterfaceSubclass() == 66 && interface1.getInterfaceProtocol() == 1) {
                usbInterface = interface1;
                break;
            }
        }
        if (usbInterface == null) return;
        UsbDeviceConnection deviceConnection = mUsbManager.openDevice(device);
        if (deviceConnection.claimInterface(usbInterface, false)) {
            UsbChannel usbChannel = new UsbChannel(deviceConnection, usbInterface);
            try {
                mConnection = AdbConnection.create(usbChannel, mCrypto);
                mConnection.connect();
                mStream = mConnection.open("shell:");
                mUsbDevice = device;
                //設備已連接
                for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                    terminalDataListener.onDeviceConnect(0);
                }
                Log.d(TAG, "USB ADB連接:成功");
            } catch (IOException | InterruptedException e) {
                Log.e(TAG, "USB ADB連接", e);
                for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                    terminalDataListener.onDeviceDisConnect();
                }
            }
        } else {
            deviceConnection.close();
            for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                terminalDataListener.onDeviceDisConnect();
            }
        }
    }

    public void asyncRefreshConnection(String host) {
        closeConnection(false);
        if (TextUtils.isEmpty(host)) return;

        if (mConnectThread != null) {
            mConnectThread.interrupt();
            mConnectThread = null;
        }
        mConnectThread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Socket socket = new Socket(host, 5555);
                    TcpChannel tcpChannel = new TcpChannel(socket);
                    mConnection = AdbConnection.create(tcpChannel, mCrypto);
                    mConnection.connect();
                    mStream = mConnection.open("shell:");
                    //設備已連接
                    for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                        terminalDataListener.onDeviceConnect(1);
                    }
                    Log.d(TAG, "TCP ADB連接:成功");
                } catch (IOException | InterruptedException e) {
                    Log.e(TAG, "TCP ADB連接:", e);
                    for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                        terminalDataListener.onDeviceDisConnect();
                    }
                }
            }
        });
        mConnectThread.start();
    }

    private class ReadDataThread extends Thread {
        @Override
        public void run() {
            super.run();
            while (!interrupted()) {
                asyncReadBuffer();
            }
        }
    }

    private void asyncReadBuffer() {
        if (mConnection != null && mStream != null) {
            while (!mStream.isClosed()) {
                try {
                    byte[] buffer = mStream.read();
                    String output = new String(buffer, StandardCharsets.US_ASCII);
                    for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                        terminalDataListener.onTerminalOutput(output);
                    }
                } catch (InterruptedException | IOException e) {
                    Log.e(TAG, "讀取終端數據:", e);
                }
            }
        }
    }

    private class WriteDataThread extends Thread {
        @Override
        public void run() {
            super.run();
            while (!isInterrupted()) {
                if (mWriteDataList.isEmpty()) {
                    try {
                        synchronized (mWriteSyncLock) {
                            mWriteSyncLock.wait();
                        }
                    } catch (InterruptedException e) {
                        Log.e(TAG, "發送終端數據:", e);
                    }
                } else {
                    String command = mWriteDataList.remove(0);
                    try {
                        //發送命令
                        mStream.write((command + "\n").getBytes(StandardCharsets.UTF_8));
                    } catch (IOException | InterruptedException e) {
                        Log.e(TAG, "發送終端數據:", e);
                    }
                }
            }
        }
    }

    public boolean asyncWriteBuffer(String command) {
        if (TextUtils.isEmpty(command)) return false;
        if (mStream == null || mStream.isClosed()) return false;
        mWriteDataList.add(command);
        synchronized (mWriteSyncLock) {
            mWriteSyncLock.notify();
        }
        return true;
    }

    public void closeConnection(boolean callback) {
        //關閉連接
        if (mConnection != null) {
            try {
                mConnection.close();
            } catch (IOException e) {
                Log.e(TAG, "關閉USB ADB連接:", e);
            }
            mConnection = null;
        }
        if (callback) {
            for (TerminalDataListener terminalDataListener : mTerminalDataListenerList) {
                terminalDataListener.onDeviceDisConnect();
            }
        }
    }

    private void requestPermission(Context context, UsbDevice device) {
        mUsbManager.requestPermission(device, PendingIntent.getBroadcast(context.getApplicationContext(), 0, new Intent(Constants.USB_PERMISSION), PendingIntent.FLAG_IMMUTABLE));
    }

    private final BroadcastReceiver mUsbDeviceReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(intent.getAction())) {
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                if (device != null && mUsbDevice != null) {
                    //斷開連接的和當前連接的是同一個設備 斷開連接
                    if (mUsbDevice.getDeviceName().equals(device.getDeviceName())) {
                        //關閉連接
                        closeConnection(true);
                    }
                }
            }
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())) {
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                if (device != null && mUsbDevice != null) {
                    //連接的和當前連接的不是同一個設備
                    if (!mUsbDevice.getDeviceName().equals(device.getDeviceName())) {
                        //開始連接
                        if (mUsbManager.hasPermission(device)) {
                            asyncRefreshConnection(device);
                        } else {
                            //請求權限
                            requestPermission(context, device);
                        }
                    }
                }
            }

            if (Constants.USB_PERMISSION.equals(intent.getAction())) {
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                //開始連接
                if (mUsbManager.hasPermission(device)) {
                    asyncRefreshConnection(device);
                } else {
                    //請求權限
                    requestPermission(context, device);
                }
            }
        }
    };
}
責任編輯:趙寧寧 來源: 沐雨花飛蝶
相關推薦

2025-11-18 07:00:00

AI戰略自動化自主式AI

2015-09-25 10:41:48

r語言

2022-08-30 10:33:08

LinuxUSB系統

2019-02-27 10:18:26

重置Windows 10Windows

2023-06-27 16:53:50

2023-02-27 13:35:16

ChatGPT機器學習

2018-11-16 09:21:06

2011-10-11 15:42:54

大數據數據庫

2019-03-14 11:00:40

GoLua語言

2015-11-19 00:11:12

2023-04-27 07:40:08

Spring框架OpenAI

2023-12-13 17:04:51

終端命令shell

2018-03-23 04:58:16

區塊鏈物聯網互聯網

2018-06-06 00:26:20

SDN5G無線網絡

2015-08-18 09:09:46

WiFiO2O

2023-09-06 06:48:49

2018-01-19 12:56:19

Linux進程

2021-12-27 08:24:08

漏洞網絡安全

2021-08-19 17:27:41

IT數據中心災難

2021-07-13 09:29:03

5G網絡IaaS云計算
點贊
收藏

51CTO技術棧公眾號

日韩理论电影院| 国产一区二区自拍视频| av成人资源网| 精品国产鲁一鲁一区二区张丽| 成人一区二区在线| 中文字幕成人动漫| 国产精品高潮久久| 亚洲欧洲www| 97se亚洲综合在线| 日韩三级一区二区三区| 亚洲人成精品久久久 | 精品剧情v国产在线观看在线| 国产资源第一页| 午夜小视频在线播放| 男人天堂欧美日韩| 日韩在线高清视频| 亚洲图片欧美另类| 国产综合色区在线观看| 中文字幕一区二区三区在线播放| 2019国产精品视频| 久久久久久激情| 欧洲视频一区| 欧美成人艳星乳罩| 91蝌蚪视频在线观看| av毛片在线免费| www国产亚洲精品久久麻豆| 国产日韩欧美在线| 亚洲国产精品午夜在线观看| 精品日韩毛片| 精品久久久久久久久久久久久久久 | 在线观看亚洲欧美| 国产精品久久久久久| 日韩电影中文字幕在线| 久久久久免费精品| 91av久久| 曰韩精品一区二区| 亚洲 日韩 国产第一区| 亚洲AV无码一区二区三区性| 免费在线观看精品| 4438全国成人免费| 欧美黄色免费看| 日本不卡免费一区| 亚洲精品自在久久| 蜜臀aⅴ国产精品久久久国产老师| 电影天堂国产精品| 五月天一区二区| 一级特黄妇女高潮| 成年网站在线| 久久一日本道色综合| 97超碰在线播放| 波多野结衣视频网址| 亚洲少妇自拍| 欧美激情手机在线视频| 欧美h片在线观看| 国产成人精品三级高清久久91| 欧美电影免费提供在线观看| www.cao超碰| 日韩在线免费| 色综合咪咪久久| 黄色国产一级视频| 欧美黄色视屏| 夜夜嗨av一区二区三区四季av| 亚洲精品视频一二三| 国产一级网站视频在线| av不卡免费在线观看| 97伦理在线四区| 99热这里只有精品5| 久久99久久久久| 国产在线播放91| 亚洲综合网av| 久久精品国产亚洲高清剧情介绍 | 日韩中文欧美在线| 欧美自拍大量在线观看| 天堂网一区二区三区| 亚洲成人三区| 久久亚洲国产精品成人av秋霞| 国产艳俗歌舞表演hd| 日本亚洲不卡| 亚洲欧美日韩中文在线制服| 天天躁日日躁aaaxxⅹ| 亚洲国产合集| 一本一本久久a久久精品牛牛影视| brazzers精品成人一区| 国产一区二区三区91| 国产一区二区三区高清在线观看| 亚洲精品午夜视频| 水蜜桃久久夜色精品一区| www.久久色.com| 中文字幕另类日韩欧美亚洲嫩草| 欧美特黄a级高清免费大片a级| 欧美黄色片在线观看| 国产精品成人aaaa在线| 久久aⅴ乱码一区二区三区| 国产91色在线免费| 在线观看中文字幕av| 国产一区二区三区久久久| 国产精品久久精品国产| 亚州精品国产精品乱码不99按摩| 久久综合丝袜日本网| 亚洲国产成人不卡| av中文字幕在线观看| 亚洲国产日日夜夜| 国产成人无码一二三区视频| 2020国产精品小视频| 精品国产一区二区三区久久影院| 三级电影在线看| 日韩欧美1区| 欧美激情a在线| 天天操夜夜操视频| 韩国精品久久久| 国产一区免费在线| 日韩欧美小视频| 亚洲成人动漫一区| 亚洲狼人综合干| 精品一区二区三区亚洲| 日韩av影视在线| 一区二区三区在线播放视频| 亚洲成人资源| 国产日韩视频在线观看| 日韩在线一区二区三区四区| 中文久久乱码一区二区| 自拍日韩亚洲一区在线| 992tv国产精品成人影院| 日韩你懂的在线观看| 一区二区视频观看| 亚洲欧洲美洲一区二区三区| 日本免费在线精品| 国产美女免费视频| 久久久久久电影| 日日噜噜夜夜狠狠久久丁香五月| 理论不卡电影大全神| 制服丝袜成人动漫| 国产一区二区三区四区在线观看| 91人成网站www| 日本天堂在线| 亚洲你懂的在线视频| www黄色日本| 亚洲一区二区三区四区电影| 亚洲全黄一级网站| 国产在线一区视频| 国产精品亚洲一区二区三区在线| 一区二区三区在线观看www| 视频在线日韩| 在线播放国产一区中文字幕剧情欧美 | 日韩精品三级| 久久在精品线影院精品国产| av首页在线观看| 国产免费观看久久| 黄色片在线免费| 精品免费视频| 国产专区精品视频| 麻豆视频在线观看免费网站| 欧美精品九九99久久| 国产成人免费在线观看视频| 开心九九激情九九欧美日韩精美视频电影| 色就是色欧美| 成人黄色图片网站| 最新国产精品亚洲| 国产又大又黄的视频| 亚洲欧洲日本在线| 久久艹这里只有精品| 午夜精品久久| 精品午夜一区二区三区| 黑人巨大亚洲一区二区久| 亚洲欧美在线免费| 中文字幕一区2区3区| 自拍视频在线观看一区二区| gogo亚洲国模私拍人体| 在线观看一区| 欧美日本国产精品| 高清欧美日韩| 久久国产精品偷| 色呦呦免费观看| 91久久精品一区二区二区| 欧美福利第一页| 国产自产高清不卡| www.夜夜爱| 九热爱视频精品视频| 国产精品视频不卡| 欧美人与性动交α欧美精品济南到 | 久久这里只精品| 欧美96在线丨欧| 久久一区二区三区av| 国产成人精品一区二区三区在线| 久久这里只有精品视频首页| 欧美一区二不卡视频| 91国产免费观看| 青青操国产视频| 久久久综合九色合综国产精品| 亚洲人辣妹窥探嘘嘘| 好吊视频一区二区三区四区| 欧美久久久久久久| 国产激情一区| 国产999精品久久久| 久久久久久久久免费视频| 精品福利在线导航| 久久这里只有精品9| 亚洲自拍偷拍图区| 娇妻被老王脔到高潮失禁视频| 国产一区二区三区黄视频 | 中文字幕在线字幕中文| 国产精品网站导航| 国产麻豆剧传媒精品国产av| 蜜臀久久99精品久久久久久9| 免费高清一区二区三区| 日韩欧美一区免费| 久久99欧美| 亚洲网址在线观看| 成人乱人伦精品视频在线观看| 欧美激情护士| 色综合久久久888| 日本www在线观看视频| 日韩av中文在线| 亚洲精品久久久久久动漫器材一区| 在线观看日韩高清av| 日韩人妻无码一区二区三区99| 亚洲色图第一区| 国产精品国产三级国产专业不 | 8x8x8国产精品| 无码人妻av一区二区三区波多野| 中文字幕在线观看不卡| 瑟瑟视频在线观看| 高清成人在线观看| 超碰人人草人人| 麻豆传媒一区二区三区| 四虎永久在线精品无码视频| 99综合视频| 国产男女免费视频| 精品动漫3d一区二区三区免费版 | 婷婷国产成人精品视频| 久久九九全国免费| 五月婷婷综合在线观看| 成人福利视频网站| 国产大学生av| 国产一区二区看久久| 成人性生交免费看| 日本大胆欧美人术艺术动态| 日韩一级片播放| 久久久久国产精品一区三寸| 亚洲自偷自拍熟女另类| 99视频在线精品国自产拍免费观看| 亚洲精品少妇一区二区| 欧美日本三区| 九九热只有这里有精品| 在线播放精品| 免费一级特黄毛片| 99精品福利视频| 欧美精品一区免费| 先锋影音久久| 日韩欧美在线免费观看视频| 三级亚洲高清视频| 亚洲免费av一区二区三区| 日韩综合在线视频| 亚洲一级免费观看| 精彩视频一区二区三区| 性欧美在线视频| 国产激情91久久精品导航| 北条麻妃亚洲一区| 国产成人免费高清| 亚洲一级Av无码毛片久久精品| 成人中文字幕电影| 日韩aaaaa| 久久免费美女视频| 国产精品久久免费观看| 国产精品福利一区| 婷婷在线精品视频| 亚洲成a人片在线观看中文| 免费在线不卡视频| 91福利国产精品| 国产免费叼嘿网站免费| 日韩精品一区二区三区三区免费| 十八禁一区二区三区| 亚洲女同精品视频| 第一视频专区在线| 久久影院模特热| 欧美久久天堂| 国产精品亚洲欧美导航| 亚洲欧美日本国产| 久久资源av| 久久久久久美女精品| 亚洲色欲久久久综合网东京热| 欧美综合国产| 久久综合在线观看| 99国产精品国产精品毛片| 国产又粗又黄又猛| 亚洲国产一二三| www.久久网| 日韩精品一区二区三区在线播放 | 久久视频国产精品免费视频在线| 久久av色综合| 国产精品日韩av| 卡通动漫国产精品| 相泽南亚洲一区二区在线播放| 国产精品啊啊啊| 色片在线免费观看| 99久久er热在这里只有精品15| 99国产精品免费| 精品女厕一区二区三区| 91亚洲欧美激情| 日韩av在线天堂网| 污污在线观看| 国产精品视频色| 天堂俺去俺来也www久久婷婷| www亚洲国产| 日韩中文字幕一区二区三区| 欧美性生交xxxxx| 国产精品久久久久婷婷| 日本在线播放视频| 欧美zozo另类异族| 日本中文字幕视频在线| 91成人在线视频| 麻豆精品久久| 亚洲一区二区三区在线观看视频 | 91chinesevideo永久地址| 四虎国产精品免费久久| 欧美日韩精品免费观看视一区二区| 欧美日韩免费观看一区=区三区| 久久99爱视频| 久久久www成人免费毛片麻豆| 久久精品国产亚洲AV无码麻豆 | 欧美久久综合网| 男人添女人下面高潮视频| 国产乱码精品1区2区3区| 国产99在线 | 亚洲| 欧美性开放视频| 色婷婷av一区二区三区之e本道| 欧美成人一区二区三区电影| 欧美视频在线视频精品| 日韩在线第一区| 日韩精品1区2区3区| 久久精品国产亚洲av麻豆| 亚洲成a人片在线不卡一二三区| www.麻豆av| 欧美高清videos高潮hd| 欧美.com| 欧美人与动牲交xxxxbbbb| 国产一区二区不卡| 国产精品国产三级国产传播| 欧美视频在线一区| 国产大学生校花援交在线播放| 青青草原成人在线视频| 亚洲黄色录像| 男女av免费观看| 国产欧美一区二区精品忘忧草| 黄瓜视频在线免费观看| 亚洲男人第一网站| 日韩精品一区二区三区| 日韩精品一区二区三区外面| 首页国产欧美日韩丝袜| 亚洲ⅴ国产v天堂a无码二区| 欧美影视一区二区三区| 99se视频在线观看| 国产精品综合久久久| 国产精品99一区二区三| 一区二区三区国产好的精华液| 亚洲欧美电影一区二区| 99久久久国产精品无码免费| 欧美久久久精品| 波多野结衣欧美| 激情综合在线观看| 久久精品免费在线观看| 懂色av蜜臀av粉嫩av喷吹| 日韩在线视频一区| 国产精品亚洲四区在线观看| 精品一二三四五区| 91亚洲男人天堂| 性色av一区二区三区四区| 俺去啦;欧美日韩| 日韩一二三区在线观看| 欧美极品欧美精品欧美| 国产清纯在线一区二区www| 一区二区三区黄色片| 欧美人与性动交a欧美精品| 久久婷婷国产| 亚洲成人av免费看| 亚洲视频中文字幕| 天堂在线视频观看| 国产精品9999| 一区二区日韩欧美| 日韩Av无码精品| 欧美日韩国产美| 国产精品偷拍| 台湾成人av| 成人福利电影精品一区二区在线观看| 五月婷婷视频在线| 久久精品国产亚洲精品2020| 人体久久天天| 最新天堂在线视频| 精品久久久香蕉免费精品视频| 在线观看免费网站黄| 国产乱码精品一区二区三区日韩精品| 日韩极品在线观看| 久久久久久久久艹| 在线亚洲欧美视频| 国产精品一区二区三区美女| 香港日本韩国三级网站| 欧美日韩国产丝袜另类| 二区三区在线观看| 日本免费高清一区| 成人美女在线视频|