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

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

?? mitelgps.c

?? ATMEL的AVR單片機庫文件
?? C
字號:
/*! \file .c \brief Mitel GPS STX/ETX driver function library. */
//*****************************************************************************
//
// File Name	: 'mitelgps.c'
// Title		: Mitel GPS STX/ETX driver function library
// Author		: Pascal Stang - Copyright (C) 2002
// Created		: 2003.04.11
// Revised		: 2003.08.26
// Version		: 0.1
// Target MCU	: Atmel AVR Series
// Editor Tabs	: 4
//
// NOTE: This code is currently below version 1.0, and therefore is considered
// to be lacking in some functionality or documentation, or may not be fully
// tested.  Nonetheless, you can expect most functions to work.
//
// This code is distributed under the GNU Public License
//		which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#ifndef WIN32
	#include <avr/io.h>
	#include <avr/pgmspace.h>
	#include <string.h>
	#include <stdlib.h>
#endif

#include "global.h"
#include "buffer.h"
#include "rprintf.h"
#include "uart2.h"
#include "gps.h"

#include "mitelgps.h"

// Program ROM constants

// Global variables
// external GPS information structure/repository (in gps.h/gps.c)
extern GpsInfoType GpsInfo;
// packet processing buffer
u08 MitelGpsPacket[MITELGPS_BUFFERSIZE];
// debug flag
u08 debug;
#define MITELGPS_DEBUG_PKTPARSE	0x01
#define MITELGPS_DEBUG_EXTRACT	0x02
// function pointer to single byte output routine
static void (*TxByteFunc)(unsigned char c);

void mitelgpsInit(void (*txbytefunc)(unsigned char c))
{
	// set transmit function
	// (this function will be used for all SendPacket commands)
	TxByteFunc = txbytefunc;
	// set debug status
	debug = 0;
}

void mitelgpsSendPacket(u08* data, u08 dataLength)
{
	u08 i;
	u08 dataIdx = 0;
	u08 checksum = 0;

	// start of packet
	MitelGpsPacket[dataIdx++] = STX;
	// add packet type and packet data
	for(i=0; i<dataLength; i++)
	{
		checksum ^= MitelGpsPacket[dataIdx];
		MitelGpsPacket[dataIdx++] = *data++;
	}
	// checksum
	convertIntToAsciiHex(checksum, &MitelGpsPacket[dataIdx], 2);
	dataIdx += 2;
	// end of packet
	MitelGpsPacket[dataIdx++] = ETX;

	// send it
	for(i=0; i<dataIdx; i++)
		TxByteFunc(MitelGpsPacket[i]);
}

u08 mitelgpsProcess(cBuffer* rxBuffer)
{
	u08 foundpacket = FALSE;
	u08 startFlag = FALSE;
	u08 checksum = 0;
	u08 packetType;
	u16 i,j;

	// process the receive buffer
	// go through buffer looking for packets
	while(rxBuffer->datalength > 1)
	{
		// look for a start of Mitel GPS STX/ETX packet
		if(bufferGetAtIndex(rxBuffer,0) == STX)
		{
			// found start
			startFlag = TRUE;
			// done looking for start
			break;
		}
		else
			// not STX, dump character from buffer
			bufferGetFromFront(rxBuffer);
	}
	
	// if we detected a start, look for end of packet
	if(startFlag)
	{
		for(i=1; i<(rxBuffer->datalength); i++)
		{
			// check for end of Mitel GPS STX/ETX packet
			if(bufferGetAtIndex(rxBuffer,i) == ETX)
			{
				// have a packet end
				// dump initial STX
				bufferGetFromFront(rxBuffer);
				// copy data to MitelGpsPacket
				for(j=0; j<(i-1); j++)
				{
					MitelGpsPacket[j] = bufferGetFromFront(rxBuffer);
					checksum ^= MitelGpsPacket[j];
				}
				// null-terminate copied string
				MitelGpsPacket[j] = 0;
				// dump ending ETX
				bufferGetFromFront(rxBuffer);

				// verify checksum
				// undo checksum summing of the checksum itself
				checksum ^= MitelGpsPacket[j-2];
				checksum ^= MitelGpsPacket[j-1];
				if( checksum == convertAsciiHexToInt(&MitelGpsPacket[j-2], 2) )
				{
					// found a good packet
					if(debug & MITELGPS_DEBUG_PKTPARSE)
					{
						rprintf("Rx Mitel GPS packet type: %c%c%c  len: %d\r\n",
							MitelGpsPacket[0], MitelGpsPacket[1], MitelGpsPacket[2], j);
						rprintfStr(MitelGpsPacket);
						rprintfCRLF();
					}
					// done with this processing session
					foundpacket = TRUE;
					break;
				}
				else
				{
					if(debug & MITELGPS_DEBUG_PKTPARSE)
					{
						rprintf("Rx Mitel GPS packet type: %c%c%c len: %d  Bad Checksum Rcvd: 0x%c%c Calc: 0x%x\r\n",
							MitelGpsPacket[0], MitelGpsPacket[1], MitelGpsPacket[2], j, MitelGpsPacket[j-2], MitelGpsPacket[j-1], checksum);
					}
				}
			}
		}
	}

	// handle and direct the received packet
	if(foundpacket)
	{
		// switch on the packet type
		packetType = convertAsciiHexToInt(&MitelGpsPacket[1], 2);
		switch( packetType )
		{
		case MITELTYPE_NAVDATAGND:	mitelgpsProcessNAVDATAGND(MitelGpsPacket); break;
		case MITELTYPE_CHNLSTATGND:	mitelgpsProcessCHNLSTATGND(MitelGpsPacket); break;
		case MITELTYPE_NAVDATA:		mitelgpsProcessNAVDATA(MitelGpsPacket); break;
		case MITELTYPE_RAWDATA:		mitelgpsProcessRAWDATA(MitelGpsPacket); break;
		case MITELTYPE_CHNLSTAT:	mitelgpsProcessCHNLSTAT(MitelGpsPacket); break;
		case MITELTYPE_RELNAVECEF:	break;
		case MITELTYPE_RELNAVRTN:	break;
		default:
			if(debug & MITELGPS_DEBUG_PKTPARSE)
				rprintf("Unhandled Mitel GPS packet type: 0x%x\r\n", packetType);
			break;
		}
	}

	return foundpacket;
}

void mitelgpsProcessNAVDATAGND(u08* packet)
{
	// process "F00" report packets - Navigation Data (Ground)
	char* endptr;

	if(debug & MITELGPS_DEBUG_EXTRACT)
	{
		rprintf("MITELGPS: ");
		rprintfStr(packet);
		rprintfCRLF();
	}

	// start parsing just after "F00"
	// get latitude [sdd.dddddd]
	GpsInfo.PosLLA.lat.f = strtod(&packet[3], &endptr);
	// get longitude [sddd.dddddd]
	GpsInfo.PosLLA.lon.f = strtod(&packet[3+10], &endptr);
	// get altitude [sxxxxxx.x]
	GpsInfo.PosLLA.alt.f = strtod(&packet[3+10+11], &endptr);
	// get speed [sxxx.xx]
	GpsInfo.VelHS.speed.f = strtod(&packet[3+10+11+9], &endptr);
	// get heading [ddd]
	GpsInfo.VelHS.heading.f = strtod(&packet[3+10+11+9+7], &endptr);

	// get # of SVs tracked [xx]
	GpsInfo.numSVs = atoi(&packet[3+10+11+9+7+5+7+5+5+5]);
}

void mitelgpsProcessCHNLSTATGND(u08* packet)
{
	// process "F03" report packets - Channel Status (Ground)
}

void mitelgpsProcessNAVDATA(u08* packet)
{
	// process "F40" report packets - Navigation Data
	char* endptr;

	// start parsing just after "F40"
	// get gps week number [xxxx]=4
	GpsInfo.WeekNum = atoi(&packet[3]);
	// get gps time of week [xxxxxx.xxxxx]=12
	GpsInfo.TimeOfWeek.f = strtod(&packet[3+4], &endptr);
	// gps-utc time difference? [xx]=2
	// get ECEF X [sxxxxxxxx.xx]=12
	GpsInfo.PosECEF.x.f = strtod(&packet[3+4+12+2], &endptr);
	// get ECEF Y [sxxxxxxxx.xx]=12
	GpsInfo.PosECEF.y.f = strtod(&packet[3+4+12+2+12], &endptr);
	// get ECEF Z [sxxxxxxxx.xx]=12
	GpsInfo.PosECEF.z.f = strtod(&packet[3+4+12+2+12+12], &endptr);
	// get ECEF vX [sxxxxxxxx.xx]=12
	GpsInfo.VelECEF.x.f = strtod(&packet[3+4+12+2+12+12+12], &endptr);
	// get ECEF vY [sxxxxxxxx.xx]=12
	GpsInfo.VelECEF.y.f = strtod(&packet[3+4+12+2+12+12+12+12], &endptr);
	// get ECEF vZ [sxxxxxxxx.xx]=12
	GpsInfo.VelECEF.z.f = strtod(&packet[3+4+12+2+12+12+12+12+12], &endptr);
}

void mitelgpsProcessRAWDATA(u08* packet)
{
	// process "F42" report packets - Pseudorange, carrier phase, doppler
}

void mitelgpsProcessCHNLSTAT(u08* packet)
{
	// process "F43" report packets - Channel Status
}

// data conversions
u32 convertAsciiHexToInt(u08* string, u08 numdigits)
{
	u08 i;
	u32 num = 0;

	for(i=0; i<numdigits; i++)
	{
		// shift number up
		num = num<<4;
		// decode hex digit
		if(string[i] >= 'a')
			num |= string[i]-'a'+10;
		else if(string[i] >= 'A')
			num |= string[i]-'A'+10;
		else
			num |= string[i]-'0';
	}
	return num;
}

void convertIntToAsciiHex(u32 num, u08* string, u08 numdigits)
{
	u08 i;

	for(i=0; i<numdigits; i++)
	{
		if((num & 0x0000000F) < 10)
			string[numdigits-1-i] = (num & 0x0000000F)+'0';
		else
			string[numdigits-1-i] = (num & 0x0000000F)+'A'-10;
		// next digit
		num = num>>4;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频免费在线| 久久久久亚洲蜜桃| 亚洲一区二区美女| 欧美亚洲综合色| 亚洲成人综合视频| 日韩三级高清在线| 久久精品国产免费| 久久久99精品久久| 91丨porny丨国产入口| 亚洲免费色视频| 欧美疯狂做受xxxx富婆| 狠狠色狠狠色合久久伊人| 日本一区二区在线不卡| 色女孩综合影院| 国内欧美视频一区二区| 久久免费视频色| 99久久精品免费| 亚洲va欧美va国产va天堂影院| 日韩欧美www| 99这里只有久久精品视频| 亚洲高清视频的网址| 欧美一区日韩一区| 国产成人av一区二区三区在线 | 1024国产精品| 欧美网站大全在线观看| 国产一区二区三区免费播放| 亚洲欧美日韩系列| 欧美一级二级三级蜜桃| 成人激情视频网站| 午夜一区二区三区在线观看| 久久久精品黄色| 欧美日韩高清在线| 国产白丝精品91爽爽久久| 亚洲激情综合网| 久久五月婷婷丁香社区| 欧美色男人天堂| 国产大陆精品国产| 日本vs亚洲vs韩国一区三区 | 色婷婷精品大在线视频| 精品一区二区在线视频| 亚洲与欧洲av电影| 欧美精彩视频一区二区三区| 91麻豆精品国产无毒不卡在线观看| 成人免费观看av| 狠狠狠色丁香婷婷综合激情 | 狠狠狠色丁香婷婷综合久久五月| 亚洲男人的天堂一区二区 | 久久九九久久九九| 欧美放荡的少妇| 色综合色狠狠天天综合色| 国产乱码精品一区二区三区av| 亚洲国产精品一区二区尤物区| 国产欧美日韩麻豆91| 日韩一卡二卡三卡国产欧美| 日本道色综合久久| 国产99一区视频免费 | 亚洲午夜久久久久久久久久久| 久久久不卡网国产精品二区| 欧美一区二区三区免费视频| 日韩精品一区二区三区在线播放| 色94色欧美sute亚洲13| 99久久久国产精品免费蜜臀| 成人国产精品免费网站| 国产精品99久久久久久久vr| 韩国一区二区三区| 韩国午夜理伦三级不卡影院| 美国三级日本三级久久99 | 欧美一区二区久久久| 欧美视频你懂的| 色屁屁一区二区| 色综合久久66| 在线视频你懂得一区| 91麻豆福利精品推荐| 99久久综合国产精品| av福利精品导航| 91在线观看视频| 91日韩精品一区| 91黄色免费看| 欧美日韩一区成人| 欧美片网站yy| 日韩免费在线观看| 欧美精品一区二区三区高清aⅴ | 久久电影网电视剧免费观看| 日本女优在线视频一区二区| 麻豆91在线播放| 国产一区二区三区观看| 国产成人精品三级麻豆| 99精品久久只有精品| 91免费精品国自产拍在线不卡| 91亚洲精品一区二区乱码| 欧洲一区在线电影| 91麻豆精品国产91久久久久久 | 久久精品人人做人人综合 | 国产喷白浆一区二区三区| 欧美国产成人在线| 亚洲欧美日韩一区二区三区在线观看| 亚洲三级理论片| 午夜精品福利久久久| 精品一二三四在线| 99国产精品国产精品毛片| 在线看一区二区| 欧美一区二区久久久| 国产精品色一区二区三区| 亚洲精品水蜜桃| 久草中文综合在线| 日韩一区二区三区电影在线观看 | 色av成人天堂桃色av| 欧美精品v国产精品v日韩精品| 欧美电视剧免费观看| 国产精品国产馆在线真实露脸 | 日韩女优电影在线观看| 国产精品免费视频观看| 亚洲一区二三区| 国产在线播放一区三区四| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美色区777第一页| 久久综合色综合88| 亚洲国产成人高清精品| 国产精品亚洲第一区在线暖暖韩国 | 国产91精品在线观看| 欧美性色欧美a在线播放| 国产亚洲精品资源在线26u| 亚洲综合色自拍一区| 国产成人综合亚洲91猫咪| 欧美人与性动xxxx| 国产女人水真多18毛片18精品视频| 亚洲国产成人av好男人在线观看| 国产精品456露脸| 欧美浪妇xxxx高跟鞋交| 国产精品国产a级| 久久精品国内一区二区三区| 色吊一区二区三区| 国产精品你懂的| 久久99精品久久久| 欧美日韩国产综合一区二区三区| 中文字幕精品一区二区精品绿巨人| 午夜影院久久久| 日本丶国产丶欧美色综合| 国产精品色眯眯| 国内精品不卡在线| 日韩视频一区在线观看| 亚洲成人三级小说| 91国偷自产一区二区三区观看| 中文成人av在线| 国产在线乱码一区二区三区| 91精品国产综合久久久久| 一区二区三区四区激情| av中文字幕在线不卡| 亚洲国产精品二十页| 国产在线看一区| 337p粉嫩大胆噜噜噜噜噜91av| 日本免费在线视频不卡一不卡二| 欧美午夜寂寞影院| 一区二区在线观看免费| 91在线观看一区二区| 亚洲国产精品成人综合| 国产一区二区免费在线| 欧美xxxx在线观看| 捆绑变态av一区二区三区| 欧美一区二区三区啪啪| 日本sm残虐另类| 正在播放亚洲一区| 免费在线观看成人| 欧美一级理论性理论a| 日本不卡不码高清免费观看| 欧美一级片在线观看| 日韩电影免费在线| 日韩视频一区二区在线观看| 乱中年女人伦av一区二区| 日韩欧美综合一区| 卡一卡二国产精品| 久久久国产综合精品女国产盗摄| 国产在线日韩欧美| 久久影院午夜论| 国产成人精品亚洲777人妖| 国产精品美女视频| 色综合天天综合| 亚洲国产日韩a在线播放| 欧美日韩高清一区二区不卡| 天堂成人免费av电影一区| 日韩免费成人网| 国产精品一级黄| 亚洲美女一区二区三区| 欧美性xxxxxxxx| 精品亚洲成a人| 中文字幕不卡在线| 成人性生交大片免费看中文网站| 国产午夜精品久久久久久免费视| 成人综合激情网| 亚洲男同性视频| 在线不卡a资源高清| 久久国产婷婷国产香蕉| 欧美国产日韩一二三区| 91视视频在线直接观看在线看网页在线看| 亚洲天堂a在线| 5566中文字幕一区二区电影| 国产一区欧美日韩| 亚洲欧美电影院| 日韩亚洲欧美高清| 国产91在线看|