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. 蒙特卡洛——使用CDF反函数生成非均匀随机数

    均匀随机数生成   先来说说均匀随机数生成,这是非均匀随机数的生成基础.   例如,我们现在有drand()函数,可以随机生成[0,1]范围内的均匀随机数. 要求一个drand2()函数,能够生成[0 ...

  2. lustre文件系统环境搭建及测试

    目录 1.节点角色 2.硬件配置 3.软件版本 4.安装软件包 4.1.安装 e2fsprogs 相关包 4.2.安装 kernel 相关包 4.3.客户端安装 4.4.服务器端安装 4.5.配置 5 ...

  3. Github Pages+Gridea设置DisqusJS评论

    1 前言 相信很多人都对Github Pages不默认,笔者之前写过了一篇文章,使用Github Pages去搭建博客的,链接可以戳这里. 但是唯一的不足是没有提到评论,因为当时笔者测试了一下,评论设 ...

  4. js格式化时间(指定模板格式)

    1 /** 格式化时间 2 * @param {string} date 需要格式化的时间 3 * @param {string} fmt 想要格式化的格式 4 */ 5 function forma ...

  5. Day16_93_IO_FileInputStream_读取文件字节流read()方法(一)

    读取文件字节流read()方法 * 文件字节输入流:按照字节方式读取文件 * java.io.* java.io.InputStream; java.io.FileInputStream; read( ...

  6. 2021S软件工程——个人阅读作业2

    2021S软件工程--个人阅读作业2 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 了解并熟悉软件开发的具体流程, ...

  7. 模拟退火算法Python编程(2)约束条件的处理

    1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资 ...

  8. 脱壳——UPX脱壳原理(脱壳helloworld)

    脱壳--UPX脱壳原理 脱壳步骤 1 找到OEP 2 dump(导出)内存文件 3 修复 1 找到OEP 1 程序运行先从壳代码运行,壳代码执行完之后会跳转到真正的OEP,也就是是说第一步,首先要找到 ...

  9. CSS快速入门基础篇,让你快速上手(附带代码案例)

    1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...

  10. Redhat中网络启动错误解决办法( Failed to start LSB: Bring up/down networking RTNETLINK answers: File exists)

    关于Redhat系列中网络启动失败的解决办法 报错: Failed to start LSB: Bring up/down networking.             RTNETLINK answ ...