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 ...
随机推荐
- ES9的新特性:异步遍历Async iteration
ES9的新特性:异步遍历Async iteration 目录 简介 异步遍历 异步iterable的遍历 异步iterable的生成 异步方法和异步生成器 简介 在ES6中,引入了同步iteratio ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之实例类型-10
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之实例类型-10 欢迎加QQ群:1026880196 进行交流学习 实例类型 #controller1 ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之vmware设置-02
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之vmware设置-02 欢迎加QQ群:1026880196 进行讨论 1. vmwae版本 2. 网 ...
- mvnw 找不到或无法加载主类,找不到符号,类
如果你出现"找不到或无法加载主类"的问题,很有可能是maven的问题,你可以尝试一下这种办法: 问题:关于maven什么东西都没动,上午可能运行都好好的,下午可能就出现了这个问题, ...
- 1022 Digital Library
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- ECMAScript 2019(ES10)新特性简介
简介 ES10是ECMA协会在2019年6月发行的一个版本,因为是ECMAScript的第十个版本,所以也称为ES10. 今天我们讲解一下ES10的新特性. ES10引入了2大特性和4个小的特性,我们 ...
- 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析
前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...
- 病毒木马查杀实战第013篇:一个基于.NET的“敲竹杠”病毒研究
前言 恶意程序发展至今,其功能已经从最初的单纯破坏,不断发展为隐私的窥探,信息的盗取,乃至如今非常流行的"敲竹杠"病毒,用于勒索.可见随着时代的发展,病毒的作者们往往也是想利用自己 ...
- CentOS8 安装 MySQL8.0(yum)
1.Mysql 官网下载 RPM 包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2.检查是否已安装 ...
- SqlServer 数据库配置远程桌面
1.是否开启远程桌面,1表示关闭,0表示开启 EXEC master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Contro ...