⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lanya.c

📁 Bluetooth
💻 C
字号:
/****************************************************************/
/*	Copyright (C) 2003  www.bluedevelop.com.  All Rights Reserved.
*
*	Author:			James(james@bluedevelop.com)
*
*	File Name:		LanYa.c
*
*	Date:			2003/04/04
*
*	Description:	Turbo C 2.0
*
*	Notes:			
*
*	Update:
*	Date		Name		Description
*	
*
*	Known restrictions:
*	Date		Name		Description
*
*
*	Known bugs:
*	Date		Name		Description
*
*
*****************************************************************/

#include<stdio.h>
#include<dos.h>
#include<process.h>
#include<conio.h>
#include<bios.h>
#include<ctype.h>
#include<stdio.h>
#include<fcntl.h>

#define Max_Port_Number		2
#define Com1_Port_Address	0x3f8
#define Com2_Port_Address	0x2f8
#define Recive	0x00
#define IER_Address	0x00
#define IIR_Address	0x
#define PortBase 0x3f8

#define BUFFLEN 10800
#define BUFFMAX 900

void Init(void);
void check(unsigned char states);
void enableports(void);
void disableports(void);
void interrupt far asyncint(void);
void interrupt (*asyncvect)(void);
void putb(unsigned char ch);
void CommOutB(unsigned char ch);

unsigned char intchar,flag=0;
unsigned char Buffer[BUFFLEN];
int buffin=0;
int buffout=0;
int ii=0;
unsigned char temp_buffer[BUFFMAX];

void enableports(void)
{
	unsigned char B;
	asyncvect=getvect(0x0c);
	disable();
	inportb(0x3f8);	/*0x3f8-接收数据寄存器*/
	inportb(0x3fe);	/*0x3fe-MODEM控制寄存器MCR*/
	inportb(0x3fb);	/*0x3fb-线路控制寄存器LCR*/
	inportb(0x3fa);	/*0x3fa-FIFO控制寄存器FCR*/

	outportb(0x3fc,0x08|0x0b);	/*0x3fc-MODEM控制寄存器MCR,0x0b-0000 1011*/
					/*
					  BIT7-保留
					  BIT6-保留
					  BIT3 辅助输出2
					  BIT2 辅助输出1
					  BIT1 设置RTS
					   BIT0 设置DSR
					*/

	outportb(0x3f9,0x01);	/*0x3f9-中断允许寄存器IER,0x01-0000 0001*/
					/*BIT0 1-允许接收数据就绪中断*/
	B=inportb(0x21)&0xef;
	outportb(0x21,B);
	setvect(0x0c,asyncint);
	enable();
}
void interrupt far asyncint(void)
{
	unsigned char ch;
	unsigned char status;
	/*
	status=inportb(0x3fd);
	if(status&0x06)
	{
		inportb(0x3f8);
		putb('E');
		flag=1;
		return;
	}
	*/
	ch=inportb(0x3f8);
	/*
	if(status&0x01)
	{
	*/
		flag=1;
		putb(ch);
	/*
	}
	*/
	outportb(0x20,0x20);
}
void disableports(void)
{
	disable();
	outportb(0x3f9,0x00);	/*0x3f9-中断允许寄存器IER,0x01-0000 0000*/
					/*BIT0 0-禁止接收数据就绪中断*/
	outportb(0x3fc,0x00);		/*0x3fc-MODEM控制寄存器MCR,0x0b-0000 1011*/
					/*
					  BIT7-保留
					  BIT6-保留
					  BIT3 辅助输出2
					  BIT2 辅助输出1
					  BIT1 设置RTS
					   BIT0 设置DSR
					*/
	outportb(0x21,inportb(0x21)&0x10);
	enable();
	setvect(0x0c,asyncvect);
}
void Init()
{
	outportb(0x3fb,0x80);	/*0x3fb-线路控制寄存器LCR,0x80-允许访问波特率因子寄存器*/

	outportb(0x3f8,0x02);	/*0x000c,波特率57600*/
	/*波特率低八位*/
	outportb(0x3f9,0x00);
	/*波特率高八位*/

	outportb(0x3fb,0x03);	/*0x3fb-线路控制寄存器LCR, 0x03-0000 0011*/
					/*
					  BIT7  0-允许访问接收/发送及中断允许寄存器
					  BIT6  0-禁止间断
					  BIT5~3  011-偶校验
					  BIT2  2-1位停止位
					  BIT1~0  11-8位数据位
					*/
	outportb(0x3fc,0x08|0x0b);	/*0x3fc-MODEM控制寄存器MCR,0x0b-0000 1011*/
					/*
					  BIT7-保留
					  BIT6-保留
					  BIT3 辅助输出2
					  BIT2 辅助输出1
					  BIT1 设置RTS
					   BIT0 设置DSR
					*/
	outportb(0x3f9,0x01);	/*0x3f9-中断允许寄存器IER,0x01-0000 0001*/
					/*BIT0 1-允许接收数据就绪中断*/
}
void check(unsigned char states)
{
	while((inportb(0x3fd)&states)==0);
}
void putb(unsigned char ch)
{
	int temp=0;
	if(++ii>BUFFMAX) ii=0;
	temp=buffin;
	if(++buffin==BUFFLEN) buffin=0;
	if(buffin!=buffout)
		Buffer[buffin]=ch;
	else
		buffin=temp;
		temp_buffer[ii]=ch;
}
unsigned int getb(void)
{
	if(buffout!=buffin)
	{
		if(++buffout==BUFFLEN) buffout=0;
		return (Buffer[buffout]);
	}
	else
		return(0x100);
}

unsigned char CmdR[5]={0x04,0x01,0x03,0x0c,0x00};
unsigned char CmdRBS[5]={0x04,0x01,0x05,0x10,0x00};
unsigned char CmdCSEF[6]={0x05,0x01,0x05,0x0c,0x01,0x00};
unsigned char CmdWSE[6]={0x05,0x01,0x1a,0x0c,0x01,0x03};
unsigned char CmdWAE[6]={0x05,0x01,0x20,0x0c,0x01,0x00};
unsigned char CmdWVS[7]={0x06,0x01,0x26,0x0c,0x02,0x60,0x00};
unsigned char CmdSEF[8]={0x07,0x01,0x05,0x0c,0x03,0x02,0x00,0x02};
unsigned char CmdWCAT[7]={0x06,0x01,0x16,0x0c,0x02,0x00,0x20};
unsigned char CmdWPT[7]={0x06,0x01,0x18,0x0c,0x02,0x00,0x30};
unsigned char CmdEWPCMS[6]={0x05,0x01,0x07,0xfc,0x01,03};
unsigned char CmdRBDADDR[5]={0x04,0x01,0x09,0x10,0x00};
unsigned char CmdI[10]={0x09,0x01,0x01,0x04,0x05,0x33,0x8B,0x9E,0x0A,0x00};

void PrintHEX(unsigned char ch)
{
	unsigned char HighBit;
	unsigned char HEXBit[2];

	HighBit=ch/16;
	if(HighBit>9)
		HighBit=HighBit+7;
	HEXBit[0]=0x30+HighBit;

	ch=ch%16;
	if(ch>9)
		ch=ch+7;
	HEXBit[1]=0x30+ch;
	HEXBit[2]=0x00;
	cprintf("%s ",HEXBit);
}

int Send_HCI_Command(unsigned char *CommandString)
{
	unsigned int i,j;
	unsigned char ch;

	j=*CommandString;
	for(i=0;i<j;i++)
	{
		ch=*(++CommandString);
                CommOutB(ch);
	}
}

main()
{
	unsigned int DataByte;
	unsigned char ch;
	char CmdStr[100];

	clrscr();
	printf("========================================\n");
	printf("Bluetooth HCI Tester 1.0\n");
	printf("  Copyright (C) 2003 www.BlueDevelop.com\n");
	printf("========================================\n");
	printf("	Serial Port: COM1\n");
	printf("	Baud Rate: 57600 bps\n");
	printf("	Data Bit: 8 bit\n");
	printf("	Stop Bit: 1 Bit\n");
	printf("	Parity: Noparerify\n");
	printf("========================================\n");
	Init();
	enableports();
	printf("[  Please Input: 1~9,A~C or Q-Quit (X-eXit) ]\n\n>>");
	for(;;)
	{
		if(flag==1)
		{
			DataByte=getb();
			if(DataByte>0xFF)
			{
				flag=0;
				textcolor(15);
				printf("\n\n");
				cprintf(">>");
			}
			else
			{
				textcolor(14);
				ch=DataByte;
				PrintHEX(ch);
				flag=1;
				textcolor(7);
				delay(10);
			}
		}
		if(kbhit()!=0)
		{
			ch=getch();
			textcolor(1);
			switch(ch)
			{
				case '1':
					cprintf("Reset ......",ch);
					Send_HCI_Command(CmdR);
					printf(" Ok !\n  <--");
					break;
				case '2':
					cprintf("Read Buffeer Size ......",ch);
					Send_HCI_Command(CmdRBS);
					printf(" Ok !\n  <--");
					break;
				case '3':
					cprintf("Set Event Filter (Clear)......");
					Send_HCI_Command(CmdCSEF);
					printf(" Ok !\n  <--");
					break;
				case '4':
					cprintf("Write Scan Enable ......");
					Send_HCI_Command(CmdWSE);
					printf(" Ok !\n  <--");
					break;
				case '5':
					cprintf("Write Authentication Enable ......");
					Send_HCI_Command(CmdWAE);
					printf(" Ok !\n  <--");
					break;
				case '6':
					cprintf("Write Voice Setting ......");
					Send_HCI_Command(CmdWVS);
					printf(" Ok !\n  <--");
					break;
				case '7':
					cprintf("Set Event Filter ......");
					Send_HCI_Command(CmdSEF);
					printf(" Ok !\n  <--");
					break;
				case '8':
					cprintf("Write Connection Accept Timeout ......");
					Send_HCI_Command(CmdWCAT);
					printf(" Ok !\n  <--");
					break;
				case '9':
					cprintf("Write Page Timeout ......");
					Send_HCI_Command(CmdWPT);
					printf(" Ok !\n  <--");
					break;
				case 'A':
				case 'a':
					cprintf("Ericsson Write PCM Settings ......");
					Send_HCI_Command(CmdEWPCMS);
					printf(" Ok !\n  <--");
					break;
				case 'B':
				case 'b':
					cprintf("Read BD_ADDR ......");
					Send_HCI_Command(CmdRBDADDR);
					textcolor(15);
					cprintf(" Ok !");
					putchar('\n');
					cprintf("  <--");
					break;
				case 'C':
				case 'c':
					cprintf("Inquiry ......");
					Send_HCI_Command(CmdI);
					textcolor(15);
					cprintf(" Ok !");
					putchar('\n');
					cprintf("  <--");
					break;
				case 'x':
				case 'X':
				case 'q':
				case 'Q':
                                	disableports();
					exit(0);
					break;
				default:
					if((ch>=32)&&(ch<128))
					{
						textcolor(4);
						cprintf("%c\n  Message: Command '%c' Undefine !",ch,ch);
						textcolor(15);
						printf("\n\n");
						cprintf(">>");
					}
					break;
			}
			textcolor(7);
		}
	}
}

void CommOutB(unsigned char ch)
{
	unsigned char status;
	while(1)
	{
		status=inportb(PortBase+5);
		if(status&0x01)
			inportb(PortBase+0);
		else
		{
			if(status&0x20)
				break;
		}
	}
	outportb(PortBase,ch);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -