/****************************************************************/
/* Copyright (C) 2003 www.bluedevelop.com. All Rights Reserved.
*
* Author: James([email protected])
*
* 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':
LanYa.rar_lanya_蓝牙
版权申诉
15 浏览量
2022-09-21
09:04:10
上传
评论
收藏 2KB RAR 举报
JaniceLu
- 粉丝: 79
- 资源: 1万+
最新资源
- rdf0412-kcu116-pcie-c-2019-1.zip(XILINX KCU116 源码)
- 基于C#语言的winform界面火车票订票系统(源码+实验报告)
- 【华为OD部分真题及讲解】华为OD部分真题及讲解
- 基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip
- G460 G560 Z460 Z560的最新BIOS 2.18版(无白名单)
- MetaJUI v0.4
- 基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip
- linux常用命令大全
- 立体相机标定-使用OpenCV+Cpp对立体相机进行标定-calibration-附项目源码+流程教程-优质项目实战.zip
- 基于SpringBoot+Mysql开发的酒店管理系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0