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

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

?? bootloader.cpp

?? PIC18F1320 bootloader. This a port of the PIC16F87x bootloader to the PIC18F1320. Project includes M
?? CPP
字號:

#include "Bootloader.h"
#include <stdio.h>	//for sprintf
//#include <fstream.h>

#define PAUSE 60


Bootloader::Bootloader()
{
	Programming = 0;
	Progress = 0;
	cancelled = 0;
	major_address = 0;
	sprintf(Status, "");
}

char *Bootloader::GetStatus()
{
	return Status;
}
int Bootloader::IsProgramming()
{
	return Programming;
}

int Bootloader::GetPercent()
{
	return Progress;
}

void Bootloader::SetComPort(ComPort *port)
{
	comPort = port;
}

void Bootloader::SetFilename(char *filename)
{
	strcpy(firmware_filename, filename);
}


int Bootloader::hexchartoint(char val)
{
	int num = 0;
    switch(val)
    {
    case 'F': num = 15; break;
    case 'E': num = 14; break;
    case 'D': num = 13; break;
    case 'C': num = 12; break;
    case 'B': num = 11; break;
    case 'A': num = 10; break;
    default: if(val >= '0' && val <= '9') num = val - 0x30; break;
    };
	return num;
}

int Bootloader::SendBuffer(char *buf)
{
//	UpdateData(TRUE);
	unsigned char SendBuf[256];
	int checksum = 0;
	int SendLength = 0;


	int address = 0;
	int i, j;

	if(buf[7] == '0' && buf[8] == '4')	//Linear Address Record
	{
		i = hexchartoint(buf[9]) * 16 + hexchartoint(buf[10]);
		j = hexchartoint(buf[11]) * 16 + hexchartoint(buf[12]);
		//note that the address is stored in the hex file as low byte, high byte
		major_address = (j*256 + i) * 0x100;	
		//the configuration word is at 0x300000

		//we don't need to send anything here.
		return 1;
	}
	if(buf[7] == '0' && buf[8] == '1')	//End of File Record
	{
		//we don't need to send anything here.
		return 1;
	}
	if(buf[7] == '0' && buf[8] == '2')	//Segment Address Record
	{
		//we don't need to send anything here.
		return 1;
	}

	//sends the buffer to the serial port after parsing the data out
	if(buf[7] == '0' && buf[8] == '0')
	{
		i = hexchartoint(buf[3]) * 16 + hexchartoint(buf[4]);
		j = hexchartoint(buf[5]) * 16 + hexchartoint(buf[6]);
		address = (i*256 + j); // /2;

		SendBuf[0] = WRITE_COMMAND; //write instruction
		SendBuf[1] = (unsigned char)(((address + major_address) >> 16) & 0xff);  //upper byte
		SendBuf[2] = (unsigned char)(((address + major_address) >> 8) & 0xff);	//high bytes
		SendBuf[3] = (unsigned char)((address + major_address) & 0xff);			//low byte

		int numdata = hexchartoint(buf[1]) * 16 + hexchartoint(buf[2]);
		SendBuf[4] = (numdata & 0xff);

		int iterations = numdata/2;
		//if(numdata & 0x01)	//if it is odd, it won't divide right
		//	iterations++;
		for(int n = 0; n < iterations; n++)
		{
			int pointer = n*4;
			i = hexchartoint(buf[9 + pointer]) * 16 + hexchartoint(buf[10 + pointer]);
			SendBuf[6 + n*2] = (unsigned char)(i & 0xff);
			checksum += i;

			i = hexchartoint(buf[11 + pointer]) * 16 + hexchartoint(buf[12 + pointer]);
			SendBuf[7 + n*2] = (unsigned char)(i & 0xff);
			checksum += i;

		}
		SendBuf[5] = (unsigned char)(checksum & 0xff);
		SendLength = 6 + numdata;
	}
	//0x0EE0 * 2 = 0x1DC0
	//don't write over boot loader or eeprom
	if((address + major_address) >= (0x0EE0 * 2) && (address + major_address) <= (0x2000) )		
		return 1;


	//Sleep(PAUSE);

	//try to send SendBuf up to 5 times.
	for(int tries = 0; tries < 5; tries++)
	{

		unsigned char byte;
		while(comPort->DataWaiting() > 0)
			comPort->Read(&byte, 1);

		FILE *logfile;
		logfile = fopen("log.txt", "a");
		for(int e = 0; e < SendLength; e++)
		{
			fprintf(logfile, "%02x ", SendBuf[e]);
			fflush(logfile);
		}
		fprintf(logfile, "\n");


		for(int r = 0; r < SendLength; r++)
		{
			comPort->Write(SendBuf + r, 1);
			Sleep(10);	//this MUST be greater then 2ms to work
		}

		unsigned char response_buffer[255];
		unsigned char *response = (unsigned char *)&response_buffer;
		
		Clock clock; //start the clock
		clock.Start();
		int recieved = 0;
		int found = 0;
		int bad_data = false;

		unsigned char character;

		while((clock.Elapsed() < (PAUSE*2.0f/1000.0f)) && !found && !bad_data)
		{
			int data_waiting = comPort->DataWaiting();
			while(data_waiting > 0)
			{
				data_waiting--;

				comPort->Read((unsigned char *)&character, 1); //read a byte
				recieved++;
				*response = character;
				response++;
				if(character == DATA_BAD) //data bad byte
				{
					bad_data = true; //get out of the while loop
					break;
				}
				if(recieved == 2)
				{
					found = TRUE;
				}
			}
			Sleep(5);
		}

		fclose(logfile);
		if(bad_data)
			continue;

		if(response - ((unsigned char *)&response_buffer) < 2)
			continue;  //it timed out so try again

		if((response_buffer[0] == (unsigned char)DATA_OK) && (response_buffer[1] == (unsigned char)WRITE_OK))
		{
			return 1;
		}
	}//end for tries
	return 0;

}

//Update is designed to run in it's own thread
void Bootloader::Update()
{
	FILE *hexfile;
	if((hexfile = fopen(firmware_filename, "r")) == NULL)
	{
		Progress = 0;
		return;
	}
	if(feof(hexfile))
	{
		//there was a problem opening the file
		Progress = 0;
		return ;
	}
	fseek(hexfile, 0, SEEK_SET);
	char buff[256];
	int line = 0;

	//count the number of lines
	while(!feof(hexfile))
	{
		if( fgets( buff, 255, hexfile ) == NULL)
			break;
		line++;
	}

	int max_lines = line;
	fclose( hexfile );

	hexfile = fopen(firmware_filename, "r");

	fseek(hexfile, 0, SEEK_SET);

	int Canceled = false;
	int Waiting = true;
	Programming = false;

	unsigned char rbyte;
	line = 0;
	major_address = 0;

	Clock clock; //start the clock
	clock.Start();
	while(Waiting && !cancelled)
	{
		strcpy(Status, "Waiting for Hardware Reset.");
		//send a byte
		unsigned char data2 = IDENT;
		comPort->Write(&data2, 1);
		Sleep(5);
		if(comPort->DataWaiting() > 0)
		{
			comPort->Read(&rbyte, 1);
			if(rbyte == IDACK)
			{
				Waiting = false;
				Programming = true;
			}
		}
		Sleep(5);
		Progress = 0;

	}
	while(Programming)
	{
		Sleep(10);	//programming should take 2ms+2ms=4ms round up to 10ms
		sprintf(Status, "Writing..  %d%%", Progress);

		char buffer[256];
		unsigned char done = (unsigned char)BL_DONE;

		if( fgets( buffer, 255, hexfile ) == NULL)
		{
			Programming = false;
		}

		if(strlen(buffer) > 0)
		{
			if(buffer[0] == ':')
			{
				line++;
				Progress = (int)((float)line/(float)max_lines * 100.0f);
				if(buffer[7] == '0' && buffer[8] == '1')
				{
					comPort->Write(&done, 1);	//send the DONE character
					strcpy(Status, "Programming complete!");
					fclose( hexfile);
				}
				else
				{
					if(SendBuffer(buffer) == 0)
					{
						Programming = false;
						Canceled = true;
						fclose(hexfile);
						Progress = 0;
						strcpy(Status, "Error durring programming.");
					}
				}

			}
			if(feof(hexfile))
			{
				comPort->Write(&done, 1);	//send the DONE character
				strcpy(Status, "Programming complete!");

				Programming = false;
				Canceled = false;
				fclose( hexfile);
			}
		}
		else
		{
			//empty line
		}

	}
	Progress = 0;
	Programming = false;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产 欧美在线| 亚洲精品一区在线观看| 精品久久久久99| 91在线码无精品| 蜜桃视频一区二区三区| 国产精品白丝在线| 日韩一级免费一区| 色视频一区二区| 国产成人在线视频播放| 性久久久久久久久| 91在线免费看| 成人综合在线观看| 亚洲视频一区二区在线| 久久嫩草精品久久久精品一| 欧美日韩高清一区二区三区| 国产一本一道久久香蕉| 丝袜脚交一区二区| 一区二区三区免费| 欧美不卡视频一区| 91精品久久久久久久91蜜桃| 欧美性色黄大片| 懂色av一区二区夜夜嗨| 激情偷乱视频一区二区三区| 亚洲国产aⅴ成人精品无吗| 91黄色激情网站| 成人精品视频一区二区三区 | 久久男人中文字幕资源站| 欧美人体做爰大胆视频| 欧美午夜影院一区| 色狠狠色狠狠综合| 91久久免费观看| 一本久道久久综合中文字幕| 91久久精品国产91性色tv| www.久久久久久久久| 成人美女视频在线观看| 99精品国产热久久91蜜凸| 风间由美一区二区av101| 亚洲精品高清视频在线观看| 国产欧美日韩中文久久| 国产精品成人一区二区三区夜夜夜| 欧美成人猛片aaaaaaa| 日韩色视频在线观看| 日韩欧美精品在线| 久久综合色8888| 日韩欧美综合一区| 久久久久国产精品人| 国产精品视频一二| 国产偷v国产偷v亚洲高清| 国产精品网站在线观看| 亚洲乱码国产乱码精品精可以看| 欧美一卡2卡三卡4卡5免费| www国产精品av| 国产精品久久久久久户外露出| 一区二区三区资源| 免费欧美日韩国产三级电影| 国产91丝袜在线播放九色| 色综合夜色一区| 91精品国产综合久久久久| 欧美日韩的一区二区| 精品日韩一区二区三区| 亚洲国产经典视频| 亚洲大片在线观看| 国产一区二区日韩精品| 99精品国产热久久91蜜凸| 欧美一区二区三区小说| 国产精品久久久久三级| 日韩一级二级三级| 日韩理论在线观看| 久久99国产精品久久| 亚洲黄色片在线观看| 久久99蜜桃精品| 成人av网在线| 欧美电影免费观看高清完整版在线观看| 久久久久国产一区二区三区四区| 欧美r级电影在线观看| 亚洲人成在线观看一区二区| 看片的网站亚洲| 91香蕉视频在线| 精品国产伦一区二区三区免费 | 国产精品国产自产拍在线| 亚洲视频中文字幕| 国产成人啪免费观看软件| 欧美精品v国产精品v日韩精品| 国产精品人成在线观看免费| 亚洲丝袜另类动漫二区| 国产成人午夜精品影院观看视频 | 丝袜诱惑制服诱惑色一区在线观看| 亚洲宅男天堂在线观看无病毒| 国产精品中文字幕日韩精品| 欧美日韩一卡二卡| 亚洲色图制服诱惑 | 亚洲天堂2014| 成人午夜免费视频| 久久免费看少妇高潮| 一区二区三区日韩欧美精品| 成人午夜视频免费看| 精品国产一区二区三区久久久蜜月| 亚洲综合网站在线观看| 国产精品亚洲综合一区在线观看| 久久奇米777| 91香蕉国产在线观看软件| 天堂成人国产精品一区| 精品美女一区二区三区| 99久久精品一区| 日韩经典中文字幕一区| 亚洲国产精品传媒在线观看| 日本福利一区二区| 美国十次综合导航| 亚洲图片激情小说| 日韩一级免费观看| 色拍拍在线精品视频8848| 青草av.久久免费一区| 中文字幕一区二区三中文字幕| 欧美精品亚洲二区| 丁香一区二区三区| 日韩精品成人一区二区在线| 亚洲色图清纯唯美| 欧美xxxxx牲另类人与| 91亚洲午夜精品久久久久久| 蜜桃视频在线一区| 亚洲一区二区三区视频在线播放| 国产亚洲欧美一级| 欧美人牲a欧美精品| 91视视频在线直接观看在线看网页在线看| 五月天欧美精品| 18成人在线视频| 久久午夜免费电影| 8v天堂国产在线一区二区| 成人动漫中文字幕| 国产真实精品久久二三区| 午夜视频一区二区| 亚洲女人****多毛耸耸8| 久久精品亚洲精品国产欧美kt∨| 欧美日韩高清不卡| 在线视频你懂得一区二区三区| 国产高清精品网站| 激情国产一区二区| 亚洲成人免费在线| 一区二区三国产精华液| 国产精品久久夜| 国产亚洲人成网站| www国产精品av| 久久伊99综合婷婷久久伊| 在线综合视频播放| 欧美电影一区二区| 欧美日本在线一区| 欧美无人高清视频在线观看| 91日韩在线专区| 91亚洲国产成人精品一区二区三| 岛国精品在线观看| 国产成人av电影在线播放| 国产精品18久久久久| 国产美女主播视频一区| 国产精品综合在线视频| 国产精品自拍av| 成人国产精品免费| av电影天堂一区二区在线| 91视频一区二区三区| 日本韩国精品一区二区在线观看| 色网综合在线观看| 在线观看亚洲一区| 欧美日韩国产高清一区二区| 欧美一区二区三区婷婷月色| 日韩精品一区二区三区swag| 久久香蕉国产线看观看99| 国产精品妹子av| 一区二区三区在线看| 日韩精品一二三区| 加勒比av一区二区| 成人性生交大片| 在线免费观看日韩欧美| 欧美日韩国产123区| 久久久综合视频| 亚洲日本免费电影| 亚洲成av人影院在线观看网| 看片网站欧美日韩| eeuss鲁一区二区三区| 欧美日韩一区精品| www激情久久| 亚洲精品国产品国语在线app| 首页国产欧美日韩丝袜| 国产在线一区二区| 色综合色综合色综合| 欧美一二三四在线| 久久久www成人免费无遮挡大片| 日韩毛片一二三区| 午夜精品成人在线视频| 美女脱光内衣内裤视频久久影院| 国产精品99久| 91搞黄在线观看| 精品国产亚洲在线| 日本一区二区三区视频视频| 亚洲欧美日韩中文播放| 久久精品国产亚洲一区二区三区| 99久久精品99国产精品| 欧美一区二区三区在线视频| 亚洲人成在线观看一区二区| 国产伦精品一区二区三区视频青涩| 日本精品视频一区二区| 久久精品网站免费观看|