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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? AVR ISO9141 OBDII Souce code
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*************************************************************************
**  AVR ISO 9141/14230-2 Interface
**  by Michael Wolf
**
**  Released under GNU GENERAL PUBLIC LICENSE
**
**  contact: webmaster@mictronics.de
**  homepage: www.mictronics.de
**
**  Revision History
**
**  when         what  	who			why
**
**  Used develompent tools (download @ www.avrfreaks.net):
**  Programmers Notepad v2.0.5.32
**  WinAVR (GCC) 3.4.1
**  AvrStudio4 for simulating and debugging
**
**  [           Legend:          ]
**  [ + Added feature            ]
**  [ * Improved/changed feature ]
**  [ - Bug fixed (I hope)       ]
**
**	ToDo:
**
**************************************************************************/
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <avr/wdt.h>
#include "main.h"
#include "iso.h"

/* 
**--------------------------------------------------------------------------- 
** 
** Abstract: Main routine
** 
** 
** Parameters: none
** 
** 
** Returns: NULL
** 
** 
**--------------------------------------------------------------------------- 
*/ 
int main(void)
{
	wdt_disable();	// make sure the watchdog is not running
	UBRRH = UART_BAUDRATE>>8;		// set baud rate
	UBRRL = UART_BAUDRATE;
	UCSRB =((1<<RXCIE)|(1<<RXEN)|(1<<TXEN));	// enable Rx & Tx, enable Rx interrupt
	UCSRC =((1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0));	// config USART; 8N1
	serial_msg_pntr = &serial_msg_buf[0];  // init serial msg pointer
  
  iso_glob.uart_n_baud = N_10400;  // set baud rate to 10,4kBaud	
	iso_hardware_init();  // init ISO hardware
	iso_uart_init();  // init ISO software UART
	
  ident();	// send identification to terminal
	serial_putc('>');  // send initial command prompt
  
  sei();  // enable interrupts

	for(;;)
	{
		while( CHECKBIT(parameter_bits, MON_RX) || CHECKBIT(parameter_bits, MON_TX) )
		{
			unsigned char iso_msg_buf[260];  // ISO message buffer
			unsigned char *iso_msg_pntr = &iso_msg_buf[0];  //  msg pointer
			unsigned int recv_nbytes;  // byte counter		
		  
			recv_nbytes = iso_recv_msg(iso_msg_buf);	// get ISO message

			if( !(recv_nbytes & 0x8000) ) // proceed only with no errors
			{
				iso_msg_pntr = &iso_msg_buf[0];
			
				// check for respond from correct addr or monitor all mode
				if( (CHECKBIT(parameter_bits, MON_RX) && CHECKBIT(parameter_bits, MON_TX))
				    || 
						((mon_receiver == *(iso_msg_pntr+1)) && CHECKBIT(parameter_bits, MON_RX) )
						||
						((mon_transmitter == *(iso_msg_pntr+2)) && CHECKBIT(parameter_bits, MON_TX) )
					)
				{
/*        
					if( !CHECKBIT(parameter_bits, HEADER) )
					{ // surpess CRC and header bytes output
						recv_nbytes -= 4; 
						iso_msg_pntr += 3;
					}

					if(CHECKBIT(parameter_bits, PACKED))
					{ // check respond CRC
						if( *(iso_msg_pntr+(recv_nbytes-1)) == iso_checksum(iso_msg_buf, recv_nbytes-1) )
							serial_putc(recv_nbytes);  // length byte 
						else
							serial_putc(recv_nbytes&0x8000);  // length byte with error indicator set
					}
*/			
					// output response data
					for(;recv_nbytes > 0; --recv_nbytes)
					{
						if(CHECKBIT(parameter_bits, PACKED))
							serial_putc(*iso_msg_pntr++);  // data byte
						else
						{
							serial_put_byte2ascii(*iso_msg_pntr++);
							serial_putc(' ');
						}
					}
			
					if(!CHECKBIT(parameter_bits, PACKED))
					{// formated output with CR and optional LF
						serial_putc('\r');
						if(CHECKBIT(parameter_bits, LINEFEED)) serial_putc('\n');
					}					
					
				}  // end if valid monitoring addr
			} // end if message recv
		} // end while monitoring active
	}	// endless loop
	
	return 0;
}


/* 
**--------------------------------------------------------------------------- 
** 
** Abstract: Processing of received serial string
** 
** Parameters: none
** 
** Returns: 0 = unknown
**          1 = OK
**          2 = bus busy
**          3 = bus error
**          4 = data error
**          5 = no data
**          6 = data ( also to surpress any other output )
** 
**--------------------------------------------------------------------------- 
*/ 
char serial_processing(void)
{
	signed char *serial_msg_pntr = strlwr(serial_msg_buf);  // convert string to lower
	signed char serial_msg_len = strlen(serial_msg_buf);  // get string length
  signed char *var_pntr = 0;  // point to different variables

	if( (*(serial_msg_pntr)=='a') && (*(serial_msg_pntr+1)=='t'))  // check for "at" or hex
	{  // is AT command
		// AT command found
		switch( *(serial_msg_pntr+2) )  // switch on "at" command
		{
			case 'a':  // auto receive address on
				if(*(serial_msg_pntr+3) == 'r')	SETBIT(parameter_bits, AUTO_RECV);
				if( iso_req_header[0] & 0x80)  // check for functional or physical addr
					auto_recv_addr = iso_req_header[2]; // use physical recv addr
				else if( iso_req_header[0] & 0xC0)
					auto_recv_addr = iso_req_header[1]+1;  // use funct recv addr
				return 1;
		
			case 'd':  // set defaults
				parameter_bits = ECHO|LINEFEED|RESPONSE|AUTO_RECV;
				timeout_multiplier = 0x19;	// set default timeout to 4ms * 25 = 100ms
				iso_req_header[0] = 0xC1;  // functional addressing
				iso_req_header[1] = 0x33;  // tester addr
				iso_req_header[2] = 0xF1;  // target addr
  			return 1;
		
			case 'e':  // echo on/off
				if(*(serial_msg_pntr+3) == '1')
					SETBIT(parameter_bits, ECHO);
				else
					CLEARBIT(parameter_bits, ECHO);
				return 1;
			
			case 'i':  // send ident string
				ident();
				return 1;

			case 'l': // linefeed on/off (only for data strings)
				if(*(serial_msg_pntr+3) == '1')
					SETBIT(parameter_bits, LINEFEED);
				else
					CLEARBIT(parameter_bits, LINEFEED);
				return 1;			

			case 'h': // show headers on/off
				if(*(serial_msg_pntr+3) == '1')
					SETBIT(parameter_bits, HEADER);
				else
					CLEARBIT(parameter_bits, HEADER);
				return 1;

			case 'r': // show response on/off
				if(*(serial_msg_pntr+3) == '1')
					SETBIT(parameter_bits, RESPONSE);
				else
					CLEARBIT(parameter_bits, RESPONSE);
				return 1;

			case 'f': // send formated
				if(*(serial_msg_pntr+3) == 'd')
					CLEARBIT(parameter_bits, PACKED);
				return 1;

			case 'p': // send packed data
				if(*(serial_msg_pntr+3) == 'd')
					SETBIT(parameter_bits, PACKED);
				return 1;

			case 'm':  // switch into monitoring mode
				switch(*(serial_msg_pntr+3))
				{
					case 'a':
						SETBIT(parameter_bits, MON_RX);  // monitor all
						SETBIT(parameter_bits, MON_TX);
						return 6; // return, no following parameter
					
					case 'r':  // monitor only receiver addr
						SETBIT(parameter_bits, MON_RX);  // monitor receiver only
						CLEARBIT(parameter_bits, MON_TX);
						var_pntr = &mon_receiver;
						break;  // get following parameter					

					case 't':  // monitor only transmitter addr
						CLEARBIT(parameter_bits, MON_RX);
						SETBIT(parameter_bits, MON_TX);  // monitor transmitter only
						var_pntr = &mon_transmitter;
						break;  // get following parameter		
				}
				if(
						isxdigit(*(serial_msg_pntr+4)) && isxdigit(*(serial_msg_pntr+5)) 
						&&	( serial_msg_len == 6)
					)  // proceed when next two chars are hex
					{
					  // make 1 byte hex from 2 chars ASCII and save
						*var_pntr = ascii2byte(serial_msg_pntr+4);
						return 6;
					}

			case 's': // commands SH,SR or ST
				if(	isxdigit(*(serial_msg_pntr+4)) && isxdigit(*(serial_msg_pntr+5)) )
				{  // proceed when next two chars are hex
					switch(*(serial_msg_pntr+3))
					{
						case 'h':  // set header bytes
							if(
									isxdigit(*(serial_msg_pntr+6)) && isxdigit(*(serial_msg_pntr+7)) 
									&&	isxdigit(*(serial_msg_pntr+8)) && isxdigit(*(serial_msg_pntr+9)) 
									&&	( serial_msg_len == 10)
								)  // proceed when next four chars are hex
								{
								  // make 3 byte hex from 6 chars ASCII and save
									iso_req_header[0]=ascii2byte(serial_msg_pntr+4);
									iso_req_header[1]=ascii2byte(serial_msg_pntr+6);
									iso_req_header[2]=ascii2byte(serial_msg_pntr+8);
									if( CHECKBIT(parameter_bits, AUTO_RECV) )
									{
										if( iso_req_header[0] & 0x04)  // check for functional or physical addr
											auto_recv_addr = iso_req_header[2]; // use physical recv addr
										else
											auto_recv_addr = iso_req_header[1]+1;  // use funct recv addr
									}
									return 1;
								}
								break;
					
						case 't':  // set response timeout multipler
								var_pntr = &timeout_multiplier;
								break;
								
						case 'r':  // set receive address and manual receive mode
								var_pntr = &auto_recv_addr;
								CLEARBIT(parameter_bits, AUTO_RECV);
								break;
					} // end switch char 3
					if(serial_msg_len == 6) 
					{
						*var_pntr =ascii2byte(serial_msg_pntr+4);
						if (timeout_multiplier < 8)  timeout_multiplier = 8;  // set multiplier for minimum of 32ms timout
						return 1;
					}
				} // end if char 4 and 5 isxdigit
				return 0;

			case 'z':  // reset all and restart device
				wdt_enable(WDTO_15MS);	// enable watdog timeout 15ms
				for(;;);	// wait for watchdog reset
		
			default:  // return error, unknown command
				return 0;		
		}

	}
  else
	{  // is OBD hex command
		// no AT found, must be HEX code
		if( (serial_msg_len & 1) || (serial_msg_len > 16) )  // check for "even" message lenght
			return 0;                                           // and maximum of 8 data bytes

		serial_msg_len /= 2;  // use half the string lenght for byte count

		while( *serial_msg_pntr )  // check all chars are valid hex chars
		{
			if(!isxdigit(*serial_msg_pntr))
				return 0;
			++serial_msg_pntr;
		}
		serial_msg_pntr = &serial_msg_buf[0];  // reset pointer
	
	  unsigned char iso_msg_buf[260];  // ISO message to be send
		unsigned char *iso_msg_pntr = &iso_msg_buf[0];  //  msg pointer
		unsigned char cnt;  // byte counter

		// convert serial message from 2 byte ASCII to 1 byte binary and store
		for(cnt = 0; cnt < serial_msg_len; ++cnt)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品国产一区二区三区| 久久se这里有精品| 欧美电影免费观看完整版| 丰满岳乱妇一区二区三区| 日韩激情一二三区| 亚洲黄色小视频| 国产精品免费av| 精品少妇一区二区三区在线视频 | 日韩精品高清不卡| 中文字幕乱码一区二区免费| 欧美日韩免费不卡视频一区二区三区| 粉嫩一区二区三区在线看| 青娱乐精品在线视频| 亚洲激情自拍视频| 国产精品欧美经典| 久久久国产精品不卡| 91精品国产aⅴ一区二区| 色综合av在线| 99久久国产免费看| 国产麻豆精品一区二区| 久久精品免费看| 日本一不卡视频| 亚洲成人激情社区| 一区二区三区四区不卡在线| 国产精品乱子久久久久| 日本一区二区高清| 久久夜色精品一区| 日韩一区二区三区在线| 欧美高清视频在线高清观看mv色露露十八 | 日韩色在线观看| 欧洲一区在线电影| 色呦呦一区二区三区| 粉嫩嫩av羞羞动漫久久久 | 国产精品理伦片| 精品国产伦一区二区三区观看方式| 欧美日韩黄色一区二区| 日本精品一区二区三区高清| 91香蕉视频黄| 91论坛在线播放| 色综合久久综合中文综合网| 99在线精品观看| 色欧美片视频在线观看| 91麻豆国产福利在线观看| 一本色道久久综合亚洲aⅴ蜜桃| aaa欧美色吧激情视频| 97久久超碰国产精品| 91福利资源站| 欧美精品vⅰdeose4hd| 666欧美在线视频| 精品少妇一区二区三区免费观看| 精品欧美久久久| 久久精品无码一区二区三区| 国产欧美一区二区精品久导航 | 亚洲一区视频在线| 爽好久久久欧美精品| 久久99精品国产麻豆不卡| 国产综合色在线视频区| 成人小视频免费观看| 色婷婷国产精品综合在线观看| 91久久精品网| 日韩一区二区三区在线| 久久久久久久久一| 中文字幕一区二区日韩精品绯色| 亚洲最快最全在线视频| 日本成人中文字幕在线视频| 九九九精品视频| 99这里都是精品| 欧美日韩国产高清一区二区| 日韩欧美国产三级电影视频| 国产精品天美传媒沈樵| 亚洲大型综合色站| 狠狠狠色丁香婷婷综合激情 | 欧美日韩精品高清| xf在线a精品一区二区视频网站| 国产精品不卡在线| 亚洲成av人片在线观看| 国内不卡的二区三区中文字幕 | 中文一区在线播放| 亚洲一二三区在线观看| 国产自产高清不卡| 色美美综合视频| 2014亚洲片线观看视频免费| 亚洲人成网站影音先锋播放| 青青草国产成人av片免费| 粉嫩蜜臀av国产精品网站| 精品婷婷伊人一区三区三| 国产丝袜在线精品| 午夜天堂影视香蕉久久| 丰满亚洲少妇av| 日韩一区二区精品| 玉米视频成人免费看| 国产在线视频不卡二| 欧美亚洲国产怡红院影院| 久久久美女毛片| 日韩制服丝袜先锋影音| 成人白浆超碰人人人人| 日韩视频在线观看一区二区| 亚洲欧美另类小说| 国产成人亚洲综合a∨婷婷| 欧美日韩美女一区二区| 国产视频视频一区| 琪琪一区二区三区| 在线一区二区视频| 欧美激情一区二区三区全黄| 日本女优在线视频一区二区| 在线观看欧美黄色| 国产精品美日韩| 国模大尺度一区二区三区| 欧美蜜桃一区二区三区| 亚洲天堂av老司机| 成人影视亚洲图片在线| 欧美大度的电影原声| 香港成人在线视频| 91在线视频免费观看| 国产婷婷精品av在线| 精品一二线国产| 欧美日韩国产另类一区| 亚洲综合另类小说| 91在线视频免费91| 国产精品三级久久久久三级| 国产传媒一区在线| 久久嫩草精品久久久精品| 免费看黄色91| 日韩一区二区三区高清免费看看| 亚洲国产日产av| 日本二三区不卡| 日韩理论片一区二区| 高清shemale亚洲人妖| 久久久九九九九| 精品无人码麻豆乱码1区2区| 日韩精品在线一区| 伦理电影国产精品| 日韩一区二区影院| 麻豆精品视频在线观看免费| 欧美一区二区三区视频免费播放 | 成人免费毛片app| 亚洲国产成人一区二区三区| 高清成人免费视频| 国产精品美女久久久久av爽李琼| 丁香婷婷深情五月亚洲| 亚洲欧洲精品一区二区三区| 99re66热这里只有精品3直播 | 欧美va天堂va视频va在线| 麻豆一区二区三区| 精品对白一区国产伦| 国产精品一区二区在线播放 | 日韩成人精品视频| 欧美一区二区三区四区五区 | 欧洲亚洲精品在线| 婷婷久久综合九色国产成人| 日韩视频永久免费| 国产 日韩 欧美大片| 国产精品高潮呻吟| 日本高清不卡在线观看| 亚洲va韩国va欧美va| 欧美一区二区私人影院日本| 久久69国产一区二区蜜臀 | 日本 国产 欧美色综合| 精品国免费一区二区三区| 国产高清久久久| 亚洲色图视频网站| 欧美午夜电影一区| 久久国产尿小便嘘嘘尿| 日本一区二区视频在线观看| 91伊人久久大香线蕉| 五月天亚洲精品| 欧美精品一区二区三区高清aⅴ | 成人一区二区三区中文字幕| 亚洲欧美另类图片小说| 欧美一级久久久久久久大片| 国产精品99精品久久免费| ...xxx性欧美| 7799精品视频| 成人午夜av在线| 亚洲精品国产a久久久久久| 欧美一区二区在线视频| av一区二区三区黑人| 日韩制服丝袜先锋影音| 国产欧美日韩精品一区| 欧美日韩色综合| 国产成人高清视频| 亚洲最新在线观看| 国产香蕉久久精品综合网| 91美女在线看| 激情六月婷婷综合| 亚洲一区在线播放| 中文乱码免费一区二区| 欧美另类久久久品| 99re8在线精品视频免费播放| 奇米色777欧美一区二区| 国产精品久久久久久久浪潮网站| 日韩一区二区三区观看| 日本韩国精品一区二区在线观看| 久久国内精品视频| 亚洲综合免费观看高清完整版在线| 久久久久久久综合日本| 欧美一区二区三区爱爱| 欧洲视频一区二区| 成人在线一区二区三区| 久久精品国产一区二区三区免费看|