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

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

?? uartcomm.c

?? 是上一個SMS消費機的充值機程序
?? C
字號:
//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
#include <api.h>
#include <console.h>
//#include <string.h>
//#include <ctype.h>

#define MAX_BUF_SIZE 1024

extern unsigned char gcCommMsgRow;

/*
 * 斷開連接
 */
void UART_disconnect()
{
	typ_UART_stat_word Ustat;
	
//	clr_scr();	
//	move_cursor(0,0);
//	puts("UART_receive");
//	getch();

	Ustat.l_word = UART_stat();
	if (Ustat.bits.UART_on)
	{
		UART_init(UART_OFF);
		sys_msg(SM_GOTO_SLEEP);
	}
}

/* 
 * calc checksun as tcp/ip checksun
 */
unsigned short cal_chksum(const void *addr, int len)
{      
       int nleft=len;
       int sum=0;
       unsigned short *w= (unsigned short *)addr;
       unsigned short answer=0;

       while(nleft>1)
       {       sum+=*w++;
               nleft-=2;
       }
       if( nleft==1)
       {       *(unsigned char *)(&answer)=*(unsigned char *)w;
               sum+=answer;
       }
       sum=(sum>>16)+(sum&0xffff);
       sum+=(sum>>16);
       answer=~sum;
       return answer;
}
/*
// delay subroutine:
void delay_n_ms(int mscnt) {
  	for (;mscnt > 0; mscnt--)
    		delay_1ms();
}
*/
// puts via UART
void UART_puts(unsigned char *buf, int len) {
  	for(; len > 0; len--) {
    		while(UART_send_char(*buf));
    		buf++;
  	}
}

/*
 * 握手建立連接(當作發起端)
 */
 /*
short UART_connect()
{
	typ_msg_word msg_buffer;
        typ_UART_stat_word Ustat;
	unsigned char recBuf[MAX_BUF_SIZE];
	unsigned char sendBuf[6];
	unsigned short checksum=0,recLen=0; 
		
	SPT_set(64);
	UART_disconnect();
	
	msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		
	UART_init(UART_ON | UART_232_ON | UART_8_DATA_BITS | UART_BAUD_115200);
	UART_fcntl(UART_fcntl(UART_F_INQ) | UART_F_NO_CTS);
	delay_n_ms(3);
	
	//握手數據幀: 一位的起始位:  0xBE 
        //             兩位的長度:    0x0006
        //             一位的握手數據:0xAA
        //             兩位的校驗位
        sendBuf[0] = 0xBE;
        sendBuf[1] = 0x00;
        sendBuf[2] = 0x06;
        sendBuf[3] = 0xAA;
        checksum = cal_chksum((void *)sendBuf, 4);
	sendBuf[4] = checksum >> 8;
	sendBuf[5] = checksum & 0xFF;
	UART_puts(sendBuf,6);
	
        SPT_set(64 );
        while(1)
	{
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		if (msg_buffer.bits.comm_data)
			break;
		if (msg_buffer.bits.time_out)
		{
			UART_disconnect();
			return 1;
		}
	}
	
        //握手回復幀: 一位的起始位:0xBE
        //             兩位的長度:0x0001 
        //             一位的握手數據:0x55
        //             兩位的校驗位
        memset( (void*)recBuf, 0, sizeof(recBuf) );
	do {
		recBuf[recLen++] = (unsigned char)UART_get_char();
		if( 1 == recLen && recBuf[0] != 0xBE )
			recLen = 0;
		else if ( recLen > 3 && recLen == ( (((unsigned short)recBuf[1])<<8) + recBuf[2] ) )
			break;
		else if ( recLen == 6 )
			break;
		Ustat.l_word = UART_stat();
        } while (Ustat.bits.buff_data_available);
        
        if ( recLen != 6 || recBuf[0] != 0xBE || recBuf[3] != 0x55 || cal_chksum( (unsigned short *)recBuf,recLen) )
        {
 		UART_disconnect();       
        	return 3;
        }
	
	return 0;
}
*/
/*
 * 握手建立連接(當作響應端)
 */
short UART_open()
{
	typ_msg_word msg_buffer;
        typ_UART_stat_word Ustat;
	unsigned char recBuf[MAX_BUF_SIZE];
	unsigned char sendBuf[6];
	unsigned short checksum=0,recLen=0; 
		
	SPT_set(64);
	UART_disconnect();
	
	msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
	
	UART_init(UART_ON | UART_232_ON | UART_8_DATA_BITS | UART_BAUD_115200);
	UART_fcntl(UART_fcntl(UART_F_INQ) | UART_F_NO_CTS);
	delay_n_ms(3);
	
	SPT_set(64);
/*	
	while(1)
	{
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		if (msg_buffer.bits.comm_data)
			break;
		if (msg_buffer.bits.time_out)
		{
			UART_disconnect();
			return 1;
		}
	}

        memset( (void*)recBuf,0,sizeof(recBuf) );
	do {
		recBuf[recLen++] = (unsigned char)UART_get_char();
		if( 1 == recLen && recBuf[0] != 0xBE )
			recLen = 0;
		else if ( recLen > 3 && recLen == ( (((unsigned short)recBuf[1])<<8) + recBuf[2] ) )
			break;
		else if (recLen == 6)
			break;
		Ustat.l_word = UART_stat();
        } while (Ustat.bits.buff_data_available);        
        
        if ( recLen != 6 || recBuf[0] != 0xBE || recBuf[3] != 0xAA || cal_chksum((unsigned short *)recBuf,recLen) )
        {
        	sendBuf[0] = 0xBE;
        	sendBuf[1] = 0x00;
        	sendBuf[2] = 0x06;
		sendBuf[3] = 0xFF;
		checksum = cal_chksum((void *)sendBuf, 4);
		sendBuf[4] = checksum >> 8;
		sendBuf[5] = checksum & 0xFF;
		UART_puts(sendBuf,6);
		UART_disconnect();
        	return 2;	
        }
        else
        {
        	sendBuf[0] = 0xBE;
        	sendBuf[1] = 0x00;
        	sendBuf[2] = 0x06;
		sendBuf[3] = 0x00;
		checksum = cal_chksum((void *)sendBuf, 4);
		sendBuf[4] = checksum >> 8;
		sendBuf[5] = checksum & 0xFF;
		UART_puts(sendBuf,6);
		return 0;	
	}
	*/
}

/*
 * 發送數據
 * 參數 in: sendBuf  要發送的數據區(不包括一位開始位、2位長度位和2位校驗位)
 *        : sendLen  要發送的數據區的長度(byte)
 *
 * 返回: 0 發送成功  -1 發送失敗
 */
short UART_send(const void *sendBuf, unsigned short sendLen)
{
	typ_msg_word msg_buffer;
        typ_UART_stat_word Ustat;	
	unsigned char pBuf[MAX_BUF_SIZE];
	unsigned char recBuf[MAX_BUF_SIZE];
	unsigned short checksum=0,recLen=0; 
	
	if(sendLen + 5 > MAX_BUF_SIZE)
		return -1;
	
	Ustat.l_word = UART_stat();
	if (!Ustat.bits.UART_on)
		return 1;	
	move_cursor(0,gcCommMsgRow);
	puts("發送數據...");
	if(gcCommMsgRow<6)
		gcCommMsgRow += 2;
	else
		gcCommMsgRow = 2;
	
	pBuf[0] = 0xBE;
	pBuf[1] = (sendLen+5) >> 8;
	pBuf[2] = (sendLen+5) & 0xFF;	
	
	memcpy( (void *)&pBuf[3], sendBuf, sendLen );
	
	checksum = cal_chksum( (unsigned short *)pBuf, sendLen+3);
	pBuf[sendLen+3] = checksum >> 8;
	pBuf[sendLen+4] = checksum & 0xFF;
	
	UART_puts( pBuf, sendLen+5);
	
	SPT_set(64 );	
	//等到確認數據到來
	while(1)
	{
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		if (msg_buffer.bits.comm_data)
			break;
		if (msg_buffer.bits.time_out)
			return 2;
	}
	
        memset( (void*)recBuf,0,sizeof(recBuf) );
	do {
		recBuf[recLen++] = (unsigned char)UART_get_char();
		if( 1 == recLen && recBuf[0] != 0xBE )
			recLen = 0;
		else if ( recLen > 3 && recLen == ( (((unsigned short)recBuf[1])<<8) + recBuf[2] ) )
			break;
		else if (recLen == 6)
			break;
		Ustat.l_word = UART_stat();
        } while (Ustat.bits.buff_data_available);
        
        if ( recLen != 6 || recBuf[0] != 0xBE || recBuf[3] != 0x00 || cal_chksum((unsigned short *)recBuf,recLen) )
        	return 3;
        		
	return 0;
}

/*
 * 接收數據
 * 參數 out: sendBuf  接收到的數據區(包括一位開始位、2位長度位和2位校驗位)
 *         : sendLen  接收到的數據區的長度(byte)
 *
 * 返回: 0 接收成功  -1 接收失敗
 */
short UART_receive(void *recBuf, unsigned short *recLen)
{
	typ_msg_word msg_buffer;
        typ_UART_stat_word Ustat;
        unsigned char *buf;
	unsigned char sendBuf[6];
        unsigned short checksum,recCount=0;
        short result;
	
//	clr_scr();	
//	move_cursor(0,0);
//	puts("UART_receive");
//	getch();

	Ustat.l_word = UART_stat();
	if (!Ustat.bits.UART_on)
		return 1;	 
 	move_cursor(0,gcCommMsgRow);
	puts("接收數據...");
	if(gcCommMsgRow<6)
		gcCommMsgRow += 2;
	else
		gcCommMsgRow = 2;
	
      
	SPT_set(64);  //time_out = 4s
	buf = (unsigned char *)recBuf;
	//等到數據到來
	while(1)
	{
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		if (msg_buffer.bits.comm_data)
			break;
		if (msg_buffer.bits.time_out)
			return 2;
	}
	
	//接收數據
	do {
		buf[recCount++] = (unsigned char)UART_get_char();
		if(recCount == 1 && buf[0] != 0xBE)//丟棄不是以開始位(0xBE)開始的所有數據
			recCount = 0;
		//接收完了指定幀長,離開循環
		else if ( recCount > 3 && recCount == ( (((unsigned short)buf[1])<<8) + buf[2] ) )
			break;
		else if (recCount >= MAX_BUF_SIZE)
			break;
		Ustat.l_word = UART_stat();
        } while (Ustat.bits.buff_data_available);//否則一直接收到接收緩沖區沒有數據
        
        *recLen = recCount;
        
        //判斷數據幀的合法性,并且回應對應的數據幀
        checksum = cal_chksum((void *)buf, recCount-2);
    //    Dispbcd(0,0,buf+recCount-2,2);
	sendBuf[0] = checksum >> 8;
	sendBuf[1] = checksum & 0xFF;
    //    Dispbcd(0,6,sendBuf,2);
        if ((recCount < 6) ||(buf[0] != 0xBE)||(buf[recCount-2] != sendBuf[0])||(buf[recCount-1] != sendBuf[1]))
        {
		sendBuf[0] = 0xBE;
		sendBuf[1] = 0x00;
		sendBuf[2] = 0x06;
		sendBuf[3] = 0xFF;//0xFF代表接收出錯
		checksum = cal_chksum((void *)sendBuf, 4);
		sendBuf[4] = checksum >> 8;
		sendBuf[5] = checksum & 0xFF;
		UART_puts(sendBuf,6);
		result = 3;
        }
        else
        {
		sendBuf[0] = 0xBE;
		sendBuf[1] = 0x00;
		sendBuf[2] = 0x06;
		sendBuf[3] = 0x00;//0x00代表接收正確
		checksum = cal_chksum((void *)sendBuf, 4);
		sendBuf[4] = checksum >> 8;
		sendBuf[5] = checksum & 0xFF;
		UART_puts(sendBuf,6);
		result = 0;
        }	
        
//	//SPT_set(4*64);  //time_out = 4s
//	
//	//等到數據發完
//	while(1)
//	{
//		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
//		if (msg_buffer.bits.comm_sb_empty)
//			break;
//		//if (msg_buffer.bits.time_out)
//		//	return 4;
//	}
	
	return result;
}


/*

main(void)
{
      	typ_msg_word msg_buffer;
      	char icondata[8];
      	char cnt;

      	Disp_icon_customize(0xFF);
      	Disp_init(DISP_INIT_ON);
      	clr_scr();
      	for (cnt = 0; cnt < 8; cnt ++)
		icondata[cnt] = 0;
      	Disp_icon_set((unsigned long *) icondata);

      	Disp_set_font_attribute(DISP_FONT_TYPE_5x7_ENG);
      	goto_xy(20,1);
      	Disp_write_str("hello world");

      	sm_setting(MSK_KEY_UP | MSK_KEY_DOWN);
      	KEY_init(KEY_BEEP_KEY | KEY_AUTO_EL_ON);

      	KEY_beep_mask_set(0xFFFF7FFF);
      	KEY_EL_mask_set(0xFFFF7FFF);

      	EL_set_time_out(5);

      	SPT_set(64);

      	srand(RTC_read_time());
	
	while (1) {
      		char tempStr[40];
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);

		if (msg_buffer.bits.time_out) {
	   		Disp_init(DISP_INIT_POWER_SAVE);
		}

		if (msg_buffer.bits.key_available) {
	  		unsigned char tb;
	  		Disp_init(DISP_INIT_ON);
	  		SPT_set(64);

	  		clr_win(0,0*8, 127,63);
	  		goto_xy(0,3);
	  		tb = KEY_read();
	  		Disp_write_str(terminal_key_strings[key_translated(tb)]);
	  		Disp_write_str(" is pressed");
	  		goto_xy(0,5);
	  		memset( (void*)tempStr,0,40);
          		if(tb == KEY_F1 )
          		{
          			char *p;
          			p = (char *)0x00070000;
          			sprintf(tempStr,"send status:%d", UART_send((void*)p,1024) );
          			Disp_write_str(tempStr);
          		}
          		else if(tb == KEY_F2)
          		{         	
          			char *p;
          			p = (char *)0x000f0000;
          			sprintf(tempStr,"send status:%d", UART_send((void*)p,1024) );
          			Disp_write_str(tempStr);
          		}
          		else if(tb == KEY_F3)
          		{
          			char *p;
          			p = (char *)0x000180000;
          			sprintf(tempStr,"send status:%d", UART_send((void*)p,1024) );
          			Disp_write_str(tempStr);
          		}
          		else if(tb == KEY_ENTER)
          		{	
          			sprintf(tempStr,"connect status:%d", UART_connect() );
          			Disp_write_str(tempStr);
          		}
          		else if(tb == KEY_CLR)
          		{
          			UART_disconnect();
          			sprintf(tempStr,"UART disconnect");
          			Disp_write_str(tempStr);
          		}
		}
      	} 
}

*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品视频| 精品sm捆绑视频| 一区二区三区欧美激情| 一本色道久久综合亚洲精品按摩| 亚洲人成网站精品片在线观看| 成人高清在线视频| 亚洲黄色片在线观看| 欧美综合一区二区| 久久精品国产亚洲高清剧情介绍| 精品国产一区二区亚洲人成毛片| 国产一区二区久久| 国产精品国产馆在线真实露脸| 色av综合在线| 日产国产欧美视频一区精品 | 国产精品萝li| 91玉足脚交白嫩脚丫在线播放| 亚洲午夜羞羞片| 日韩欧美一区二区不卡| 成人动漫在线一区| 亚洲一区二区三区美女| 日韩你懂的电影在线观看| 高清不卡一区二区在线| 一区二区三区在线看| 日韩视频中午一区| 99精品黄色片免费大全| 日韩国产精品久久久久久亚洲| 日韩精品在线一区二区| av亚洲精华国产精华精| 午夜影院久久久| 国产精品视频观看| 欧美二区三区的天堂| 国产成人啪午夜精品网站男同| 一区二区在线免费| 亚洲精品一区二区三区蜜桃下载 | 久久网站最新地址| 91丨porny丨最新| 久久不见久久见免费视频7| 国产精品卡一卡二| 精品久久久久av影院| 在线看一区二区| 国产成人99久久亚洲综合精品| 亚洲不卡在线观看| 国产精品美女久久久久久| 欧美videos中文字幕| 欧美综合亚洲图片综合区| 国产九色sp调教91| 免费xxxx性欧美18vr| 一区二区三区高清| 国产精品视频一二三| 欧美成va人片在线观看| 欧美中文字幕不卡| 波多野结衣的一区二区三区| 蜜桃在线一区二区三区| 亚洲韩国精品一区| 亚洲欧洲日本在线| 国产日韩精品视频一区| 精品人在线二区三区| 欧美精品在线观看播放| 欧美亚洲国产怡红院影院| aaa国产一区| www.av精品| 国产91露脸合集magnet| 国产在线视频一区二区| 免费成人美女在线观看.| 亚洲va中文字幕| 亚洲va在线va天堂| 亚洲国产日韩精品| 一级日本不卡的影视| 亚洲天堂网中文字| 国产精品成人一区二区艾草| 国产午夜精品一区二区三区嫩草 | 日本中文一区二区三区| 亚洲午夜免费电影| 洋洋成人永久网站入口| 亚洲色图欧美偷拍| 亚洲精品免费在线观看| 亚洲欧美日韩系列| 亚洲一区av在线| 亚洲在线观看免费视频| 亚洲国产欧美在线| 午夜精品免费在线| 蜜臀a∨国产成人精品| 久久精品国产一区二区| 国产精品中文字幕日韩精品| 国产麻豆视频一区| 国产高清一区日本| www.性欧美| 91影视在线播放| 欧美亚洲国产一区二区三区| 欧美夫妻性生活| 欧美一级免费观看| 精品va天堂亚洲国产| 亚洲国产精品二十页| 亚洲老妇xxxxxx| 亚洲成人三级小说| 久88久久88久久久| 成人av影视在线观看| 欧洲色大大久久| 日韩欧美国产三级电影视频| 欧美精品一区二区三区蜜桃| 日本一区二区三区免费乱视频| 亚洲视频精选在线| 亚洲v中文字幕| 国产麻豆精品视频| 91福利区一区二区三区| 91精品久久久久久蜜臀| 久久久久久一二三区| 亚洲视频狠狠干| 日本一道高清亚洲日美韩| 国产麻豆成人传媒免费观看| 一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩国产免费一区二区 | 欧美另类高清zo欧美| 久久精品在线观看| 亚洲一本大道在线| 国内成人精品2018免费看| 色综合久久六月婷婷中文字幕| 这里只有精品免费| 亚洲欧洲国产专区| 久久成人免费电影| 色哟哟国产精品| 久久婷婷国产综合国色天香| 亚洲日本中文字幕区| 精品中文字幕一区二区小辣椒| 99久久综合狠狠综合久久| 欧美一区二区在线播放| 国产精品麻豆欧美日韩ww| 美女精品一区二区| 色av成人天堂桃色av| 久久久一区二区三区| 亚洲成国产人片在线观看| 丰满少妇在线播放bd日韩电影| 欧美亚洲国产一区二区三区va| 国产日本欧美一区二区| 亚洲一区av在线| 99久久国产综合色|国产精品| 精品久久一区二区| 亚洲一级电影视频| 成人精品免费视频| 精品国产免费一区二区三区香蕉| 一二三四区精品视频| 成人美女视频在线观看18| 日韩免费性生活视频播放| 一区二区三区日韩欧美精品| 成人免费视频一区二区| 精品久久久影院| 日本va欧美va瓶| 555夜色666亚洲国产免| 亚洲欧美激情在线| 成人h精品动漫一区二区三区| 精品国产一区二区三区四区四 | 欧美变态tickle挠乳网站| 亚洲一区二区三区四区在线| 99视频精品免费视频| 久久久久久久久一| 国产一级精品在线| 亚洲精品一区二区三区蜜桃下载| 日本不卡123| 制服丝袜一区二区三区| 亚洲国产精品一区二区www| 色哟哟一区二区三区| 亚洲天堂精品视频| 91麻豆国产福利在线观看| 国产精品久久久久久久久晋中| 国产二区国产一区在线观看| 日韩一区二区不卡| 美女任你摸久久| 欧美成人激情免费网| 精彩视频一区二区| 精品久久免费看| 国产精品911| 国产亚洲婷婷免费| 丁香六月久久综合狠狠色| 中文在线一区二区| 成人激情图片网| 亚洲欧美日韩国产另类专区| 日本韩国一区二区| 亚洲色图在线视频| 在线观看欧美日本| 亚洲一区二区三区四区中文字幕| 欧美区在线观看| 日本不卡的三区四区五区| 精品少妇一区二区三区视频免付费 | 欧美综合一区二区| 亚洲va中文字幕| 精品对白一区国产伦| 成人黄色片在线观看| 一二三区精品视频| 欧美一区二区视频观看视频| 激情小说亚洲一区| 国产精品欧美一区二区三区| 一本色道久久综合亚洲91| 亚洲成人福利片| 日韩免费看的电影| 成人一道本在线| 亚洲午夜视频在线观看| 精品精品国产高清a毛片牛牛| 成人激情图片网| 亚洲一区二区三区视频在线播放| 欧美一区二区三级|