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

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

?? terminal.c

?? can controller source code
?? C
字號:
/******************************************************************************
 * Copyright (C) 2005 Martin THOMAS, Kaiserslautern, Germany
 * <eversmith@heizung-thomas.de>
 * http://www.siwawi.arubi.uni-kl.de/avr_projects
 *****************************************************************************
 *
 * File    : terminal.c
 * Version : 0.9
 * 
 * Summary : Terminal
 *
 *****************************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <avr/pgmspace.h>

#include "termio.h"
#include "terminal.h"

#include "debughelper.h"
#include "gpio.h"
#include "mcp2515.h"

#define CEOS		'\0'
#define CENTER		'\r'
#define CNEWLINE	'\n'
#define CBS			'\b'
#define CBLANK		' '

#define CMAXCL			50
#define strncmp_flash(sram,sflash,n) strncmp_P(sram,PSTR(sflash),n)

#define GET_TERMSTRING_STATE_INIT    (0)
#define GET_TERMSTRING_STATE_SAMPLE  (1)
#define GET_TERMSTRING_STATE_RETURN  (2)
#define GET_TERMSTRING_STATE_BREAK   (3)

uint8_t gTimedSend = CANAUTOOFF;

static void ShowHelp(void)
{
	term_puts_P("exit - exit from shell\n");
	term_puts_P("show sys - print system values\n");
	term_puts_P("led on|off - all LEDs on/off\n");
	term_puts_P("led toogle num - toogle LED num (1-3)\n");
	term_puts_P("mcp stat - show mcp status byte\n");
	term_puts_P("mcp error - show mcp error counters and error flag\n");
	term_puts_P("can read - print all available messages\n");
	term_puts_P("can send ext|std num - send can mesg std. or extended with 3rd byte=num\n");
	term_puts_P("can timed on|off - (de)activte sending messages (to debug receiver)\n");
	term_puts_P("can auto on|off - (de)activte autoprocessing of incoming messages\n\n");

}

static void DumpConfigValues(void)
{
	term_puts_P("Config-Dump :\n");
	term_puts_P("Auto Processing of CAN-Message: ");
	if (gCANAutoProcess) {
		term_puts_P("On");
	}
	else {
		term_puts_P("Off");
	}
	term_puts_P("\n");
	
	term_puts_P("Auto Send of CAN-Message: ");
	(gTimedSend) ? term_puts_P("On") : term_puts_P("Off");
	term_puts_P("\n");
}

static void GetConsoleString(uint8_t *state, char* s, uint8_t mxc)
{
	static uint8_t len; // current length
	
	uint16_t getcres;
	uint8_t c;
	
	if (*state == GET_TERMSTRING_STATE_INIT ) {
		*state = GET_TERMSTRING_STATE_SAMPLE;
		s[0] = CEOS;
		len = 0;
	}

	getcres = term_getc();
		
	if ( (getcres & 0xff00) == 0 ) {
		// got a character
		//Debug_ByteToUart_p(PSTR("getMSB"), getcres>>8);
		//Debug_ByteToUart_p(PSTR("getLSB"), getcres & 0xff);
		c = (uint8_t) (getcres & 0x00ff);
		switch (c) {
		case CBS: 
			if (len>0) {
				s[--len]=CEOS;
				term_putc(CBS);
				term_putc(CBLANK);
				term_putc(CBS);
			}
			break;
		case CENTER: 
			s[len]=CEOS;
			// term_putc(CNEWLINE);
			*state = GET_TERMSTRING_STATE_RETURN;
			break;
		default: 
			if (len<mxc-1) {
				s[len++]=c;
				term_putc(c);
			}
			break;
		}
	}
}

static char* GetCLParmStr(char cl[], uint8_t n)
{
	uint8_t i=0, ac=0;

	// skip leading whitepaces if any
	while( (cl[i]!= CEOS) && (cl[i]==CBLANK)) i++;
	
	// go to n-th arg (0 is the command)
	for(ac=0; ac<n; ac++)
	{
		// find first character of argument
		while( (cl[i]!= CEOS) && (cl[i]!=CBLANK)) i++;
		// skip whitespaces separating arguments
		while( (cl[i]!= CEOS) && (cl[i]==CBLANK)) i++;
	}
	// return address of first character in n-th argument
	return &cl[i];
}

#define ERRUNKNOWN 2
static void TellError(uint8_t ecode)
{
	switch (ecode) {
	case (ERRUNKNOWN):
		term_puts_P("Command or Option unknown\n");
		break;
	default:
		term_puts_P("Invalid Error-Code\n");
		break;
	}
}

void CommandShell(uint8_t *state)
{
	static uint8_t cl[CMAXCL];
	static uint8_t getState;
	
	CanMessage msg;
	uint8_t i;
	// char *s;
	
	if (*state == COMMANDSHELL_MODEINIT) {
		term_puts_P("\nMTSHELL>");
		getState = GET_TERMSTRING_STATE_INIT;
		*state = COMMANDSHELL_MODERUN;
	}
	
	else if (*state == COMMANDSHELL_REDRAW) {
		term_puts_P("\nMTSHELL>");
		term_puts(cl);
		*state = COMMANDSHELL_MODERUN;
	}

	else {
		GetConsoleString(&getState,cl,CMAXCL);
	}
	
	if (getState == GET_TERMSTRING_STATE_RETURN) {

		getState = GET_TERMSTRING_STATE_INIT;
		*state = COMMANDSHELL_MODEINIT;
		
		term_put_cr();
		
		if ( !strncmp_flash(cl,"help",4) ) {
			ShowHelp();
		}
	
		else if ( !strncmp_flash(cl,"exit",4) ) {
			term_puts_P("\nShell exit\n");
			*state = COMMANDSHELL_MODEEXIT;
		}

		else if ( !strncmp_flash(cl,"show",4) ) {
			if (!strncmp_flash(GetCLParmStr(cl,1),"sys",3)) {
				DumpConfigValues();
			}
			else {
				TellError(ERRUNKNOWN);
			}
		}
		
		else if ( !strncmp_flash(cl,"led",3) ) {
			if (!strncmp_flash(GetCLParmStr(cl,1),"off",2)) {
				gpio_clear_led ( LED0 | LED1 | LED2 );
			}
			else if (!strncmp_flash(GetCLParmStr(cl,1),"on",2)) {
				gpio_set_led ( LED0 | LED1 | LED2 );
			}
			else if (!strncmp_flash(GetCLParmStr(cl,1),"toggle",1)) {
				i=atoi(GetCLParmStr(cl,2));
				if (i<4) {
					i = (1<<i);
					// Debug_ByteToUart_P("toogle",i);
					gpio_toggle_led ( i );
				}
			}
		}

		else if ( !strncmp_flash(cl,"mcp",3) ) {
			if (!strncmp_flash(GetCLParmStr(cl,1),"stat",3)) {
				Debug_ByteToUart_p(PSTR("MCP-Status-Byte"),mcp2515_readStatus());
			}
			else if (!strncmp_flash(GetCLParmStr(cl,1),"error",3)) {
				Debug_ByteToUart_p(PSTR("MCP Transmit Error Count"),
					mcp2515_readRegister(MCP_TEC));
				Debug_ByteToUart_p(PSTR("MCP Receiver Error Count"),
					mcp2515_readRegister(MCP_REC));
				Debug_ByteToUart_p(PSTR("MCP Error Flag"),
					mcp2515_readRegister(MCP_EFLG));
			}
			else TellError(ERRUNKNOWN);
		}

		else if ( !strncmp_flash(cl,"can",3) ) {
			if (!strncmp_flash(GetCLParmStr(cl,1),"read",4)) {
				while ( can_readMessage(&msg) == CAN_OK ) {
					can_dumpMessage(&msg);
				}	
			}
			else if (!strncmp_flash(GetCLParmStr(cl,1),"send",3)) {
				i=atoi(GetCLParmStr(cl,3));
				if (!strncmp_flash(GetCLParmStr(cl,2),"std",3)) {
					can_testTransmit(CAN_STDID, i);
				}
				else if (!strncmp_flash(GetCLParmStr(cl,2),"ext",3)) {
					can_testTransmit(CAN_EXTID, i);
				}
				else {
					TellError(ERRUNKNOWN);
				}
			}
			
			else if (!strncmp_flash(GetCLParmStr(cl,1),"auto",3)) {
				if (!strncmp_flash(GetCLParmStr(cl,2),"off",2)) {
					gCANAutoProcess = CANAUTOOFF;
				}
				else if (!strncmp_flash(GetCLParmStr(cl,2),"on",2)) {
					gCANAutoProcess = CANAUTOON;
				}
				else {
					TellError(ERRUNKNOWN);
				}
			}
			
			else if (!strncmp_flash(GetCLParmStr(cl,1),"timed",3)) {
				if (!strncmp_flash(GetCLParmStr(cl,2),"off",2)) {
					gTimedSend = CANAUTOOFF;
				}
				else if (!strncmp_flash(GetCLParmStr(cl,2),"on",2)) {
					gTimedSend = CANAUTOON;
				}
				else {
					TellError(ERRUNKNOWN);
				}
			}
			
			else TellError(ERRUNKNOWN);
		}
		
		else {
			TellError(ERRUNKNOWN);
		}
		
		cl[0] = CEOS;

	} // endif enter-key
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区四区五区| 国模套图日韩精品一区二区| 国产精品天美传媒| 日韩精品一区二| 久久午夜色播影院免费高清| 日韩一级免费观看| 欧美午夜影院一区| 欧美日韩高清一区二区| 欧美日韩免费一区二区三区| 欧美亚洲尤物久久| 欧美美女激情18p| 欧美一级在线免费| 欧美v国产在线一区二区三区| 日韩午夜在线观看| 精品国产亚洲在线| 国产精品区一区二区三区| 亚洲精品一区二区三区在线观看| 日韩一区二区三区四区五区六区| 日韩午夜激情免费电影| 国产日韩欧美不卡在线| 国产亚洲欧美一区在线观看| 国产精品伦一区| 亚洲色图制服诱惑| 亚洲第一精品在线| 久久99精品国产麻豆婷婷洗澡| 日韩二区三区四区| 国产精品一区二区三区99| 成人性视频免费网站| 色综合久久综合中文综合网| 欧美一区二区三区四区高清| 久久久久久免费网| 亚洲精品视频在线| 免费三级欧美电影| 91小视频免费看| 日韩欧美不卡一区| 18涩涩午夜精品.www| 日本视频在线一区| av不卡在线观看| 欧美一区二区精品| 一区二区三区欧美久久| 精品在线播放免费| 色伊人久久综合中文字幕| 精品伦理精品一区| 亚洲电影中文字幕在线观看| 国产成人免费9x9x人网站视频| 欧美丝袜丝交足nylons| 国产精品污污网站在线观看| 日韩成人一区二区三区在线观看| 成人在线视频首页| 制服丝袜日韩国产| 最新欧美精品一区二区三区| 韩日欧美一区二区三区| 欧洲国产伦久久久久久久| 欧美激情中文字幕| 久久99九九99精品| 678五月天丁香亚洲综合网| 国产精品美日韩| 久久66热re国产| 欧美日韩成人综合在线一区二区| 中文字幕一区二区5566日韩| 黄一区二区三区| 欧美一二三在线| 亚洲在线视频免费观看| 99久久久精品| 国产精品妹子av| 国产福利一区二区三区在线视频| 7777精品伊人久久久大香线蕉| 亚洲综合免费观看高清完整版 | 日韩一区精品视频| 色欧美片视频在线观看在线视频| 中文字幕在线观看不卡视频| 成人免费高清在线| 中文字幕精品一区二区精品绿巨人 | 久久精品久久久精品美女| 欧美色精品天天在线观看视频| 1024成人网| a亚洲天堂av| 国产精品久久久久毛片软件| 高清国产一区二区三区| 国产精品婷婷午夜在线观看| 福利视频网站一区二区三区| 久久精品一级爱片| 高清国产午夜精品久久久久久| 亚洲国产精品99久久久久久久久| 国产高清在线精品| 国产精品成人免费精品自在线观看| 成人黄色网址在线观看| 亚洲视频在线一区二区| 欧洲精品一区二区| 男男成人高潮片免费网站| 欧美一区二区三区免费大片| 国产一区中文字幕| 国产精品国产三级国产aⅴ中文| 91麻豆精东视频| 亚洲va欧美va人人爽午夜| 欧美一区永久视频免费观看| 国产麻豆一精品一av一免费| 国产欧美日韩三级| 色综合久久综合网欧美综合网| 亚洲一区二区偷拍精品| 日韩欧美国产电影| 国产成人自拍高清视频在线免费播放| 亚洲欧洲一区二区在线播放| 欧美日韩一区二区三区在线看| 毛片av中文字幕一区二区| 久久精品亚洲麻豆av一区二区| 丁香六月久久综合狠狠色| 自拍偷拍欧美精品| 欧美老人xxxx18| 国产mv日韩mv欧美| 一区二区三区四区中文字幕| 欧美成人女星排名| 97久久精品人人做人人爽| 日本美女一区二区三区| 国产精品国产三级国产专播品爱网 | 国产一区二区在线看| 亚洲欧美日韩中文播放| 91麻豆精品国产91久久久资源速度 | 欧美午夜精品免费| 国产精品77777| 天天综合色天天综合色h| 国产午夜三级一区二区三| 在线影院国内精品| 国产精品综合二区| 日韩在线一二三区| 中文字幕字幕中文在线中不卡视频| 88在线观看91蜜桃国自产| 色综合咪咪久久| 成人丝袜高跟foot| 麻豆精品在线看| 夜夜嗨av一区二区三区网页| 国产网红主播福利一区二区| 欧美电影一区二区三区| 99久久久无码国产精品| 国产高清在线观看免费不卡| 老司机免费视频一区二区| 午夜视频一区二区三区| 亚洲摸摸操操av| 日本一区二区三区国色天香| www国产亚洲精品久久麻豆| 555www色欧美视频| 在线观看亚洲精品| 一本大道久久a久久精品综合| 国产jizzjizz一区二区| 久久99国产精品尤物| 久久国产精品无码网站| 日韩二区三区四区| 日韩高清电影一区| 全国精品久久少妇| 日本不卡高清视频| 秋霞成人午夜伦在线观看| 午夜免费久久看| 性感美女极品91精品| 亚洲一级二级在线| 亚洲国产一区视频| 婷婷国产在线综合| 肉丝袜脚交视频一区二区| 亚洲成人手机在线| 五月天亚洲精品| 亚洲h动漫在线| 亚洲成人av在线电影| 日韩国产精品91| 免费在线观看成人| 国产一区二区网址| 国产成人午夜99999| 国产99久久久国产精品| 成人动漫中文字幕| 欧美亚洲禁片免费| 制服丝袜成人动漫| 欧美精品一区二区三区很污很色的| 久久日韩粉嫩一区二区三区| 国产日韩av一区二区| 国产精品国产馆在线真实露脸| 一区二区三区国产精品| 视频一区在线播放| 国产一区二区日韩精品| 成人综合婷婷国产精品久久 | 日韩精品一区国产麻豆| 久久―日本道色综合久久| 国产精品妹子av| 亚洲国产精品久久一线不卡| 蜜桃传媒麻豆第一区在线观看| 国产原创一区二区| 91麻豆精品秘密| 精品日韩成人av| 亚洲色图视频免费播放| 五月婷婷综合网| 丁香激情综合五月| 欧美午夜寂寞影院| 国产日韩欧美高清| 婷婷六月综合网| 国产a视频精品免费观看| 欧美日韩一区国产| 国产日韩亚洲欧美综合| 亚洲在线视频网站| 国产高清在线精品| 欧美一级高清大全免费观看| 国产精品色在线观看| 蜜臀久久99精品久久久画质超高清 | 日韩高清不卡在线|