精品欧美一区二区三区在线观看 _久久久久国色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影院| 蜜桃视频在线入口www| 精一区二区三区| …久久精品99久久香蕉国产| 亚洲一级二级片| 亚洲婷婷伊人| 精品乱码亚洲一区二区不卡| 日本xxxx黄色| 亚洲啊v在线| 亚洲精品免费在线观看| 牛人盗摄一区二区三区视频| 精品久久无码中文字幕| 日本在线不卡视频一二三区| 国内偷自视频区视频综合| 成人无码精品1区2区3区免费看| 日韩理论电影中文字幕| 日韩欧美成人激情| 国产免费中文字幕| 欧美与亚洲与日本直播| 精品久久久中文| 国产欧美综合一区| av资源网在线观看| 久久久不卡网国产精品一区| 国产专区一区二区| 国产ts人妖调教重口男| 中文字幕天堂在线| 红杏视频成人| 精品少妇一区二区三区日产乱码 | 亚洲综合av一区二区三区| 亚洲一区二区三区四区在线观看 | 日韩电影一二三区| 97精品欧美一区二区三区| 少妇aaaaa| 99九九热只有国产精品| 主播福利视频一区| 精品熟妇无码av免费久久| 欧美电影在线观看完整版| 欧美成人精品3d动漫h| 九九久久久久久| 精品国产亚洲一区二区三区在线 | 久久综合九色综合97婷婷女人| **亚洲第一综合导航网站| 在线观看中文字幕av| 日韩中文字幕91| 国产成人精品日本亚洲| 国产午夜麻豆影院在线观看| 噜噜爱69成人精品| 国产精品wwww| 在线观看免费视频a| 蜜桃av一区二区三区电影| 国产精品三级网站| 91久久精品国产91性色69| 国内精品伊人久久久久av一坑 | 欧美俄罗斯性视频| 久操免费在线视频| 在线播放不卡| 91高清免费在线观看| 无码人妻丰满熟妇精品| 青青青爽久久午夜综合久久午夜| 97视频在线观看免费高清完整版在线观看| 日本熟女一区二区| 久久天堂成人| 国产精品亚洲一区二区三区| 国产三级小视频| 丁香桃色午夜亚洲一区二区三区| 国产经典一区二区三区| 天堂a√在线| 国产午夜精品一区二区三区视频 | 久久九九精品| 国产主播喷水一区二区| 不卡的日韩av| 久久综合丝袜日本网| 色婷婷精品国产一区二区三区| 日本三级在线视频| 亚洲线精品一区二区三区八戒| 国产女大学生av| 四虎永久精品在线| 欧美精品一区二区久久久| 一卡二卡三卡四卡| 亚洲在线久久| 5252色成人免费视频| 在线观看中文字幕码| 成人黄色在线看| 日韩中文一区二区三区| 性国产高清在线观看| 一本色道久久综合亚洲91 | 欧美成人高潮一二区在线看| 日本综合视频| 亚洲国产精品国自产拍av秋霞| 人妻精品久久久久中文| 好吊一区二区三区| 国产精品久久久久一区二区 | 欧美xnxx| 亚洲成人激情在线| 二区三区四区视频| 亚洲自拍另类| 亚洲最大的免费| 福利视频在线导航| 亚洲aaa精品| av免费一区二区| 一呦二呦三呦国产精品| 欧美日韩国产va另类| 超碰在线97观看| 成a人片亚洲日本久久| 超碰成人在线免费观看| 欧美片第一页| 亚洲精品xxxx| 久久久综合久久久| 精品一区二区成人精品| 日产国产精品精品a∨| www成人免费观看| 欧美一区二区三级| 国产黄a三级三级| 久久综合图片| 欧美另类视频在线| 草草视频在线观看| 精品剧情在线观看| 波多野结衣不卡视频| 久久国产精品露脸对白| 日韩啊v在线| 成人片免费看| 日韩精品极品在线观看播放免费视频 | 全球av集中精品导航福利| 久久福利视频网| 国产一区二区麻豆| 国产精品美女久久久久久久| 无遮挡又爽又刺激的视频| 日韩aaa久久蜜桃av| 韩剧1988免费观看全集| 老熟妇高潮一区二区高清视频| 亚洲欧美aⅴ...| 九九热免费在线观看| 欧美色蜜桃97| 国产精品日韩欧美| 午夜在线播放| 欧美人与z0zoxxxx视频| 狂野欧美性猛交| 麻豆国产精品视频| 一区二区在线观| 婷婷激情成人| 久久不射电影网| www.国产麻豆| 午夜精彩视频在线观看不卡| 日韩aaaaa| 亚洲自啪免费| 神马影院午夜我不卡| 高清在线一区| 久青草国产97香蕉在线视频| va婷婷在线免费观看| 一区二区三区日韩精品| 中国免费黄色片| 一区二区三区精品视频在线观看| 久久av二区| 日韩不卡视频在线观看| 久久久国产91| 色窝窝无码一区二区三区成人网站| 亚洲少妇中出一区| 亚洲少妇中文字幕| 亚洲综合电影一区二区三区| 日韩欧美精品在线不卡| 欧美一级在线| 欧美激情区在线播放| 熟妇高潮一区二区高潮| 在线精品亚洲一区二区不卡| 香蕉久久久久久久| 国产寡妇亲子伦一区二区| 精品少妇人妻av免费久久洗澡| 欧美日韩123| 成人精品视频99在线观看免费| 在线āv视频| 精品视频在线播放色网色视频| 黄色大全在线观看| 亚洲激情男女视频| 中文幕无线码中文字蜜桃| 免费在线看成人av| 精品成在人线av无码免费看| 亚洲人成网77777色在线播放| 国产乱人伦真实精品视频| 在线观看av免费| 亚洲免费视频网站| 国产女人18毛片18精品| 欧美日韩国产限制| 尤物在线免费视频| 2023国产一二三区日本精品2022| 中文字幕 91| 999亚洲国产精| 中文字幕欧美日韩一区二区三区| 精品欠久久久中文字幕加勒比| 国产精品久久婷婷六月丁香| 国产天堂在线播放视频| 国产一区二区三区在线| 成人午夜视频一区二区播放| 在线观看亚洲一区| 国产精品成人久久| 中文字幕一区二区三区av| 蜜桃精品成人影片| 国产成人综合在线观看| 亚洲老女人av| 亚洲一区二区伦理| 国产视频在线观看网站| 日韩电影免费网址| 久久精品美女| 紧身裙女教师波多野结衣| 蜜乳av一区二区三区| 国产特级淫片高清视频| 亚洲午夜精品一区 二区 三区| 欧美一区二区在线| 激情亚洲另类图片区小说区| 成人精品aaaa网站| 欧美色网在线| 欧美亚洲国产另类| 国内小视频在线看| 久久午夜a级毛片| 在线视频91p| 亚洲视频视频在线| 午夜视频免费在线| 精品福利一区二区三区| 国产三级三级在线观看| 欧美日韩另类一区| 中文字幕日本人妻久久久免费 | 黄色成人美女网站| av激情久久| 欧美大片91| 亚洲999一在线观看www| 婷婷久久综合九色综合99蜜桃| 日本不卡视频在线播放| 日韩av一卡| 欧美性在线观看| 国模精品视频| 97激碰免费视频| 三级中文字幕在线观看| 97精品久久久| 成人美女大片| 国产精品福利小视频| 欧美黑人巨大xxxxx| 国产精品xxx视频| 99久久婷婷国产综合精品首页| 日韩av电影在线播放| 偷拍中文亚洲欧美动漫| 日韩免费在线观看视频| 亚洲高清黄色| 国产精品免费视频久久久| 国产精品videossex撒尿| 国产精品久久久久久久午夜 | 久久午夜精品| 日韩在线第三页| 奇米精品一区二区三区在线观看| 婷婷丁香激情网| 另类中文字幕网| 国产探花在线观看视频| 国产高清不卡二三区| 国产香蕉精品视频| 久久综合九色综合97婷婷女人| 亚洲精品国产熟女久久久| 国产精品无人区| 成人高潮免费视频| 一区二区三区免费| 精品在线播放视频| 欧洲国内综合视频| 国产片在线播放| 亚洲电影第1页| 二区三区在线播放| 免费av一区二区| 麻豆视频在线观看免费网站黄| 全球成人中文在线| 亚洲精品三区| 国产日本一区二区三区| 欧美激情在线精品一区二区三区| 亚洲精品人成| 亚洲二区精品| 国产日韩成人内射视频| 国产一区二区精品在线观看| 五月天丁香社区| 国产色91在线| 久久在线视频精品| 在线观看一区二区视频| 精品人妻一区二区三区四区不卡 | 欧美男人天堂| 成人激情电影一区二区| 国产另类在线| 亚洲三区四区| 国产亚洲成人一区| 亚洲午夜激情影院| 91在线视频官网| www.xxxx日本| 色狠狠色狠狠综合| 亚洲成人一二三区| 中文字幕日韩av综合精品| 欧美xxxx视频| 国产欧美日韩免费看aⅴ视频| 欧美国产不卡| 日日噜噜夜夜狠狠久久丁香五月| 久久成人精品| 深夜视频在线观看| 国产精品久久久久aaaa| 国产又大又黑又粗免费视频| 欧美精品一级二级三级| 青青青手机在线视频观看| 精品视频9999| 欧美日韩视频免费看| 玛丽玛丽电影原版免费观看1977 | 欧美三级午夜理伦三级小说| 在线码字幕一区| 三级欧美在线一区| 一级黄色片毛片| 亚洲精品乱码久久久久久黑人| 五月天中文字幕| 亚洲欧美激情精品一区二区| 欧美野外wwwxxx| 91久久久久久久| 日韩极品一区| 99视频免费播放| 久久日韩粉嫩一区二区三区| 亚洲一区二区91| 日韩免费视频一区| av免费在线观看网址| 成人黄色短视频在线观看| 欧美亚洲国产一区| 欧美成人黑人猛交| 久久久无码精品亚洲日韩按摩| 国产午夜精品无码一区二区| 欧美一级在线视频| 成人免费在线| 成人免费视频a| 久久神马影院| 岛国毛片在线播放| 欧美国产日韩a欧美在线观看| 亚洲无码精品一区二区三区| 亚洲欧美激情在线视频| 在线看片福利| 免费成人深夜夜行视频| 亚洲中午字幕| 尤物视频最新网址| 在线观看区一区二| av午夜在线| 国产一区在线播放| 亚洲免费二区| 伊人久久久久久久久| 亚洲国产精品天堂| 亚洲欧美日韩精品永久在线| 91av在线播放视频| 在线成人动漫av| 五月天av在线播放| 亚洲男同1069视频| 超碰人人人人人人| 性色av一区二区三区红粉影视| 欧美一区二区三区红桃小说| 国产91美女视频| 久久久国际精品| 国产又色又爽又黄又免费| 欧美成年人在线观看| 国产精品一线| 日本一极黄色片| 国产亚洲一区二区三区四区| 中文字幕 视频一区| 久久亚洲国产精品| 国产+成+人+亚洲欧洲在线 | 秋霞国产午夜精品免费视频| 午夜成人亚洲理伦片在线观看| 欧美一区二区三区成人| 波多野一区二区| 视频一区视频二区视频| 国产在线观看一区二区| 国产亚洲精品女人久久久久久| 亚洲精品在线视频| 亚洲精品无播放器在线播放| 久久99久久99精品| 久久精品人人做人人爽97| 亚洲网站在线免费观看| 欧美国产激情18| 国产精品欧美三级在线观看| 欧洲美女亚洲激情| 福利微拍一区二区| 免费黄色在线观看| 国语精品免费视频| 久久精品国内一区二区三区 | 在线观看免费成人| 制服丝袜在线播放| 欧美精品123| 国产成人在线电影| 亚洲欧美日韩一区二区三区四区| 久久影视电视剧免费网站清宫辞电视| 日韩mv欧美mv国产网站| www.com黄色片| 天天操天天色综合| 黄a在线观看| 日韩电影大全在线观看| 成人黄色在线视频|