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

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

?? uartcomm.c.bak

?? 是上一個SMS消費機的充值機程序
?? BAK
字號:
//#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;
        }	
        
	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一区二区三区免费野_久草精品视频
国产精品一卡二卡| 成人激情电影免费在线观看| 国产精品视频一二三区| 精品国产在天天线2019| 欧美精品在欧美一区二区少妇| 欧美在线高清视频| 欧美怡红院视频| 欧美日韩在线免费视频| 91黄色激情网站| 91国产福利在线| 欧美私人免费视频| 欧美日韩精品专区| 欧美日本国产视频| 日韩欧美一区电影| 欧美精品一区二区三区很污很色的| 精品蜜桃在线看| 中文乱码免费一区二区| 亚洲欧美自拍偷拍色图| 亚洲男人电影天堂| 亚洲va天堂va国产va久| 乱一区二区av| 成人毛片在线观看| 99久久亚洲一区二区三区青草| 色婷婷狠狠综合| 91精品国产一区二区三区香蕉| 日韩欧美卡一卡二| 日本一区二区久久| 亚洲自拍欧美精品| 老司机精品视频线观看86| 国产在线乱码一区二区三区| 成人爱爱电影网址| 欧美日本韩国一区| 国产丝袜在线精品| 一区二区免费在线播放| 日产国产高清一区二区三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 在线观看国产一区二区| 欧美高清视频www夜色资源网| 欧美精品一区二区久久婷婷| 亚洲欧美日韩综合aⅴ视频| 日韩va欧美va亚洲va久久| 成a人片国产精品| 这里只有精品电影| 日韩一区在线播放| 国内久久精品视频| 欧美日韩中文字幕一区二区| 国产欧美日韩在线| 日韩精品乱码av一区二区| 波多野结衣在线aⅴ中文字幕不卡| 欧美男生操女生| 亚洲欧洲日韩一区二区三区| 国产欧美日韩麻豆91| 亚洲精品一区二区在线观看| 国产精品美女久久久久久 | 亚洲蜜臀av乱码久久精品| 国模冰冰炮一区二区| 国产精品少妇自拍| 91久久精品日日躁夜夜躁欧美| 伊人开心综合网| 欧美精品粉嫩高潮一区二区| 国产在线不卡一区| 中文字幕综合网| 69堂国产成人免费视频| 国产在线一区观看| 伊人夜夜躁av伊人久久| 日韩欧美二区三区| 不卡一区中文字幕| 秋霞电影网一区二区| 欧美激情自拍偷拍| 欧美人狂配大交3d怪物一区| 国产一区二区在线观看视频| 亚洲同性同志一二三专区| 日韩一区二区三区在线观看| 成人美女在线观看| 免费成人在线影院| 亚洲猫色日本管| 久久色在线观看| 欧美三级日韩三级国产三级| 国产精品亚洲第一| 日韩电影在线观看网站| 《视频一区视频二区| 日韩免费福利电影在线观看| 色吧成人激情小说| 国产成人亚洲综合a∨猫咪 | 国产精品国产三级国产aⅴ原创| 欧美高清性hdvideosex| 91美女视频网站| 国产麻豆日韩欧美久久| 午夜精品影院在线观看| 亚洲视频你懂的| 久久久久久久久久久久久女国产乱| 欧美性淫爽ww久久久久无| 波多野结衣在线一区| 激情综合网天天干| 日韩影视精彩在线| 亚洲韩国一区二区三区| 日韩毛片视频在线看| 中文字幕精品综合| 久久亚洲二区三区| 欧美成人性战久久| 欧美一区二区三区播放老司机| 欧美亚洲国产bt| 欧洲精品在线观看| 91免费看片在线观看| www.av精品| 盗摄精品av一区二区三区| 国产一区在线看| 另类综合日韩欧美亚洲| 麻豆视频一区二区| 久久99热国产| 久久99国产乱子伦精品免费| 天堂久久久久va久久久久| 午夜精品福利一区二区蜜股av| 一区二区三区精品| 一区二区在线免费| 亚洲制服丝袜一区| 亚洲成人av一区| 日韩中文字幕不卡| 久久精品国产亚洲一区二区三区| 日本视频免费一区| 九九视频精品免费| 国产一二精品视频| 丰满岳乱妇一区二区三区| 国产 日韩 欧美大片| 成人一二三区视频| 97久久精品人人做人人爽| 日本乱人伦一区| 欧美蜜桃一区二区三区| 欧美一区二区三区电影| 2020日本不卡一区二区视频| 久久久久高清精品| 亚洲色图另类专区| 天堂精品中文字幕在线| 久久99国内精品| 成人动漫av在线| 欧美日韩一二区| 久久午夜羞羞影院免费观看| 国产欧美日韩久久| 亚洲精品中文在线观看| 日韩国产欧美在线播放| 国产精品99久久久久久久女警| 99久久精品国产精品久久| 欧美色图片你懂的| 精品日韩99亚洲| 亚洲日本中文字幕区| 日韩专区一卡二卡| 国产成人夜色高潮福利影视| 在线一区二区三区四区五区| 日韩一级二级三级| 欧美国产激情一区二区三区蜜月| 一区二区三区四区视频精品免费 | 99精品视频一区二区三区| 精品视频1区2区3区| 久久综合久久鬼色中文字| 综合婷婷亚洲小说| 蜜桃久久久久久| 99久久婷婷国产综合精品| 日韩一区二区在线观看视频播放| 欧美激情一区三区| 日韩av网站免费在线| 不卡一区二区中文字幕| 日韩视频在线你懂得| 亚洲三级在线免费| 国产精一品亚洲二区在线视频| 欧美亚洲综合久久| 亚洲国产精品黑人久久久 | 亚洲欧美另类久久久精品| 日本一区中文字幕| 色av成人天堂桃色av| 久久九九全国免费| 男人的天堂久久精品| 色噜噜偷拍精品综合在线| 久久久久久久久久久电影| 亚洲第一av色| 色综合天天综合网天天看片| 亚洲女与黑人做爰| 久久成人久久爱| 欧美另类久久久品| 亚洲尤物在线视频观看| 懂色av一区二区三区蜜臀| 日韩欧美另类在线| 丝袜a∨在线一区二区三区不卡| 色拍拍在线精品视频8848| 国产精品蜜臀在线观看| 激情深爱一区二区| 欧美一区二区三区播放老司机| 亚洲高清免费视频| 色猫猫国产区一区二在线视频| 中文字幕亚洲电影| 成人高清视频免费观看| 国产欧美日韩激情| 国内精品嫩模私拍在线| 日韩欧美在线观看一区二区三区| 天天操天天干天天综合网| 欧美亚洲动漫精品| 亚洲午夜精品在线| 欧美午夜影院一区| 亚洲午夜影视影院在线观看| 在线视频一区二区三区| 亚洲免费观看高清完整版在线观看|