日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

周立功CAN二次开发接口使用(C#)

發布時間:2025/4/16 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 周立功CAN二次开发接口使用(C#) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過C#實現通訊:

1、建一個CANDevice實體類,傳遞一些參數,并且保存一些設備的型號、ID,以及波特率等參數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Runtime.InteropServices;

namespace ZLGUSBCAN
{
? ? [Serializable]
? ? public class CardType
? ? {
? ? ? ? public string TyPeName { get; set; }
? ? ? ? public uint TypeId { get; set; }
? ? }
? ? [Serializable]
? ? public class BoudRoute
? ? {
? ? ? ? public string RateName { get; set; }
? ? ? ? public UInt32 RateValue { get; set; }
? ? }

? ? [Serializable]
? ? public class CANDevice
? ? { ? ? ? ?
? ? ? ? //private readonly uint devType;
? ? ? ? //private readonly uint devID;
? ? ? ? //private readonly uint canID;
? ? ? ? //private readonly uint baudRate;
? ? ? ? //private readonly uint sendTimeout;

? ? ? ? public uint DevType { get; set; }
? ? ? ? public uint DevID { get; set; }
? ? ? ? public uint CANID { get; set; }
? ? ? ? public uint BoudRate { get; set; }
? ? ? ? public uint SendTimeout { get; set; }
? ? ? ? //CAN參數
? ? ? ? public uint AccCode { get; set; }
? ? ? ? public uint AccMask { get; set; }
? ? ? ? public uint Reserved { get; set; }
? ? ? ? public byte Filter { get; set; }
? ? ? ? public byte Timing0 { get; set; }
? ? ? ? public byte Timing1 { get; set; }
? ? ? ? public byte Mode { get; set; }
? ? ? ? public List<CardType> CardTypeList { get; set; }
? ? ? ? public List<BoudRoute> BoudRateList { get; set; }

? ? ? ? public CANDevice(uint devType, uint devID, uint boudRate, uint sendTimeout, uint canID = 0)
? ? ? ? {
? ? ? ? ? ? this.DevType = devType;
? ? ? ? ? ? this.DevID = devID;
? ? ? ? ? ? this.CANID = canID;
? ? ? ? ? ? this.BoudRate = boudRate;
? ? ? ? ? ? this.SendTimeout = sendTimeout;

? ? ? ? }

? ? ? ? public CANDevice()
? ? ? ? {
? ? ? ? ? ? this.CardTypeList = new List<CardType>(); ? ? ? ? ??
? ? ? ? ? ? this.CardTypeList.Add(new CardType { TyPeName = "VCI_USBCAN_E_U", TypeId = 20 });
? ? ? ? ? ? this.CardTypeList.Add(new CardType { TyPeName = "VCI_USBCAN_2E_U", TypeId = 21 });

? ? ? ? ? ? this.BoudRateList = new List<BoudRoute>();
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "1000Kbps", RateValue = 0x060003 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "800Kbps", RateValue = 0x060004 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "500Kbps", RateValue = 0x060007 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "250Kbps", RateValue = 0x1C0008 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "125Kbps", RateValue = 0x1C0011 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "100Kbps", RateValue = 0x160023 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "50Kbps", RateValue = 0x1C002C });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "20Kbps", RateValue = 0x1600B3 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "10Kbps", RateValue = 0x1C00E0 });
? ? ? ? ? ? this.BoudRateList.Add(new BoudRoute { RateName = "5Kbps", RateValue = 0x1C01C1 }); ? ? ? ? ??
? ? ? ? } ??
? ? }
}

2、建一個ControlCAN,對周立功提供的接口函數進行二次開發

首先需要引入設備供應商提供的接口函數庫,在C#中屬于非托管,因此需要通過[DllImport(“路徑.dll”)]這樣的方式來引入。特別注意:該接口函數如果是32位,注意你的解決方案平臺需要時X86;還有,你要將所有引用的文件都復制到路徑下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Microsoft.Win32.SafeHandles;

namespace ZLGUSBCAN
{
? ? public class _VCI_CAN_OBJ
? ? {
? ? ? ? public uint ID { get; set; }
? ? ? ? public uint TimeStamp { get; set; }
? ? ? ? public byte TimeFlag { get; set; }
? ? ? ? /// <summary>
? ? ? ? /// 發送格式:0:正常發送 1:單次正常發送 2:自發自收 3.單次自發自收
? ? ? ? /// </summary>
? ? ? ? public byte SendType { get; set; }
? ? ? ? /// <summary>
? ? ? ? /// 幀格式:0:數據幀 1:遠程幀
? ? ? ? /// </summary>
? ? ? ? public byte RemoteFlag { get; set; }
? ? ? ? /// <summary>
? ? ? ? /// 幀類型:0:標準幀 1為擴展幀,29位ID
? ? ? ? /// </summary>
? ? ? ? public byte ExternFlag { get; set; }
? ? ? ? public byte DataLen { get; set; }
? ? ? ? public byte[] Data { get; set; }
? ? ? ? public byte[] Reserved { get; set; }
? ? }

? ? public class _VCI_INIT_CONFIG
? ? {
? ? ? ? public uint AccCode { get; set; }
? ? ? ? public uint AccMask { get; set; }
? ? ? ? public byte Reserved { get; set; }
? ? ? ? public byte Filter { get; set; }
? ? ? ? public byte Timing0 { get; set; }
? ? ? ? public byte Timing1 { get; set; }
? ? ? ? public byte Mode { get; set; }
? ? }
? ? public class ControlCAN
? ? {
? ? ? ? #region 接口函數定義
? ? ? ? [StructLayoutAttribute(LayoutKind.Sequential)]
? ? ? ? struct VCI_CAN_OBJ
? ? ? ? {
? ? ? ? ? ? public uint ID;
? ? ? ? ? ? public uint TimeStamp;
? ? ? ? ? ? public byte TimeFlag;
? ? ? ? ? ? public byte SendType;//發送格式:0:正常發送 1:單次正常發送 2:自發自收 3.單次自發自收
? ? ? ? ? ? public byte RemoteFlag;//幀格式:0:數據幀 1:遠程幀
? ? ? ? ? ? public byte ExternFlag;//幀類型:0:標準幀 1為擴展幀,29位ID
? ? ? ? ? ? public byte DataLen;
? ? ? ? ? ? [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8)]
? ? ? ? ? ? public byte[] Data;
? ? ? ? ? ? [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3)]
? ? ? ? ? ? public byte[] Reserved;
? ? ? ? }

? ? ? ? [StructLayoutAttribute(LayoutKind.Sequential)]
? ? ? ? struct VCI_INIT_CONFIG
? ? ? ? {
? ? ? ? ? ? public uint AccCode;
? ? ? ? ? ? public uint AccMask;
? ? ? ? ? ? public uint Reserved;
? ? ? ? ? ? public byte Filter;
? ? ? ? ? ? public byte Timing0;
? ? ? ? ? ? public byte Timing1;
? ? ? ? ? ? public byte Mode;
? ? ? ? }

? ? ? ? [StructLayoutAttribute(LayoutKind.Sequential)]
? ? ? ? struct VCI_FILTER_RECORD
? ? ? ? {
? ? ? ? ? ? public uint ExtFrame;
? ? ? ? ? ? public uint Start;
? ? ? ? ? ? public uint End;
? ? ? ? }

? ? ? ? [DllImport("kernel32.dll")]
? ? ? ? static extern uint GetLastError();

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_OpenDevice(uint DevType, uint DevIndex, uint Reserved);//Reserved系統保留字段

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_CloseDevice(uint DevType, uint DevIndex);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_StartCAN(uint DevType, uint DevIndex, uint CANIndex);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_ResetCAN(uint DevType, uint DevIndex, uint CANIndex);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_SetReference(uint DevType, uint DevIndex, uint CANIndex, uint RefType, IntPtr pData);

? ? ? ? //[DllImport("ControlCAN.dll")]
? ? ? ? //unsafe static extern UInt32 VCI_SetReference(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, UInt32 RefType, byte* pData);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_Receive(uint DevType, uint DevIndex, uint CANIndex, [Out] VCI_CAN_OBJ[] pReceive, uint Len, int WaitTime);
? ? ? ? //參照官方
? ? ? ? [DllImport("ControlCAN.dll", CharSet = CharSet.Ansi)]
? ? ? ? static extern UInt32 VCI_Receive(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, IntPtr pReceive, UInt32 Len, Int32 WaitTime);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_Transmit(uint DevType, uint DevIndex, uint CANIndex, [In] VCI_CAN_OBJ[] pSend, uint Len);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_InitCAN(uint DevType, uint DevIndex, uint CANIndex, ref VCI_INIT_CONFIG pInitConfig);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_GetReceiveNum(uint DevType, uint DevIndex, uint CANIndex);

? ? ? ? [DllImport("ControlCAN.dll")]
? ? ? ? static extern uint VCI_ClearBuffer(uint DevType, uint DevIndex, uint CANIndex);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? static extern byte RC500USB_init();

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? static extern void RC500USB_exit();

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? static extern byte RC500USB_request(byte mode, ref ushort tagtype);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? static extern byte RC500USB_anticoll(byte bcnt, ref uint snr);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? static extern byte RC500USB_select(uint snr, ref byte size);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? internal static extern byte RC500USB_authkey(byte mode, [In] byte[] key, byte secnr);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? internal static extern byte RC500USB_read(byte addr, [Out] byte[] data);

? ? ? ? [DllImport("RC500USB.dll")]
? ? ? ? internal static extern byte RC500USB_buzzer(byte contrl, byte opentm, byte closetm, byte repcnt);

? ? ? ? // serialport
? ? ? ? //Win32 io errors
? ? ? ? public const int ERROR_BROKEN_PIPE = 109;
? ? ? ? public const int ERROR_NO_DATA = 232;
? ? ? ? public const int ERROR_HANDLE_EOF = 38;
? ? ? ? public const int ERROR_IO_INCOMPLETE = 996;
? ? ? ? public const int ERROR_IO_PENDING = 997;
? ? ? ? public const int ERROR_FILE_EXISTS = 0x50;
? ? ? ? public const int ERROR_FILENAME_EXCED_RANGE = 0xCE; ?// filename too long.
? ? ? ? public const int ERROR_MORE_DATA = 234;
? ? ? ? public const int ERROR_CANCELLED = 1223;
? ? ? ? public const int ERROR_FILE_NOT_FOUND = 2;
? ? ? ? public const int ERROR_PATH_NOT_FOUND = 3;
? ? ? ? public const int ERROR_ACCESS_DENIED = 5;
? ? ? ? public const int ERROR_INVALID_HANDLE = 6;
? ? ? ? public const int ERROR_NOT_ENOUGH_MEMORY = 8;
? ? ? ? public const int ERROR_BAD_COMMAND = 22;
? ? ? ? public const int ERROR_SHARING_VIOLATION = 32;
? ? ? ? public const int ERROR_OPERATION_ABORTED = 995;
? ? ? ? public const int ERROR_NO_ASSOCIATION = 1155;
? ? ? ? public const int ERROR_DLL_NOT_FOUND = 1157;
? ? ? ? public const int ERROR_DDE_FAIL = 1156;
? ? ? ? public const int ERROR_INVALID_PARAMETER = 87;
? ? ? ? public const int ERROR_PARTIAL_COPY = 299;

? ? ? ? // Since C# does not provide access to bitfields and the native DCB structure contains
? ? ? ? // a very necessary one, these are the positional offsets (from the right) of areas
? ? ? ? // of the 32-bit integer used in SerialStream's SetDcbFlag() and GetDcbFlag() methods.
? ? ? ? internal const int FBINARY = 0;
? ? ? ? internal const int FPARITY = 1;
? ? ? ? internal const int FOUTXCTSFLOW = 2;
? ? ? ? internal const int FOUTXDSRFLOW = 3;
? ? ? ? internal const int FDTRCONTROL = 4;
? ? ? ? internal const int FDSRSENSITIVITY = 6;
? ? ? ? internal const int FTXCONTINUEONXOFF = 7;
? ? ? ? internal const int FOUTX = 8;
? ? ? ? internal const int FINX = 9;
? ? ? ? internal const int FERRORCHAR = 10;
? ? ? ? internal const int FNULL = 11;
? ? ? ? internal const int FRTSCONTROL = 12;
? ? ? ? internal const int FABORTONOERROR = 14;
? ? ? ? internal const int FDUMMY2 = 15;

? ? ? ? // The following are unique to the SerialPort/SerialStream classes
? ? ? ? internal const byte ONESTOPBIT = 0;
? ? ? ? internal const byte ONE5STOPBITS = 1;
? ? ? ? internal const byte TWOSTOPBITS = 2;

? ? ? ? public const int FILE_READ_DATA = (0x0001),
? ? ? ? FILE_LIST_DIRECTORY = (0x0001),
? ? ? ? FILE_WRITE_DATA = (0x0002),
? ? ? ? FILE_ADD_FILE = (0x0002),
? ? ? ? FILE_APPEND_DATA = (0x0004),
? ? ? ? FILE_ADD_SUBDIRECTORY = (0x0004),
? ? ? ? FILE_CREATE_PIPE_INSTANCE = (0x0004),
? ? ? ? FILE_READ_EA = (0x0008),
? ? ? ? FILE_WRITE_EA = (0x0010),
? ? ? ? FILE_EXECUTE = (0x0020),
? ? ? ? FILE_TRAVERSE = (0x0020),
? ? ? ? FILE_DELETE_CHILD = (0x0040),
? ? ? ? FILE_READ_ATTRIBUTES = (0x0080),
? ? ? ? FILE_WRITE_ATTRIBUTES = (0x0100),
? ? ? ? FILE_SHARE_READ = 0x00000001,
? ? ? ? FILE_SHARE_WRITE = 0x00000002,
? ? ? ? FILE_SHARE_DELETE = 0x00000004,
? ? ? ? FILE_ATTRIBUTE_READONLY = 0x00000001,
? ? ? ? FILE_ATTRIBUTE_HIDDEN = 0x00000002,
? ? ? ? FILE_ATTRIBUTE_SYSTEM = 0x00000004,
? ? ? ? FILE_ATTRIBUTE_DIRECTORY = 0x00000010,
? ? ? ? FILE_ATTRIBUTE_ARCHIVE = 0x00000020,
? ? ? ? FILE_ATTRIBUTE_NORMAL = 0x00000080,
? ? ? ? FILE_ATTRIBUTE_TEMPORARY = 0x00000100,
? ? ? ? FILE_ATTRIBUTE_COMPRESSED = 0x00000800,
? ? ? ? FILE_ATTRIBUTE_OFFLINE = 0x00001000,
? ? ? ? FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001,
? ? ? ? FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002,
? ? ? ? FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004,
? ? ? ? FILE_NOTIFY_CHANGE_SIZE = 0x00000008,
? ? ? ? FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010,
? ? ? ? FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020,
? ? ? ? FILE_NOTIFY_CHANGE_CREATION = 0x00000040,
? ? ? ? FILE_NOTIFY_CHANGE_SECURITY = 0x00000100,
? ? ? ? FILE_ACTION_ADDED = 0x00000001,
? ? ? ? FILE_ACTION_REMOVED = 0x00000002,
? ? ? ? FILE_ACTION_MODIFIED = 0x00000003,
? ? ? ? FILE_ACTION_RENAMED_OLD_NAME = 0x00000004,
? ? ? ? FILE_ACTION_RENAMED_NEW_NAME = 0x00000005,
? ? ? ? FILE_CASE_SENSITIVE_SEARCH = 0x00000001,
? ? ? ? FILE_CASE_PRESERVED_NAMES = 0x00000002,
? ? ? ? FILE_UNICODE_ON_DISK = 0x00000004,
? ? ? ? FILE_PERSISTENT_ACLS = 0x00000008,
? ? ? ? FILE_FILE_COMPRESSION = 0x00000010,
? ? ? ? OPEN_EXISTING = 3,
? ? ? ? OPEN_ALWAYS = 4,
? ? ? ? FILE_FLAG_WRITE_THROUGH = unchecked((int)0x80000000),
? ? ? ? FILE_FLAG_OVERLAPPED = 0x40000000,
? ? ? ? FILE_FLAG_NO_BUFFERING = 0x20000000,
? ? ? ? FILE_FLAG_RANDOM_ACCESS = 0x10000000,
? ? ? ? FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000,
? ? ? ? FILE_FLAG_DELETE_ON_CLOSE = 0x04000000,
? ? ? ? FILE_FLAG_BACKUP_SEMANTICS = 0x02000000,
? ? ? ? FILE_FLAG_POSIX_SEMANTICS = 0x01000000,
? ? ? ? FILE_TYPE_UNKNOWN = 0x0000,
? ? ? ? FILE_TYPE_DISK = 0x0001,
? ? ? ? FILE_TYPE_CHAR = 0x0002,
? ? ? ? FILE_TYPE_PIPE = 0x0003,
? ? ? ? FILE_TYPE_REMOTE = unchecked((int)0x8000),
? ? ? ? FILE_VOLUME_IS_COMPRESSED = 0x00008000;

? ? ? ? // The following are unique to the SerialPort/SerialStream classes
? ? ? ? internal const int DTR_CONTROL_DISABLE = 0x00;
? ? ? ? internal const int DTR_CONTROL_ENABLE = 0x01;
? ? ? ? internal const int DTR_CONTROL_HANDSHAKE = 0x02;

? ? ? ? internal const int RTS_CONTROL_DISABLE = 0x00;
? ? ? ? internal const int RTS_CONTROL_ENABLE = 0x01;
? ? ? ? internal const int RTS_CONTROL_HANDSHAKE = 0x02;
? ? ? ? internal const int RTS_CONTROL_TOGGLE = 0x03;

? ? ? ? internal const int MS_CTS_ON = 0x10;
? ? ? ? internal const int MS_DSR_ON = 0x20;

? ? ? ? internal const byte DEFAULTXONCHAR = (byte)17;
? ? ? ? internal const byte DEFAULTXOFFCHAR = (byte)19;

? ? ? ? internal const byte EOFCHAR = (byte)26;

? ? ? ? [StructLayoutAttribute(LayoutKind.Sequential)]
? ? ? ? public struct COMMTIMEOUTS
? ? ? ? {
? ? ? ? ? ? public int ReadIntervalTimeout;
? ? ? ? ? ? public int ReadTotalTimeoutMultiplier;
? ? ? ? ? ? public int ReadTotalTimeoutConstant;
? ? ? ? ? ? public int WriteTotalTimeoutMultiplier;
? ? ? ? ? ? public int WriteTotalTimeoutConstant;
? ? ? ? }

? ? ? ? [StructLayout(LayoutKind.Sequential)]
? ? ? ? internal struct DCB
? ? ? ? {
? ? ? ? ? ? public uint DCBlength;
? ? ? ? ? ? public uint BaudRate;
? ? ? ? ? ? public uint Flags;
? ? ? ? ? ? public ushort wReserved;
? ? ? ? ? ? public ushort XonLim;
? ? ? ? ? ? public ushort XoffLim;
? ? ? ? ? ? public byte ByteSize;
? ? ? ? ? ? public byte Parity;
? ? ? ? ? ? public byte StopBits;
? ? ? ? ? ? public byte XonChar;
? ? ? ? ? ? public byte XoffChar;
? ? ? ? ? ? public byte ErrorChar;
? ? ? ? ? ? public byte EofChar;
? ? ? ? ? ? public byte EvtChar;
? ? ? ? ? ? public ushort wReserved1;
? ? ? ? }

? ? ? ? public const int GENERIC_READ = unchecked(((int)0x80000000));
? ? ? ? public const int GENERIC_WRITE = (0x40000000);

? ? ? ? internal const int PURGE_TXABORT = 0x0001; ?// Kill the pending/current writes to the comm port.
? ? ? ? internal const int PURGE_RXABORT = 0x0002; ?// Kill the pending/current reads to the comm port.
? ? ? ? internal const int PURGE_TXCLEAR = 0x0004; ?// Kill the transmit queue if there.
? ? ? ? internal const int PURGE_RXCLEAR = 0x0008; ?// Kill the typeahead buffer if there.
? ? ? ? #endregion

? ? ? ? private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

? ? ? ? public uint MaxFrames { get; set; } = 16;
? ? ? ? public int ReceiveTimeout { get; set; } = 2000;

? ? ? ? private int disposed = 0;
? ? ? ? private CANDevice objCANDevice;

? ? ? ? protected virtual void Dispose(bool disposing)
? ? ? ? {
? ? ? ? ? ? if (Interlocked.Exchange(ref disposed, 1) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (Interlocked.Exchange(ref disposed, 1) == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //釋放非托管資源
? ? ? ? ? ? ? ? ? ? if (ControlCAN.VCI_CloseDevice(objCANDevice.DevType, objCANDevice.DevID) == 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? log.Error("Failed to close CAN device");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? public void Dispose()
? ? ? ? {
? ? ? ? ? ? ///<summary>
? ? ? ? ? ? /// 實現IDisposable中的Dispose方法
? ? ? ? ? ? ///</summary>
? ? ? ? ? ? Dispose(true);//必須為true
? ? ? ? ? ? //通知垃圾回收機制不再調用終結器(析構器)
? ? ? ? ? ? GC.SuppressFinalize(this);//禁止終結操作
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? ///?
? ? ? ? /// </summary>
? ? ? ? /// <param name="devType"></param>
? ? ? ? /// <param name="devID"></param>
? ? ? ? /// <param name="baudRate"></param>
? ? ? ? /// <param name="sendTimeout"></param>
? ? ? ? /// <param name="canID">默認為0</param>
? ? ? ? public ControlCAN(CANDevice canDevice)
? ? ? ? {
? ? ? ? ? ? objCANDevice = canDevice;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 打開CAN設備
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool OpenCAN()
? ? ? ? {
? ? ? ? ? ? if (VCI_OpenDevice(objCANDevice.DevType, objCANDevice.DevID, 0) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //log.Error("Failed to open CAN device");
? ? ? ? ? ? ? ? //uint error = GetLastError();
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 啟動某一路CAN
? ? ? ? /// </summary>
? ? ? ? public bool StartCan(uint canId = 0)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? if (canId != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? objCANDevice.CANID = canId;
? ? ? ? ? ? }

? ? ? ? ? ? if (!SetBaudRate(objCANDevice.BoudRate))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception("波特率設置失敗!");
? ? ? ? ? ? }
? ? ? ? ? ? if (!SetWorkingMode())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception("工作模式設置失敗!");
? ? ? ? ? ? }

? ? ? ? ? ? if (VCI_StartCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID) == 0)
? ? ? ? ? ? {

? ? ? ? ? ? ? ? //log.Error("Failed to start CAN device");
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? if (!SetSendTimeout())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception("發送超時設置失敗!");
? ? ? ? ? ? }
? ? ? ? ? ? ClearBuffer();

? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 設置波特率
? ? ? ? /// </summary>
? ? ? ? /// <param name="baudRate">uint類型</param>
? ? ? ? /// <returns></returns>
? ? ? ? public bool SetBaudRate(uint baudRate)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(baudRate));

? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Marshal.WriteInt32(ptr, (int)baudRate);
? ? ? ? ? ? ? ? if (VCI_SetReference(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, 0, ptr) == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? log.Error("Failed to set CAN baud rate");
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? finally
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Marshal.FreeHGlobal(ptr);
? ? ? ? ? ? }

? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 設置工作模式,需提供工作模式Id
? ? ? ? /// 必須先設置波特率再設置工模式
? ? ? ? /// </summary>
? ? ? ? /// <param name="modeId"> =0 表示正常模式(相當于正常節點), =1 表示只聽模式(只接收,不影響總線)</param>
? ? ? ? /// <returns></returns>
? ? ? ? public bool SetWorkingMode(byte modeId = 0)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? VCI_INIT_CONFIG initConfig = new VCI_INIT_CONFIG();
? ? ? ? ? ? initConfig.Mode = modeId;//正常模式

? ? ? ? ? ? if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref initConfig) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? log.Error("Failed to set CAN working mode");
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }

? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? ///設置發送超時時間
? ? ? ? /// </summary>
? ? ? ? public bool SetSendTimeout(uint timeout = 2000)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(timeout));

? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Marshal.WriteInt32(ptr, (int)timeout);
? ? ? ? ? ? ? ? if (VCI_SetReference(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, 4, ptr) == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? log.Error("Failed to set CAN send timeout");
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? finally
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Marshal.FreeHGlobal(ptr);
? ? ? ? ? ? }

? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 發送數據
? ? ? ? /// </summary>
? ? ? ? /// <param name="frames">幀結構體數組</param>
? ? ? ? /// 舉例:VCI_CAN_OBJ[] frames=new VCI_CAN_OBJ[2];//將發送兩幀數據
? ? ? ? /// frames[0].ID=0x00000001;//第一幀ID
? ? ? ? /// frames[0].SendType=0;//正常發送
? ? ? ? /// frames[0].RemoteFlag=0;//數據幀
? ? ? ? /// frames[0].ExternFlag=0;//標準幀
? ? ? ? /// frames[0].DataLen=1;//數據長度
? ? ? ? /// frames[0].Data[0]=0x56;//數據
? ? ? ? /// frames[1]~
? ? ? ? /// <returns></returns>
? ? ? ? public bool Transmit(_VCI_CAN_OBJ[] frames)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }
? ? ? ? ? ? int length = frames.Length;
? ? ? ? ? ? VCI_CAN_OBJ[] obj = new VCI_CAN_OBJ[length];
? ? ? ? ? ? for (int i = 0; i < length; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? obj[i] = new VCI_CAN_OBJ
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ID = frames[i].ID,
? ? ? ? ? ? ? ? ? ? TimeFlag = frames[i].TimeFlag,
? ? ? ? ? ? ? ? ? ? TimeStamp = frames[i].TimeStamp,
? ? ? ? ? ? ? ? ? ? SendType = frames[i].SendType,
? ? ? ? ? ? ? ? ? ? RemoteFlag = frames[i].RemoteFlag,
? ? ? ? ? ? ? ? ? ? ExternFlag = frames[i].ExternFlag,
? ? ? ? ? ? ? ? ? ? Data = frames[i].Data,
? ? ? ? ? ? ? ? ? ? DataLen = frames[i].DataLen,
? ? ? ? ? ? ? ? ? ? Reserved = frames[i].Reserved
? ? ? ? ? ? ? ? };
? ? ? ? ? ? }

? ? ? ? ? ? return VCI_Transmit(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, obj, (uint)length) != 0;
? ? ? ? }

? ? ? ? public bool Transmit(_VCI_CAN_OBJ frame)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? VCI_CAN_OBJ[] frames = new VCI_CAN_OBJ[1];
? ? ? ? ? ? frames[0] = new VCI_CAN_OBJ
? ? ? ? ? ? {
? ? ? ? ? ? ? ? ID = frame.ID,
? ? ? ? ? ? ? ? TimeFlag = frame.TimeFlag,
? ? ? ? ? ? ? ? TimeStamp = frame.TimeStamp,
? ? ? ? ? ? ? ? SendType = frame.SendType,
? ? ? ? ? ? ? ? RemoteFlag = frame.RemoteFlag,
? ? ? ? ? ? ? ? ExternFlag = frame.ExternFlag,
? ? ? ? ? ? ? ? Data = frame.Data,
? ? ? ? ? ? ? ? DataLen = frame.DataLen,
? ? ? ? ? ? ? ? Reserved = frame.Reserved
? ? ? ? ? ? };

? ? ? ? ? ? return VCI_Transmit(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, frames, (uint)frames.Length) != 0;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 設置CAN相關參數
? ? ? ? /// </summary>
? ? ? ? /// <param name="config"></param>
? ? ? ? /// <returns></returns>
? ? ? ? public bool InitCAN(_VCI_INIT_CONFIG config)
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? VCI_INIT_CONFIG obj = new VCI_INIT_CONFIG
? ? ? ? ? ? {
? ? ? ? ? ? ? ? AccCode = config.AccCode,
? ? ? ? ? ? ? ? AccMask = config.AccMask,
? ? ? ? ? ? ? ? Mode = config.Mode,
? ? ? ? ? ? ? ? Filter = config.Filter,
? ? ? ? ? ? ? ? Timing0 = config.Timing0,
? ? ? ? ? ? ? ? Timing1 = config.Timing1,
? ? ? ? ? ? ? ? Reserved = config.Reserved
? ? ? ? ? ? };

? ? ? ? ? ? if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref obj) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? #region 參考ZLG官方示例
? ? ? ? /// <summary>
? ? ? ? /// 接收數據
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public List<_VCI_CAN_OBJ> Receive()
? ? ? ? {
? ? ? ? ? ? //獲取CAN通道緩沖區中已接收但未讀取的幀數量
? ? ? ? ? ? uint receiveNum = VCI_GetReceiveNum(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID);
? ? ? ? ? ? if (receiveNum == 0) return null;

? ? ? ? ? ? //如果緩沖區未讀取的幀數量大于規定的最大讀取量,只能讀取規定的最大量的幀數據,其它數據丟失
? ? ? ? ? ? uint needReceiveNum = receiveNum > MaxFrames ? MaxFrames : receiveNum;

? ? ? ? ? ? IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VCI_CAN_OBJ)) * (Int32)receiveNum);
? ? ? ? ? ? //返回值為實際讀取的幀數量,數據填充至buf
? ? ? ? ? ? receiveNum = VCI_Receive(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, pt, receiveNum, 100);

? ? ? ? ? ? List<_VCI_CAN_OBJ> result = new List<_VCI_CAN_OBJ>();
? ? ? ? ? ? //string str = "";
? ? ? ? ? ? for (int i = 0; i < receiveNum; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? VCI_CAN_OBJ obj = (VCI_CAN_OBJ)Marshal.PtrToStructure((IntPtr)((UInt32)pt + i * Marshal.SizeOf(typeof(VCI_CAN_OBJ))), typeof(VCI_CAN_OBJ));

? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? //foreach (var item in obj.Data)
? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? // ? ?str += " " + System.Convert.ToString(item, 16);
? ? ? ? ? ? ? ? //}

? ? ? ? ? ? ? ? result.Add(new _VCI_CAN_OBJ
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ID = obj.ID,
? ? ? ? ? ? ? ? ? ? TimeFlag = obj.TimeFlag,
? ? ? ? ? ? ? ? ? ? TimeStamp = obj.TimeStamp,
? ? ? ? ? ? ? ? ? ? SendType = obj.SendType,
? ? ? ? ? ? ? ? ? ? RemoteFlag = obj.RemoteFlag,
? ? ? ? ? ? ? ? ? ? ExternFlag = obj.ExternFlag,
? ? ? ? ? ? ? ? ? ? Data = obj.Data,
? ? ? ? ? ? ? ? ? ? DataLen = obj.DataLen,
? ? ? ? ? ? ? ? ? ? Reserved = obj.Reserved
? ? ? ? ? ? ? ? });
? ? ? ? ? ? }
? ? ? ? ? ? return result;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 直接獲取接收數據的string形式
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public string OnlyReceiveData()
? ? ? ? {
? ? ? ? ? ? //獲取CAN通道緩沖區中已接收但未讀取的幀數量
? ? ? ? ? ? uint receiveNum = VCI_GetReceiveNum(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID);
? ? ? ? ? ? if (receiveNum == 0) return null;

? ? ? ? ? ? //如果緩沖區未讀取的幀數量大于規定的最大讀取量,只能讀取規定的最大量的幀數據,其它數據丟失
? ? ? ? ? ? uint needReceiveNum = receiveNum > MaxFrames ? MaxFrames : receiveNum;

? ? ? ? ? ? IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VCI_CAN_OBJ)) * (Int32)receiveNum);
? ? ? ? ? ? //返回值為實際讀取的幀數量,數據填充至buf
? ? ? ? ? ? receiveNum = VCI_Receive(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, pt, receiveNum, 100);
? ? ? ? ? ?
? ? ? ? ? ? string str = "";
? ? ? ? ? ? for (int i = 0; i < receiveNum; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? VCI_CAN_OBJ obj = (VCI_CAN_OBJ)Marshal.PtrToStructure((IntPtr)((UInt32)pt + i * Marshal.SizeOf(typeof(VCI_CAN_OBJ))), typeof(VCI_CAN_OBJ));

? ? ? ? ? ? ? ? foreach (var item in obj.Data)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? str += " " + System.Convert.ToString(item, 16);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return str;
? ? ? ? }
? ? ? ? #endregion

? ? ? ? #region 修改接收方法:調用的VCI_Receive參數不同
? ? ? ? /// <summary>
? ? ? ? ///?
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public List<_VCI_CAN_OBJ> _Receive()
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? VCI_CAN_OBJ[] buf = new VCI_CAN_OBJ[MaxFrames];//MaxFrames為規定的最大接收數

? ? ? ? ? ? uint num = VCI_Receive(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, buf, (uint)buf.Length,2000);
? ? ? ? ? ?
? ? ? ? ? ?VCI_CAN_OBJ[] frames = new VCI_CAN_OBJ[num];
? ? ? ? ? ? Array.Copy(buf, frames, num);

? ? ? ? ? ? List<_VCI_CAN_OBJ> result = new List<_VCI_CAN_OBJ>();
? ? ? ? ? ? foreach (var obj in frames)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? result.Add(new _VCI_CAN_OBJ
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ID = obj.ID,
? ? ? ? ? ? ? ? ? ? TimeFlag = obj.TimeFlag,
? ? ? ? ? ? ? ? ? ? TimeStamp = obj.TimeStamp,
? ? ? ? ? ? ? ? ? ? SendType = obj.SendType,
? ? ? ? ? ? ? ? ? ? RemoteFlag = obj.RemoteFlag,
? ? ? ? ? ? ? ? ? ? ExternFlag = obj.ExternFlag,
? ? ? ? ? ? ? ? ? ? Data = obj.Data,
? ? ? ? ? ? ? ? ? ? DataLen = obj.DataLen,
? ? ? ? ? ? ? ? ? ? Reserved = obj.Reserved
? ? ? ? ? ? ? ? });
? ? ? ? ? ? }

? ? ? ? ? ? return result;
? ? ? ? }
? ? ? ? #endregion
? ? ? ? /// <summary>
? ? ? ? /// 查看緩存區是否存在未讀取數據
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool HasReceive()
? ? ? ? {
? ? ? ? ? ? return VCI_GetReceiveNum(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID) != 0;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 清除接收緩沖區數據
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool ClearBuffer()
? ? ? ? {
? ? ? ? ? ? if (Thread.VolatileRead(ref disposed) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new ObjectDisposedException("CanDevice already disposed");
? ? ? ? ? ? }

? ? ? ? ? ? if (ControlCAN.VCI_ClearBuffer(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? log.Error("Failed to clear can.");
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }

? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 關閉CAN
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool CloseCAN()
? ? ? ? {
? ? ? ? ? ? if (VCI_CloseDevice(objCANDevice.DevType, objCANDevice.DevID) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //log.Error("Failed to close CAN device");
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }
? ? }
}
————————————————

原文鏈接:https://blog.csdn.net/sinat_31465609/article/details/88804174

總結

以上是生活随笔為你收集整理的周立功CAN二次开发接口使用(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产福利午夜 | 亚洲天堂首页 | 亚洲精品www久久久 www国产精品com | 亚洲精品视频在 | 色综合久久天天 | 久久视频在线观看 | 日韩有码第一页 | 91九色porn在线资源 | 免费久久久 | 久久国产三级 | 色婷婷婷 | 国产精品久久久网站 | 国产精品久久久久久久久久久久午夜片 | 中文字幕 国产视频 | 国产精品美 | 日韩欧美高清不卡 | 国产在线观看中文字幕 | 成人国产综合 | 成年人视频在线免费观看 | 超碰个人在线 | 在线视频中文字幕一区 | 国产精品久久久久婷婷二区次 | 日韩欧美99 | 日韩三级精品 | 久草视频国产 | 国产一区免费 | 欧美一进一出抽搐大尺度视频 | 免费观看黄 | 在线视频日韩欧美 | 特黄特黄的视频 | 91大神精品视频 | 美女黄频 | 97福利社| 国产高清视频 | 99久久精品国产亚洲 | 亚洲激情在线视频 | 久久国产一区二区三区 | 日韩电影中文字幕 | 九九免费在线观看 | 国产成人av电影在线观看 | 日韩精品影视 | 久久久鲁| 欧美激情一区不卡 | 中文字幕亚洲国产 | 91精品视频在线观看免费 | 国产高清免费 | 亚洲视频在线视频 | 99久热在线精品视频观看 | 婷婷深爱 | 九九热在线精品视频 | 久久视频免费看 | 亚洲日本精品视频 | 狠狠躁日日躁狂躁夜夜躁 | 亚洲视频 在线观看 | 亚洲视屏 | 久热国产视频 | 久久久精选 | 丰满少妇高潮在线观看 | 婷婷5月色| 国产我不卡 | 手机看片久久 | 午夜黄色一级片 | 日日夜夜人人天天 | 91av在线精品| 久久午夜电影院 | 日日碰狠狠躁久久躁综合网 | 香蕉影视| 欧美精品久久99 | 成人久久久久久久久 | 天天干天天操天天搞 | 97超碰国产在线 | 国内精品久久久久久久久久久 | 在线播放精品一区二区三区 | 天天操天天操天天操天天操天天操 | 黄色毛片在线看 | 日韩久久久久久久久久久久 | 久久99国产一区二区三区 | 国模视频一区二区 | 国产精品精品久久久久久 | 99精品视频在线观看免费 | 亚洲黄色片一级 | 99热在线看 | 国产精品福利一区 | 碰超在线观看 | 操操操日日日干干干 | 少妇搡bbbb搡bbb搡aa | 亚洲日韩欧美一区二区在线 | 国产一区二区在线免费视频 | 色免费在线 | 麻豆久久久久久久 | 国产成人久久久77777 | 国语自产偷拍精品视频偷 | 国产在线va| 在线天堂v| 91成人亚洲 | 欧美日韩国产综合一区二区 | sm免费xx网站| 国产成人综合精品 | 日韩精品在线视频免费观看 | 97超碰人人模人人人爽人人爱 | 天天久久综合 | 在线免费观看的av网站 | 免费电影一区二区三区 | 91视频久久 | 婷婷综合国产 | 午夜视频久久久 | 爱av在线网 | 最新中文在线视频 | 亚洲人人av | 婷婷丁香五 | 国产在线观看中文字幕 | 九九交易行官网 | 操久| 园产精品久久久久久久7电影 | 天天干一干 | 国产免费视频在线 | 色婷婷av在线 | 91香蕉视频黄色 | 天天操狠狠操夜夜操 | 亚洲综合色丁香婷婷六月图片 | 激情亚洲综合在线 | 在线播放视频一区 | 精品国产一区二区三区四 | av中文字幕网址 | 看片一区二区三区 | 婷婷精品国产欧美精品亚洲人人爽 | 国产视频日韩 | 99av在线视频 | 国产成人久久久77777 | 久久久国产一区 | 成人影片免费 | 黄色成年网站 | 天天艹| 日韩免费不卡av | 久久久亚洲国产精品麻豆综合天堂 | 91看片黄色 | 国产网站在线免费观看 | 日本最新一区二区三区 | 日韩av一卡二卡三卡 | 91av中文 | 欧美乱码精品一区 | 黄色成人av | 欧美亚洲国产精品久久高清浪潮 | 激情丁香久久 | 一区二区三区韩国免费中文网站 | 久久综合狠狠狠色97 | 亚洲涩涩涩涩涩涩 | 日韩欧美视频在线观看免费 | 欧美另类高清 | 日本一区二区三区免费观看 | 99久热在线精品 | 国产高清不卡一区二区三区 | 国产精品a久久久久 | 欧美一区二区三区在线 | a级片在线播放 | 国产黄色片一级三级 | 不卡av电影在线 | 69久久99精品久久久久婷婷 | 国产一区二区三区免费视频 | 一区二区三区免费 | 97在线看 | 91精品国产网站 | 99热高清 | 日韩 精品 一区 国产 麻豆 | 六月丁香六月婷婷 | 精品国产亚洲一区二区麻豆 | 91免费版在线 | 我爱av激情网 | 奇米网在线观看 | 亚洲最大av | 伊人久久影视 | 四虎国产精品永久在线国在线 | 亚洲一区二区三区在线看 | 最近中文字幕国语免费av | a在线观看国产 | 国产精品国产自产拍高清av | 黄色特一级 | 天天av综合网 | 欧美日韩精品在线免费观看 | 国产精品无av码在线观看 | 77国产精品 | 国产精品久久久久久久婷婷 | 911久久| 日日操天天操夜夜操 | 日韩欧美电影 | www.色午夜 | 欧美精品中文 | 国产一区二区中文字幕 | 国产成人久久久77777 | 成人在线黄色 | 亚洲精品五月 | 久久99在线视频 | 亚洲无人区小视频 | 成人av手机在线 | 一区二区三区国产欧美 | 激情 一区二区 | 91伊人久久大香线蕉蜜芽人口 | 99免费观看视频 | 九九热在线观看 | 国产99亚洲 | 天天射天天添 | 青青河边草免费视频 | 欧美在线视频不卡 | 就操操久久 | 在线观看亚洲精品视频 | 亚洲影音先锋 | 在线观看国产区 | 色www精品视频在线观看 | 国产高清在线 | 中文字幕综合在线 | 操操操av| 手机在线观看国产精品 | 欧美做受69| 91麻豆产精品久久久久久 | 国产一区二区在线播放 | 91av网站在线观看 | 国产在线精品一区 | 色婷婷国产 | 久草免费在线 | 99999精品视频 | 欧美日韩视频在线一区 | 国产最顶级的黄色片在线免费观看 | 亚洲欧美视频在线观看 | 国产成人精品一区二 | 四虎成人免费观看 | 色多多视频在线 | 欧美日韩国产一区二 | av电影在线免费 | 成人午夜电影在线 | 亚洲欧美综合精品久久成人 | 黄色a视频免费 | 亚洲一区 av | 国产成人精品综合久久久 | 久久成人在线 | 免费高清影视 | 中文字幕av免费 | 亚洲国产精品久久久久 | 亚洲第五色综合网 | 骄小bbw搡bbbb揉bbbb | 在线观看av的网站 | 国产精品国产三级国产aⅴ入口 | 黄色av电影网 | 99久久精品网 | 中文区中文字幕免费看 | 国产一级精品视频 | 久久99国产精品免费网站 | www.亚洲精品 | 久久成人资源 | 久草视频免费播放 | www.xxx.性狂虐 | 久久久久久久久久福利 | av网站大全免费 | 女人魂免费观看 | 精品视频在线免费观看 | 亚洲在线视频网站 | 在线天堂视频 | 国产精品国产精品 | 五月婷婷毛片 | 成人看片 | 97成人在线视频 | 波多野结衣精品在线 | 日韩精品观看 | 成人黄色大片在线观看 | 91精品国产99久久久久 | 91桃色在线播放 | 在线色视频小说 | 婷婷在线看 | 91在线网址 | 国产99在线免费 | 2019免费中文字幕 | 日韩视频1 | 福利视频网址 | 亚洲国产精品激情在线观看 | 人人玩人人添人人 | 天堂在线成人 | 91精品国产成人www | 人人爽爽人人 | .精品久久久麻豆国产精品 亚洲va欧美 | 国产明星视频三级a三级点| 成人av电影免费 | 精品国产一区二区三区久久久蜜臀 | 97视频网址 | 国产精品久久久99 | 网站免费黄 | 日韩欧美一区二区三区视频 | 天天操狠狠操网站 | 欧美日本啪啪无遮挡网站 | 六月丁香婷婷久久 | 黄a网| 精品电影一区二区 | 日韩成人xxxx | 91九色蝌蚪视频 | 97在线观看免费高清完整版在线观看 | 久久精品国产精品 | 在线免费高清视频 | 国内精品久久久久影院优 | 国产亲近乱来精品 | 亚洲一区视频免费观看 | 9在线观看免费高清完整版在线观看明 | 欧美性受极品xxxx喷水 | 奇米四色影狠狠爱7777 | 夜夜躁狠狠躁日日躁 | 国产精品ssss在线亚洲 | 婷婷四房综合激情五月 | 日韩1页 | 99精品视频在线 | 草久视频在线 | 天天爱天天射天天干天天 | 伊人婷婷在线 | 久久中文精品视频 | 中文字幕日韩国产 | 久保带人 | 欧美成年人在线视频 | 免费看的黄网站软件 | 免费视频在线观看网站 | 日韩一区二区免费在线观看 | 国内精品视频久久 | 亚洲三级精品 | 国产精品区免费视频 | 永久免费毛片 | 欧美日韩天堂 | 亚洲午夜精品一区二区三区电影院 | 欧美一级裸体视频 | 伊人五月在线 | 五月天激情视频在线观看 | 天天性天天草 | 国产精品18久久久久久首页狼 | 日韩视频在线观看免费 | 成人黄色在线视频 | 成人免费观看网站 | 国产精品视频永久免费播放 | 男女视频国产 | 久久免费公开视频 | 99视频在线观看视频 | 6080yy午夜一二三区久久 | 国产视频不卡一区 | 激情 一区二区 | 久草香蕉在线视频 | 久热免费 | 国产中文字幕在线视频 | 日韩在线网址 | 国产精品久久久久久久免费大片 | 深爱五月网 | 黄色av在| 天天干天天想 | 国产午夜影院 | 中国美女一级看片 | 国产亚洲人成网站在线观看 | 狠狠干婷婷色 | 久久五月网 | 五月婷婷影院 | 激情综合网五月 | 日本在线中文在线 | 99热只有精品在线观看 | 中文字幕国产一区二区 | 精品视频在线观看 | 精品999| 亚洲性xxxx| www在线观看国产 | av色图天堂网 | 色爱区综合激月婷婷 | www.天天操 | 欧美国产日韩在线视频 | 亚洲一区网 | 久草影视在线观看 | 久久久久久久久影视 | 一区三区视频 | 粉嫩高清一区二区三区 | 中文字幕中文字幕中文字幕 | 胖bbbb搡bbbb擦bbbb | www.福利 | 国产在线观看午夜 | 毛片激情永久免费 | 欧美日韩免费网站 | www中文在线 | 国产免费三级在线观看 | 国产手机在线精品 | 999色视频| 99re中文字幕 | 亚洲精品视| 亚洲欧美国产视频 | 亚洲成成品网站 | 成年人国产精品 | 国产a级精品 | 久久人人爽人人 | 五月色婷 | 日韩精品免费一线在线观看 | 一区二区三区四区免费视频 | 久草视频资源 | 国产精品一区二区三区电影 | 国产成人久久av免费高清密臂 | 久久精品国产精品亚洲精品 | 国产一区二区三区高清播放 | 精品国产一区二区三区久久久久久 | 91看片一区二区三区 | 国产精品18久久久久久久久 | 91在线精品秘密一区二区 | 亚洲狠狠干 | 波多野结衣视频一区 | 成人免费看电影 | 久精品视频 | 在线免费观看黄色 | 色小说在线 | 豆豆色资源网xfplay | 狠狠干狠狠色 | 日韩免费高清在线观看 | 成人午夜网 | 九九热re | 国产精品理论片在线观看 | 国内成人精品视频 | 国产成人久久久77777 | 欧美日韩p片 | 手机看片国产 | 日韩精品视频网站 | 玖玖在线资源 | 天天爽综合网 | 婷婷四房综合激情五月 | 黄网站app在线观看免费视频 | 久久精品99 | 国产大片黄色 | 久久国产精品成人免费浪潮 | 久久久久久高潮国产精品视 | 国产成人精品亚洲a | 午夜精品电影一区二区在线 | 欧美久久精品 | 日韩高清国产精品 | 国产一级电影免费观看 | 日韩a级黄色片 | 久久狠狠亚洲综合 | 久久综合久久综合久久 | 久久综合国产伦精品免费 | 国产区久久 | 黄色av电影| 国产精品99精品久久免费 | 日韩中文字幕网站 | 久久久久久久久久久影视 | 麻豆 videos| 日韩精品久久一区二区 | 黄色毛片一级 | 在线只有精品 | 国产一线在线 | 亚洲国产精品一区二区久久hs | 亚洲精品白浆高清久久久久久 | 欧美精品一区二区免费 | 夜夜爽88888免费视频4848 | 香蕉视频在线免费 | 日韩精品一区二区免费 | 涩涩在线 | 99精品视频免费 | 免费在线观看日韩欧美 | 久久精品免费看 | 久久国产精品偷 | 久久这里只有精品1 | 日韩av在线影视 | 中文字幕一区二区三区久久 | 91亚洲精品乱码久久久久久蜜桃 | 欧美午夜理伦三级在线观看 | 国产精品99久久久久久人免费 | 成人性生交视频 | 日韩美女免费线视频 | 日韩大片在线免费观看 | 欧美疯狂性受xxxxx另类 | 国产中文字幕视频在线观看 | 国产黄色资源 | 玖玖视频网| 日韩精品播放 | 在线观看免费色 | 超级碰碰碰免费视频 | 欧美日韩国产成人 | 麻豆视频国产精品 | 国产黄色精品在线 | 精品超碰| 国产成人一区二区三区久久精品 | 日韩av电影免费观看 | 欧美日韩不卡一区 | 日韩久久视频 | 久久色网站 | 国内精品在线观看视频 | 国产视频精品在线 | 啪啪激情网 | 亚洲成人黄色网址 | 狠狠干狠狠操 | 91桃色免费观看 | 黄色av电影在线 | 美女啪啪图片 | 天天狠狠干 | 久久视频6 | 1000部18岁以下禁看视频 | 国产 视频 高清 免费 | 玖草影院 | 97品白浆高清久久久久久 | 亚洲精品视频一二三 | 亚洲资源在线网 | 在线你懂的视频 | 麻豆视频网址 | 91免费版在线观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 久久免费精品国产 | 摸阴视频 | 成年人在线观看视频免费 | 色吊丝在线永久观看最新版本 | av中文字幕剧情 | 操操操日日| 日韩精选在线观看 | 日本中文乱码卡一卡二新区 | 天天操天天爽天天干 | 日韩精品视频一二三 | 丁香婷婷综合激情五月色 | 国产在线观看免费观看 | www.久久成人 | 日韩色av色资源 | 懂色av懂色av粉嫩av分享吧 | 国产中文字幕一区二区三区 | 国产一级淫片免费看 | 字幕网av| 日本午夜免费福利视频 | 国产精品免费视频观看 | 欧美日韩综合在线观看 | 波多野结衣最新 | 黄色一级大片在线免费看国产一 | 日日爽天天爽 | 免费在线观看av网址 | 色视频网站在线观看一=区 a视频免费在线观看 | 天天插天天 | 在线国产日本 | 久久久久久久av麻豆果冻 | 免费在线精品视频 | 天天搞天天干 | 国产亲近乱来精品 | 最近中文字幕视频网 | 黄色免费高清视频 | 亚洲va欧美va人人爽 | 亚洲欧美乱综合图片区小说区 | 一区二精品 | 欧美巨大荫蒂茸毛毛人妖 | 少妇bbbb揉bbbb日本 | 精品国产久 | 一级a性色生活片久久毛片波多野 | 91成人小视频 | 91大神在线观看视频 | 亚洲九九九在线观看 | 欧美福利久久 | 国产视频欧美视频 | 伊人久操| 超碰人人草人人 | 国产成人三级一区二区在线观看一 | 亚洲国产成人精品久久 | 精品国产一二三四区 | 综合网久久 | 国产喷水在线 | 国产一区二区三区在线 | 成人cosplay福利网站 | 91免费看黄| 天天操天天添天天吹 | 国产一区在线观看视频 | 日本字幕网 | 美女久久网站 | 亚洲综合婷婷 | 草久中文字幕 | 狠狠操91 | 成人av电影免费在线观看 | 在线高清 | 国产资源免费 | 亚洲欧美乱综合图片区小说区 | 欧美性色网站 | 国产精品原创av片国产免费 | 97视频免费在线看 | 日韩av片无码一区二区不卡电影 | 成年人黄色大片在线 | 亚洲黄a| 久久视频 | 欧洲精品在线视频 | 97偷拍在线视频 | 91精品国产乱码 | aaa毛片视频 | 91精品久久久久久综合五月天 | 日日爱视频 | 久久久性| 欧美成人精品三级在线观看播放 | 久久怡红院 | 国产精品1区2区在线观看 | av在线电影网站 | 99热99re6国产在线播放 | 久久天天躁夜夜躁狠狠85麻豆 | 国产精品久久久久一区 | 91超碰在线播放 | 日韩一级成人av | 69av国产| 欧美另类老妇 | 国产色网 | 久久久片 | 国产黄色在线看 | 国产在线更新 | 午夜天使 | 九九视频免费 | 99视频精品免费观看, | www.天天干| 久久国产电影 | 久久成年人视频 | 91亚洲精品久久久蜜桃网站 | 亚洲爱爱视频 | 免费视频黄色 | 国产成人一二片 | 久章草在线观看 | av黄网站 | 国产精品成人一区二区 | 精品久久久成人 | 黄色大片免费网站 | 亚洲视频,欧洲视频 | 久久婷婷五月综合色丁香 | 在线黄色免费 | 色av资源网 | 在线免费视频 你懂得 | 欧美精品乱码久久久久久 | 免费亚洲黄色 | 亚洲精品乱码久久久久久蜜桃91 | 国内精品久久久久久久 | 亚洲精品视频免费看 | 超碰在线最新地址 | 激情久久综合网 | 欧美日在线 | 亚州精品天堂中文字幕 | 麻豆传媒视频在线播放 | 国产老太婆免费交性大片 | 天天色综合1 | 一级黄色片在线播放 | 久久精品欧美日韩精品 | 亚洲欧美国产精品久久久久 | 精品国产一二三 | 久久精品免费 | 天天射天天干天天 | 国产日韩欧美在线一区 | 国产精品日韩在线播放 | 国产在线a | 日韩电影久久 | 久久精品三| 91亚色视频 | 精品日本视频 | 久久久久日本精品一区二区三区 | 亚洲伦理一区二区 | 国产专区精品 | 欧美精品视 | 久久99亚洲网美利坚合众国 | 国产精品video爽爽爽爽 | 在线网站黄 | 99久久精品国产亚洲 | 国产一区福利 | 免费在线成人 | 欧美午夜精品久久久久 | 91看片淫黄大片一级在线观看 | japanesefreesex中国少妇 | 国产综合香蕉五月婷在线 | 96av视频 | 国产91精品一区二区 | 永久免费在线 | 国产成人精品久久二区二区 | 日韩在线免费电影 | 日韩高清一 | 亚洲区色 | 夜夜天天干 | 久久精品中文字幕一区二区三区 | 美女国产网站 | 最近的中文字幕大全免费版 | 日韩国产在线观看 | 婷婷丁香六月 | 日韩有码中文字幕在线 | 高清不卡一区二区三区 | 草莓视频在线观看免费观看 | 99久久综合国产精品二区 | 爱射综合 | 亚洲午夜精品久久久久久久久 | 久久综合久久八八 | 精品国产中文字幕 | 久久精品日本啪啪涩涩 | 狠狠的干狠狠的操 | 91香蕉视频黄 | av高清一区 | 精品久久国产精品 | 黄色成年 | 狠狠操狠狠插 | 国产亚洲精品久久久久久网站 | 狠狠色噜噜狠狠狠合久 | 在线v片免费观看视频 | 在线观看中文字幕 | 中国黄色一级大片 | 91麻豆精品国产91久久久无限制版 | 青青网视频 | 国内少妇自拍视频一区 | 黄网站免费大全入口 | 一区二区三区高清不卡 | 日本公乱妇视频 | 亚洲japanese制服美女 | 1024手机看片国产 | 久久视频精品在线 | 九九九免费视频 | 色婷婷免费视频 | 国产精品二区在线 | 在线日韩精品视频 | 亚洲国产三级在线观看 | 91精品啪在线观看国产 | 女人18精品一区二区三区 | 伊人婷婷色| 国产在线精品一区二区不卡了 | 国产高清免费视频 | av在线网站免费观看 | 日韩视频免费观看高清 | 国产亚洲久一区二区 | 四虎在线免费 | 亚洲精品福利视频 | 欧美精品一二三 | a亚洲视频 | 国内精品久久久久国产 | 高潮久久久久久久久 | 中文字幕在线观看2018 | www.在线观看av | 最近中文字幕大全中文字幕免费 | 国精产品999国精产 久久久久 | 欧美韩国在线 | 不卡精品 | av资源网在线播放 | 亚洲va在线va天堂va偷拍 | 国产精品久久久久久久久久久久 | 久久99热精品这里久久精品 | 免费日韩 精品中文字幕视频在线 | 久久久精品国产一区二区电影四季 | 婷婷久久五月天 | 亚洲麻豆精品 | 欧美韩国日本在线 | 国产精品国产三级国产不产一地 | www.国产毛片| 久久久久久国产精品久久 | 欧美黑人性猛交 | 粉嫩一二三区 | 狠狠色狠狠色合久久伊人 | 久久婷婷国产色一区二区三区 | 午夜精品久久久久久久99 | 天天操天天添 | 天天草网站| 四虎在线影视 | 国产精品一区二区麻豆 | 日韩精品在线播放 | 超碰免费公开 | 国产老妇av | 香蕉蜜桃视频 | 午夜手机电影 | 在线成人免费av | 精品国产免费一区二区三区五区 | 成人一区二区在线 | 久久午夜鲁丝片 | 国产美女免费观看 | 久久亚洲热 | 欧美va天堂va视频va在线 | 亚洲激情综合 | 亚洲在线看| 免费视频久久久 | 国产精品一区二区久久精品爱微奶 | 六月丁香社区 | 在线看国产日韩 | 天天射天天干天天插 | 免费观看av网站 | 91传媒免费在线观看 | 99久久日韩精品视频免费在线观看 | 韩国在线一区二区 | 国产精选视频 | 96视频免费在线观看 | 成人h视频在线播放 | 久久精品国产精品亚洲 | 久久久18| 国产91精品看黄网站 | 久久成人资源 | 国产在线 一区二区三区 | 久久综合五月天 | 国产va饥渴难耐女保洁员在线观看 | 日日射天天射 | 色综合欧洲 | 香蕉网在线观看 | 中文字幕韩在线第一页 | 97福利| 欧美调教网站 | 精品uu| 日韩美女一级片 | 色婷婷久久 | 亚洲精品乱码久久久久久 | 精品1区2区 | 九九在线精品视频 | 久久久久久久久久久免费视频 | 国产 字幕 制服 中文 在线 | 97超碰资源 | 国产午夜三级一区二区三桃花影视 | 在线免费观看涩涩 | 成年人天堂com | 麻豆系列在线观看 | 麻豆久久精品 | 欧美日韩一二三四区 | 丁香 婷婷 激情 | 日本三级中文字幕在线观看 | 中文在线 | 日韩一区二区三区在线观看 | 国产精品18p | 国产成人在线综合 | 精品视频在线播放 | 狠狠干夜夜操天天爽 | 中文字幕在线观看免费 | 黄色成人免费电影 | 欧美日韩性生活 | 久久精品伊人 | 中文在线www | 天天曰天天曰 | 国产免费一区二区三区最新 | 香蕉91视频| 九九日九九操 | 国产亚洲婷婷免费 | 精品在线观看国产 | 亚洲精品中文字幕视频 | 日韩欧美一二三 | 久久久午夜视频 | av国产在线观看 | 亚洲成熟女人毛片在线 | 久久国产麻豆 | 亚洲尺码电影av久久 | 中文字幕在线观看网 | www.久草.com | 国产精品久久久久久吹潮天美传媒 | 一区二区三区影院 | 麻豆视频免费入口 | 国产一区二区三区四区大秀 | 国产精品久久久久久999 | 一区二区三区四区在线免费观看 | 亚洲人成网站精品片在线观看 | 亚洲黄色av网址 | 婷婷亚洲综合五月天小说 | 国产精品高潮久久av | 又粗又长又大又爽又黄少妇毛片 | 久久久久免费精品国产小说色大师 | 最新精品视频在线 | 亚洲一区美女视频在线观看免费 | 国产成人精品a | 九九色在线观看 | 久久国产露脸精品国产 | 亚洲精品av中文字幕在线在线 | 四虎永久免费在线观看 | 国产成人久久精品亚洲 | 欧洲成人av| 伊人热 | 精品国产免费看 | www.干| 久久精品在线视频 | 91av视频在线观看免费 | 精品国产免费观看 | 国产色资源 | 亚洲乱亚洲乱妇 | 91亚洲精品久久久中文字幕 | 久久免费黄色大片 | 91精品欧美一区二区三区 | 久久人人97超碰国产公开结果 | 91色国产在线 | 精品一区二区影视 | 欧美中文字幕第一页 | 999色视频 | 国模视频一区二区三区 | 久久久天堂 | av片子在线观看 | 久久久影院官网 | 黄色片网站av | 日韩在线观看高清 | 99热最新 | 91成人免费观看视频 | 欧美日韩在线观看一区二区 | 在线观看精品一区 | 亚洲精品在线视频网站 | 天天射综合| 97av.com| 97精品国自产拍在线观看 | 欧美综合在线视频 | 久久视频一区 | 91中文视频 | 色九九在线 | 免费成人在线网站 | 久久精品国产v日韩v亚洲 | 中文字幕国产在线 | 国产亚洲久一区二区 | 免费高清在线视频一区· | 亚洲国产精品成人女人久久 | 国产精品久久久久免费观看 | 91传媒免费观看 | 99久久精品国产系列 | 色婷婷视频在线 | 人人舔人人干 | 蜜桃麻豆www久久囤产精品 | 天堂麻豆| 91精品久久久久久久久 | 日韩av高清在线观看 | 欧美午夜理伦三级在线观看 | 亚洲国产理论片 | 成人久久视频 | 国产在线高清 | 免费观看性生活大片3 | 中文字幕一区二区三区视频 | 五月婷婷久草 | 欧美日韩高清在线 | 日韩久久久久久久 | 日韩com | 精品在线看 | 精品久久久久久久久久久院品网 | 五月婷婷色 | 精品在线免费观看 | 国产一级电影在线 | 日韩成人免费在线电影 | 国产黄色片免费在线观看 | 丁香六月五月婷婷 | 国产精品9999久久久久仙踪林 | 91精品老司机久久一区啪 | 成人三级网站在线观看 | 伊人婷婷激情 | 在线天堂日本 | 婷婷综合国产 | 天天射综合网站 | 在线免费观看黄色 | 亚洲精品久久久蜜臀下载官网 | 成人资源网 | 亚洲aⅴ免费在线观看 | 又黄又刺激视频 | 日本精品视频免费观看 | 黄免费网站 | 日韩av免费大片 | 久久久99久久 | 日产乱码一二三区别免费 | 成人sm另类专区 | 久久精品久久99精品久久 | 99久久99 | 日韩电影久久 | 国产日本高清 | 午夜影院一级片 | 国产91成人在在线播放 | 午夜av免费观看 | 久久久国产精品人人片99精片欧美一 | 国产尤物一区二区三区 | 国产99久久久国产精品免费看 | 国产黄色一级片在线 | 视频一区二区精品 | 亚洲五月| 久久午夜网 | 精品视频资源站 | 久人人 | 免费看十八岁美女 | 最新真实国产在线视频 | 91精品视频免费 | 四虎国产精品免费观看视频优播 | 天天干夜夜夜操天 | av在线日韩 | 国产第一二区 | 日av免费| 成人毛片在线观看视频 | 国产91免费观看 | 2023av在线 | 狠狠色丁香婷婷 | 欧美精品乱码久久久久久 | 91网址在线 | 免费在线观看国产精品 | 日本黄网站 | 亚洲资源视频 | 97成人精品视频在线播放 | 超碰久热 | 黄免费网站 | 日韩一区二区免费视频 | 五月婷婷丁香网 | 午夜色场 | 人人擦| 2019中文字幕第一页 | 亚洲理论视频 | 99精彩视频在线观看免费 | 中文字幕在线观看视频一区 | 国产精品99久久久精品免费观看 | 99综合电影在线视频 | 午夜影视一区 | 欧洲精品视频一区二区 | 狠狠色丁香婷婷综合久小说久 | 国产精品毛片一区二区在线看 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲砖区区免费 | 国产在线日本 | 亚洲国产一二三 | 在线观看免费色 | 久草视频99 | 免费日p视频| 精品久久久99 | 丁香视频全集免费观看 | 婷婷日| 又黄又爽又湿又无遮挡的在线视频 | 久草综合在线 | 久久躁日日躁aaaaxxxx | 99国产在线 | 深爱激情五月婷婷 | 国产在线视频一区 | 久久草草热国产精品直播 | 久久久久高清毛片一级 | 97在线观看免费高清完整版在线观看 | 免费的国产精品 |