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

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

?? garmin.c

?? gpsd, a popular GPS daemon.
?? C
?? 第 1 頁 / 共 3 頁
字號:
#endif /* NTPSHM_ENABLE */	gpsd_report(LOG_PROG, "Appl, mode %d, status %d\n"	    , session->gpsdata.fix.mode	    , session->gpsdata.status);	gpsd_report(LOG_INF, "UTC Time: %lf\n", session->gpsdata.fix.time);	gpsd_report(LOG_INF	    , "Geoid Separation (MSL-WGS84): from garmin %lf, calculated %lf\n"	    , -pvt->msl_hght	    , wgs84_separation(session->gpsdata.fix.latitude	    , session->gpsdata.fix.longitude));	gpsd_report(LOG_INF, "Alt: %.3f, Epe: %.3f, Eph: %.3f, Epv: %.3f, Fix: %d, Gps_tow: %f, Lat: %.3f, Lon: %.3f, LonVel: %.3f, LatVel: %.3f, AltVel: %.3f, MslHgt: %.3f, Leap: %d, GarminDays: %ld\n"	    , pvt->alt	    , pvt->epe	    , pvt->eph	    , pvt->epv	    , pvt->fix	    , pvt->gps_tow	    , session->gpsdata.fix.latitude	    , session->gpsdata.fix.longitude	    , pvt->lon_vel	    , pvt->lat_vel	    , pvt->alt_vel	    , pvt->msl_hght	    , pvt->leap_sec	    , pvt->grmn_days);	mask |= TIME_SET | LATLON_SET | ALTITUDE_SET | STATUS_SET | MODE_SET | SPEED_SET | TRACK_SET | CLIMB_SET | HERR_SET | VERR_SET | PERR_SET | CYCLE_START_SET;	break;    case GARMIN_PKTID_RMD_DATA:    case GARMIN_PKTID_RMD41_DATA:	rmd = (cpo_rcv_data *) buf;	gpsd_report(LOG_IO, "PVT RMD Data Sz: %d\n", pkt_len);	gpsd_report(LOG_PROG, "PVT RMD rcvr_tow: %f, rcvr_wn: %d\n"		, rmd->rcvr_tow, rmd->rcvr_wn);        for ( i = 0 ; i < GARMIN_CHANNELS ; i++ ) {	    gpsd_report(LOG_INF, "PVT RMD Sat: %3u, cycles: %9lu, pr: %16.6f, phase: %7.3f, slp_dtct: %3s, snr: %3u, Valid: %3s\n"		, rmd->sv[i].svid + 1, rmd->sv[i].cycles, rmd->sv[i].pr                , (rmd->sv[i].phase * 360.0)/2048.0                , rmd->sv[i].slp_dtct!='\0' ? "Yes" : "No"                , rmd->sv[i].snr_dbhz, rmd->sv[i].valid!='\0' ? "Yes" : "No");	}	break;    case GARMIN_PKTID_SAT_DATA:	gpsd_report(LOG_PROG, "SAT Data Sz: %d\n", pkt_len);	sats = (cpo_sat_data *)buf;	session->gpsdata.satellites_used = 0;	memset(session->gpsdata.used,0,sizeof(session->gpsdata.used));	gpsd_zero_satellites(&session->gpsdata);	for ( i = 0, j = 0 ; i < GARMIN_CHANNELS ; i++, sats++ ) {	    gpsd_report(LOG_INF,"  Sat %3d, snr: %5d, elev: %2d, Azmth: %3d, Stat: %x\n"		, sats->svid		, sats->snr		, sats->elev		, sats->azmth		, sats->status);	    if ( 255 == (int)sats->svid ) {		// Garmin uses 255 for empty		// gpsd uses 0 for empty		continue;	    }	    session->gpsdata.PRN[j]       = (int)sats->svid;	    session->gpsdata.azimuth[j]   = (int)sats->azmth;	    session->gpsdata.elevation[j] = (int)sats->elev;            // Garmin does not document this.  snr is in dB*100	    // Known, but not seen satellites have a dB value of -1*100            session->gpsdata.ss[j] = (int)round((float)sats->snr / 100);	    if (session->gpsdata.ss[j] < 0) {		session->gpsdata.ss[j] = 0;	    }	    // FIXME: Garmin documents this, but Daniel Dorau 	    // <daniel.dorau@gmx.de> says the behavior on his GPSMap60CSX	    // doesn't match it.	    if ( (uint8_t)0 != (sats->status & 4 ) )  {	        // used in solution?	        session->gpsdata.used[session->gpsdata.satellites_used++]		    = (int)sats->svid;	    }	    session->gpsdata.satellites++;	    j++;	}	mask |= SATELLITE_SET | USED_SET;	break;    case GARMIN_PKTID_PROTOCOL_ARRAY:	// this packet is never requested, it just comes, in some case	// after a GARMIN_PKTID_PRODUCT_RQST 	gpsd_report(LOG_INF, "Appl, Product Capability, sz: %d\n", pkt_len);	for ( i = 0; i < pkt_len ; i += 3 ) {	    gpsd_report(LOG_INF, "  %c%03d\n", buf[i], get_uint16((uint8_t *)&buf[i+1] ) );	}	break;    default:	gpsd_report(LOG_WARN, "Unknown packet id: %#02x, Sz: %#02x, pkt:%s\n"		    , pkt_id, pkt_len, gpsd_hexdump(buf, (size_t)pkt_len));	break;    }    gpsd_report(LOG_IO, "PrintSERPacket(, %#02x, %#02x, ) = %#02x\n"	, pkt_id, pkt_len, mask);    return mask;}/*@ -branchstate @*/// For debugging, decodes and prints some known packets.static gps_mask_t PrintUSBPacket(struct gps_device_t *session, Packet_t *pkt){    gps_mask_t mask = 0;    int maj_ver;    int min_ver;    uint32_t mode = 0;    uint16_t prod_id = 0;    uint32_t veri = 0;    uint32_t serial;    uint32_t mDataSize = get_int32( (uint8_t*)&pkt->mDataSize);//    uint8_t *buffer = (uint8_t*)pkt;    gpsd_report(LOG_PROG, "PrintUSBPacket()\n");// gem    if ( DLE == pkt->mPacketType) {	    gpsd_report(LOG_PROG, "really a SER packet!\n");            return PrintSERPacket ( session,  				    (unsigned char)buffer[1], 				    (int)buffer[2], 				    (unsigned char*)(buffer + 3));    }// gem    if ( 4096 < mDataSize) {	gpsd_report(LOG_WARN, "bogus packet, size too large=%d\n", mDataSize);	return 0;    }    (void)snprintf(session->gpsdata.tag, sizeof(session->gpsdata.tag), "%u"	, (unsigned int)pkt->mPacketType);    switch ( pkt->mPacketType ) {    case GARMIN_LAYERID_TRANSPORT:        /* Garmin USB layer specific */	switch( pkt->mPacketId ) {	case GARMIN_PKTID_TRANSPORT_START_SESSION_REQ:	    gpsd_report(LOG_PROG, "Transport, Start Session req\n");	    break;	case GARMIN_PKTID_TRANSPORT_START_SESSION_RESP:	    mode = get_int32(&pkt->mData.uchars[0]);	    gpsd_report(LOG_PROG, "Transport, Start Session resp, unit: 0x%x\n"		, mode);	    break;	default:	    gpsd_report(LOG_PROG, "Transport, Packet: Type %d %d %d, ID: %d, Sz: %d\n"			, pkt->mPacketType			, pkt->mReserved1			, pkt->mReserved2			, pkt->mPacketId			, mDataSize);	    break;	}	break;    case GARMIN_LAYERID_APPL:        /* raw data transport, shared with Garmin Serial Driver */        mask = PrintSERPacket(session, 			      (unsigned char)pkt->mPacketId,  			      (int)mDataSize, 			      (unsigned char *)pkt->mData.uchars);	break;    case 75:	// private, garmin USB kernel driver specific	switch( pkt->mPacketId ) {	case PRIV_PKTID_SET_MODE:	    prod_id = get_uint16(&pkt->mData.uchars[0]);	    gpsd_report(LOG_PROG, "Private, Set Mode: %d\n", prod_id);	    break;	case PRIV_PKTID_INFO_REQ:	    gpsd_report(LOG_PROG, "Private, ID: Info Req\n");	    break;	case PRIV_PKTID_INFO_RESP:	    veri = get_int32(pkt->mData.uchars);	    maj_ver = (int)(veri >> 16);	    min_ver = (int)(veri & 0xffff);	    mode = get_int32(&pkt->mData.uchars[4]);	    serial = get_int32(&pkt->mData.uchars[8]);	    gpsd_report(LOG_PROG, "Private, ID: Info Resp\n");	    gpsd_report(LOG_INF, "Garmin USB Driver found, Version %d.%d, Mode: %d, GPS Serial# %u\n"			,  maj_ver, min_ver, mode, serial);	    break;	default:	    gpsd_report(LOG_PROG, "Private, Packet: ID: %d, Sz: %d\n"			, pkt->mPacketId			, mDataSize);	    break;	}	break;    default:	gpsd_report(LOG_PROG, "Packet: Type %d %d %d, ID: %d, Sz: %d\n"		    , pkt->mPacketType		    , pkt->mReserved1		    , pkt->mReserved2		    , pkt->mPacketId		    , mDataSize);	break;    }    return mask;}/*@ +branchstate @*//* build and send a packet w/ USB protocol */static void Build_Send_USB_Packet( struct gps_device_t *session,       uint32_t layer_id, uint32_t pkt_id, uint32_t length, uint32_t data ) {        uint8_t *buffer = (uint8_t *)session->driver.garmin.Buffer;	Packet_t *thePacket = (Packet_t*)buffer;	ssize_t theBytesReturned = 0;	ssize_t theBytesToWrite = 12 + (ssize_t)length;	set_int32(buffer, layer_id);	set_int32(buffer+4, pkt_id);	set_int32(buffer+8, length);         if ( 2 == length ) {		set_int16(buffer+12, data);        } else if ( 4 == length ) {		set_int32(buffer+12, data);	}#if 0        gpsd_report(LOG_IO, "SendPacket(), writing %d bytes: %s\n"		, theBytesToWrite, gpsd_hexdump(thePacket, theBytesToWrite));#endif        (void)PrintUSBPacket ( session,  thePacket);	theBytesReturned = gpsd_write( session , thePacket,	    (size_t)theBytesToWrite);	gpsd_report(LOG_IO, "SendPacket(), wrote %d bytes\n", theBytesReturned);	// Garmin says:	// If the packet size was an exact multiple of the USB packet	// size, we must make a final write call with no data	// as a practical matter no known packets are 64 bytes long so        // this is untested	// So here goes just in case	if( 0 == (theBytesToWrite % ASYNC_DATA_SIZE) ) {		char *n = "";		theBytesReturned = gpsd_write( session , &n, 0);	}}/* build and send a packet in serial protocol *//* layer_id unused */static void Build_Send_SER_Packet( struct gps_device_t *session,       uint32_t layer_id UNUSED, uint32_t pkt_id, uint32_t length, uint32_t data ) {        uint8_t *buffer = (uint8_t *)session->driver.garmin.Buffer;        uint8_t *buffer0 = buffer;	Packet_t *thePacket = (Packet_t*)buffer;	ssize_t theBytesReturned = 0;	ssize_t theBytesToWrite = 6 + (ssize_t)length;        uint8_t chksum = 0;	*buffer++ = (uint8_t)DLE;	*buffer++ = (uint8_t)pkt_id;	chksum = pkt_id;	*buffer++ = (uint8_t)length; 	chksum += length;        if ( 2 == length ) {		/* carefull!  no DLE stuffing here! */		set_int16(buffer, data);		chksum += buffer[0];		chksum += buffer[1];        } else if ( 4 == length ) {		/* carefull!  no DLE stuffing here! */		set_int32(buffer, data);		chksum += buffer[0];		chksum += buffer[1];		chksum += buffer[2];		chksum += buffer[3];	}	buffer += length;	// Add checksum	*buffer++ = -chksum;	if ( DLE == -chksum ) {		/* stuff another DLE */		*buffer++ = (uint8_t)DLE;		theBytesToWrite++;	}				// Add DLE, ETX	*buffer++ = (uint8_t)DLE;	*buffer++ = (uint8_t)ETX;#if 1        gpsd_report(LOG_IO, "SendPacket(), writing %d bytes: %s\n"		    , theBytesToWrite, gpsd_hexdump(thePacket, (size_t)theBytesToWrite));#endif        (void)PrintSERPacket ( session,  			       (unsigned char)buffer0[1], 			       (int)buffer0[2], 			       (unsigned char *)(buffer0 + 3));	theBytesReturned = gpsd_write( session, thePacket,	    (size_t)theBytesToWrite);	gpsd_report(LOG_IO, "SendPacket(), wrote %d bytes\n", theBytesReturned);}/* * garmin_detect() * * check that the garmin_gps driver is installed in the kernel * and that an active USB device is using it. * * It does not yet check that the currect device is the one  * attached to the garmin.  So if you have a garmin and another  * gps this could be a problem. * * this is very linux specific.   * * return 1 if garmin_gps device found * return 0 if not * */static bool garmin_detect(struct gps_device_t *session){    FILE *fp = NULL;    char buf[256];    bool ok = false;    /* check for garmin USB serial driver -- very Linux-specific */    if (access("/sys/module/garmin_gps", R_OK) != 0) {	gpsd_report(LOG_WARN, "garmin_gps not active.\n");         return false;    }    // check for a garmin_gps device in /proc    if ( !(fp = fopen( "/proc/bus/usb/devices", "r") ) ) {	gpsd_report(LOG_ERROR, "Can't open /proc/bus/usb/devices\n");        return false;    }    ok = false;    while ( 0 != fgets( buf, (int)sizeof(buf), fp ) ) {	if ( strstr( buf, "garmin_gps") ) {		ok = true;		break;	}    }    (void)fclose(fp);    if ( !ok ) {        // no device using garmin now	gpsd_report(LOG_WARN, "garmin_gps not in /proc/bus/usb/devices.\n"); 	return false;    }    if (!gpsd_set_raw(session)) {	gpsd_report(LOG_ERROR, "garmin_detect: error changing port attributes: %s\n",             strerror(errno));	return false;    }#ifdef __UNUSED    Packet_t *thePacket = NULL;    uint8_t *buffer = NULL;    /* reset the buffer and buffer length */    memset( session->driver.garmin.Buffer, 0, sizeof(session->driver.garmin.Buffer) );    session->driver.garmin.BufferLen = 0;    if (sizeof(session->driver.garmin.Buffer) < sizeof(Packet_t)) {	gpsd_report(LOG_ERROR, "garmin_detect: Compile error, garmin.Buffer too small.\n",             strerror(errno));	return false;    }    buffer = (uint8_t *)session->driver.garmin.Buffer;    thePacket = (Packet_t*)buffer;#endif /* __UNUSED__ */    // set Mode 1, mode 0 is broken somewhere past 2.6.14    // but how?    gpsd_report(LOG_PROG, "Set garmin_gps driver mode = 0\n");    Build_Send_USB_Packet( session, GARMIN_LAYERID_PRIVATE        , PRIV_PKTID_SET_MODE, 4, MODE_GARMIN_SERIAL);    // expect no return packet !?    return true;}static void garmin_probe_subtype(struct gps_device_t *session, unsigned int seq){    if (seq == 0) {        // Tell the device to send product data        gpsd_report(LOG_PROG, "Get Garmin Product Data\n");        Build_Send_SER_Packet(session, GARMIN_LAYERID_APPL           , GARMIN_PKTID_PRODUCT_RQST, 0, 0);	// turn on PVT data 49

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人激情| 欧美日韩精品专区| 国产高清不卡二三区| 国产精品午夜在线| 中文字幕在线不卡一区二区三区| 日本一区二区三级电影在线观看| 亚洲国产高清在线观看视频| 久久综合国产精品| 欧美激情一二三区| 亚洲欧美一区二区在线观看| 国产精品丝袜在线| 亚洲欧洲中文日韩久久av乱码| 亚洲女同女同女同女同女同69| 一区二区三区电影在线播| 亚洲最大色网站| 日本成人在线网站| 九九久久精品视频| www.成人网.com| 在线免费亚洲电影| 欧美一区二区三区日韩视频| 欧美精品一区二区三| 欧美激情一区二区三区在线| 亚洲色图制服诱惑 | www国产成人免费观看视频 深夜成人网| 日韩精品在线一区二区| 国产视频一区在线观看| 亚洲天堂福利av| 日韩精品一二三区| 成人一区二区三区在线观看 | 91久久奴性调教| 91精品国产综合久久精品麻豆 | 2024国产精品| 一区二区三区四区av| 天堂久久久久va久久久久| 狠狠色综合色综合网络| 99久久久国产精品| 日韩一区二区三区免费看 | 国产成人鲁色资源国产91色综| 99riav一区二区三区| 欧美一区二区三区公司| 亚洲欧洲精品成人久久奇米网| 亚洲国产婷婷综合在线精品| 国产一区二区精品久久99| 欧美三级电影网站| 国产精品女同互慰在线看| 欧美aaaaaa午夜精品| eeuss影院一区二区三区| 欧美电影免费观看高清完整版在 | 亚洲精品欧美综合四区| 国产一区二区看久久| 欧美男生操女生| 亚洲欧美日韩国产综合| 国产成人综合自拍| 欧美国产精品一区| 久久精品国产亚洲a| 欧洲一区二区三区免费视频| 国产精品亲子伦对白| 国产一区亚洲一区| 91精品国产免费| 亚洲成人自拍偷拍| 91黄视频在线| 一区视频在线播放| 成人av综合一区| 国产精品久久久久四虎| 国产成人精品网址| 久久亚洲春色中文字幕久久久| 亚洲第一成人在线| 在线观看不卡一区| 亚洲综合成人网| 91精品91久久久中77777| 中文字幕在线不卡国产视频| 国产成人精品影视| 中文成人av在线| 国产成人免费在线| 中文字幕国产一区| 波波电影院一区二区三区| 中文字幕精品一区二区精品绿巨人| 极品销魂美女一区二区三区| 欧美一卡二卡在线| 久久精品久久综合| 国产日产欧美一区二区视频| 国产乱人伦偷精品视频免下载 | 成人自拍视频在线观看| 久久精品视频一区二区三区| 精品亚洲国产成人av制服丝袜| 欧美一区二区免费| 精品一区二区久久| 亚洲精品一区二区在线观看| 国产一区二区三区观看| 国产欧美一区二区三区在线老狼 | 一区在线观看免费| 日本精品一级二级| 日韩激情一二三区| 精品国产一区久久| 成熟亚洲日本毛茸茸凸凹| 最近日韩中文字幕| 欧美理论电影在线| 六月婷婷色综合| 国产精品沙发午睡系列990531| 91女厕偷拍女厕偷拍高清| 亚洲福利视频三区| 久久久亚洲综合| 91视频国产观看| 免费在线观看一区| 国产精品亲子伦对白| 欧美日韩国产综合久久| 狠狠色综合色综合网络| 一区二区高清免费观看影视大全| 91精选在线观看| 成人午夜免费av| 日韩成人dvd| 国产精品麻豆一区二区| 欧美日韩国产另类一区| 国产麻豆精品theporn| 一区二区三区中文字幕电影| 精品欧美一区二区三区精品久久| 国产精品一二三四| 婷婷激情综合网| 成人免费在线视频| 精品区一区二区| 欧美色综合网站| 99re在线视频这里只有精品| 蜜桃久久久久久久| 一级中文字幕一区二区| 欧美激情综合在线| 亚洲精品一区二区三区影院| 91老司机福利 在线| 亚洲同性同志一二三专区| 69久久夜色精品国产69蝌蚪网| 成人免费av资源| 精品无人区卡一卡二卡三乱码免费卡| 亚洲三级在线免费| 久久婷婷国产综合精品青草| 欧美日韩一区二区三区视频| 国产成人午夜高潮毛片| 精品在线视频一区| 青青草国产成人99久久| 一卡二卡欧美日韩| 亚洲精品视频观看| 国产精品国产a| 国产精品视频一区二区三区不卡| 日韩免费高清av| 日韩一卡二卡三卡| 777午夜精品免费视频| 欧洲av一区二区嗯嗯嗯啊| 成av人片一区二区| 国产+成+人+亚洲欧洲自线| 麻豆高清免费国产一区| 免费在线观看视频一区| 婷婷中文字幕一区三区| 亚洲www啪成人一区二区麻豆| 亚洲美女屁股眼交| 一区二区三区高清在线| 亚洲最色的网站| 三级亚洲高清视频| 老汉av免费一区二区三区| 美女国产一区二区三区| 国产中文一区二区三区| 国产在线一区二区| 成人午夜在线播放| 99精品在线免费| 91福利资源站| 91超碰这里只有精品国产| 欧美军同video69gay| 久久久不卡网国产精品一区| 久久亚洲综合色| 国产精品无圣光一区二区| 中文字幕一区二区三区不卡在线| 亚洲欧美一区二区三区极速播放| 亚洲激情欧美激情| 日韩和欧美的一区| 国产精品66部| 91国偷自产一区二区开放时间| 欧美日韩中文国产| 亚洲精品一区二区精华| 国产精品乱码一区二三区小蝌蚪| 亚洲欧美日韩精品久久久久| 午夜欧美大尺度福利影院在线看| 日本成人在线视频网站| 成人夜色视频网站在线观看| 99国产精品久| 欧美电视剧免费全集观看| 国产精品久久影院| 日韩中文字幕一区二区三区| 国产精品一区免费视频| 91视频一区二区三区| 日韩欧美国产综合在线一区二区三区| 久久伊人中文字幕| 夜夜嗨av一区二区三区网页 | 欧美日韩国产综合一区二区三区| 欧美岛国在线观看| 亚洲黄色小视频| 国产最新精品免费| 欧美色综合网站| 国产精品久久久久久妇女6080| 日本sm残虐另类| 在线免费一区三区| 国产精品理论片| 国产在线观看一区二区 | 午夜免费久久看|