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底层驱动的更多相关文章

  1. Android驱动入门-Led控制+app+ndk库+底层驱动

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20  21:56:48 本次实验使用的是 安卓APP + ...

  2. uTenux——重新整理底层驱动库

    重新整理底层驱动库 1. 整理chip.h 在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事. //#if d ...

  3. uTenux——软件底层驱动组织结构介绍

    经过第一节对uTenux初步认识和第二节对uTenux\AT91SAM3S4C开发板的硬件结构的介绍,这一节我们将要学习的是uTenux\AT91SAM3S4C的软件底层驱动. 在悠龙公司的官网或者u ...

  4. 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明

    第6章        RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1  初学者重要提示 6.2  KEI ...

  5. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-13 emWin底层驱动接口介绍

    视频简介:该视频介绍emWin底层驱动接口. 源视频包下载地址:链接:http://pan.baidu.com/s/1nvPpC2d 密码:cbb7 银杏科技优酷视频发布区:http://i.youk ...

  6. [转]Linux芯片级移植与底层驱动(基于3.7.4内核)

      1.   SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍.中断控制器.SMP启动.CPU hotplug以及底层的G ...

  7. Linux系统调用怎么和内核或底层驱动交互的

    学习Linux系统下驱动程序开发已有大半年时间,心中一直有个疑惑:那就是诸如open.write.read等系统调用是怎么和内核或底层驱动建立起联系的呢?今天将自己的一些粗略的理解总结如下.      ...

  8. Android底层驱动开发(一)

    1   Android为什么要增加硬件抽象层HAL A    统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B   解决GPL版权问题,因为linux内核基于GPL协议.这个G ...

  9. 蓝桥杯单片机CT107D 01 底层驱动基础

    代码下载 https://share.weiyun.com/5NHvLxG 这两个代码文件是其他底层驱动代码的基础: 包含了控制138573(间接控制数码管led和蜂鸣器等).delay延时函数.CT ...

  10. Android 开发之 ---- 底层驱动开发(一) 【转】

    转自:http://blog.csdn.net/jmq_0000/article/details/7372783 版权声明:本文为博主原创文章,未经博主允许不得转载. 驱动概述 说到 Android ...

随机推荐

  1. get_started_3dsctf_2016-Pwn

    get_started_3dsctf_2016-Pwn 这个题确实有点坑,在本地能打,在远程就不能打了,于是我就换了另一种方法来做. 确这个题是没有动态链接库,且PIE是关的,所以程序的大部分地址已经 ...

  2. 将 Python 打包的 exe 进行反编译

    Python 打包成 exe 之后,是否能从二进制文件中恢复出源代码?没有加密的话是可以的. 首先需要解包. 直接从 github 上下载就行:https://github.com/counterce ...

  3. 小程序使用 Promise.all 完成文件异步上传

    小程序使用 Promise.all 完成文件异步上传 extends [微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 - Kindear - 博客园 (cnblogs.com)] ...

  4. 【Java】说说你对ThreadLocal的理解

    思路: 0.ThreadLocal是什么?有什么用? 1.ThreadLocal用在什么地方? 2.ThreadLocal的一些细节 3.ThreadLocal的最佳实践 一.ThreadLocal用 ...

  5. YII框架中的srbac权限管理模块的安全与使用(版本是1.1.20)

    0x01 前言 srbac的原理: YII框架的srbac模块是一个专门管理权限的一个模块,那它是怎么管理权限的呢.我们知道YII框架的网页显示是由控制器实现的,控制器继承父类CController和 ...

  6. UVA10827球面上的最大和

    题意:      最大子矩阵的加强版,就是给你一个n*n的矩阵,每个格子里面都有数字,然后我们在里面选择一个矩阵,使得矩阵中所有数字的和最大,而且这个题目说这个n*n的矩阵的最右边和最左边是相邻的,最 ...

  7. 内网域渗透之MS14-068复现

    在做域渗透测试时,当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限.如果域控服务器存在MS14_068漏洞,并且未打补丁,那么我们就可以利用MS14_068快速获得域控服务 ...

  8. CTF常见的加密和编码方法

    目录 哈希摘要算法 对称加密算法 其他加密算法 编码 哈希摘要算法 以  root 加密为例. MD4:32位的摘要算法.2add09183d0b1dc0428701df9838fba MD5:32位 ...

  9. Mac使用brew搭建LNMP

    一. brew常用命令 安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/in ...

  10. spring源码解析之属性编辑器propertyEditor

    异常信息造成此异常的原因bean配置文件调用代码特别说明:异常解决注册springt自带的属性编辑器 CustomDateEditor控制台输出属性编辑器是何时并如何被注册到spring容器中的?查看 ...