亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ubx.c

?? gpsd, a popular GPS daemon.
?? C
字號:
/* $Id: ubx.c 4661 2008-01-19 22:54:23Z garyemiller $ * * UBX driver */#include <sys/types.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <ctype.h>#include <unistd.h>#include <time.h>#include <stdio.h>#include "gpsd_config.h"#include "gpsd.h"#if defined(UBX_ENABLE) && defined(BINARY_ENABLE)#include "ubx.h"#define LITTLE_ENDIAN_PROTOCOL#include "bits.h"/* * A ubx packet looks like this: * leader: 0xb5 0x62 * message class: 1 byte * message type: 1 byte * length of payload: 2 bytes * payload: variable length * checksum: 2 bytes * * see also the FV25 and UBX documents on reference.html */static gps_mask_t ubx_parse(struct gps_device_t *session, unsigned char *buf, size_t len);static gps_mask_t ubx_msg_nav_sol(struct gps_device_t *session, unsigned char *buf, size_t data_len);static gps_mask_t ubx_msg_nav_dop(struct gps_device_t *session, unsigned char *buf, size_t data_len);static gps_mask_t ubx_msg_nav_timegps(struct gps_device_t *session, unsigned char *buf, size_t data_len);static gps_mask_t ubx_msg_nav_svinfo(struct gps_device_t *session, unsigned char *buf, size_t data_len);static void       ubx_msg_inf(unsigned char *buf, size_t data_len);/** * Navigation solution message */static gps_mask_tubx_msg_nav_sol(struct gps_device_t *session, unsigned char *buf, size_t data_len){    unsigned short gw;    unsigned int tow, flags;    double epx, epy, epz, evx, evy, evz;    unsigned char navmode;    gps_mask_t mask;    double t;    if (data_len != 52)	return 0;    flags = (unsigned int)getub(buf, 11);    mask =  ONLINE_SET;    if ((flags & (UBX_SOL_VALID_WEEK |UBX_SOL_VALID_TIME)) != 0){	tow = getul(buf, 0);	gw = (unsigned short)getsw(buf, 8);	session->driver.ubx.gps_week = gw;	t = gpstime_to_unix((int)session->driver.ubx.gps_week, tow/1000.0) - session->context->leap_seconds;	session->gpsdata.sentence_time = t;	session->gpsdata.fix.time = t;	mask |= TIME_SET;#ifdef NTPSHM_ENABLE	/* TODO overhead */	if (session->context->enable_ntpshm)	    (void)ntpshm_put(session, session->gpsdata.sentence_time);#endif    }    epx = (double)(getsl(buf, 12)/100.0);    epy = (double)(getsl(buf, 16)/100.0);    epz = (double)(getsl(buf, 20)/100.0);    evx = (double)(getsl(buf, 28)/100.0);    evy = (double)(getsl(buf, 32)/100.0);    evz = (double)(getsl(buf, 36)/100.0);    ecef_to_wgs84fix(&session->gpsdata, epx, epy, epz, evx, evy, evz);    mask |= LATLON_SET | ALTITUDE_SET | SPEED_SET | TRACK_SET | CLIMB_SET;    session->gpsdata.fix.eph = (double)(getsl(buf, 24)/100.0);    session->gpsdata.fix.eps = (double)(getsl(buf, 40)/100.0);    session->gpsdata.pdop = (double)(getuw(buf, 44)/100.0);    session->gpsdata.satellites_used = (int)getub(buf, 47);    mask |= PDOP_SET ;    navmode = getub(buf, 10);    switch (navmode){    case UBX_MODE_TMONLY:    case UBX_MODE_3D:	session->gpsdata.fix.mode = MODE_3D;	break;    case UBX_MODE_2D:    case UBX_MODE_DR:	    /* consider this too as 2D */    case UBX_MODE_GPSDR:    /* XXX DR-aided GPS may be valid 3D */	session->gpsdata.fix.mode = MODE_2D;	break;    default:	session->gpsdata.fix.mode = MODE_NO_FIX;    }    if ((flags & UBX_SOL_FLAG_DGPS) != 0)	session->gpsdata.status = STATUS_DGPS_FIX;    else if (session->gpsdata.fix.mode != MODE_NO_FIX)	session->gpsdata.status = STATUS_FIX;    mask |= MODE_SET | STATUS_SET | CYCLE_START_SET | USED_SET ;    return mask;}/** * Dilution of precision message */static gps_mask_tubx_msg_nav_dop(struct gps_device_t *session, unsigned char *buf, size_t data_len){    if (data_len != 18)	return 0;    session->gpsdata.gdop = (double)(getuw(buf, 4)/100.0);    session->gpsdata.pdop = (double)(getuw(buf, 6)/100.0);    session->gpsdata.tdop = (double)(getuw(buf, 8)/100.0);    session->gpsdata.vdop = (double)(getuw(buf, 10)/100.0);    session->gpsdata.hdop = (double)(getuw(buf, 12)/100.0);    return DOP_SET;}/** * GPS Leap Seconds */static gps_mask_tubx_msg_nav_timegps(struct gps_device_t *session, unsigned char *buf, size_t data_len){    unsigned int gw, tow, flags;    double t;    if (data_len != 16)	return 0;    tow = getul(buf, 0);    gw = (uint)getsw(buf, 8);    if (gw > session->driver.ubx.gps_week)	session->driver.ubx.gps_week = gw;    flags = (unsigned int)getub(buf, 11);    if ((flags & 0x7) != 0)    	session->context->leap_seconds = (int)getub(buf, 10);    t = gpstime_to_unix((int)session->driver.ubx.gps_week, tow/1000.0) - session->context->leap_seconds;    session->gpsdata.sentence_time = session->gpsdata.fix.time = t;    return TIME_SET | ONLINE_SET;}/** * GPS Satellite Info */static gps_mask_tubx_msg_nav_svinfo(struct gps_device_t *session, unsigned char *buf, size_t data_len){    unsigned int i, tow, nchan, nsv, st;    if (data_len < 152 ) {	gpsd_report(LOG_PROG, "runt svinfo (datalen=%d)\n", data_len);	return 0;    }    tow = getul(buf, 0);//    session->gpsdata.sentence_time = gpstime_to_unix(gps_week, tow) //				- session->context->leap_seconds;    /*@ +charint @*/    nchan = getub(buf, 4);    if (nchan > 16){	gpsd_report(LOG_WARN, "Invalid NAV SVINFO message, >16 reported");	return 0;    }    /*@ -charint @*/    gpsd_zero_satellites(&session->gpsdata);    nsv = 0;    for (i = st = 0; i < nchan; i++) {	int off = 8 + 12 * i;	session->gpsdata.PRN[i]		= (int)getub(buf, off+1);	session->gpsdata.ss[i]		= (int)getub(buf, off+4);	session->gpsdata.elevation[i]	= (int)getsb(buf, off+5);	session->gpsdata.azimuth[i]	= (int)getsw(buf, off+6);	if(session->gpsdata.PRN[i])		st++;	/*@ -predboolothers */	if (getub(buf, off+2) & 0x01)	    session->gpsdata.used[nsv++] = session->gpsdata.PRN[i];	/*@ +predboolothers */    }    session->gpsdata.satellites = (int)st;    session->gpsdata.satellites_used = (int)nsv;    return SATELLITE_SET | USED_SET;}static voidubx_msg_inf(unsigned char *buf, size_t data_len){    unsigned short msgid;    static char txtbuf[MAX_PACKET_LENGTH];    msgid = (unsigned short)((buf[2] << 8) | buf[3]);    if (data_len > MAX_PACKET_LENGTH-1)	data_len = MAX_PACKET_LENGTH-1;    (void)strlcpy(txtbuf, (char *)buf+6, MAX_PACKET_LENGTH); txtbuf[data_len] = '\0';    switch (msgid) {	case UBX_INF_DEBUG:	    gpsd_report(LOG_PROG, "UBX_INF_DEBUG: %s\n", txtbuf);	    break;	case UBX_INF_TEST:	    gpsd_report(LOG_PROG, "UBX_INF_TEST: %s\n", txtbuf);	    break;	case UBX_INF_NOTICE:	    gpsd_report(LOG_INF, "UBX_INF_NOTICE: %s\n", txtbuf);	    break;	case UBX_INF_WARNING:	    gpsd_report(LOG_WARN, "UBX_INF_WARNING: %s\n", txtbuf);	    break;	case UBX_INF_ERROR:	    gpsd_report(LOG_WARN, "UBX_INF_ERROR: %s\n", txtbuf);	    break;	default:	    break;    }    return ;}/*@ +charint @*/static gps_mask_t ubx_parse(struct gps_device_t *session, unsigned char *buf, size_t len){    size_t data_len;    unsigned short msgid;    gps_mask_t mask = 0;    if (len < 6)    /* the packet at least contains a head of six bytes */	return 0;    /* extract message id and length */    msgid = (buf[2] << 8) | buf[3];    data_len = (size_t)getsw(buf, 4);    switch (msgid)    {	case UBX_NAV_POSECEF:	    gpsd_report(LOG_IO, "UBX_NAV_POSECEF\n");	    break;	case UBX_NAV_POSLLH:	    gpsd_report(LOG_IO, "UBX_NAV_POSLLH\n");	    break;	case UBX_NAV_STATUS:	    gpsd_report(LOG_IO, "UBX_NAV_STATUS\n");	    break;	case UBX_NAV_DOP:	    gpsd_report(LOG_PROG, "UBX_NAV_DOP\n");            mask = ubx_msg_nav_dop(session, &buf[6], data_len);	    break;	case UBX_NAV_SOL:	    gpsd_report(LOG_PROG, "UBX_NAV_SOL\n");            mask = ubx_msg_nav_sol(session, &buf[6], data_len);	    break;	case UBX_NAV_POSUTM:	    gpsd_report(LOG_IO, "UBX_NAV_POSUTM\n");	    break;	case UBX_NAV_VELECEF:	    gpsd_report(LOG_IO, "UBX_NAV_VELECEF\n");	    break;	case UBX_NAV_VELNED:	    gpsd_report(LOG_IO, "UBX_NAV_VELNED\n");	    break;	case UBX_NAV_TIMEGPS:	    gpsd_report(LOG_PROG, "UBX_NAV_TIMEGPS\n");            mask = ubx_msg_nav_timegps(session, &buf[6], data_len);	    break;	case UBX_NAV_TIMEUTC:	    gpsd_report(LOG_IO, "UBX_NAV_TIMEUTC\n");	    break;	case UBX_NAV_CLOCK:	    gpsd_report(LOG_IO, "UBX_NAV_CLOCK\n");	    break;	case UBX_NAV_SVINFO:	    gpsd_report(LOG_PROG, "UBX_NAV_SVINFO\n");            mask = ubx_msg_nav_svinfo(session, &buf[6], data_len);	    break;	case UBX_NAV_DGPS:	    gpsd_report(LOG_IO, "UBX_NAV_DGPS\n");	    break;	case UBX_NAV_SBAS:	    gpsd_report(LOG_IO, "UBX_NAV_SBAS\n");	    break;	case UBX_NAV_EKFSTATUS:	    gpsd_report(LOG_IO, "UBX_NAV_EKFSTATUS\n");	    break;	case UBX_RXM_RAW:	    gpsd_report(LOG_IO, "UBX_RXM_RAW\n");	    break;	case UBX_RXM_SFRB:	    gpsd_report(LOG_IO, "UBX_RXM_SFRB\n");	    break;	case UBX_RXM_SVSI:	    gpsd_report(LOG_PROG, "UBX_RXM_SVSI\n");	    break;	case UBX_RXM_ALM:	    gpsd_report(LOG_IO, "UBX_RXM_ALM\n");	    break;	case UBX_RXM_EPH:	    gpsd_report(LOG_IO, "UBX_RXM_EPH\n");	    break;	case UBX_RXM_POSREQ:	    gpsd_report(LOG_IO, "UBX_RXM_POSREQ\n");	    break;	case UBX_MON_SCHED:	    gpsd_report(LOG_IO, "UBX_MON_SCHED\n");	    break;	case UBX_MON_IO:	    gpsd_report(LOG_IO, "UBX_MON_IO\n");	    break;	case UBX_MON_IPC:	    gpsd_report(LOG_IO, "UBX_MON_IPC\n");	    break;	case UBX_MON_VER:	    gpsd_report(LOG_IO, "UBX_MON_VER\n");	    break;	case UBX_MON_EXCEPT:	    gpsd_report(LOG_IO, "UBX_MON_EXCEPT\n");	    break;	case UBX_MON_MSGPP:	    gpsd_report(LOG_IO, "UBX_MON_MSGPP\n");	    break;	case UBX_MON_RXBUF:	    gpsd_report(LOG_IO, "UBX_MON_RXBUF\n");	    break;	case UBX_MON_TXBUF:	    gpsd_report(LOG_IO, "UBX_MON_TXBUF\n");	    break;	case UBX_MON_HW:	    gpsd_report(LOG_IO, "UBX_MON_HW\n");	    break;	case UBX_MON_USB:	    gpsd_report(LOG_IO, "UBX_MON_USB\n");	    break;	case UBX_INF_DEBUG:	    /* FALLTHROUGH */	case UBX_INF_TEST:	    /* FALLTHROUGH */	case UBX_INF_NOTICE:	    /* FALLTHROUGH */	case UBX_INF_WARNING:	    /* FALLTHROUGH */	case UBX_INF_ERROR:	    ubx_msg_inf(buf, data_len);	    break;	case UBX_TIM_TP:	    gpsd_report(LOG_IO, "UBX_TIM_TP\n");	    break;	case UBX_TIM_TM:	    gpsd_report(LOG_IO, "UBX_TIM_TM\n");	    break;	case UBX_TIM_TM2:	    gpsd_report(LOG_IO, "UBX_TIM_TM2\n");	    break;	case UBX_TIM_SVIN:	    gpsd_report(LOG_IO, "UBX_TIM_SVIN\n");	    break;    default:	gpsd_report(LOG_WARN, "UBX: unknown packet id 0x%04hx (length %d) %s\n", 	    msgid, len, gpsd_hexdump(buf, len));    }    if (mask)	(void)snprintf(session->gpsdata.tag, sizeof(session->gpsdata.tag),	   "0x%04hx", msgid);    return mask | ONLINE_SET;}/*@ -charint @*/static gps_mask_t parse_input(struct gps_device_t *session){    gps_mask_t st;    if (session->packet.type == UBX_PACKET){	st = ubx_parse(session, session->packet.outbuffer, session->packet.outbuflen);	session->gpsdata.driver_mode = 1;	return st;#ifdef NMEA_ENABLE    } else if (session->packet.type == NMEA_PACKET) {	st = nmea_parse((char *)session->packet.outbuffer, session);	session->gpsdata.driver_mode = 0;	return st;#endif /* NMEA_ENABLE */    } else	return 0;}/* This is everything we export */struct gps_type_t ubx_binary = {    .type_name        = "uBlox UBX",    /* Full name of type */    .trigger          = NULL,           /* Response string that identifies device (not active) */    .channels         = 16,             /* Number of satellite channels supported by the device */    .probe_detect     = NULL,           /* Startup-time device detector */    .probe_wakeup     = NULL,           /* Wakeup to be done before each baud hunt */    .probe_subtype    = NULL,           /* Initialize the device and get subtype */#ifdef ALLOW_RECONFIGURE    .configurator     = NULL,           /* Enable what reports we need */#endif /* ALLOW_RECONFIGURE */    .get_packet       = generic_get,    /* Packet getter (using default routine) */    .parse_packet     = parse_input,    /* Parse message packets */    .rtcm_writer      = NULL,           /* RTCM handler (using default routine) */    .speed_switcher   = NULL,           /* Speed (baudrate) switch */    .mode_switcher    = NULL,           /* Switch to NMEA mode */    .rate_switcher    = NULL,           /* Message delivery rate switcher */    .cycle_chars      = -1,             /* Number of chars per report cycle */#ifdef ALLOW_RECONFIGURE    .revert           = NULL,           /* Undo the actions of .configurator */#endif /* ALLOW_RECONFIGURE */    .wrapup           = NULL,           /* Puts device back to original settings */    .cycle            = 1               /* Number of updates per second */};#endif /* defined(UBX_ENABLE) && defined(BINARY_ENABLE) */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二三区| 一片黄亚洲嫩模| 一本一道久久a久久精品| 日韩精品每日更新| 亚洲欧洲成人自拍| 精品处破学生在线二十三| 欧美中文字幕一区二区三区| 国产乱理伦片在线观看夜一区| 一二三四区精品视频| 欧美激情在线一区二区三区| 51精品秘密在线观看| 色老综合老女人久久久| 国产iv一区二区三区| 九色|91porny| 日本亚洲天堂网| 樱桃视频在线观看一区| 欧美经典一区二区三区| 欧美大片拔萝卜| 51精品秘密在线观看| 欧美日韩久久一区二区| 91免费观看国产| av成人免费在线观看| 国产成人免费视频精品含羞草妖精| 热久久免费视频| 日韩精品国产精品| 亚洲国产一区视频| 一区二区在线电影| 亚洲人成亚洲人成在线观看图片| 久久久久久久久久久久久女国产乱| 91精品国产乱| 欧美日韩大陆在线| 欧美人狂配大交3d怪物一区| 在线观看国产一区二区| 一本一道久久a久久精品| 97久久久精品综合88久久| 成人免费毛片片v| 国产成人精品亚洲777人妖 | 91福利国产精品| 99精品黄色片免费大全| www.亚洲在线| 91麻豆文化传媒在线观看| 99re热视频精品| 色婷婷一区二区| 91论坛在线播放| 91麻豆国产香蕉久久精品| 91视频在线观看| 色婷婷av一区| 欧美剧在线免费观看网站 | 欧美xxxx老人做受| 精品女同一区二区| 久久久国产午夜精品| 久久久久综合网| 国产精品狼人久久影院观看方式| 欧美国产日韩精品免费观看| 日本一区二区免费在线| 一区在线观看免费| 依依成人综合视频| 无码av免费一区二区三区试看 | 国产在线精品一区二区三区不卡| 久久国产精品色婷婷| 国产激情一区二区三区四区| 成人午夜免费电影| 色婷婷久久久久swag精品| 欧美在线制服丝袜| 欧美成人官网二区| 中文字幕国产精品一区二区| 自拍偷自拍亚洲精品播放| 一区二区三区日韩精品| 五月婷婷久久丁香| 紧缚捆绑精品一区二区| 成人免费不卡视频| 欧美精品久久一区| 久久精品亚洲麻豆av一区二区| 亚洲欧美日韩国产手机在线| 日韩高清在线电影| 粉嫩嫩av羞羞动漫久久久| 在线欧美日韩精品| 精品国产乱码久久久久久浪潮| 国产精品久久久久影院老司| 亚洲一区二区五区| 国产精品一区二区免费不卡| 日本高清不卡视频| 日韩免费一区二区| 一区二区三区在线视频观看| 黄色日韩三级电影| 91行情网站电视在线观看高清版| 日韩精品中文字幕在线一区| 国产欧美精品一区| 亚洲国产精品综合小说图片区| 国内精品第一页| 欧美亚洲综合久久| 国产精品色一区二区三区| 奇米888四色在线精品| 91论坛在线播放| 久久久国产午夜精品| 日日摸夜夜添夜夜添国产精品| 国产大陆a不卡| 日韩免费性生活视频播放| 亚洲蜜臀av乱码久久精品| 精品无码三级在线观看视频| 欧美日韩一卡二卡三卡| 国产精品久久福利| 精品一二三四区| 欧美撒尿777hd撒尿| ...xxx性欧美| 国产乱码精品一区二区三| 欧美一二区视频| 亚洲在线中文字幕| 99精品偷自拍| 中文字幕精品三区| 国产一区二区精品久久91| 欧美精品在欧美一区二区少妇| 中文字幕中文字幕一区二区| 狠狠色综合色综合网络| 国产精品美女一区二区三区| 日韩一级片在线播放| 亚洲成精国产精品女| 91小宝寻花一区二区三区| 国产亚洲精品久| 视频一区中文字幕国产| 91免费在线视频观看| 久久久美女艺术照精彩视频福利播放| 性久久久久久久| 在线一区二区三区做爰视频网站| 国产精品久久毛片| 国产91精品一区二区| 久久亚洲免费视频| 国产一区二区视频在线| 精品久久99ma| 韩国一区二区视频| 欧美精品一区二区精品网| 美女国产一区二区| 91精品在线观看入口| 免费观看一级欧美片| 日韩视频免费观看高清完整版在线观看 | 精品制服美女丁香| 欧美男男青年gay1069videost| 亚洲精品免费播放| 色综合天天综合| 亚洲精品视频在线观看免费| 99久久综合精品| 亚洲色图一区二区| 在线一区二区观看| 亚洲国产日韩av| 欧美日本一区二区三区四区| 日韩国产高清影视| 精品国产免费一区二区三区四区| 国产一区二区精品久久99| 中文天堂在线一区| 91香蕉视频在线| 亚洲va欧美va人人爽| 4hu四虎永久在线影院成人| 久久99精品国产麻豆不卡| 久久影院视频免费| 成人永久看片免费视频天堂| 国产精品国产自产拍在线| 在线观看国产91| 日本成人中文字幕| 国产欧美一区二区三区在线老狼| 成人久久久精品乱码一区二区三区| 中文字幕亚洲欧美在线不卡| 91福利国产精品| 久久精品999| 国产精品久久久久精k8| 精品视频一区二区不卡| 极品美女销魂一区二区三区免费| 国产精品三级电影| 欧美色倩网站大全免费| 精品一区二区在线播放| 中文字幕不卡在线播放| 欧美在线你懂的| 精品午夜一区二区三区在线观看| 国产精品久久久久久久岛一牛影视 | 天天综合天天做天天综合| 精品国产一二三| 91视频91自| 久久精品免费观看| √…a在线天堂一区| 欧美军同video69gay| 国产精品一区专区| 亚洲va欧美va国产va天堂影院| 久久美女艺术照精彩视频福利播放 | 欧美成人精品二区三区99精品| 成人免费看视频| 日韩av一级电影| 国产精品久久久久国产精品日日| 91麻豆精品91久久久久久清纯 | 久久se这里有精品| 亚洲特级片在线| 日韩免费性生活视频播放| 99re成人精品视频| 国产精品自拍在线| 日韩国产精品91| 亚洲日本在线a| 久久综合久色欧美综合狠狠| 欧美性猛交xxxxxx富婆| 国产成人精品三级| 久久精品99久久久| 亚洲狠狠爱一区二区三区| 国产午夜三级一区二区三|