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 ...
随机推荐
- 字符串函数的实现(三)之strcat
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- 实现spaCy实体标注模型
命名实体识别是指对现实世界中某个对象的名称的识别.与词性标注一样,是自然语言处理的技术基础之一.它的作用主要是通过模型识别出文本中需要的实体,也可以推导出实体之间的关系(实体消歧). 本文介绍的是运用 ...
- 【项目管理】关于Issue/Milestone的使用指导
b[red] { color: rgba(255, 0, 0, 1) } 前言 本指导内容主要基于: 和邹欣老师的语音交流结论 邹欣老师<构建之法>的相关章节内容 现有开源项目在类似情况下 ...
- 码农飞升记-00-Java发展历程
目录 1.Java发布历程 2.Java发展史 Oak 的出现( Java 的雏形) 1995年 Java 的诞生 1996年 Sun 公司发布第一个 JDK 1998年12月用 J2SE 取代 JD ...
- MySQL批量删除数据表
SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` WHERE table_schema='数据库 ...
- springboot 配置将info、error、debug 分别输出到不同文件
在resource下创建名为 logback-spring.xml 的配置文件,内容如下: <?xml version="1.0" encoding="UTF-8& ...
- SPOJ 2713 线段树(sqrt)
题意: 给你n个数(n <= 100000),然后两种操作,0 x y :把x-y的数全都sqrt ,1 x y:输出 x-y的和. 思路: 直接线段树更新就行了,对于当 ...
- apk 脱壳
在理解android的类加载后,我们可以愉快对apk来脱壳了.脱壳重要的是断点: 断点:在哪个位置脱壳,这里着重指的是在哪个方法 先介绍断点,我们只要知道加壳是用哪个方法来加载dex的,hook这个方 ...
- Windows PE 第八章 延迟加载导入表
延迟加载导入表 延迟加载导入表是PE中引入的专门用来描述与动态链接库延迟加载相关的数据,因为这些数据所引起的作用和结构与导入表数据基本一致,所以称为延迟加载导入表. 延迟加载导入表和导入表是相互分离的 ...
- Portswigger web security academy:OS command injection
Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...