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

使用SHT3x-DIS溫濕度傳感器的I2C案例

網絡 通信技術
本文將介紹I2C總線、SHT3x DIS溫度傳感器的相關知識以及OpenHarmony的HDF驅動和NAPI框架的使用方法。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前言

本文將介紹I2C總線、SHT3x DIS溫度傳感器的相關知識以及OpenHarmony的HDF驅動和NAPI框架的使用方法。

一、I2C總線原理

I2C總線是飛利浦公司開發的一種雙向二線制同步串行總線。只需要兩根線便可在連接于總線上的器件之間進行傳輸信息。I2C通信為點對點通信,存在主設備和從設備之分。主從設備通過兩根線進行通信,其中兩根線分別是SDA和SCL,其中SDA為數據線,SCL為時鐘線。

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

主器件用于啟動總線傳送數據,并產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恒定的,而取決于此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然后主動發送數據至從器件,最后由主機終止數據傳送;如果主機要接收從器件的數據,首先由主器件尋址從器件.然后主機接收從器件發送的數據,最后由主機終止接收過程。在這種情況下,主機負責產生定時時鐘和終止數據傳送。

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

通信過程包含應答響應,時鐘同步。傳輸的數據字節格式有一定要求,每個字節必須為8位,每次發送的字節字數不受限制,每個字節后面必須跟一位校驗位。應答響應,數據傳輸必須有響應,由主機產生,在響應中發送器將時鐘線電平被拉高,接收器將電平拉低,保持穩定的電壓差;時鐘同步,數據傳輸只發生在時鐘信號的高電平期間,所以需要同步雙方時鐘信號以確保數據的準確性;

二、傳感器SHT3X DIS

Sensirion SHT3x-DIS濕度和溫度傳感器基于CMOSens?傳感器芯片,更加智能、可靠,精度更高。SHT3x-DIS具有增強的信號處理能力、兩個獨特的用戶可選I2C地址,通信速度高達1MHz。SHT35-DIS的典型相對濕度 (RH) 精度為±1.5%,典型溫度精度為±0.1°C。SHT3x-DIS具有2.5mm x 2.5mm x 0.9mm(長x寬x高)占位面積,電源電壓范圍為2.4V至5.5V。

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

(1)特性

  • 完全校準、線性化和溫度補償的數字輸出
  • I2C接口,通信速度高達1MHz,具有兩個用戶可選地址
  • SHT35的典型精度為+/-1.5% RH和+/-0.1°C
  • 啟動和測量速度極快
  • 2.15V到5.5V的寬電源電壓范圍
  • 小型8引腳DFN封裝

(2)引腳介紹

主要引腳SDA,SCL,VCC,GND。

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

(3) 通信過程

  • 開始測量

在開始測量前,主設備必須先把開始測量的信號發送到傳感器。發送的信號被稱為I2C寫入標頭,由7比特的I2C設備地址和一個·0(0表示寫入,1表示讀取),再加上16比特的測量命令構成。當傳感器接收到信號時,將會把SDA信號先拉低,響應信號ACK,在第八個時鐘信號下降沿時表示傳感器接收到了主設備的信號,開始測量。

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

  • 模式

傳感器數據采集模式多種多樣,我們可以選擇不同的方式進行測量以滿足不同的應用場景,這便是以上提到寫入表頭最后兩位字節表示的是測量命令,大類分為兩種采集模式。

  • 單次數據采集模式

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

  • 周期性數據采集模式

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

  • 其它命令

除此之外,傳感器里還設置了其它命令,可在傳感器說明文檔中查看。

  • 數據

當測量開始時,主設備便可以接收到信號,而此時標頭要使用讀取標頭,將0改為1。傳感器返回的后六位字節便是測量到的溫度和相對濕度的數據。其中六個字節,高三位為兩位溫度和一位校驗位,低三位為兩位相對濕度和一位校驗位,采用CRC校驗。

數據轉換公式如下:

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

三、簡單實現

以下代碼只是簡單地演示如何使用傳感器,沒有過多的規范要求。

(1)接口定義

int SendCMD(char *devName, char addr, uint16_t command)
{
int fd = -1;
uint8_t cmdBuf[2L] = {0};
struct i2c_rdwr_ioctl_data i2c_data;
fd = open(devName, O_RDWR); //獲取I2C設備句柄
i2c_data.nmsgs = 1;
i2c_data.msgs = (struct i2c_msg *)malloc(i2c_data.nmsgs * sizeof(struct
i2c_msg));
ioctl(fd, I2C_TIMEOUT, 1);
ioctl(fd, I2C_RETRIES, 2L);
cmdBuf[0] = command >> 8L; //對指令數據進行處理 高八位和低八位
cmdBuf[1] = command & 0xFF;
i2c_data.msgs[0].len = 2L;
i2c_data.msgs[0].addr = addr;
i2c_data.msgs[0].flags = 0;
i2c_data.msgs[0].buf = cmdBuf;
ioctl(fd, I2C_RDWR, (unsigned long)&i2c_data); //將數據寫入進行傳輸
free(i2c_data.msgs);
close(fd);
return 0;
}
// 再定義一些數據轉換函數和校驗函數 簡單的數據轉換 忽略
int ConvertTH(uint8_t tempRH, float *rawTemp, float *rawHum);
...

(2)主函數

int main(int argc, char *argv[])
{
char *dev_name = "/dev/i2c-5";
SendCMD(dev_name,ADDR,0x3093) //重啟
usleep(50L * 1000L);
SendCMD(dev_name,ADDR,0x202F) //開始測量
usleep(50L * 1000L);
int fd = -1;
struct i2c_rdwr_ioctl_data i2c_data;
uint8_t rawData[6L] = {0};
float rawTemp = 0, rawHum = 0;
fd = open(devName, O_RDWR);
i2c_data.nmsgs = 1;
i2c_data.msgs = (struct i2c_msg *)malloc(i2c_data.nmsgs * sizeof(struct
i2c_msg));
i2c_data.msgs[0].len = 6L;
i2c_data.msgs[0].addr = addr;
i2c_data.msgs[0].flags = 1;
i2c_data.msgs[0].buf = rawData;
ioctl(fd, I2C_RDWR, (unsigned long)&i2c_data);
free(i2c_data.msgs);
close(fd);
ConvertTH(rawData, &rawTemp, &rawHum);
printf("Temp: %.2f°C\nHum: %.2f°F",rawTemp,rawHum);
return 0;
}

四、采用標準系統HDF驅動實現

使用到:九聯科技unionpi_tiger開發板,SHT3x-DIS溫濕度傳感器,OpenHarmony源碼。

(1)配置產品驅動(一般廠商都會配置好,若沒配置可以跳轉至官方文檔查看詳細教程)

實例化驅動入口:

  • 實例化HdfDriverEntry結構體成員。
  • 調用HDF_INIT將HdfDriverEntry實例化對象注冊到HDF框架中。

配置屬性文件:

  • 在device_info.hcs文件中添加deviceNode描述。
//device_info.hcs 配置參考
root {
device_info {
match_attr = "hdf_manager";
device_i2c :: device {
device0 :: deviceNode {
policy = 2;
priority = 50;
permission = 0644;
moduleName = "HDF_PLATFORM_I2C_MANAGER";
serviceName = "HDF_PLATFORM_I2C_MANAGER";
deviceMatchAttr = "hdf_platform_i2c_manager";
}
device1 :: deviceNode {
policy = 0; // 等于0,不需要發布服務
priority = 55; // 驅動啟動優先級
permission = 0644; // 驅動創建設備節點權限
moduleName = "hi35xx_i2c_driver";
//【必要】用于指定驅動名稱,需要與期望的驅動Entry中的moduleName一致;
serviceName = "HI35XX_I2C_DRIVER"; //【必要】驅動對外發布服務的名稱,必須唯一
deviceMatchAttr =
"hisilicon_hi35xx_i2c";//【必要】用于配置控制器私有數據,要與i2c_config.hcs中對應控制器保持一致
// 具體的控制器信息在 i2c_config.hcs 中
}
}
}
}
// i2c_config.hcs 配置參考 (需要根據使用的開發板配置)
root {
platform {
i2c_config {
match_attr =
"hisilicon_hi35xx_i2c";//【必要】需要和device_info.hcs中的deviceMatchAttr值一致
template i2c_controller { //模板公共參數,繼承該模板的節點如果使用模板中的默認值,則節點字段可以缺省
bus = 0; //【必要】i2c 識別號
reg_pbase = 0x120b0000; //【必要】物理基地址
reg_size = 0xd1; //【必要】寄存器位寬
irq = 0; //【可選】根據廠商需要來使用
freq = 400000; //【可選】根據廠商需要來使用
clk = 50000000; //【可選】根據廠商需要來使用
}
controller_0x120b0000 :: i2c_controller {
bus = 0;
}
controller_0x120b1000 :: i2c_controller {
bus = 1;
reg_pbase = 0x120b1000;
}
...
}
}
}

實例化I2C控制器對象:

初始化I2cCntlr成員。

實例化I2cCntlr成員I2cMethod和I2cLockMethod。

p.s 使用到的九聯開發板已有相關配置,以上配置無需做更改或添加。

(2)一個結構三個接口

I2cMsg結構體:用于傳輸數據載體,由地址addr,緩存buf,緩存長度len,信號標記flags組成。

struct I2cMsg {
/** Address of the I2C device */
uint16_t addr;
/** Address of the buffer for storing transferred data */
uint8_t *buf;
/** Length of the transferred data */
uint16_t len;
/**
* Transfer Mode Flag | Description
* ------------| -----------------------
* I2C_FLAG_READ | Read flag
* I2C_FLAG_ADDR_10BIT | 10-bit addressing flag
* I2C_FLAG_READ_NO_ACK | No-ACK read flag
* I2C_FLAG_IGNORE_NO_ACK | Ignoring no-ACK flag
* I2C_FLAG_NO_START | No START condition flag
* I2C_FLAG_STOP | STOP condition flag
*/
uint16_t flags;
};

三個接口分別為I2cOpen()、I2cClose()、I2cTransfer()。

//number指I2C所掛載的總線號
DevHandle I2cOpen(int16_t number);
//handle是I2cOpen()返回的設備句柄
void I2cClose(DevHandle handle);
//msgs所要傳輸的數據結構體,count是傳輸結構體的大小
int32_t I2cTransfer(DevHandle handle, struct I2cMsg *msgs, int16_t
count);

(3) 代碼

  • 頭文件
#include //標準輸入輸出
#include //使用到usleep()進程掛起函數
#include "i2c_if.h" //HDF i2c 接口
#include "hdf_log.h" //日志打印頭文件
  • 結構體與接口
// 重新定義結構體方便使用
typedef struct
{
struct I2cMsg * i2cMsg;
uint8_t msgLen; //i2cMsg的長度
} I2cMessage;
//定義命令發送函數
int32_t SendCMD(DevHandle handle,uint16_t command)
{
int32_t ret;
I2cMessage i2cMessage;
i2cMessage.msgLen = 1;
i2cMessage.i2cMsg = new I2cMsg[1]; //申請內存
uint8_t cmdBuf[2L] = {0};
cmdBuf[0] = command >> 8L; //將命令拆分成高低位分別保存
cmdBuf[1] = command & 0xFF;
i2cMessage.i2cMsg[0].len = 2L;
i2cMessage.i2cMsg[0].addr = ADDR;
i2cMessage.i2cMsg[0].flags = WRITE_FLAGS;
i2cMessage.i2cMsg[0].buf = cmdBuf;
ret = I2cTransfer(handle,i2cMessage.i2cMsg,i2cMessage.msgLen);
if(ret < 0){
LOGE("%s: SendCommend faided",__func__);
delete i2cMessage.i2cMsg;
return -1;
}
delete i2cMessage.i2cMsg; //釋放內存
usleep(50L * 1000L); //等待發送完成
return 1;
}
  • 主函數
int main(int argc, char** argv)
{
/**
* 數據初始化
*/
DevHandle i2cHandle;
/**
* 獲取句柄
*/
i2cHandle = I2cOpen(BUSID);
if(i2cHandle == NULL){
LOGE("%s:get handle failed",__func__);
I2cClose(i2cHandle);
return 0;
}
/**
* 發送命令
*/
SendCMD(i2cHandle,0x3093); //關閉reset命令
SendCMD(i2cHandle,0x202F); //發送命令 repeatability=Low mps=0.5
/**
* 接收數據
*/
I2cMessage i2cMessage;
i2cMessage.msgLen = 1;
i2cMessage.i2cMsg = new I2cMsg[1];
uint8_t regData[6L] = {0};
i2cMessage.i2cMsg[0].len = 6L;
i2cMessage.i2cMsg[0].addr = ADDR;
i2cMessage.i2cMsg[0].flags = READ_FLAGS;
i2cMessage.i2cMsg[0].buf = regData;
I2cTransfer(i2cHandle,i2cMessage.i2cMsg,i2cMessage.msgLen);
delete i2cMessage.i2cMsg;
/**
* 數據處理
*/
uint16_t value = 0;
value = regData[0] << 8;
value = value | regData[1];
printf("Temperature: %.2f C\n",175.0f * (float)value / 65535.0f - 45.0f);
value = 0;
value = regData[3] << 8;
value = value | regData[4];
printf("Humidity: %.2f H\n",100.0f * (float)value / 65535.0f);
/**
* 關閉設備
*/
I2cClose(i2cHandle);
return 0;
}

至此,成功通過OpenHarmony的HDF驅動來獲取傳感器的值。

五、實現NAPI

(1)模塊定義與注冊

/**
* 模塊定義
*/
static napi_module i2cHDF_demoModule = {
.nm_version = 1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = registerI2cHDF_DemoApis,
.nm_modname = "i2chdf_demo",
.nm_priv = ((void *)0),
.reserved = {0},
};
/**
* 模塊注冊
*/
extern "C" __attribute__((constructor)) void RegisterI2cHDFoModule(void)
{
napi_module_register(&i2cHDF_demoModule);
}

(2)接口定義與注冊

int32_t SendCMD(DevHandle handle,uint16_t command)
{
int32_t ret;
struct I2cMsg * i2cMsg;
int msgLen = 1;
i2cMsg = new I2cMsg[msgLen];
uint8_t cmdBuf[2L] = {0};
cmdBuf[0] = command >> 8L;
cmdBuf[1] = command & 0xFF;
i2cMsg[0].len = 2L;
i2cMsg[0].addr = ADDR;
i2cMsg[0].flags = WRITE_FLAGS;
i2cMsg[0].buf = cmdBuf;
ret = I2cTransfer(handle,i2cMsg,msgLen);
delete i2cMsg;
usleep(50L * 1000L);
return 1;
}
/**
* 接口定義
*/
static napi_value readI2cBuf(napi_env env,napi_callback_info info)
{
napi_value ret;
DevHandle i2cHandle;
i2cHandle = I2cOpen(BUSID);
SendCMD(i2cHandle,0x3093);
SendCMD(i2cHandle,0x202F);
struct I2cMsg * i2cMsg;
int msgLen = 1;
i2cMsg = new I2cMsg[msgLen];
uint8_t regData[6L] = {0};
i2cMsg[0].len = 6L;
i2cMsg[0].addr = ADDR;
i2cMsg[0].flags = READ_FLAGS;
i2cMsg[0].buf = regData;
I2cTransfer(i2cHandle,i2cMsg,msgLen);
delete i2cMsg;
uint16_t value = 0;
double sHTTemp = 0;
value = regData[0] << 8;
value = value | regData[1];
sHTTemp = 175.0f * (double)value / 65535.0f - 45.0f;
//設計思路與上HDF大同小異,只不過將最后獲取的值通過轉換再返回
//此處只處理返回溫度的值,方便演示
NAPI_CALL(env, napi_create_double(env, sHTTemp, &ret));
return ret;
}
/**
* 接口注冊
*/
static napi_value registerI2cHDF_DemoApis(napi_env env, napi_value
exports)
{
napi_property_descriptor desc[] = {
DECLARE_NAPI_FUNCTION("readI2cBuf",readI2cBuf), //NAPI名字,上面的函數
};
NAPI_CALL(env,napi_define_properties(env,exports,sizeof(desc)/sizeof(desc[0]),desc));
return exports;
}

(3)北向接口

  • NAPI
function readI2cBuf(): number;
  • Index.ets
import i2chdf from '@ohos.i2chdf'
@Entry
@Component
struct Index {
@State message: string = 'Temperature: '+ i2chdf.readI2cBuf().toFixed(2) +
'°C';
aboutToAppear(): void{
var Id = setInterval(() =>{
this.message = 'Temperature: '+ i2chdf.readI2cBuf().toFixed(2) + '°C';
},1000)
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}

(4)效果演示

使用SHT3x-DIS溫濕度傳感器的I2C案例-開源基礎軟件社區

總結

整個案例整體思路都是圍繞著I2C通信流程和SHT3x溫度傳感器工作流程展開的。而在HDF驅動的使用中,我們會發現,獲取設備句柄的方式我們只用一個數字就可以,相比之前的"/dev/i2c-5"更加簡易明了,這也是HDF的特性之一。NAPI的實現,將整個OpenHarmoy南北向打通,使得北向程序可通過本地的接口就可以訪問傳感器的溫濕度。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2020-10-30 09:31:16

2G

2023-03-20 16:05:49

HDF傳感器驅動開發

2023-05-30 14:58:05

智能開發鴻蒙

2017-08-11 18:25:25

Linuxi2c

2022-06-13 09:21:45

I2C DriverI2C 子系統

2021-09-24 09:08:31

鴻蒙HarmonyOS應用

2022-06-12 07:30:13

I3C通訊協議

2020-12-21 09:57:52

OLED溫濕度計hi3861

2017-03-16 08:30:19

Android ThAndroidI2C

2023-04-17 16:21:58

操作系統鴻蒙

2023-03-03 13:45:00

數據中心傳感器

2010-06-08 16:25:35

I2C總線協議

2023-09-13 15:33:57

I2C鴻蒙

2020-11-03 09:55:33

嵌入式算法夾角

2009-04-11 15:12:24

.Net MicroI2C總線模擬器

2022-04-07 15:28:16

HarmonyOS鴻蒙操作系統

2022-05-27 09:00:09

I2C子系統協議

2010-07-01 16:45:05

I2C總線協議

2021-05-06 11:40:54

MQTT物聯網網關開發物聯網

2023-04-24 15:11:51

系統開發鴻蒙
點贊
收藏

51CTO技術棧公眾號

国产美女免费视频| av中文字幕网址| 青青久草在线| 日本亚洲视频在线| 欧美精品做受xxx性少妇| 美国黄色一级视频| 日韩欧美少妇| 亚洲综合一区二区| 欧美一区观看| 国产xxxx孕妇| 日韩精品亚洲专区| 欧美大荫蒂xxx| 日本人亚洲人jjzzjjz| 国产一区一区| 色综合色综合色综合| 日本成人性视频| 人成在线免费视频| 国产成人精品亚洲777人妖| 欧美在线视频导航| 欧美黄色一级网站| 日韩免费高清| 日韩精品亚洲精品| 亚洲精品成人无码毛片| 成人亚洲综合| 色综合久久88色综合天天6 | 日韩av大片在线| 国产这里有精品| 日本精品三区| 亚洲乱亚洲乱妇无码| 美女露出粉嫩尿囗让男人桶| 九九热这里有精品| 色综合婷婷久久| 国产在线精品91| 羞羞电影在线观看www| 欧美国产精品v| 欧美视频小说| 青青久在线视频| 99久久精品一区| 成人动漫视频在线观看完整版| 中国女人真人一级毛片| 久久精品首页| 欧美怡春院一区二区三区| 国产精品7777| 亚洲人成高清| 高清视频欧美一级| 国产一级在线免费观看| 欧美在线影院| 欧美成人午夜影院| 可以直接看的黄色网址| 婷婷综合在线| 久久精品国产精品| 色欲一区二区三区精品a片| 日韩精品诱惑一区?区三区| 在线观看日韩专区| youjizz亚洲女人| 欧美一级本道电影免费专区| 亚洲深夜福利在线| 国产伦理片在线观看| 国产一区二区三区四区五区传媒| 国产视频亚洲视频| 色婷婷在线影院| 精品成人影院| 日韩在线视频二区| 全网免费在线播放视频入口| 婷婷伊人综合| 久久久久亚洲精品| www欧美在线| 日韩国产精品久久久久久亚洲| 国产精品久久久久久久久免费看| 欧美一级黄视频| 美女视频免费一区| 亚洲综合在线小说| 日批免费在线观看| 久久精品亚洲国产奇米99| 水蜜桃一区二区| 欧洲日本在线| 亚洲一区电影777| 精品国产一二三四区| 天天免费亚洲黑人免费| 欧美日韩激情在线| 少妇献身老头系列| 亚洲va久久| 日韩在线资源网| 久久久久久久久久91| 在线亚洲观看| 国产精品尤物福利片在线观看| 91精品在线视频观看| 国产91丝袜在线18| 日本欧美色综合网站免费| 欧美日韩xx| 亚洲不卡av一区二区三区| 欧美少妇性生活视频| 亚洲国产天堂| 日韩不卡在线观看| 欧美性生交大片| aa级大片欧美三级| 91精品免费看| 亚洲aⅴ在线观看| 最新不卡av在线| 国产黄色一级网站| 国产一区二区高清在线| 亚洲精品丝袜日韩| 深夜福利影院在线观看| 日一区二区三区| 成人在线视频网址| 生活片a∨在线观看| 亚洲v中文字幕| 亚洲第一天堂久久| 免费欧美视频| 九色精品美女在线| a片在线免费观看| 97精品国产露脸对白| 亚洲国产精品一区二区第一页| 超碰97免费在线| 欧美高清激情brazzers| 精品成人av一区二区三区| 欧美精品色网| 国产精品69久久| 天堂网av2014| 亚洲自拍偷拍图区| 日韩欧美国产片| 啪啪亚洲精品| 欧美亚洲另类视频| 老牛影视av牛牛影视av| 亚洲女爱视频在线| 99sesese| 成人av动漫在线观看| 91成人福利在线| 高潮毛片7777777毛片| 中文字幕在线观看不卡视频| 国产第一页视频| 偷拍一区二区| 91av成人在线| 手机av免费在线观看| 亚洲一区二区三区四区中文字幕| 99日在线视频| 久久中文字幕av一区二区不卡| 国产福利成人在线| 你懂的在线播放| 欧美性猛交xxxx黑人| 欧产日产国产精品98| 欧美精品首页| 5g国产欧美日韩视频| 九色porny在线| 欧美精品aⅴ在线视频| 欧美狂猛xxxxx乱大交3| 免费日韩av片| 日本免费一区二区三区| 欧美日韩五区| 综合激情国产一区| 91午夜交换视频| 亚洲精品精品亚洲| xxxx国产视频| 亚洲国产导航| 久久伊人资源站| 综合在线影院| 最好看的2019年中文视频| 在线视频1卡二卡三卡| 国产精品乱码人人做人人爱| 九九精品久久久| 亚洲先锋影音| 国产精品10p综合二区| 国产高潮在线| 亚洲午夜精品视频| 在线观看视频二区| 亚洲精品免费一二三区| 美女搡bbb又爽又猛又黄www| 亚洲免费精品| 日韩一本精品| **日韩最新| 久久免费观看视频| 日韩电影免费| 7878成人国产在线观看| 毛片aaaaa| 久久综合精品国产一区二区三区| 无码日韩人妻精品久久蜜桃| 我不卡神马影院| 成人女人免费毛片| 欧美大胆性生话| 久久精品免费电影| 日本黄色一区二区三区| 日本久久精品电影| 极品魔鬼身材女神啪啪精品| 成人视屏免费看| 男人搞女人网站| 欧美成人久久| 欧美日韩免费观看一区| 精品国产亚洲一区二区三区大结局| 欧美激情欧美激情在线五月| 精品久久久久一区二区三区| 88在线观看91蜜桃国自产| www.国产高清| 亚洲欧美一区二区久久| 美女又爽又黄视频毛茸茸| 久久国产剧场电影| 激情综合在线观看| 亚洲成人tv| 欧美日韩一区二区三区在线观看免| 久久亚洲人体| 97av在线视频| 91高清在线观看视频| 亚洲欧美日韩精品久久奇米色影视| 日韩一区二区中文字幕| 麻豆av免费观看| 国产精品影视在线| 免费裸体美女网站| 精品二区视频| 成年人免费观看的视频| 亚洲97av| 国产精品露出视频| 福利一区三区| 国产精品丝袜视频| 涩涩视频在线| 久久久久久久久爱| 黄色网页网址在线免费| 亚洲欧美综合v| 日本高清视频免费观看| 欧美高清dvd| 亚洲中文无码av在线| 黄色一区二区在线观看| 欧美成人精品欧美一级| 欧美国产一区在线| 国产精品成人一区二区三区电影毛片| 国产一区二区不卡老阿姨| 一区二区三区 日韩| 欧美专区一区二区三区| www在线观看免费| 国产一区日韩欧美| 日韩中文字幕亚洲精品欧美| 99re6这里只有精品| 欧美一区二区三区在线播放 | av毛片午夜不卡高**水| 久久成人av网站| 免费黄色在线| 色偷偷88888欧美精品久久久| 青青青手机在线视频观看| 亚洲国产天堂网精品网站| 中国 免费 av| 第九色区av在线| 日韩电影大片中文字幕| 亚洲乱色熟女一区二区三区| 91麻豆精品国产91久久久资源速度| 中文字幕你懂的| 欧美三级资源在线| 特级西西444www大胆免费看| 在线亚洲一区观看| 波多野结衣视频观看| 欧美丝袜一区二区三区| 9i看片成人免费看片| 欧美午夜激情视频| 中文字幕在线观看视频网站| 欧美日韩免费区域视频在线观看| 日本三级午夜理伦三级三| 五月激情综合婷婷| 久久久免费高清视频| 一本到高清视频免费精品| 无码aⅴ精品一区二区三区| 91黄色激情网站| 中文字幕精品在线观看| 欧美人与z0zoxxxx视频| 国产免费黄色片| 日韩精品一区二| 好男人www在线视频| 日韩成人小视频| 国产视频三级在线观看播放| 伊人久久精品视频| 黄色国产网站在线播放| 色综合视频网站| 午夜影院在线观看国产主播| 日本亚洲欧美成人| 久久亚洲精品人成综合网| 97人人模人人爽视频一区二区| www.爱久久| 欧美视频1区| 欧美国产综合| 男人操女人逼免费视频| 免费欧美在线视频| 伊人久久久久久久久| 91免费在线视频观看| 国产99在线 | 亚洲| 一区二区三区高清| 一本一道无码中文字幕精品热| 欧美日韩高清一区二区三区| www.狠狠干| 国产亚洲欧美视频| 色在线视频网| 国产成人久久精品| 一区视频网站| 日韩福利影院| 极品av少妇一区二区| 国产天堂在线播放| 粉嫩av一区二区三区| 亚洲精品自产拍| 天天爽夜夜爽人人爽| 在线播放91灌醉迷j高跟美女| 人妻一区二区三区| 色噜噜亚洲精品中文字幕| 国产福利在线免费观看| 国产精品aaaa| 91九色鹿精品国产综合久久香蕉| 日韩免费毛片| 黄色日韩在线| 91亚洲免费视频| 91丝袜国产在线播放| 永久免费看片直接| 欧美性生交大片免网| 性猛交富婆╳xxx乱大交天津 | 亚洲一区二区三区视频| 米奇777超碰欧美日韩亚洲| 无码人妻aⅴ一区二区三区日本| 亚洲欧美日韩视频二区| 杨幂一区二区国产精品| 欧美韩日一区二区三区| 国产在线观看黄色| 精品国产乱码久久久久久久久| 思思99re6国产在线播放| 538国产精品视频一区二区| 美女久久精品| 亚洲精品中文字幕在线| 久久国产高清| 色呦呦一区二区| 亚洲一二三四在线| 国产99久一区二区三区a片 | 狠狠色综合网站久久久久久久| 天天综合亚洲| 午夜视频你懂的| 国产亚洲成年网址在线观看| 日韩av综合在线| 精品国内片67194| 国产人成网在线播放va免费| 国产精品都在这里| 红桃成人av在线播放| 日韩精品视频久久| 97se亚洲国产综合自在线观| 久久精品视频久久| 欧美va亚洲va国产综合| 丝袜综合欧美| 91青青草免费在线看| 欧美1区视频| 激情小说欧美色图| 亚洲影院理伦片| 黄色片一区二区三区| 色综合久久久888| 77成人影视| 国产成人永久免费视频| 盗摄精品av一区二区三区| 久草视频免费播放| 欧美不卡一区二区| 爱看av在线入口| 精品乱子伦一区二区三区| 亚洲深夜福利| 亚洲国产av一区| 欧美丝袜自拍制服另类| 亚洲欧美视频一区二区| 国产精品美女呻吟| 婷婷久久一区| youjizz.com日本| 欧美日韩精品在线视频| 青青草在线免费观看| 国产成一区二区| 99久久九九| 久久人妻少妇嫩草av蜜桃| 亚洲成av人片一区二区梦乃| 欧美一区二区三区少妇| 国产精品久在线观看| 91精品蜜臀一区二区三区在线| 夜夜爽久久精品91| 香蕉加勒比综合久久| 欧美一区二区少妇| 国产一区二区香蕉| 国产精品xvideos88| 免费看黄色aaaaaa 片| 欧美日韩夫妻久久| 国产美女情趣调教h一区二区| 国产综合精品一区二区三区| 日韩精品福利网| 久久国产精品国语对白| 亚洲国产精品悠悠久久琪琪| 户外露出一区二区三区| 久久精品国产精品亚洲精品色| 成人午夜在线视频| 人人草在线观看| 久久国产精品99国产精| 日韩理论电影中文字幕| 日本黄大片一区二区三区| 一区二区三区不卡视频在线观看| 亚洲aaaaaaa| 亚洲一区二区三区久久| 久久久久久久欧美精品| 日本一二三区在线观看| 亚洲国产天堂久久综合网| 日韩一级特黄| 国产 福利 在线| 亚洲精品乱码久久久久久久久| 亚洲日本国产精品| 亚洲999一在线观看www| 日韩和欧美的一区| 久久久久久久久久久网| 在线播放国产一区二区三区| 凹凸成人在线|