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

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

?? rs232.c

?? Sirf/Centrality公司GPS平臺AtlasIII芯片AT640的Nboot源碼
?? C
字號:
#include "def.h"
#include "at4x0f.h"
#include <cspregs.h>
#include "debug.h"
#include "rs232.h"
#include "nand.h"
#include "..\inc\loader.h"

#include <string.h>

extern DWORD g_nCurImg;
extern DWORD g_nNandCS;

struct _serial_msg {
		uchar  status;
		uchar  char_in;
		uchar  type;
		uchar  subtype;
		uchar  sequence;
		uchar  cmd_code;
		uchar  cmd_reg;
		uchar  baudrate;
		uchar  length_low;
		uchar  packet_length;
		uchar  write_length;
		unsigned short data_length;
		unsigned short checksum;		
		};
typedef struct _serial_msg SERIALMSG;

#define P_MAX_PACKET_DATA		128
#define P_MAX_PACKET_LENGTH		(P_MAX_PACKET_DATA+6)


/* Communication internal status */
#define STATUS_IDLE				0
#define STATUS_WAIT_PACKET		1
#define STATUS_WAIT_ACK			2
#define STATUS_SENDING_DATA		3


SERIALMSG	g_msg;
uchar		g_serialBuf[SERIAL_BUF_LEN];
uchar		g_serialPkt[P_MAX_PACKET_LENGTH];
ulong		g_iHead;
ulong		g_iTail;

static int _fCheckSum;
static int _fReadingCmd;
static int _fReadingDatabody;
static int _fReadingChecksum;
static int _fReadingCmdData;
static int _fErrorPacket;
static int _fWriteImage;

#define _pSerialPacket		(g_serialPkt)
#define _pSerialData		(_pSerialPacket + 4)

extern unsigned char * pCurImgCache;
extern unsigned int g_iCurImgLength;
extern unsigned int iCurImgTransfered;

extern int g_bNandDbgMuted;

void Rs232Init()
{
#ifdef DEBUG_UART_PORT
	INT_RISC_MASK |= INT_MASK_SERIAL_0;
	UART_INT_STATUS = UART_INT_MASK_ALL;
	UART_INT_ENABLE = UART_INT_RX_DONE_MASK;
#else // DEBUG_UART_PORT
	INT_RISC_MASK |= INT_MASK_SERIAL_7_6_5_4;
	USP5_INT_STATUS = USP_INT_MASK_ALL;
	USP5_INT_ENABLE = USP_INT_RX_DONE_MASK;
#endif // DEBUG_UART_PORT
	memset(&g_msg, 0, sizeof(SERIALMSG));
	g_iHead = g_iTail = 0;
	g_bNandDbgMuted = 1;
}

void Rs232GetChars()
{
}

void _Handle_ErrorPacket()
{
	if (_fErrorPacket == 0)
	{
		DbgPutChar(P_NAK);
		_fErrorPacket = 1;
	}
	g_msg.status = STATUS_IDLE;
	g_msg.sequence = 0;
}

void _Handle_CmdSetReg()
{
	ulong lVal;

	lVal = _pSerialData[3];
	lVal <<= 8;
	lVal += _pSerialData[2];
	lVal <<= 8;
	lVal += _pSerialData[1];
	lVal <<= 8;
	lVal += _pSerialData[0];

	g_msg.status = STATUS_IDLE;

	switch (g_msg.cmd_reg)
	{
	case P_CMD_CUR_IMG_TYPE:
		g_nCurImg = lVal;
		break;
	case P_CMD_NAND_CS:
		g_nNandCS = lVal;
		FMD_Init();
		break;
	case P_CMD_CUR_IMG_LENGTH:
		iCurImgTransfered = 0;
		g_iCurImgLength = lVal;
		break;
	}
	DbgPutChar(P_ACK);
	return;
}

void _Handle_CmdAction()
{
	g_msg.status = STATUS_IDLE;
	DbgPutChar(P_ACK);	/* Send out ACK first */

	switch (g_msg.cmd_reg)
	{
	case P_ACTION_WRITE_IMG:
		NandWriteCurImg();
		break;
	case P_ACTION_UPDATE_TOC:
		NandWriteToc();
		break;
	case P_ACTION_OPEN_DATA_PIPE:
		_fWriteImage = 1;
		break;
	case P_ACTION_CLOSE_DATA_PIPE:
		_fWriteImage = 0;
		break;
	}
	DbgPutChar(P_ENQ);
	return;

}

void _Handle_PacketCmd()
{
	switch (g_msg.cmd_code)
	{
	case P_CMD_SET_REG:
		_Handle_CmdSetReg();
		break;

	case P_CMD_ACTION:
		_Handle_CmdAction();
		break;
	}
}

void _Handle_PacketIn()
{
	switch (g_msg.type)
	{
	case P_DATA_UNFINISHED:
		DbgPutChar(P_ACK);
		memcpy((pCurImgCache+iCurImgTransfered), _pSerialData, (g_msg.packet_length - 4));
		iCurImgTransfered += g_msg.packet_length - 4;

		g_msg.status = STATUS_IDLE;
		break;

	case P_DATA:
		DbgPutChar(P_ACK);
		g_msg.status = STATUS_IDLE;
		g_msg.sequence = 0;
		break;

	case P_CMD:
		_Handle_PacketCmd();
		break;
	}
}

void _Read_Idle()
{
	uchar in;

	in = g_msg.char_in;
	switch (in)
	{
	case P_DATA_UNFINISHED:
	case P_DATA:
	case P_CMD:
		g_msg.type = in;
		g_msg.packet_length = 1;
		g_msg.checksum = 0;
		_fCheckSum = 0;
		g_msg.status = STATUS_WAIT_PACKET;
		if (in == P_CMD)
		{
			_fReadingCmd = 1;
			_fReadingCmdData = 0;
		}
		else
		{
			_fReadingCmd = 0;
		}
		_fReadingDatabody = 0;
		_fReadingChecksum = 0;
		return;

	case P_NUL:
		if (_fErrorPacket == 0)
		{
			DbgPutChar(P_NAK);
		}
		return;

	}
	_Handle_ErrorPacket();
}

int _Read_WaitPacket_Databody()
{
	uchar in;

	// data body 
	in = g_msg.char_in;

	// Add check sum first 
	g_msg.checksum += in;
	g_msg.data_length --;

	if (g_msg.data_length == 0)
		_fReadingChecksum = 1;

	if (_fReadingCmd)
	{
		if (_fReadingCmdData)
		{	// save command data
			if (g_msg.packet_length < P_MAX_PACKET_DATA)
			{
				_pSerialData[g_msg.packet_length] = in;
				g_msg.packet_length ++;
			}
		}
		else
		{
			if (g_msg.packet_length == 4)
			{
				if (in > P_CMD_GET_VDATA)		return 0;		/* cmd code is between 0 - 4 */

				g_msg.cmd_code = in;
				g_msg.packet_length ++;
			}
			else /* if (g_msg.packet_length == 5) */
			{
				g_msg.cmd_reg = in; 
				_fReadingCmdData = 1;
				g_msg.packet_length -= 5;
			}
		}
	}
	else
	{
		_pSerialPacket[g_msg.packet_length] = in;
		g_msg.packet_length ++;
	}

	return 1;
}

int _Read_WaitPacket_Checksum()
{
	if (_fCheckSum == 0)
	{
		g_msg.checksum -= g_msg.char_in;
		if ((g_msg.checksum & 0xff) != 0)
			return 0;
		_fCheckSum = 1;
	}
	else
	{
		g_msg.checksum >>= 8;
		g_msg.checksum -= g_msg.char_in;
		if (g_msg.checksum != 0)
			return 0;
		_fCheckSum = 0;

		// All data packet finished, now handle it 
		_fErrorPacket = 0;
		_Handle_PacketIn();
	}
	return 1;
}

void _Read_WaitPacket()
{
	uchar in;

	if (_fReadingDatabody)
	{
		if (_fReadingChecksum == 0)
		{
			if (_Read_WaitPacket_Databody() == 0)
				goto Error;
		}
		else
		{
			if (_Read_WaitPacket_Checksum() == 0)
				goto Error;
		}
	}
	else
	{
		in = g_msg.char_in;
		switch (g_msg.packet_length)
		{
		case 1:
			if (_fReadingCmd)
			{
				if (in != P_CMD_FIRST && in != P_CMD_NORMAL)
					goto Error;
			}
			else
			{
				if (in != g_msg.sequence)
					goto Error;
				g_msg.sequence ++;
			}
			g_msg.subtype = in;
			break;

		case 2:
			g_msg.length_low = in;
			break;

		case 3:
			g_msg.data_length = in;
			g_msg.data_length <<= 8;
			g_msg.data_length += g_msg.length_low;
			if (g_msg.data_length > P_MAX_DATA_LENGTH)
				goto Error;
			if (g_msg.data_length == 0)
				_fReadingChecksum = 1;
			_fReadingDatabody = 1;
			break;
		}
		g_msg.packet_length ++;
	}
	return;

Error:
	_Handle_ErrorPacket();
}

void _Read_WaitAck()
{
	switch (g_msg.char_in)
	{
	case P_ACK:
		g_msg.status = STATUS_IDLE;
		return;

	case P_DC1:
		_fErrorPacket = 1;
		_Handle_ErrorPacket();
		return;
	}
	/* Send NAK */
	DbgPutChar(P_NAK);
}

void Rs232ProcessChar(uchar in)
{
	g_msg.char_in = in;
	switch (g_msg.status)
	{
	case STATUS_WAIT_PACKET:
		_Read_WaitPacket();
		break;

	case STATUS_IDLE:
		_Read_Idle();
		break;

	case STATUS_WAIT_ACK:
		_Read_WaitAck();
		break;
	}
}

void DoRS232(void)
{
	Rs232Init();
	while(1)
	{
		while(g_iHead != g_iTail)
		{
			Rs232ProcessChar(g_serialBuf[g_iHead]);
			g_iHead ++;
			g_iHead &= SERIAL_BUF_AND;
		}
	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩综合精品一区二区| 亚洲丝袜制服诱惑| 91色在线porny| 久久99久久久久| 亚洲黄色录像片| 久久精品日韩一区二区三区| 欧美精品乱码久久久久久| 成人免费视频视频在线观看免费| 日韩电影免费在线观看网站| 国产精品传媒视频| 久久婷婷一区二区三区| 欧美丰满一区二区免费视频| 99九九99九九九视频精品| 国产主播一区二区三区| 三级在线观看一区二区| 亚洲综合免费观看高清完整版| 国产欧美日韩视频在线观看| 精品日韩一区二区三区免费视频| 欧美综合色免费| 91日韩一区二区三区| 成人午夜短视频| 国产精品99久久久久久有的能看 | 久久精品国产亚洲5555| 一区二区三区四区国产精品| 国产精品国产三级国产aⅴ入口| 2020国产成人综合网| 91精品国产欧美一区二区成人| 在线欧美日韩精品| 一本到不卡精品视频在线观看| 成人午夜免费电影| 懂色av一区二区在线播放| 国产在线日韩欧美| 激情偷乱视频一区二区三区| 青青草国产成人av片免费| 天天综合天天做天天综合| 亚洲成a天堂v人片| 丝袜诱惑亚洲看片| 日韩中文字幕不卡| 日韩精品色哟哟| 青青草国产精品97视觉盛宴| 蜜桃久久av一区| 久久精品国产第一区二区三区| 精品综合久久久久久8888| 久久国产精品区| 国产一区视频导航| 国产99精品视频| 波多野结衣精品在线| 色综合久久综合网欧美综合网| 91看片淫黄大片一级| 欧美在线一区二区| 欧美乱妇15p| 精品国产sm最大网站免费看| 久久嫩草精品久久久精品| 国产亚洲综合在线| 亚洲特级片在线| 亚洲第一在线综合网站| 麻豆91精品91久久久的内涵| 国产美女在线观看一区| 波多野结衣中文字幕一区二区三区 | 亚洲成精国产精品女| 日韩精品成人一区二区在线| 理论电影国产精品| 国产精品羞羞答答xxdd| 99国产精品久久| 欧美三级在线看| 自拍偷在线精品自拍偷无码专区| 亚洲激情第一区| 日本成人超碰在线观看| 懂色av一区二区三区免费看| 99久久伊人久久99| 欧美精品日韩综合在线| 久久亚洲精品小早川怜子| 亚洲欧美一区二区在线观看| 夜色激情一区二区| 久久丁香综合五月国产三级网站| 丁香激情综合五月| 欧美美女激情18p| 国产午夜精品在线观看| 亚洲一区二区三区在线播放| 精品一区二区在线观看| 91麻豆文化传媒在线观看| 91麻豆精品国产91久久久久久久久 | 亚欧色一区w666天堂| 国产美女精品在线| 欧美图区在线视频| 国产亚洲综合性久久久影院| 亚洲一区二区免费视频| 国产精品一区在线观看你懂的| 欧美在线高清视频| 久久女同互慰一区二区三区| 亚洲自拍偷拍av| 国产成人8x视频一区二区| 欧美高清视频不卡网| 国产精品色噜噜| 男女男精品网站| 91极品美女在线| 国产免费久久精品| 男男视频亚洲欧美| 91行情网站电视在线观看高清版| 久久午夜羞羞影院免费观看| 午夜精品一区二区三区电影天堂| 岛国av在线一区| 精品动漫一区二区三区在线观看| 亚洲自拍偷拍av| www..com久久爱| 久久久国产一区二区三区四区小说 | 亚洲一二三四久久| 成人精品一区二区三区中文字幕| 日韩三级免费观看| 亚洲成人综合网站| 91老师片黄在线观看| 国产拍揄自揄精品视频麻豆| 麻豆精品精品国产自在97香蕉| 欧美性色综合网| 亚洲欧美日本在线| 成人性生交大片免费看视频在线| 欧美电影精品一区二区| 午夜a成v人精品| 在线免费观看日韩欧美| 亚洲欧美在线另类| 成人一区在线看| 久久久精品国产免大香伊| 蜜臂av日日欢夜夜爽一区| 欧美日韩亚洲国产综合| 伊人开心综合网| 国产网红主播福利一区二区| 日韩高清一级片| 欧美精品久久久久久久久老牛影院| 亚洲女女做受ⅹxx高潮| 99精品视频在线播放观看| 国产欧美精品一区| 国产91精品久久久久久久网曝门| xnxx国产精品| 国产美女在线精品| 国产偷国产偷精品高清尤物 | 亚洲成人免费影院| 欧美日韩一区三区四区| 亚洲观看高清完整版在线观看| 色呦呦日韩精品| 亚洲最色的网站| 欧美日韩中文另类| 午夜视频一区在线观看| 制服丝袜一区二区三区| 免费看日韩a级影片| 欧美成人一区二区三区片免费| 麻豆中文一区二区| 日韩免费高清视频| 国产一二三精品| 国产精品欧美综合在线| 99免费精品在线| 一区二区三区在线不卡| 欧美日韩免费一区二区三区| 日韩av一区二区三区| 日韩欧美国产一区二区三区| 精彩视频一区二区三区| 欧美激情综合五月色丁香| 成av人片一区二区| 亚洲亚洲人成综合网络| 日韩限制级电影在线观看| 国产在线精品国自产拍免费| 国产精品亲子乱子伦xxxx裸| 色视频成人在线观看免| 日韩精品五月天| 久久嫩草精品久久久精品一| 9l国产精品久久久久麻豆| 一区二区三区视频在线看| 欧美一卡2卡三卡4卡5免费| 国产伦精品一区二区三区免费迷| 国产精品色一区二区三区| 欧美亚洲图片小说| 精品一区在线看| 国产精品久久久久婷婷| 欧美日韩激情一区二区三区| 国产麻豆视频一区二区| 亚洲日本成人在线观看| 日韩丝袜情趣美女图片| 不卡的av中国片| 青青草视频一区| 亚洲视频在线观看三级| 日韩视频永久免费| 99久久婷婷国产综合精品| 日本亚洲电影天堂| 亚洲欧美一区二区视频| 欧美一区二区播放| 91免费版在线| 精品一区二区在线观看| 一区二区三区波多野结衣在线观看| 日韩一区二区三区电影在线观看| 成人国产精品免费网站| 日本在线不卡视频一二三区| 中文字幕一区二区三区在线观看 | 激情丁香综合五月| 亚洲激情自拍视频| 久久久精品tv| 91精品蜜臀在线一区尤物| av电影在线观看完整版一区二区| 久久国内精品自在自线400部| 亚洲免费观看高清完整版在线观看熊 | 成人国产电影网| 日本女优在线视频一区二区 |