HC-05底层驱动
INT8U BT_INIT(const char * pNAME, INT32U BAUD, INT8U ROLE, INT32U PSWD)
{
INT8U OS_ERR = OS_ERR_NONE;
INT8U BT_ERR = BT_ERR_NONE;
INT8U RETRY = 0;
BOOLEAN F_SET = FALSE;
BOOLEAN F_BOOT = FALSE;
char *MAIL; // Ç¿ÖÆÖØÆô½øÈëATģʽ
BT_PWR_SET(0);
_delay_ms(25);
BT_DAT_MOD_SET(DAT_MOD_AT);
BT_PWR_SET(1);
_delay_ms(25); /* È·¶¨À¶ÑÀ½øÈëATģʽ *************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=25; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} /* »ñÈ¡±¾»úÀ¶ÑÀµØÖ· *****************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+ADDR?\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+ADDR?\r\n");
// printf("%s\r\n", mail);
if(strstr((char *)MAIL, "ADDR")) {
ADDR_PARSE(MAIL, (INT32U *)&BT_API.MAC);
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->ADDR : ERR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} /* ½«À¶ÑÀÉèÖÃΪÖ÷»ú/´Ó»úģʽ *************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+ROLE?\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+ROLE?\r\n");
// printf("%s\r\n", mail);
if(ROLE == HOST) {
if(strstr(MAIL, "ROLE:1")) {
F_SET = FALSE;
BT_ERR = BT_ERR_NONE;
break;
}
else if(strstr(MAIL, "ROLE:0")) {
F_SET = TRUE;
F_BOOT = TRUE;
BT_ERR = BT_ERR_NONE;
break;
}
}
else {
if(strstr(MAIL, "ROLE:0")) {
F_SET = FALSE;
BT_ERR = BT_ERR_NONE;
break;
}
else if(strstr(MAIL, "ROLE:1")) {
F_SET = TRUE;
F_BOOT = TRUE;
BT_ERR = BT_ERR_NONE;
break;
}
}
}
else {
// debug info...
// printf("BT->ROLE? -> OS_ERR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) {
F_SET = FALSE;
for(RETRY=5; RETRY>0; RETRY--) {
if(ROLE == HOST) {
xfprintf(BT_OUT, "AT+ROLE=1\r\n");
}
else {
xfprintf(BT_OUT, "AT+ROLE=0\r\n");
}
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+ROLE=x\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT_ROLE->ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} /* ²éѯºÍÉèÖÃÀ¶ÑÀ²¨ÌØÂÊ *************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+UART?\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+UART?\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK") && strstr(MAIL, "UART")) {
char *pnum = strchr(MAIL, ':');
if(pnum) {
pnum++;
if(atoi(pnum) != BAUD) {
F_SET = TRUE;
F_BOOT = TRUE;
}
else {
F_SET = FALSE;
}
}
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT_BAUD? -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) {
F_SET = FALSE;
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+UART=%d,0,0\r\n", BAUD);
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+UART=%d,0,0\r\n", BAUD);
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT_BAUD=xxxxxx -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} /* ²éѯ/ÉèÖÃ-Åä¶ÔÂë **************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+PSWD?\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+PSWD?\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "PSWD") && strstr(MAIL, "OK")) {
char * pnum = strchr(MAIL, ':');
if(pnum) {
pnum++;
if(atoi(pnum) == PSWD) {
F_SET = FALSE;
}
else {
F_SET = TRUE;
F_BOOT = TRUE;
}
}
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT+PSWD? -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) {
F_SET = FALSE;
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+PSWD=%04d\r\n", PSWD);
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+PSWD=%d\r\n", PSWD);
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT+PSWD=xxxx -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} /* ²éѯ/ÉèÖÃÖ÷»úÃû³Æ **************************************************************/
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+NAME?\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+NAME?\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "NAME")) {
BT_ERR = BT_ERR_NONE;
if(strstr(MAIL, pNAME)) {
F_SET = FALSE;
}
else {
F_SET = TRUE;
F_BOOT = TRUE;
}
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT+NAME? : ERR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
if(F_SET == TRUE) {
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+NAME=%s\r\n", pNAME);
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+NAME=%s\r\n", pNAME);
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT+NAME=xxxx : ERR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
} // ½«À¶ÑÀÈí¸´Î»£¬ÉúЧ¸ü¸Ä
if(F_BOOT == TRUE) {
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=5; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT+RESET\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT+RESET=1\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT+RESET : ERR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
} // µÈ´ýÀ¶ÑÀ¸´Î»³É¹¦
if(BT_ERR == BT_ERR_NONE) {
for(RETRY=25; RETRY>0; RETRY--) {
xfprintf(BT_OUT, "AT\r\n");
MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR);
if(OS_ERR == OS_ERR_NONE) {
// debug info...
// printf("AT\r\n");
// printf("%s\r\n", mail);
if(strstr(MAIL, "OK")) {
BT_ERR = BT_ERR_NONE;
break;
}
else {
BT_ERR = BT_ERR_RES;
}
}
else {
// debug info...
// printf("BT->AT -> ERROR!\r\n");
_delay_ms(25);
}
}
if(RETRY==0) BT_ERR = BT_ERR_OS;
}
} return BT_ERR;
}
HC-05底层驱动的更多相关文章
- Android驱动入门-Led控制+app+ndk库+底层驱动
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20 21:56:48 本次实验使用的是 安卓APP + ...
- uTenux——重新整理底层驱动库
重新整理底层驱动库 1. 整理chip.h 在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事. //#if d ...
- uTenux——软件底层驱动组织结构介绍
经过第一节对uTenux初步认识和第二节对uTenux\AT91SAM3S4C开发板的硬件结构的介绍,这一节我们将要学习的是uTenux\AT91SAM3S4C的软件底层驱动. 在悠龙公司的官网或者u ...
- 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明
第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1 初学者重要提示 6.2 KEI ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-13 emWin底层驱动接口介绍
视频简介:该视频介绍emWin底层驱动接口. 源视频包下载地址:链接:http://pan.baidu.com/s/1nvPpC2d 密码:cbb7 银杏科技优酷视频发布区:http://i.youk ...
- [转]Linux芯片级移植与底层驱动(基于3.7.4内核)
1. SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍.中断控制器.SMP启动.CPU hotplug以及底层的G ...
- Linux系统调用怎么和内核或底层驱动交互的
学习Linux系统下驱动程序开发已有大半年时间,心中一直有个疑惑:那就是诸如open.write.read等系统调用是怎么和内核或底层驱动建立起联系的呢?今天将自己的一些粗略的理解总结如下. ...
- Android底层驱动开发(一)
1 Android为什么要增加硬件抽象层HAL A 统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B 解决GPL版权问题,因为linux内核基于GPL协议.这个G ...
- 蓝桥杯单片机CT107D 01 底层驱动基础
代码下载 https://share.weiyun.com/5NHvLxG 这两个代码文件是其他底层驱动代码的基础: 包含了控制138573(间接控制数码管led和蜂鸣器等).delay延时函数.CT ...
- Android 开发之 ---- 底层驱动开发(一) 【转】
转自:http://blog.csdn.net/jmq_0000/article/details/7372783 版权声明:本文为博主原创文章,未经博主允许不得转载. 驱动概述 说到 Android ...
随机推荐
- pwnable.tw orw
orw 首先,检查一下程序的保护机制 开启了canary保护,还是个32位的程序,应该是个简单的题
- 一次使用IDEA中HTTP Client的经历
1 开端 HTTP Client是IDEA中自带的一个插件,用于代替原来的REST Client,打开Tools->HTTP Client->Test RESTful Web Servic ...
- table边框完全去掉的方法
表格中边框的显示 只显示上边框 <table frame=above> 只显示下边框 <table frame=below> 只显示左.右边框 <table frame= ...
- hdu 1298 字典树 + DFS (模拟T9文本输入)
题意: 给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方 法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么 ab 的概率就是2 ...
- 路由器逆向分析------sasquatch和squashfs-tools工具的安装和使用
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/68942660 一.sasquatch工具的安装和使用 sasquatch工具支持对 ...
- 编译Android内核 For nexus 5 以及绕过Android的反调试
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54880488 前面的博客中已经记录了Nexus 5手机的Android 4.4.4 ...
- POJ3614奶牛晒阳光DINIC或者贪心
题意: n个区间,m种点,每种点有ci个,如果一个点的范围在一个区间上,那么就可以消耗掉一个区间,问最多可以消耗多少个区间,就是这n个区间中,有多少个可能被抵消掉. 思路: 方 ...
- mimikatz的使用
mimikatz mimikatz是法国人Gentil Kiwi编写的一款Windows平台下的神器,它具备很多功能,其中最主要的功能是直接从 lsass.exe 进程里获取处于active状态账号的 ...
- 在 Peach 中使用发布者进行调试
0x01 桃子平台 桃子平台(Peach)是一款流行的 Fuzz 平台,主要用作二进制文件及网络协议的模糊测试.其原理遵循基本的模糊测试流程,比较有特色的是它依赖用户所编写的 Pit 文件,同时输入的 ...
- HTTP自定义Header-(SOCKET-TCP)
HTTP自定义Header-TCP 前几天弄一些东西,需要在发送http请求的时候自定义http头,找了几个库用着很不爽.有的把Cookie直接干掉了,还自己在头里加了版权,最后终于忍不了了.在网 ...