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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPS开源项目

發布時間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPS开源项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GPS數據解析開源項目。 測試數據:

"$GNRMC,013300.00,A,2240.84105,N,11402.70763,E,0.007,,220319,,,D*69\r\n" "$GNVTG,,T,,M,0.007,N,0.014,K,D*3A\r\n" "$GNGGA,013300.00,2240.84105,N,11402.70763,E,2,12,0.59,70.5,M,-2.5,M,,0000*68\r\n" "$GNGSA,A,3,10,12,14,20,25,31,32,26,29,40,41,22,1.09,0.59,0.91*1F\r\n" "$GNGSA,A,3,74,70,73,80,69,,,,,,,,1.09,0.59,0.91*17\r\n" "$GPGSV,4,1,16,01,00,300,,10,56,178,51,12,12,038,38,14,47,345,48*79\r\n" "$GPGSV,4,2,16,16,00,207,,18,06,275,30,20,28,165,43,22,10,319,43*76\r\n" "$GPGSV,4,3,16,25,46,050,47,26,29,205,44,29,13,108,45,31,50,296,52*7E\r\n" "$GPGSV,4,4,16,32,56,010,52,40,20,257,40,41,46,237,48,42,46,123,42*77\r\n" "$GLGSV,2,1,06,69,27,136,49,70,76,057,50,71,34,338,50,73,64,276,55*6B\r\n" "$GLGSV,2,2,06,74,24,231,46,80,35,019,46*60\r\n" "$GNGLL,2240.84105,N,11402.70763,E,013300.00,A,D*7C\r\n";

使用說明

主要用到gpc.c和gps.h兩個文件

  • gps.h: 定義了GPS的數據結構,語句ID的宏定義,ID解析開關;
  • gps.c: 實現語句的解析。

在項目中您只需要調用gps_data_parse(char* gps_src)函數,就可以獲取到解析后的數據,具體使用方法請參考main.c文件。

您只需要修改gps.h文件中的兩個地方,就可以完成配置:

1.以下宏定義參數需要和您的GPS數據相對應;

// 根據實際的數據修改前綴 #define PRE_GGA "$GNGGA" #define PRE_GLL "$GNGLL" #define PRE_GSA "$GNGSA" #define PRE_GPGSV "$GPGSV" #define PRE_GNGSV "$GNGSV" #define PRE_GLGSV "$GLGSV" #define PRE_RMC "$GNRMC" #define PRE_VTG "$GNVTG"

2.通過以下宏定義,可以設置某個語句是否需要解析,從而減小您的代碼體積。

// 語句解析控制 1:使能,0:禁用 #define ENABLE_GGA 1 #define ENABLE_GLL 1 #define ENABLE_GSA 1 #define ENABLE_GSV 1 #define ENABLE_RMC 1 #define ENABLE_VTG 1 #define ENABLE_UTC 1

注意事項

1.為確保您的正常使用,gps.h文件中的<語句解析控制>宏定義塊應至少保持一項為1。

2.若是使用UTC解析,請確保ENABLE_RMC和ENABLE_UTC宏定義都處于 1狀態。因為,UTC在解析過程中,會使用到RMC語句中的utc和time兩個字段。

3.若是用到GSA和GSV兩個語句,在使用完成后,請調用free(gps.gsa_data.gsa_prn)和free(gps.gXgsv_data.sat_info)來釋放內存。因為,這兩個語句中的衛星數據個數不確定,所以需要動態分配內存。

4.為確保數據正常解析,GPS數據中的每個語句應以\r\n結束符結尾。

科普

GPS語句含義

  • GPGSV:可見衛星信息
  • GPGLL:地理定位信息
  • GPRMC:推薦最小定位信息
  • GPVTG:地面速度信息
  • GPGGA:GPS定位信息
  • GPGSA:當前衛星信息

GPRMC 最小定位信息:

例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

字段0:$GPRMC,語句ID,表明該語句為Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦最小定位信息
字段1:UTC時間,hhmmss.sss格式
字段2:狀態,A=定位,V=未定位
字段3:緯度ddmm.mmmm,度分格式(前導位數不足則補0)
字段4:緯度N(北緯)或S(南緯)
字段5:經度dddmm.mmmm,度分格式(前導位數不足則補0)
字段6:經度E(東經)或W(西經)
字段7:速度,節,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前導位數不足則補0)
字段11:磁偏角方向,E=東W=西
字段12:模式,A=自動,D=差分,E=估測,N=數據無效(3.0協議內容)
字段13:校驗值($與*之間的數異或后的值)

GPGGA GPS定位數據

例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,12.2,M,19.7,M,,0000*1F

字段0:$GPGGA,語句ID,表明該語句為Global Positioning System Fix Data(GGA)GPS定位信息
字段1:UTC 時間,hhmmss.sss,時分秒格式
字段2:緯度ddmm.mmmm,度分格式(前導位數不足則補0)
字段3:緯度N(北緯)或S(南緯)
字段4:經度dddmm.mmmm,度分格式(前導位數不足則補0)
字段5:經度E(東經)或W(西經)
字段6:GPS狀態,0=不可用(FIX NOT valid),1=單點定位(GPS FIX),2=差分定位(DGPS),3=無效PPS,4=實時差分定位(RTK FIX),5=RTK FLOAT,6=正在估算
字段7:正在使用的衛星數量(00 - 12)(前導位數不足則補0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:單位:M(米)
字段11:地球橢球面相對大地水準面的高度 WGS84水準面劃分
字段12:WGS84水準面劃分單位:M(米)
字段13:差分時間(從接收到差分信號開始的秒數,如果不是差分定位將為空)
字段14:差分站ID號0000 - 1023(前導位數不足則補0,如果不是差分定位將為空)
字段15:校驗值($與*之間的數異或后的值)

GPVTG 地面速度信息

例:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F

字段0:$GPVTG,語句ID,表明該語句為Track Made Good and Ground Speed(VTG)地面速度信息
字段1:運動角度,000 - 359,(前導位數不足則補0)
字段2:T=真北參照系
字段3:運動角度,000 - 359,(前導位數不足則補0)
字段4:M=磁北參照系
字段5:水平運動速度(0.00)(前導位數不足則補0)
字段6:N=節,Knots
字段7:水平運動速度(0.00)(前導位數不足則補0)
字段8:K=公里/時,km/h
字段9:校驗值($與*之間的數異或后的值)

GPGSV 可視衛星狀態

例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70

字段0:$GPGSV,語句ID,表明該語句為GPS Satellites in View(GSV)可見衛星信息
字段1:本次GSV語句的總數目(1 - 3)
字段2:本條GSV語句是本次GSV語句的第幾條(1 - 3)
字段3:當前可見衛星總數(00 - 12)(前導位數不足則補0)
字段4:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段5:衛星仰角(00 - 90)度(前導位數不足則補0)
字段6:衛星方位角(00 - 359)度(前導位數不足則補0)
字段7:信噪比(00-99)dbHz
字段8:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段9:衛星仰角(00 - 90)度(前導位數不足則補0)
字段10:衛星方位角(00 - 359)度(前導位數不足則補0)
字段11:信噪比(00-99)dbHz
字段12:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段13:衛星仰角(00 - 90)度(前導位數不足則補0)
字段14:衛星方位角(00 - 359)度(前導位數不足則補0)
字段15:信噪比(00-99)dbHz
字段16:校驗值($與*之間的數異或后的值)

GPGSA 當前衛星信息

例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A

字段0:$GPGSA,語句ID,表明該語句為GPS DOP and Active Satellites(GSA)當前衛星信息
字段1:定位模式(選擇2D/3D),A=自動選擇,M=手動選擇
字段2:定位類型,1=未定位,2=2D定位,3=3D定位
字段3:PRN碼(偽隨機噪聲碼),第1信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段4:PRN碼(偽隨機噪聲碼),第2信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段5:PRN碼(偽隨機噪聲碼),第3信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段6:PRN碼(偽隨機噪聲碼),第4信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段7:PRN碼(偽隨機噪聲碼),第5信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段8:PRN碼(偽隨機噪聲碼),第6信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段9:PRN碼(偽隨機噪聲碼),第7信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段10:PRN碼(偽隨機噪聲碼),第8信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段11:PRN碼(偽隨機噪聲碼),第9信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段12:PRN碼(偽隨機噪聲碼),第10信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段13:PRN碼(偽隨機噪聲碼),第11信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段14:PRN碼(偽隨機噪聲碼),第12信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段15:PDOP綜合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校驗值($與*之間的數異或后的值)

代碼分析

代碼較多,這里只分析RMC、GSA和GSV三個語句的。

RMC解析

RMC結構體

//RMC數據結構體(推薦定位信息數據格式) typedef struct {char utc[11]; // UTC時間,hhmmss.sss格式unsigned char pos_status; // 狀態,A=定位,V=未定位double lat; // 緯度ddmm.mmmm,度分格式char lat_dir; // 緯度N(北緯)或S(南緯)double lon; // 經度dddmm.mmmm,度分格式char lon_dir; // 經度E(東經)或W(西經)double speed_Kn; // 速度double track_true; // 方位角,度char date[7]; // UTC日期,DDMMYY格式double mag_var; // 磁偏角,(000 - 180)度char var_dir; // 磁偏角方向,E=東W=西char mode_ind; // 模式,A=自動,D=差分,E=估測,N=數據無效(3.0協議內容) }RMC;

RMC解析函數

// RMC數據解析 static RMC rmc_data_parse(char *rmc_data) // 定義RMC結構體函數 {RMC rmc;unsigned char times = 0;char *p;char *s = strdup(rmc_data); // 將傳入的數據拷貝一份,否則分割函數會影響原始數據// strtok遇到兩個連續的分割符(,)時,無法正常切割,所以自己寫了個函數,在源文件中p = strsplit(&s, ","); // 開始分割,按','切分,p為切割出來的字段while (p){switch (times) // times記錄當前切割的位置{case 1: // UTCstrcpy(rmc.utc, p);break;case 2: // pos statusrmc.pos_status = p[0];break;case 3: // latrmc.lat = strtod(p, NULL);break;case 4: // lat dirrmc.lat_dir = p[0];break;case 5: // lonrmc.lon = strtod(p, NULL);break;case 6: // lon dirrmc.lon_dir = p[0];break;case 7: // speen Knrmc.speed_Kn = strtod(p, NULL);break;case 8: // track truermc.track_true = strtod(p, NULL);break;case 9: // datestrcpy(rmc.date, p);break;case 10: // mag varrmc.mag_var = strtod(p, NULL);break;case 11: // var dirrmc.var_dir = p[0];break;case 14: // mode indrmc.mode_ind = p[0];break;default:break;}p = strsplit(&s, ","); // 繼續切割times++;}free(s);return rmc; }

GSA解析

GSA結構體

#pragma pack(1) // 便于指針偏移取值 // 信道信息結構體 typedef struct {unsigned char total; // 總信道個數unsigned char prn_ID; // prn信道unsigned char prn; // PRN 碼(偽隨機噪聲碼) }GSA_PRN; #pragma pack()//GPGSA數據結構體(當前衛星信息) typedef struct {unsigned char mode_MA; // 定位模式(選擇2D/3D),A=自動選擇,M=手動選擇unsigned char mode_123; // 定位類型,1=未定位,2=2D定位,3=3D定位double pdop; // PDOP綜合位置精度因子(0.5 - 99.9)double hdop; // HDOP水平精度因子(0.5 - 99.9)double vdop; // VDOP垂直精度因子(0.5 - 99.9)GSA_PRN *gsa_prn; // 存放信道信息 }GSA;

GSA解析函數

// 得到GSA數據中的信道信息,由于一幀GPS數據中,GSA語句的個數不一致,所以需要傳入原始的GPS數據,找出所有的GSA字段 static GSA_PRN *get_prn_data(char *gps_data) {GSA_PRN *gsa_prn;unsigned char times = 0;unsigned char i;unsigned char sentences_index = 0; // 累計找到gsa字段的個數// 從語句中切割的字段char *p;// 存放拷貝的語句char *s;// 從原始數據中切割出來的字段char *sentences;// gsa語句的個數 int gsa_count;// 統計GSA字段的個數gsa_count = strstr_cnt(gps_data, PRE_GSA);// 根據GSA語句的個數,動態分配內存gsa_prn = (GSA_PRN *)malloc(sizeof(GSA_PRN) * (gsa_count * 12 + 1));memset(gsa_prn, 0, sizeof(GSA_PRN) * (gsa_count * 12 + 1));// 切割原始數據sentences = strtok(gps_data, "\r\n");while (sentences){// 判斷切割出來的語句是否是GSA語句if (strstr(sentences, PRE_GSA)){// 每找到一條GSA語句,就加1sentences_index++;s = strdup(sentences);// 開始切割語句p = strsplit(&s, ",");while (p){if (times == 2){// 每條GSA語句包含12個衛星信息for (i=0; i<12; i++){p = strsplit(&s, ",");(gsa_prn+i+(sentences_index-1)*12)->total = (unsigned char)gsa_count * 12;(gsa_prn+i+(sentences_index-1)*12)->prn_ID = i + (sentences_index - 1) * 12;(gsa_prn+i+(sentences_index-1)*12)->prn = (unsigned char)strtol(p, NULL, 10);}}// 繼續下一次語句切割p = strsplit(&s, ",");times++;}times = 0;}// 繼續下一次原始數據切割sentences = strtok(NULL, "\r\n");}free(s);return gsa_prn; }// GSA數據解析 //gsa_data: 傳入的GSA語句 //gpsdata: 傳入的原始GPS數據 static GSA gsa_data_parse(char *gsa_data, char *gpsdata) {GSA gsa;unsigned char times = 0;char *p;char *end;// GSA語句拷貝到s中,方便切割char *s = strdup(gsa_data);// 將原始數據拷貝一份char *alldata = strdup(gpsdata);p = strsplit(&s, ",");while (p){switch (times){case 1: // mode_MAgsa.mode_MA = p[0];break;case 2: // mode_123gsa.mode_123 = p[0];break;case 3: // prn// 獲得所有GSA語句中的PRN信息,傳入原始的GPS數據gsa.gsa_prn = get_prn_data(alldata);break;case 15: // pdopgsa.pdop = strtod(p, NULL);break;case 16: // hdopgsa.hdop = strtod(p, NULL);break;case 17: // vdop// 提取最后一個數據end = (char *)malloc(sizeof(p));strncpy(end, p, strlen(p)-3);end[strlen(p)-3] = '\0';gsa.vdop = strtod(end, NULL);free(end);default:break;}p = strsplit(&s, ",");times++;}free(s);return gsa; }

GSV解析

GSV結構體

// 可見衛星信息結構體 typedef struct {unsigned char prn; // PRN 碼(偽隨機噪聲碼)unsigned char elev; // 衛星仰角(00 - 90)度unsigned short azimuth; // 衛星方位角(00 - 359)度unsigned char SNR; // 信噪比 }SAT_INFO; #pragma pack()// GPGSV數據結構體(可見衛星信息) typedef struct {unsigned char msgs; // 本次GSV語句的總數目(1 - 3)unsigned char msg; // 本條GSV語句是本次GSV語句的第幾條(1 - 3)unsigned char sats; // 當前可見衛星總數(00 - 12)SAT_INFO *sat_info; // 衛星信息 }GSV;

GSV解析函數

/** function: 獲取GSV字段中的GPS信息* gps_data: 最原始的GPS字符串,用于找到所有的GSV語句* stas: 衛星數量* prefix: GSV信息字段前綴 */ static SAT_INFO *get_sats_info(char *gps_data, unsigned char sats, char *prefix) {SAT_INFO *sats_info;unsigned char times = 0;// 保存GSV語句總數unsigned char msgs = 0;// 記錄當前時第幾條GSV語句unsigned char msg = 0;// 存放計算完的for循環次數unsigned char for_times;unsigned char i;// 語句切割出來的字段char *p;// 拷貝一份語句便于切割char *s;// 從原始數據中切割出來的語句char *sentences;sats_info = (SAT_INFO *)malloc(sizeof(SAT_INFO) * (sats+1));memset(sats_info, 0, sizeof(SAT_INFO) * (sats+1));sentences = strtok(gps_data, "\r\n");while (sentences){if (strstr(sentences, prefix)){s = strdup(sentences);p = strsplit(&s, ",");while (p){switch (times){case 1: // msgsmsgs = (unsigned char) strtol(p, NULL, 10);break;case 2: // msgmsg = (unsigned char) strtol(p, NULL, 10);break;case 3: // sat info// 計算當前GSV語句衛星信息的個數,也就是for循環的次數for_times = (msgs == msg) ? ((sats % 4) ? sats % 4 : 4) : 4;for (i = 0; i < for_times; i++){// 從第4個字段開始,每4段代表一個衛星的信息p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->prn = (unsigned char) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->elev = (unsigned char) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->azimuth = (unsigned short) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->SNR = (unsigned char) strtol(p, NULL, 10);}break;default:break;}p = strsplit(&s, ",");times++;}times = 0;}// 切割出下一個語句sentences = strtok(NULL, "\r\n");}free(s);return sats_info; }// GSV數據解析 // gsv_data: 傳入的GSV語句,用于提取GSV語句總數和衛星總數 // gps_data: 原始的GPS數據,用于在函數get_sats_info中找到所有的GSV語句 // prefix: GSV語句的前綴,根據不同的定位組合方式,在一組GPS數據中可能包含GPGSV、GLGSV和GNGSV,根據需要傳入 static GSV gsv_data_parse(char *gsv_data, char *gps_data, char *prefix) {GSV gsv;unsigned char times = 0;char *p;char *s = strdup(gsv_data);char *src_data = strdup(gps_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // msgsgsv.msgs = (unsigned char)strtol(p, NULL, 10);break;case 2: // msggsv.msg = (unsigned char)strtol(p, NULL, 10);break;case 3: // satsgsv.sats = (unsigned char)strtol(p, NULL, 10);// 獲得所有GSV語句中的衛星信息。傳入原始的GPS數據,衛星總數和GSV語句的IDgsv.sat_info = get_sats_info(src_data, gsv.sats, prefix);break;default:break;}p = strsplit(&s, ",");times++;}free(s);return gsv; }

?

以下是GPS完整的解析程序,包括:gps.h,gps.c,main.c

?

1、GPS.H

// // Created by ihz on 2020/6/4. //#ifndef __GPS_H__ #define __GPS_H__#include <stdio.h> #include <stdlib.h> #include <string.h>// 根據實際的數據修改ID #define PRE_GGA "$GNGGA" #define PRE_GLL "$GNGLL" #define PRE_GSA "$GNGSA" #define PRE_GPGSV "$GPGSV" #define PRE_GNGSV "$GNGSV" #define PRE_GLGSV "$GLGSV" #define PRE_RMC "$GNRMC" #define PRE_VTG "$GNVTG"// 語句解析控制 1:使能,0:禁用 #define ENABLE_GGA 1 #define ENABLE_GLL 1 #define ENABLE_GSA 1 #define ENABLE_GSV 1 #define ENABLE_RMC 1 #define ENABLE_VTG 1 #define ENABLE_UTC 1#if ENABLE_GGA // GGA字段結構體(GPS定位數據) typedef struct {char utc[11]; // UTC時間,格式為hhmmss.sssdouble lat; // 緯度,格式為ddmm.mmmmchar lat_dir; // 緯度半球,N或Sdouble lon; // 經度,格式為dddmm.mmmmchar lon_dir; // 經度半球,E或Wunsigned char quality; // 0=定位無效,1=定位有效unsigned char sats; // 使用衛星數量,從00到12double hdop; // 水平精確度,0.5到99.9,單位mdouble alt; // 海平面的高度,-9999.9到9999.9米double undulation; // 大地水準面高度,-9999.9到9999.9米unsigned char age; // 差分時間unsigned short stn_ID; // 差分站ID號0000 - 1023 } GGA; #endif#if ENABLE_GLL // GPGLL數據結構體(地理定位信息) typedef struct {double lat; // 緯度,格式為ddmm.mmmmchar lat_dir; // 緯度半球,N或Sdouble lon; // 經度,格式為dddmm.mmmmchar lon_dir; // 經度半球,E或Wchar utc[11]; // UTC時間,格式為hhmmss.ssschar data_status; // 狀態標志位,A:有效,V無效 }GLL; #endif#if ENABLE_GSA #pragma pack(1) // 便于指針偏移取值 // 信道信息結構體 typedef struct {unsigned char total; // 總信道個數unsigned char prn_ID; // prn信道unsigned char prn; // PRN 碼(偽隨機噪聲碼) }GSA_PRN; #pragma pack()//GPGSA數據結構體(當前衛星信息) typedef struct {unsigned char mode_MA; // 定位模式(選擇2D/3D),A=自動選擇,M=手動選擇unsigned char mode_123; // 定位類型,1=未定位,2=2D定位,3=3D定位double pdop; // PDOP綜合位置精度因子(0.5 - 99.9)double hdop; // HDOP水平精度因子(0.5 - 99.9)double vdop; // VDOP垂直精度因子(0.5 - 99.9)GSA_PRN *gsa_prn; // 存放信道信息 }GSA; #endif#if ENABLE_GSV #pragma pack(1) // 便于指針偏移取值 // 可見衛星信息結構體 typedef struct {unsigned char prn; // PRN 碼(偽隨機噪聲碼)unsigned char elev; // 衛星仰角(00 - 90)度unsigned short azimuth; // 衛星方位角(00 - 359)度unsigned char SNR; // 信噪比 }SAT_INFO; #pragma pack()// GPGSV數據結構體(可見衛星信息) typedef struct {unsigned char msgs; // 本次GSV語句的總數目(1 - 3)unsigned char msg; // 本條GSV語句是本次GSV語句的第幾條(1 - 3)unsigned char sats; // 當前可見衛星總數(00 - 12)SAT_INFO *sat_info; // 衛星信息 }GSV; #endif#if ENABLE_RMC //RMC數據結構體(推薦定位信息數據格式) typedef struct {char utc[11]; // UTC時間,hhmmss.sss格式unsigned char pos_status; // 狀態,A=定位,V=未定位double lat; // 緯度ddmm.mmmm,度分格式char lat_dir; // 緯度N(北緯)或S(南緯)double lon; // 經度dddmm.mmmm,度分格式char lon_dir; // 經度E(東經)或W(西經)double speed_Kn; // 速度double track_true; // 方位角,度char date[7]; // UTC日期,DDMMYY格式double mag_var; // 磁偏角,(000 - 180)度char var_dir; // 磁偏角方向,E=東W=西char mode_ind; // 模式,A=自動,D=差分,E=估測,N=數據無效(3.0協議內容) }RMC; #endif#if ENABLE_VTG //VTG數據結構體(地面速度信息) typedef struct {double track_true; // 運動角度,000 - 359,真北參照系double track_mag; // 運動角度,000 - 359,磁北參照系double speed_Kn; // 水平運動速度(0.00),節,Knotsdouble speed_Km; // 水平運動速度(0.00), 公里/時,km/h }VTG; #endif#if ENABLE_UTC //UTC時間結構體 typedef struct {unsigned char YY; // 年unsigned char DD; // 日unsigned char MM; // 月unsigned char hh; // 時unsigned char mm; // 分unsigned char ss; // 秒unsigned short ds; // 毫秒 }UTC; #endif//定義GPS結構體 typedef struct { #if ENABLE_GGAGGA gga_data; #endif #if ENABLE_GLLGLL gll_data; #endif #if ENABLE_GSAGSA gsa_data; #endif #if ENABLE_GSVGSV gpgsv_data;GSV gngsv_data;GSV glgsv_data; #endif #if ENABLE_RMCRMC rmc_data; #endif #if ENABLE_VTGVTG vtg_data; #endif #if ENABLE_UTCUTC utc; #endif }GPS;GPS gps_data_parse(char* gps_src);#endif //__GPS_H__

2.GPS.C

// // Created by ihz on 2020/6/4. // #include "gps.h"// 數據分割,可以分割兩個連續的分隔符 static char* strsplit(char** stringp, const char* delim) {char* start = *stringp;char* p;p = (start != NULL) ? strpbrk(start, delim) : NULL;if (p == NULL){*stringp = NULL;}else{*p = '\0';*stringp = p + 1;}return start; }// 統計字符串在另一個字符串中出現的次數 static int strstr_cnt(char *str, char *substr) {char *srcStr = str;int count = 0;do{srcStr = strstr(srcStr, substr);if(srcStr != NULL){count++;srcStr = srcStr + strlen(substr);}else{break;}}while (*srcStr != '\0');return count; }#if ENABLE_GGA // GGA數據解析 static GGA gga_data_parse(char *gga_data) {GGA gga;unsigned char times = 0;char *p;char *end;char *s = strdup(gga_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // UTCstrcpy(gga.utc, p);break;case 2: // latgga.lat = strtod(p, NULL);break;case 3: // lat dirgga.lat_dir = p[0];break;case 4: // longga.lon = strtod(p, NULL);break;case 5: // lon dirgga.lon_dir = p[0];break;case 6: // qualitygga.quality = (unsigned char)strtol(p, NULL, 10);break;case 7: // satsgga.sats = (unsigned char)strtol(p, NULL, 10);break;case 8: // hdopgga.hdop = (unsigned char)strtol(p, NULL, 10);break;case 9: // altgga.alt = strtof(p, NULL);break;case 11: // undulationgga.undulation = strtof(p, NULL);break;case 13: // agegga.age = (unsigned char)strtol(p, NULL, 10);break;case 14: // stn_IDend = (char *)malloc(sizeof(p));strncpy(end, p, strlen(p)-3);end[strlen(p)-3] = '\0';gga.stn_ID = (unsigned short )strtol(end, NULL, 10);free(end);break;default:break;}p = strsplit(&s, ",");times++;}free(s);return gga; } #endif#if ENABLE_GLL // GLL數據解析 static GLL gll_data_parse(char *gll_data) {GLL gll;unsigned char times = 0;char *p;char *s = strdup(gll_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // latgll.lat = strtod(p, NULL);break;case 2: // lat dirgll.lat_dir = p[0];break;case 3: // longll.lon = strtod(p, NULL);break;case 4: // lon dirgll.lon_dir = p[0];break;case 5: // lon dirstrcpy(gll.utc, p);break;case 6: // data statusgll.data_status = p[0];break;default:break;}p = strsplit(&s, ",");times++;}free(s);return gll; } #endif#if ENABLE_GSA // 得到GSA數據中的信道信息 static GSA_PRN *get_prn_data(char *gps_data) {GSA_PRN *gsa_prn;unsigned char times = 0;unsigned char i;unsigned char sentences_index = 0; // 累計找到gsa字段的個數char *p;char *s;char *sentences;int gsa_count;// 統計GSA字段的個數gsa_count = strstr_cnt(gps_data, PRE_GSA);gsa_prn = (GSA_PRN *)malloc(sizeof(GSA_PRN) * (gsa_count * 12 + 1));memset(gsa_prn, 0, sizeof(GSA_PRN) * (gsa_count * 12 + 1));sentences = strtok(gps_data, "\r\n");while (sentences){if (strstr(sentences, PRE_GSA)){sentences_index++;s = strdup(sentences);p = strsplit(&s, ",");while (p){if (times == 2){for (i=0; i<12; i++){p = strsplit(&s, ",");(gsa_prn+i+(sentences_index-1)*12)->total = (unsigned char)gsa_count * 12;(gsa_prn+i+(sentences_index-1)*12)->prn_ID = i + (sentences_index - 1) * 12;(gsa_prn+i+(sentences_index-1)*12)->prn = (unsigned char)strtol(p, NULL, 10);}}p = strsplit(&s, ",");times++;}times = 0;}sentences = strtok(NULL, "\r\n");}free(s);return gsa_prn; }// GSA數據解析 static GSA gsa_data_parse(char *gsa_data, char *gpsdata) {GSA gsa;unsigned char times = 0;char *p;char *end;char *s = strdup(gsa_data);char *alldata = strdup(gpsdata);p = strsplit(&s, ",");while (p){switch (times){case 1: // mode_MAgsa.mode_MA = p[0];break;case 2: // mode_123gsa.mode_123 = p[0];break;case 3: // prngsa.gsa_prn = get_prn_data(alldata);break;case 15: // pdopgsa.pdop = strtod(p, NULL);break;case 16: // hdopgsa.hdop = strtod(p, NULL);break;case 17: // vdopend = (char *)malloc(sizeof(p));strncpy(end, p, strlen(p)-3);end[strlen(p)-3] = '\0';gsa.vdop = strtod(end, NULL);free(end);default:break;}p = strsplit(&s, ",");times++;}free(s);return gsa; } #endif#if ENABLE_RMC // RMC數據解析 static RMC rmc_data_parse(char *rmc_data) {RMC rmc;unsigned char times = 0;char *p;char *s = strdup(rmc_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // UTCstrcpy(rmc.utc, p);break;case 2: // pos statusrmc.pos_status = p[0];break;case 3: // latrmc.lat = strtod(p, NULL);break;case 4: // lat dirrmc.lat_dir = p[0];break;case 5: // lonrmc.lon = strtod(p, NULL);break;case 6: // lon dirrmc.lon_dir = p[0];break;case 7: // speen Knrmc.speed_Kn = strtod(p, NULL);break;case 8: // track truermc.track_true = strtod(p, NULL);break;case 9: // datestrcpy(rmc.date, p);break;case 10: // mag varrmc.mag_var = strtod(p, NULL);break;case 11: // var dirrmc.var_dir = p[0];break;case 14: // mode indrmc.mode_ind = p[0];break;default:break;}p = strsplit(&s, ",");times++;}free(s);return rmc; } #endif#if ENABLE_VTG // VTG數據解析 static VTG vtg_data_parse(char *vtg_data) {VTG vtg;unsigned char times = 0;char *p;char *s = strdup(vtg_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // track truevtg.track_true = strtod(p, NULL);break;case 3: // track magvtg.track_mag = strtod(p, NULL);break;case 5: // speed Knvtg.speed_Kn = strtod(p, NULL);break;case 7: // speed Kmvtg.speed_Km = strtod(p, NULL);break;default:break;}p = strsplit(&s, ",");times++;}free(s);return vtg; } #endif#if ENABLE_GSV /** function: 獲取GSV字段中的GPS信息* gps_data: 最原始的GPS字符串* stas: 衛星數量* prefix: GSV信息字段前綴 */ static SAT_INFO *get_sats_info(char *gps_data, unsigned char sats, char *prefix) {SAT_INFO *sats_info;unsigned char times = 0;unsigned char msgs = 0;unsigned char msg = 0;unsigned char for_times;unsigned char i;char *p;char *s;char *sentences;sats_info = (SAT_INFO *)malloc(sizeof(SAT_INFO) * (sats+1));memset(sats_info, 0, sizeof(SAT_INFO) * (sats+1));sentences = strtok(gps_data, "\r\n");while (sentences){if (strstr(sentences, prefix)){s = strdup(sentences);p = strsplit(&s, ",");while (p){switch (times){case 1: // msgsmsgs = (unsigned char) strtol(p, NULL, 10);break;case 2: // msgmsg = (unsigned char) strtol(p, NULL, 10);break;case 3: // sat infofor_times = (msgs == msg) ? ((sats % 4) ? sats % 4 : 4) : 4;for (i = 0; i < for_times; i++){p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->prn = (unsigned char) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->elev = (unsigned char) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->azimuth = (unsigned short) strtol(p, NULL, 10);p = strsplit(&s, ",");(sats_info+(msg-1)*4+i)->SNR = (unsigned char) strtol(p, NULL, 10);}break;default:break;}p = strsplit(&s, ",");times++;}times = 0;}sentences = strtok(NULL, "\r\n");}free(s);return sats_info; }// GSV數據解析 static GSV gsv_data_parse(char *gsv_data, char *gps_data, char *prefix) {GSV gsv;unsigned char times = 0;char *p;char *s = strdup(gsv_data);char *src_data = strdup(gps_data);p = strsplit(&s, ",");while (p){switch (times){case 1: // msgsgsv.msgs = (unsigned char)strtol(p, NULL, 10);break;case 2: // msggsv.msg = (unsigned char)strtol(p, NULL, 10);break;case 3: // satsgsv.sats = (unsigned char)strtol(p, NULL, 10);gsv.sat_info = get_sats_info(src_data, gsv.sats, prefix);break;default:break;}p = strsplit(&s, ",");times++;}free(s);return gsv; } #endif#if ENABLE_UTC // UTC數據解析 static UTC utc_parse(char *date, char *time) {UTC utc_data;unsigned int date_int;double time_float;date_int = (unsigned int)strtol(date, NULL, 10);utc_data.DD = date_int / 10000;utc_data.MM = date_int % 10000 / 100;utc_data.YY = date_int % 100;time_float = strtod(time, NULL);utc_data.hh = (unsigned int)time_float / 10000;utc_data.mm = (unsigned int)time_float % 10000 / 100;utc_data.ss = (unsigned int)time_float % 100;utc_data.ds = (unsigned short)(time_float - (unsigned int)time_float);return utc_data; } #endif// 解析全部的GPS數據 GPS gps_data_parse(char* gps_src) {GPS gps_all;char *str_buffer = strdup(gps_src);// GGA數據解析 #if ENABLE_GGAGGA default_gga_data = {"\0",0.0,'N',0.0,'S',0,0,0,0,0,0,0};gps_src = strdup(str_buffer);gps_all.gga_data = strstr(gps_src, PRE_GGA) ? gga_data_parse(strtok(strstr(gps_src, PRE_GGA), "\r\n")) : default_gga_data; #endif// GLL數據解析 #if ENABLE_GLLGLL default_gll_data = {0.0,'\0',0.0,'\0',"\0",'\0'};gps_src = strdup(str_buffer);gps_all.gll_data = strstr(gps_src, PRE_GLL) ? gll_data_parse(strtok(strstr(gps_src, PRE_GLL), "\r\n")) : default_gll_data; #endif// GSA數據解析 #if ENABLE_GSAGSA_PRN default_gsa_prn_data = {0,0,0};GSA default_gsa_data = {'\0','\0',0.0,0.0,0.0,&default_gsa_prn_data};gps_src = strdup(str_buffer);gps_all.gsa_data = strstr(gps_src, PRE_GSA) ? gsa_data_parse(strtok(strstr(gps_src, PRE_GSA), "\r\n"), str_buffer) : default_gsa_data; #endif// RMC數據解析 #if ENABLE_RMCRMC default_rmc_data = {"\0",'\0',0.0,'\0',0.0,'\0',0.0,0.0,"\0",0.0,'\0','\0'};gps_src = strdup(str_buffer);gps_all.rmc_data = strstr(gps_src, PRE_RMC) ? rmc_data_parse(strtok(strstr(gps_src, PRE_RMC), "\r\n")) : default_rmc_data; #endif// VTG數據解析 #if ENABLE_VTGVTG default_vtg_data = {0.0,0.0,0.0,0.0};gps_src = strdup(str_buffer);gps_all.vtg_data = strstr(gps_src, PRE_VTG) ? vtg_data_parse(strtok(strstr(gps_src, PRE_VTG), "\r\n")) : default_vtg_data; #endif// GSV數據解析 #if ENABLE_GSVSAT_INFO default_sat_info_data = {0,0,0,0};GSV default_gsv_data = {0,0,0,&default_sat_info_data};// GPGSV數據段解析gps_src = strdup(str_buffer);gps_all.gpgsv_data = strstr(gps_src, PRE_GPGSV) ? gsv_data_parse(strtok(strstr(gps_src, PRE_GPGSV), "\r\n"), str_buffer, PRE_GPGSV) : default_gsv_data;// GNGSV數據段解析gps_src = strdup(str_buffer);gps_all.gngsv_data = strstr(gps_src, PRE_GNGSV) ? gsv_data_parse(strtok(strstr(gps_src, PRE_GNGSV), "\r\n"), str_buffer, PRE_GNGSV) : default_gsv_data;// GLGSV數據段解析gps_src = strdup(str_buffer);gps_all.glgsv_data = strstr(gps_src, PRE_GLGSV) ? gsv_data_parse(strtok(strstr(gps_src, PRE_GLGSV), "\r\n"), str_buffer, PRE_GLGSV) : default_gsv_data; #endif// UTC數據解析,UTC數據取自RMC段數據 #if ENABLE_UTC && ENABLE_RMCgps_all.utc = utc_parse(gps_all.rmc_data.date, gps_all.rmc_data.utc); #endiffree(str_buffer);free(gps_src);return gps_all; }

3. main.c

#include <stdio.h> #include "gps.h"int main() {GPS gps;unsigned char i;char gps_data[] = "$GNRMC,013300.00,A,2240.84105,N,11402.70763,E,0.007,,220319,,,D*69\r\n""$GNVTG,,T,,M,0.007,N,0.014,K,D*3A\r\n""$GNGGA,013300.00,2240.84105,N,11402.70763,E,2,12,0.59,70.5,M,-2.5,M,,0000*68\r\n""$GNGSA,A,3,10,12,14,20,25,31,32,26,29,40,41,22,1.09,0.59,0.91*1F\r\n""$GNGSA,A,3,74,70,73,80,69,,,,,,,,1.09,0.59,0.91*17\r\n""$GPGSV,4,1,16,01,00,300,,10,56,178,51,12,12,038,38,14,47,345,48*79\r\n""$GPGSV,4,2,16,16,00,207,,18,06,275,30,20,28,165,43,22,10,319,43*76\r\n""$GPGSV,4,3,16,25,46,050,47,26,29,205,44,29,13,108,45,31,50,296,52*7E\r\n""$GPGSV,4,4,16,32,56,010,52,40,20,257,40,41,46,237,48,42,46,123,42*77\r\n""$GLGSV,2,1,06,69,27,136,49,70,76,057,50,71,34,338,50,73,64,276,55*6B\r\n""$GLGSV,2,2,06,74,24,231,46,80,35,019,46*60\r\n""$GNGLL,2240.84105,N,11402.70763,E,013300.00,A,D*7C\r\n";gps = gps_data_parse(gps_data);#if ENABLE_GGAprintf("----------GGA DATA----------\n");printf("utc:%s\n", gps.gga_data.utc);printf("lat:%f\n", gps.gga_data.lat);printf("lat_dir:%c\n", gps.gga_data.lat_dir);printf("lon:%f\n", gps.gga_data.lon);printf("lon_dir:%c\n", gps.gga_data.lon_dir);printf("quality:%d\n", gps.gga_data.quality);printf("sats:%d\n", gps.gga_data.sats);printf("hdop:%f\n", gps.gga_data.hdop);printf("alt:%f\n", gps.gga_data.alt);printf("undulation:%f\n", gps.gga_data.undulation);printf("age:%d\n", gps.gga_data.age);printf("stn_ID:%d\n", gps.gga_data.stn_ID); #endif #if ENABLE_GLLprintf("----------GLL DATA----------\n");printf("utc:%s\n", gps.gll_data.utc);printf("lat:%f\n", gps.gll_data.lat);printf("lat_dir:%c\n", gps.gll_data.lat_dir);printf("lon:%f\n", gps.gll_data.lon);printf("lon_dir:%c\n", gps.gll_data.lon_dir);printf("data_status:%c\n", gps.gll_data.data_status); #endif #if ENABLE_GSAprintf("----------GSA DATA----------\n");printf("mode_MA:%c\n", gps.gsa_data.mode_MA);printf("mode_123:%c\n", gps.gsa_data.mode_123);printf("total:%d\n", gps.gsa_data.gsa_prn[0].total);for (i=0; i<gps.gsa_data.gsa_prn[0].total; i++){printf("prn%d:%d\n", (i+1), gps.gsa_data.gsa_prn[i].prn);}printf("pdop:%f\n", gps.gsa_data.pdop);printf("hdop:%f\n", gps.gsa_data.hdop);printf("vdop:%f\n", gps.gsa_data.vdop);// gps.gsa_data.gsa_prn是動態分配的內存,用完記得釋放,否則會造成內存泄漏free(gps.gsa_data.gsa_prn); #endif #if ENABLE_RMCprintf("----------RMC DATA----------\n");printf("utc:%s\n", gps.rmc_data.utc);printf("lat:%f\n", gps.rmc_data.lat);printf("lat_dir:%c\n", gps.rmc_data.lat_dir);printf("lon:%f\n", gps.rmc_data.lon);printf("lon_dir:%c\n", gps.rmc_data.lon_dir);printf("speed_Kn:%f\n", gps.rmc_data.speed_Kn);printf("track_true:%f\n", gps.rmc_data.track_true);printf("date:%s\n", gps.rmc_data.date);printf("mag_var:%f\n", gps.rmc_data.mag_var);printf("var_dir:%c\n", gps.rmc_data.var_dir);printf("mode_ind:%c\n", gps.rmc_data.mode_ind); #endif #if ENABLE_VTGprintf("----------VTG DATA----------\n");printf("track_true:%f\n", gps.vtg_data.track_true);printf("track_mag:%f\n", gps.vtg_data.track_mag);printf("speen_Kn:%f\n", gps.vtg_data.speed_Kn);printf("speed_Km:%f\n", gps.vtg_data.speed_Km); #endif #if ENABLE_GSVprintf("----------GPGSV DATA----------\n");printf("msgs:%d\n", gps.gpgsv_data.msgs);printf("msg:%d\n", gps.gpgsv_data.msg);printf("sats:%d\n", gps.gpgsv_data.sats);for (i=0;i<gps.gpgsv_data.sats; i++){printf("prn%d:%d\n", i+1, gps.gpgsv_data.sat_info[i].prn);printf("evel%d:%d\n", i+1, gps.gpgsv_data.sat_info[i].elev);printf("azimuth%d:%d\n", i+1, gps.gpgsv_data.sat_info[i].azimuth);printf("SNR%d:%d\n", i+1, gps.gpgsv_data.sat_info[i].SNR);}// 用完釋放gps.gpgsv_data.sat_info內存if (gps.gpgsv_data.sats) free(gps.gpgsv_data.sat_info);printf("----------GNGSV DATA----------\n");printf("msgs:%d\n", gps.gngsv_data.msgs);printf("msg:%d\n", gps.gngsv_data.msg);printf("sats:%d\n", gps.gngsv_data.sats);for (i=0; i<gps.gngsv_data.sats; i++){printf("prn%d:%d\n", i+1, gps.gngsv_data.sat_info[i].prn);printf("evel%d:%d\n", i+1, gps.gngsv_data.sat_info[i].elev);printf("azimuth%d:%d\n", i+1, gps.gngsv_data.sat_info[i].azimuth);printf("SNR%d:%d\n", i+1, gps.gngsv_data.sat_info[i].SNR);}if (gps.gngsv_data.sats) free(gps.gngsv_data.sat_info);printf("----------GLGSV DATA----------\n");printf("msgs:%d\n", gps.glgsv_data.msgs);printf("msg:%d\n", gps.glgsv_data.msg);printf("sats:%d\n", gps.glgsv_data.sats);for (i=0;i<gps.glgsv_data.sats; i++){printf("prn%d:%d\n", i+1, gps.glgsv_data.sat_info[i].prn);printf("evel%d:%d\n", i+1, gps.glgsv_data.sat_info[i].elev);printf("azimuth%d:%d\n", i+1, gps.glgsv_data.sat_info[i].azimuth);printf("SNR%d:%d\n", i+1, gps.glgsv_data.sat_info[i].SNR);}if (gps.glgsv_data.sats) free(gps.glgsv_data.sat_info); #endif #if ENABLE_UTC && ENABLE_RMCprintf("----------UTC DATA----------\n");printf("year:20%02d\n", gps.utc.YY);printf("month:%02d\n", gps.utc.MM);printf("date:%02d\n", gps.utc.DD);printf("hour:%02d\n", gps.utc.hh);printf("minutes:%02d\n", gps.utc.mm);printf("second:%02d\n", gps.utc.ss);printf("ds:%02d\n", gps.utc.ds); #endifreturn 0; }

https://github.com/iE-zhi/NMEA_GPS_parse

總結

以上是生活随笔為你收集整理的GPS开源项目的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品视频久久久 | 国产精品观看视频 | 日韩免费电影网 | 成人在线播放av | 中文字幕在线观看国产 | 五月黄色| 天天操操 | 久热久草 | 国产美女网站在线观看 | 免费看黄电影 | 久久r精品| 美女视频黄频大全免费 | 久久久久国产精品午夜一区 | 日本黄色免费在线观看 | 伊人影院得得 | 麻豆激情电影 | 成人小视频在线观看免费 | 国产精品一区二区三区观看 | 日韩美一区二区三区 | 国产精品毛片久久蜜 | 国产精品一区免费在线观看 | 色国产精品一区在线观看 | 欧美一级淫片videoshd | 在线观看国产91 | 狠狠操狠狠插 | 日韩免费成人av | 九九免费精品视频在线观看 | av电影 一区二区 | 久久黄色影院 | 中文字幕在线视频一区二区 | 久久久久99999 | 国产精品福利无圣光在线一区 | 欧美亚洲专区 | 91大神免费在线观看 | 五月天激情综合 | 久久久久国产精品www | 五月婷婷中文 | 婷婷深爱| 99综合电影在线视频 | 中文字幕精品www乱入免费视频 | 国内精品久久久久久久久久久 | 少妇bbb搡bbbb搡bbbb′ | 91福利试看 | 精品久久久久一区二区国产 | 色丁香婷婷 | 一级国产视频 | 久久久久久久久爱 | 国产不卡免费 | 成人国产综合 | 在线一二三四区 | 亚洲国产精品va在线看黑人动漫 | 2019中文最近的2019中文在线 | 一级a毛片高清视频 | 视频二区| 最新av在线网站 | 久久久精品免费观看 | 久久久久久久久久久电影 | av丁香| 精品国产网址 | 国产精品1区2区3区在线观看 | 爱爱av网| 久草精品网 | 国产成人一区二区在线观看 | 精品999在线 | 久久视频在线观看中文字幕 | 亚洲专区在线播放 | 久久福利小视频 | 国产伦精品一区二区三区高清 | 亚洲精品99久久久久中文字幕 | 久久久国产一区二区 | 日韩精品中文字幕av | 国产精品久久久久久久久蜜臀 | 欧美激情视频一二区 | 九9热这里真品2 | 久久成人18免费网站 | 一区二区精品视频 | 女人高潮一级片 | 国产精品原创视频 | 国产午夜三级 | 丁香九月激情 | 日日躁夜夜躁aaaaxxxx | 国产在线最新 | 久久精国产 | 免费黄色a网站 | 天天爱av导航| 麻豆久久久久 | 国产精品免费一区二区三区在线观看 | 中文字幕乱码电影 | 国产精品久久久久永久免费观看 | 国产一级二级在线播放 | 人人藻人人澡人人爽 | 黄色毛片网站在线观看 | 亚洲国产中文字幕在线观看 | 亚洲综合导航 | 在线成人一区二区 | 射久久| 97视频在线观看播放 | 亚洲精品美女免费 | 成年免费在线视频 | 天天操夜夜操夜夜操 | 欧美日一级片 | 免费看三片 | 91视频免费网址 | 国产精品久久久久久久久久直播 | 日韩区在线观看 | 久久成人午夜 | 日韩电影久久 | 97天天干 | 人人玩人人添人人澡97 | 久久久久久欧美二区电影网 | 国产精品视频999 | av黄色影院 | 综合久久久久久 | 91大神精品视频在线观看 | 特级毛片在线 | 91日韩国产 | www.五月天婷婷.com | 97视频在线免费观看 | 色激情在线 | 亚州精品在线视频 | 九九热免费观看 | 狠狠操狠狠干天天操 | 激情校园亚洲 | 色综合久久88色综合天天 | 99热这里只有精品久久 | 色香com.| 99精品国产99久久久久久福利 | 国产99久久久久久免费看 | 国产三级精品三级在线观看 | 亚洲国产成人高清精品 | 国产黄色片在线 | 久久在线视频在线 | 日韩成人黄色av | 国产在线欧美日韩 | 久草在线最新免费 | av九九九| 日韩v在线91成人自拍 | 成人网中文字幕 | 97热久久免费频精品99 | 四虎免费在线观看 | 在线观看www视频 | 国产一区二区在线免费视频 | 天天干天天干天天色 | 九九视频免费观看视频精品 | 国产精品久久久一区二区三区网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久久伦理电影 | 国产五月| 女人18精品一区二区三区 | 国产高清精品在线 | 天天射天天色天天干 | 九九久久久| 99精品欧美一区二区三区黑人哦 | 在线免费观看视频一区 | 91精品一区二区三区蜜臀 | 免费亚洲黄色 | 天天干天天射天天插 | 国产成人a亚洲精品v | av成人在线播放 | 国产精品久久久久久久久久白浆 | 91一区二区三区在线观看 | 久久精品视频99 | 中文字幕亚洲精品在线观看 | 中文字幕色站 | a成人v在线| 久久狠狠婷婷 | 日本高清中文字幕有码在线 | 激情五月婷婷激情 | 亚洲精品国产日韩 | 在线免费观看视频 | 97在线观看免费观看 | 久久99久| 国际精品久久久 | 97成人在线| 99精品视频在线播放免费 | 成人免费在线播放 | 黄色一级大片在线免费看国产一 | 韩日精品在线观看 | 日韩在线视频一区二区三区 | 天天天天干 | 中文字幕免费高清在线观看 | 天天综合天天综合 | 91av社区 | 久久久久久久国产精品影院 | 欧美精品乱码久久久久久 | 毛片无卡免费无播放器 | 国产黄色片一级三级 | 久久久久影视 | 免费激情在线电影 | 免费午夜网站 | 92av视频 | 久草视频国产 | 伊人久久五月天 | 久久久影院一区二区三区 | 成人免费观看网站 | 69av在线视频 | 国产亚洲精品综合一区91 | 久久久精品国产一区二区三区 | 亚洲成人精品影院 | 亚洲国产黄色 | 国产黄av| 啪啪免费试看 | 欧美久久九九 | 大胆欧美gogo免费视频一二区 | 日韩特黄一级欧美毛片特黄 | www最近高清中文国语在线观看 | 黄色在线观看污 | 婷婷亚洲激情 | av在线免费观看网站 | 男女激情片在线观看 | 安徽妇搡bbbb搡bbbb | 深夜激情影院 | 中文字幕一区在线 | 国产精品入口麻豆 | 色婷婷激情综合 | 五月婷网站 | 精品美女在线观看 | 欧美精品在线观看一区 | 正在播放久久 | 国产男女无遮挡猛进猛出在线观看 | 成人试看120秒 | 日韩成人免费电影 | 国产在线 一区二区三区 | 久久精品波多野结衣 | 日韩欧美精品免费 | 99999精品| www色com| 久久亚洲在线 | 天天摸日日摸人人看 | 久久久久一区二区三区 | 丁香资源影视免费观看 | 992tv在线观看 | 色综合久久久久综合体桃花网 | 国产精品三级视频 | 亚洲高清在线观看视频 | 99久久精品日本一区二区免费 | 日韩精品免费在线播放 | 一区二区视频电影在线观看 | 国产精品人成电影在线观看 | 成人一区二区在线 | 日韩黄色影院 | 日韩精品 在线视频 | 国产三级香港三韩国三级 | 激情中文在线 | 国产福利91精品一区二区三区 | 国产精品成人免费精品自在线观看 | 小草av在线播放 | av不卡免费在线观看 | 日本精品在线视频 | 国产一二三四在线视频 | 亚洲丁香日韩 | 久久亚洲综合国产精品99麻豆的功能介绍 | 成人毛片在线视频 | 国产免费二区 | 在线观看黄a | 亚洲精品大全 | 久久久久久久久网站 | 国产明星视频三级a三级点| 在线观看视频一区二区三区 | 日韩精品一区二区三区电影 | 麻豆视频国产在线观看 | 亚洲国产av精品毛片鲁大师 | 国产一级精品在线观看 | 日韩黄色中文字幕 | 日韩女同av| 女人18片毛片90分钟 | 福利久久久 | 日韩国产精品久久久久久亚洲 | 中文字幕 在线 一 二 | 亚洲综合色激情五月 | 欧美天天综合 | 国内精品在线观看视频 | 中文字幕婷婷 | 亚洲精品综合在线观看 | 欧美国产精品久久久久久免费 | 伊人五月天 | 国产玖玖精品视频 | av中文字幕日韩 | 米奇四色影视 | 欧美另类美少妇69xxxx | 亚洲精品中文字幕在线 | av先锋影音少妇 | 国产在线精品一区二区不卡了 | 在线 日韩 av | 精壮的侍卫呻吟h | 日韩精品第1页 | 精品国产理论 | 欧美aaa级片 | 免费精品视频在线 | 四虎在线影视 | av久久久| 国产精品久久久久久久久久 | 免费av网站在线 | 又爽又黄又刺激的视频 | 国产黄色a| 狠狠操天天干 | 人人干网站 | 91av成人 | 伊人精品影院 | 国产中文字幕视频在线观看 | a视频免费 | 九九导航 | 久久手机免费观看 | 色婷婷啪啪免费在线电影观看 | 91av资源网| 国产又黄又硬又爽 | 国产资源精品 | 国产成人三级一区二区在线观看一 | 美女网站视频免费都是黄 | 一级α片免费看 | 国产99久久精品一区二区永久免费 | 91成人在线免费观看 | 国产精品国产三级国产不产一地 | 激情综合亚洲 | 精品99999 | 国产在线视频不卡 | av免费看在线 | 亚洲香蕉视频 | 91久久人澡人人添人人爽欧美 | 久久精品国产亚洲精品 | 丝袜一区在线 | 久久999精品 | 91超在线| 日本女人的性生活视频 | 亚洲最大av | 精品国产一区二区三区久久久蜜月 | 国产又黄又爽又猛视频日本 | 成年美女黄网站色大片免费看 | 亚洲视频播放 | 色五月成人 | 怡春院av| 欧美国产亚洲精品久久久8v | 在线国产一区二区 | 欧美国产精品一区二区 | 国产精品h在线观看 | 欧美色道 | 中文字幕在线观看完整版 | 国产美女免费观看 | 99中文视频在线 | av在线播放免费 | 偷拍视频一区 | 69亚洲乱 | 欧美精品免费视频 | 97国产视频 | 粉嫩av一区二区三区入口 | 一区二区三区在线免费观看 | 久久久综合九色合综国产精品 | 日韩黄色中文字幕 | 成年人在线免费视频观看 | 天天干视频在线 | 综合久久精品 | 91九色性视频| 国产精品18毛片一区二区 | 中文在线字幕观看电影 | 91字幕| 麻花豆传媒mv在线观看 | 久久国产视频网 | 最近日本字幕mv免费观看在线 | av网址aaa| 精品伊人久久久 | 欧美日韩国产mv | 久一在线| 午夜在线国产 | 亚洲欧美日韩在线看 | 国产黄色美女 | 国产精品永久免费 | 黄污视频网站 | av成人免费 | 免费看av在线 | 黄色a视频| 日韩理论在线视频 | 99精品国产一区二区三区麻豆 | 97在线观看免费高清完整版在线观看 | 成+人+色综合 | 久久字幕 | 一区国产精品 | 久久a级片 | 97视频资源 | 天天天天天天操 | 国产精品99久久久精品免费观看 | 在线а√天堂中文官网 | 精品色综合 | 国产精品入口麻豆 | 91麻豆精品 | 97视频一区| 久久九精品 | 天天做天天爱夜夜爽 | 天天操天天操天天操天天 | av中文字幕av| 免费在线视频一区二区 | 色噜噜日韩精品欧美一区二区 | 免费不卡中文字幕视频 | 亚洲精品一区二区18漫画 | 黄色小说免费在线观看 | 婷婷伊人网| 91免费观看国产 | 精品免费 | 亚洲黄色小说网址 | 99国产精品久久久久久久久久 | 国产免费一区二区三区最新 | 亚洲成年人免费网站 | 人人玩人人添人人 | 月下香电影| 在线观看视频h | 九九九在线观看视频 | www.午夜视频 | 国产日韩精品一区二区 | 日韩综合在线观看 | 成年人免费看片 | 久久五月婷婷丁香 | 蜜桃传媒一区二区 | av免费看av | 国产视频高清 | 国产免费作爱视频 | 成人资源站| 97在线免费| 国产精品福利午夜在线观看 | 综合色久 | 国产精品资源在线 | 黄色高清视频在线观看 | 国产麻豆电影在线观看 | 在线精品亚洲 | 久草在线手机视频 | 国产精品免费视频观看 | 国产码电影 | 伊人久操 | 国产在线精品一区二区 | 中文字幕91 | 精品一区电影 | 狠狠操精品 | 日日干美女 | 国产精品久久久久久久久久99 | 成人av久久 | 在线 精品 国产 | 精品免费视频. | 日本精品一 | 狠狠干电影 | 日韩久久久久久久久久 | 97免费视频在线播放 | 色视频在线免费观看 | 国产成人精品一区二区三区在线 | 亚洲午夜精品久久久久久久久久久久 | 国产小视频免费在线网址 | 超碰人人草人人 | 国产精品18久久久久白浆 | 精品久久久久久久久久 | 久久人人做 | 亚洲电影影音先锋 | 亚洲人成免费网站 | 久久免费一级片 | 亚洲天堂网在线视频 | 99精品国产免费久久久久久下载 | 国产精品va| 天天操夜夜做 | 黄色一级大片在线观看 | 久久综合精品国产一区二区三区 | 在线看岛国av | 中文字幕免费播放 | 中文字幕国产精品一区二区 | 国产高清99| 麻豆极品 | 在线导航福利 | 欧美一级黄色片 | 亚洲视频免费在线观看 | 天天插天天射 | 免费v片 | 中文 一区二区 | av不卡免费看 | 中文字幕在线电影 | 亚洲伊人婷婷 | 天堂av在线7 | 日本性久久 | 国产精品国产三级国产aⅴ无密码 | 日韩免费一区二区三区 | 亚洲人片在线观看 | 色综合人人| 亚洲视频在线看 | 国内小视频在线观看 | 亚洲综合小说 | 中文字幕美女免费在线 | 综合色狠狠 | 久久久久久蜜桃一区二区 | 亚洲乱码在线 | 国产成人精品一区在线 | 天堂入口网站 | 成人免费亚洲 | 国产精品综合久久久久久 | 国内精品小视频 | 91精品国产92久久久久 | 天天操夜夜摸 | 欧美激情va永久在线播放 | 精品美女久久久久 | 在线免费观看视频一区 | 色香蕉在线 | 国产精品theporn | 日韩二区三区在线 | 色国产精品一区在线观看 | 久久久久国产精品免费免费搜索 | av亚洲产国偷v产偷v自拍小说 | 97夜夜澡人人爽人人免费 | 亚洲资源在线 | www五月| 中文字幕 国产视频 | 久操视频在线免费看 | 日韩在线视频国产 | 日韩中文幕 | 国产精品成人久久久久久久 | 亚洲精品乱码久久久一二三 | 热99久久精品 | 久操视频在线免费看 | 2018亚洲男人天堂 | 国产精品永久免费观看 | 久99久在线视频 | 免费在线观看日韩视频 | 久久久穴 | 日韩av电影一区 | 一区在线观看视频 | 91pony九色丨交换 | 成人免费xxx在线观看 | 中文字幕在线观看免费高清电影 | 91丨九色丨蝌蚪丨对白 | 免费中文字幕视频 | 九九交易行官网 | 日韩欧美69 | 日日色综合 | 91av蜜桃 | 夜色资源网 | 伊在线视频 | 成人在线小视频 | 日韩欧美高清在线观看 | 99在线精品视频 | 国产麻豆剧果冻传媒视频播放量 | 久久99国产精品久久 | 91麻豆产精品久久久久久 | 2021国产精品视频 | 午夜视频免费在线观看 | 精品在线视频播放 | 久久精品男人的天堂 | 婷婷色五| av高清网站在线观看 | 狠狠色狠狠色综合日日92 | 久久精品国产精品亚洲精品 | 日韩精品免费在线播放 | 一区二区不卡在线观看 | 国产视频久久 | 国产精品中文久久久久久久 | 国产成人精品一区二区三区福利 | 久久九九国产精品 | 亚洲成人精品在线 | 久综合网| 久久99精品久久久久久秒播蜜臀 | 欧美精品你懂的 | 黄网站免费久久 | 天天艹天天操 | 日韩99热| 亚洲国产视频在线 | 免费在线观看黄 | 国产一级二级在线观看 | 香蕉久久久久久av成人 | 草 免费视频| 国产亚洲精品久 | 中文字幕色婷婷在线视频 | 色网av| 99久久婷婷国产精品综合 | 国产蜜臀av| 蜜臀久久99精品久久久无需会员 | 五月婷婷六月丁香激情 | www毛片com| a视频在线观看免费 | 亚洲精品国产欧美在线观看 | av黄色在线观看 | 日韩在线视频网 | 精品国产伦一区二区三区 | 天天色棕合合合合合合 | 五月婷婷欧美 | 日韩精品一区二区三区高清免费 | 欧美大片大全 | 欧美日韩视频网站 | 久久久久欠精品国产毛片国产毛生 | 国产精品免费在线播放 | 日韩午夜精品福利 | 叶爱av在线| 国产精品久久久久久久99 | 超碰国产在线播放 | 99中文字幕 | 精品国内自产拍在线观看视频 | 亚洲精品中文字幕视频 | 99精品区| 日韩av影片在线观看 | 草久在线视频 | 4438全国亚洲精品在线观看视频 | 免费在线观看日韩视频 | 麻豆视频免费观看 | 亚洲免费国产视频 | 久久国产视频网站 | 日韩在线视频在线观看 | 久久av一区二区三区亚洲 | 欧美日韩在线观看不卡 | 国产成人久久av | 国产一区国产二区在线观看 | 欧美做受69 | www日韩| 国产最新精品视频 | 久久久久亚洲精品男人的天堂 | 日韩欧美视频 | 国产特级毛片aaaaaaa高清 | 在线观看免费av片 | 久久97久久97精品免视看 | 粉嫩一二三区 | 亚洲aⅴ在线观看 | www天天操 | 国产精品毛片一区视频 | 国产精品久久久久久久午夜 | 日韩免费二区 | 国产在线观看高清视频 | 天天天天天操 | 狠狠色噜噜狠狠狠合久 | 天天撸夜夜操 | 伊人天堂网 | 国产中文视频 | 精品国产区 | 国产1区在线观看 | 三三级黄色片之日韩 | 在线视频专区 | www.激情五月.com | 亚洲欧美国产精品18p | 97精品国自产拍在线观看 | 国产最新91| 午夜av影院 | 亚洲精品玖玖玖av在线看 | 国产成人三级一区二区在线观看一 | 成年人在线观看免费视频 | 91精品视频一区二区三区 | 亚洲精品免费在线观看视频 | 国产精品99久久久久久久久久久久 | 婷婷丁香激情五月 | 久久一久久 | 激情欧美xxxx | 久久精品在线免费观看 | 超碰com| 狠狠躁日日躁狂躁夜夜躁av | 91视频国产免费 | 成人免费看片网址 | 久章草在线 | 丁香婷婷色月天 | 亚洲理论片 | 欧美视频日韩 | 色九色 | 91男人影院 | 91成人欧美 | 韩国精品视频在线观看 | 狠狠的干狠狠的操 | 国产成人久久精品 | 日本成人中文字幕在线观看 | 亚洲 av网站 | 日韩精品免费在线视频 | 少妇自拍av | 久久人人爽人人爽人人片 | 中文字幕 在线看 | 综合网在线视频 | 最新av中文字幕 | 久久久久久国产精品久久 | 精品一二三四在线 | 亚州国产精品久久久 | 久久综合欧美精品亚洲一区 | 在线电影播放 | 在线小视频 | 久久激情视频 | 91最新在线观看 | 欧美日韩成人 | 久久综合九色综合97婷婷女人 | 久久五月婷婷丁香 | 91中文在线视频 | 香蕉视频久久 | 91一区一区三区 | 在线影院中文字幕 | 日韩免费av网址 | 亚洲国产精品激情在线观看 | 亚洲jizzjizz日本少妇 | 久久黄色片 | 国产精品69久久久久 | 18国产精品福利片久久婷 | 中文字幕在线字幕中文 | 国产一级电影在线 | 免费在线观看不卡av | 毛片网站在线 | 日韩美女av在线 | 夜夜躁日日躁狠狠久久av | 国产精品黄色 | 久久久久国产精品免费 | 久久久久久久久久网站 | 手机在线小视频 | av成年人电影 | 中文字幕 在线看 | 91精品区| 国产精品欧美 | 亚洲最大av | 欧美一区二区三区在线看 | 波多野结衣在线视频免费观看 | 欧美最新大片在线看 | 毛片网在线观看 | 三级在线国产 | a国产精品 | 久久99久久99| 免费网站看av片 | 亚洲久草视频 | 欧美日韩国产精品一区二区三区 | 97视频在线观看视频免费视频 | 国产区在线视频 | 免费网站看v片在线a | 日日干夜夜爱 | 国产精品成人av在线 | 人人插人人玩 | 日韩一级网站 | 欧美另类交人妖 | 一区免费视频 | www.99久久.com| 成人午夜在线电影 | 福利一区二区三区四区 | 色.com| 中文字幕有码在线 | 精品毛片在线 | 超级碰碰碰碰 | 亚洲午夜电影网 | 国产精品久久久久久久久久久久午夜 | 91成人精品国产刺激国语对白 | 亚洲精品av中文字幕在线在线 | 天天草天天干天天射 | 欧美黑人性猛交 | 久草视频免费在线播放 | www.69xx| 国产成人精品国内自产拍免费看 | 91色一区二区三区 | 免费久久99精品国产 | 成年人在线免费看片 | 国产高清中文字幕 | 亚洲天堂精品视频 | 日韩精品播放 | 天天干天天操 | 亚洲影院一区 | 国产一级电影网 | 久草在线高清视频 | 99在线看| 99久久99视频只有精品 | 欧洲色吧| 欧美精品国产综合久久 | 日日夜夜中文字幕 | 亚洲人在线7777777精品 | 亚洲黄色免费 | 麻豆视频成人 | 国产精品99久久久久久宅男 | 亚洲精品久 | 久久午夜鲁丝片 | 欧美黄在线 | 精精国产xxxx视频在线播放 | 99久久久免费视频 | 在线超碰av | 欧美视频18 | 国产视频美女 | 免费网站在线观看成人 | 国产99一区视频免费 | 国产麻豆成人传媒免费观看 | 国产专区日韩专区 | 五月婷婷,六月丁香 | 久久综合久久久久88 | 国产涩涩网站 | 999精品视频| 免费观看国产精品 | 国产精品手机在线 | 色综合久久66| 麻豆传媒在线视频 | 狠狠干网 | 亚洲精品久久久久久中文传媒 | 日韩视频二区 | 久久伊人国产精品 | www.久久免费视频 | 在线播放精品一区二区三区 | 九色porny真实丨国产18 | 国产精品久久久久久久久久东京 | 日韩精品视频网站 | 天天综合导航 | 久久精品视频18 | 亚洲高清资源 | 日韩精品1区2区 | 日韩欧美一区二区三区在线观看 | 香蕉网址 | 精精国产xxxx视频在线播放 | 国内免费久久久久久久久久久 | 五月色综合 | 国产精品爽爽久久久久久蜜臀 | 91精品久久久久久久久 | a在线观看视频 | 人人爽人人射 | 日本特黄一级 | 99色视频在线 | 美女av在线免费 | 国产精品久久久久久久av电影 | 国产在线欧美日韩 | 久久亚洲专区 | 岛国片在线 | 天天亚洲 | 久久国产精品免费一区 | 日韩欧美在线综合网 | 99精品国产在热久久下载 | 色999在线 | 99爱这里只有精品 | 免费污片 | 久久在线观看 | 国产成人av电影在线观看 | 伊人色综合久久天天 | www.日本色 | 91九色porn在线资源 | 亚洲精品视频免费 | 一区二区三区四区精品视频 | www.一区二区三区 | 日韩精品一区二区三区在线视频 | 草久在线 | 午夜影院日本 | 激情五月婷婷综合 | 国产一级在线 | 99re8这里有精品热视频免费 | 久久免费99 | 狠狠色丁香婷婷综合久久片 | 99这里都是精品 | 日韩激情av在线 | 五月天综合网站 | 中文字幕在线观 | 国产一区二区三区 在线 | 久久久久这里只有精品 | 成人久久久电影 | 国产色拍拍拍拍在线精品 | 九精品| 日韩精品2区 | 永久免费毛片在线观看 | 97免费在线观看 | 91在线日韩 | 91九色精品女同系列 | 不卡av在线免费观看 | 久久亚洲综合色 | 久久久18 | 特黄免费av | 中文字幕av全部资源www中文字幕在线观看 | 国产精品一区二区麻豆 | 久久综合九色综合97婷婷女人 | 久久精品一二三区 | 国产一区二区精品在线 | 玖玖视频精品 | 色资源网免费观看视频 | 国产精品久久99 | 欧美一级乱黄 | 精品视频999 | 天天草天天摸 | 欧美日韩亚洲在线观看 | 久久久久久99精品 | 日本在线观看黄色 | 久久综合九色综合97婷婷女人 | 日本精品在线看 | 欧美国产亚洲精品久久久8v | 欧美日韩另类视频 | 国产精品国产三级国产专区53 | 日韩av女优视频 | 欧美精品亚洲二区 | 美女久久 | 成人蜜桃| ,久久福利影视 | 91在线视频观看免费 | 精品电影一区 | 国产精品久久久久久欧美 | 久久精品爱视频 | 美女在线观看网站 | 黄色网大全 | 欧美性天天 | 国产一区二区三区免费在线观看 | 福利视频精品 | 夜夜澡人模人人添人人看 | 激情开心站 | 日本久久综合视频 | 久久成人人人人精品欧 | 国产精品久久久久久久久久久久午夜片 | 精品国产一区二区三区久久久蜜臀 | 亚洲视频在线免费观看 | 午夜精品一区二区三区免费 | 91精品国产99久久久久 | 欧美日韩xxxxx | 成年人视频免费在线播放 | 天堂av观看| 婷婷伊人综合亚洲综合网 | 18岁免费看片 | 国产日韩精品一区二区在线观看播放 | 国产精品成人免费精品自在线观看 | 日韩免费大片 | 国产一级免费在线观看 | 成 人 黄 色视频免费播放 | 婷婷六月天丁香 | 久久天堂精品视频 | 国产精品中文字幕在线播放 | 国产视频每日更新 | 免费看成人片 | 精品成人久久 | 亚洲国产精品推荐 | 色综合久久久久综合体 | 日日干天天插 | 夜夜天天干 | 激情久久伊人 | 欧美巨乳网| 日韩视频一区二区在线观看 | 免费的成人av | 久久综合给合久久狠狠色 | 69精品在线 | 91精品国产九九九久久久亚洲 | 中文字幕在线观看第一区 | 天天操天天操天天操天天 | www.亚洲视频.com | 欧美日韩一级久久久久久免费看 | 中文成人字幕 | 国产欧美在线一区 | 国产精品入口麻豆 | 91看片淫黄大片一级在线观看 | 欧美黑人xxxx猛性大交 | 在线免费观看黄色 | 少妇高潮流白浆在线观看 | 91九色自拍 | 最近中文字幕在线播放 | 亚洲欧美成人综合 | 久热香蕉视频 | 91最新中文字幕 | 国内精品二区 | 91成人网页版 | 亚洲一二区视频 | 久久天堂影院 | 亚洲精品理论片 | 久久精品视频在线看 | 9在线观看免费高清完整 | 狠狠网亚洲精品 | 日韩精品一区二区三区视频播放 | 中文字幕精 | 国产小视频网站 | 国产精品11 | 99色国产 | 国产高清亚洲 | 日韩在线大片 | 深爱激情av | 国产高清网站 | 久久久久久久久久久久电影 | 激情图片qvod | 欧美男同网站 | 欧美色道 | 国产你懂的在线 | 毛片美女网站 | 色综合久久中文综合久久牛 | 国内揄拍国内精品 | 一区二区视频网站 | 午夜av电影院 | 免费观看高清 | 国产视频精品久久 | 九九免费在线观看视频 | 在线中文字幕观看 | 亚洲婷婷在线视频 | 在线91av | 一级特黄aaa大片在线观看 | 人人爽人人爽人人爽人人爽 | 精品一区二区综合 | 毛片永久新网址首页 | 美女视频黄免费网站 | 国内精品久久久久影院优 | 999一区二区三区 | 久久久久久片 | 国产一级视频 | 久久久久久久久久久精 | 97精品国产97久久久久久久久久久久 | 午夜久久福利视频 | 一区二区三区在线观看中文字幕 | 超碰97中文| 成 人 黄 色 免费播放 | 久久久久久久免费 | 激情婷婷综合 | 手机成人在线电影 | 久久久久久久久久影院 | 成人av久久 | 国产精品一区一区三区 | 免费中文字幕在线观看 | 精品久久国产精品 | 日韩精品极品视频 | 久久综合精品国产一区二区三区 | 成人av在线影视 | 国产精品视频大全 | www.色com | 国产精品午夜av | 精品久久国产精品 | 天天操天天干天天爱 | 国产精品国产三级国产aⅴ无密码 | a在线免费观看视频 | 午夜精品久久久久 | 色婷婷国产 | 岛国一区在线 | 成人在线视频论坛 | 超碰97中文 | 色88久久|