微信蓝牙协议栈移植

微信蓝牙一般是基于串口的,所以只跟串口底层相关,也就是只需要将串口发送和接收两个函数填充到协议栈对外接口函数就行了。

先把微信SDK包加载在我们自己的项目中,整个移植过程我们只需要改动proto.c文件里边5个接口函数。

1、先把串口准备好

#include "uart.h"
#include "uart_config.h"

enum BLE_TRAN_FSM
{
    bMagicNumber = 0,
    bVer,
    nLenghth_hi,
    nLenghth_low,
    bdata,
};  

unsigned char recv_from_ble_buf[60]= {0};
unsigned char m_frame_buffer[256]={0};    //定义BLE帧结构,长度20个字节

unsigned char rxbuf[256]={0};
unsigned char rx_idx=0;
unsigned short uart0_rx_len;
unsigned short uart0_rx_cnt=0;
unsigned short uart0_buf_num=0;
static unsigned char uart0_tran_state = 0;
unsigned char uart0_tran_complt = 0;

void UART0_Init(void)
{
}

void uart0_putchar(unsigned char dat)
{
}

unsigned char UART0_Put_N_Byte (unsigned char* data_buf,unsigned char data_len)
{
    unsigned char i;
    //BT_EN_OFF;
    for (i = 0; i < data_len; i++)
    {
        uart0_putchar(data_buf[i]);
    }
    //BT_EN_ON;
    return data_len;
}

//拷贝串口缓冲区数据
unsigned char  UART0_Get_Buf(unsigned char* data_buf)
{
    unsigned char i;
    if(uart0_tran_complt)
    {
        uart0_buf_num = uart0_rx_len;
        for(i=0;i<uart0_rx_len;i++)
        {
            *data_buf ++ = rxbuf[i];
        }
        uart0_tran_complt = 0;
        uart0_rx_len = 0;
    }
    else
    {
        uart0_buf_num = 0;
    }
    return uart0_buf_num;
} 

void UART0_ISR(void)
{
    rxbuf[rx_idx]=UART0_D;
    rx_idx+=1;
    switch(uart0_tran_state)
    {
        case bMagicNumber:
            if(MAGIC_NUMBER_ID == rxbuf[0])
            {
                uart0_tran_state = bVer;
            }
            else
            {
                uart0_tran_state = bMagicNumber; rx_idx=0;
            }
            break;
        case bVer:
            if(DEVEICE_VERSION_ID == rxbuf[1])
            {
                uart0_tran_state = nLenghth_hi;
                //uart0_putstring("uart0_tran_state : bVer \r\n");
                //预留用一个定时器来做超时检测
                //uart0_timeout = 20;
            }
            else
            {
                uart0_tran_state = bMagicNumber; rx_idx=0;
            }
            break;

        case nLenghth_hi:
            uart0_tran_state = nLenghth_low;

        break;  

        case nLenghth_low:
            uart0_rx_len = (unsigned short) ((rxbuf[2]<<8)|rxbuf[3]);
            uart0_tran_state = bdata;
        break; 

        case bdata:
            if(rx_idx == uart0_rx_len)
            {
                uart0_tran_complt = 1;
                uart0_tran_state = bMagicNumber;
                rx_idx=0;

            }

            //串口超时之后再添加
            //if(uart0_timeout)
            //{
            //    for(iRev=0;iRev<20;iRev++) {rxbuf[]=0;rx_idx=0;}
            //}

        break;

        default:
            uart0_tran_state = bMagicNumber; rx_idx=0;

        break;
    }
}

2、将proto.c文件里边

    void Auth(unsigned char *pBuf , unsigned short  int Length);

void Unpack_Auth_Response(unsigned char *buf , unsigned short  int Length );

void Unpack_Init_Response(unsigned char *buf , unsigned short  int Length );

void SendDataToManuf(unsigned char *buf , unsigned short  int Length);

void Unpack_SendDataToManufacturerSvrResponse(unsigned char *buf , unsigned short  int Length );

5个函数中的串口发送函数换成我们自己的。

3、我们接收厂商服务器的数据都在

void Unpack_ManufacturerSvrSendDataPush(unsigned char *buf , unsigned short  int Length )

函数你解析.

到此结束,就这么简单。

时间: 2024-10-17 16:39:02

微信蓝牙协议栈移植的相关文章

在Android4.2中实现bluetooth A2dp Sink(一)——移植Android5.0蓝牙协议栈

一直以来,Android对于蓝牙的支持都很混乱,简直可以说是一坨shit.各个版本的协议栈都不一样,最早用的是bluez,进入4.x时代之后,换成了谷歌自己的bluedroid.换就换吧,至少等做完了再用吧,结果4.2.4.3.4.4的bluedroid全都不一样.这就对我等非专业蓝牙开发人员开发蓝牙制造了巨大的麻烦. 好了,吐槽到此为止,该说正事了.因为公司在做智能家居项目,需要在Android上实现蓝牙A2dp Sink的profile,这样我们的设备就能当蓝牙音箱来用了.我们是用的平台是全

在Android4.2中实现bluetooth A2dp Sink(二)——移植Android5.0蓝牙协议栈

在Android中,蓝牙系统的结构如下图所示: 在这个体系结构中,从下往上依次是模块驱动.蓝牙协议栈.Bluetooth.apk.Framework和各种蓝牙应用.其中,内核中的驱动是直接和硬件打交道的,一般由模块厂商提供.Android层中,最下面的是处理具体蓝牙协议的协议栈,里面包含了蓝牙各种profile的具体实现,Bluetooth.apk是蓝牙协议栈和framework之间的纽带,使用jni接口沟通了用java实现的framework和c实现的协议栈,并且实现了状态机来控制各种prof

微信蓝牙开发板体验和开发指引

一.     嵌入式企鹅圈微信蓝牙开发板竞猜活动和开发板资源 1. 之前參与微信公众号(嵌入式企鹅圈)有奖竞猜活动已经结束.嵌入式企鹅圈微信蓝牙开发板已经发出给前15名猜中嵌入式企鹅圈主人的童鞋们. 2.开发板百度资源路径 请增加微信公众号(嵌入式企鹅圈).发送515获取百度网盘资源. 下面指引引用的路径的根文件夹即是网盘资源根文件夹. 嵌入式企鹅圈微信蓝牙开发板基于TI CC2541蓝牙单芯片.没有开发板的伙伴们也能够获取开发资源,源代码project全然适用于以TI CC2541 蓝牙单芯片

Protocol buffer序列化及其在微信蓝牙协议中的应用

Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关.平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用.目前其已经提供 C/C++.Java.Python 等语言的 API. 一.Protocol buffer和XML 在数据通信传输时,一般需要将结构化的数据序列化成流进行传送,接收方再反序列化为原始格式数据进行处理.在Web通信领域,XML应用算是最通用的了.在时间性能上,虽然XML的序列化开销还可以,但是反序

蓝牙协议栈

http://blog.chinaunix.net/uid-21411227-id-2780269.html OSI/RM(Open System Interconnection/Reference Model)--开放系统互连参考模型,1983年ISO颁布的网络体系结构标准. 从低到高分七层:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层.各层之间相对独立,第N层向N+1层提供服务. 蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次. S

微信蓝牙外设协议 1

协议支持经典蓝牙和4.0 BLE 蓝牙,目前支持 ios 和 andriod 两个系统,后续会扩展到其他系统. PS:在 IOS 上比较稳定,在 Andriod 尚不稳定,因为 Andriod 手机的蓝牙芯片都不同,所以有些手机的蓝牙在执行某个命令的时候耗时太久,所以就连接不上,不稳定.而 IOS 手机使用的都是同一款蓝牙芯片,所以很稳定. 一. 整体架构 厂商服务器和外设,由厂商开发完成.微信会提供服务器的接口以对接厂商的服务器,会提供手机的接口(如本文规定的蓝牙协议)以对接厂商的外设. 二.

微信蓝牙BLE接入调试指引 第三方服务器篇

微信蓝牙BLE接入调试指引 第三方服务器篇 3 构建第三方服务器 服务器的功能主要是接收微信发过来的绑定.解绑.菜单等事件,以及微信发过来的文本.设备发过来的数据等. 3.1 编译服务程序 QQ提供了服务程序的DEMO,下载地址如下: Nordic nRF51822接入服务器端源代码 http://iot.weixin.qq.com/wiki/doc/blue/BlueDemoServer.zip 下载编译工具: Download Java 1.7 64位 http://www.cr173.co

arm linux串口蓝牙工具移植及使用

ap6212中串口蓝牙在linux下的使用记录 一.linux蓝牙工具移植 主要使用到的工具及相关库如下: bluez-libs-3.36 libxml2-2.7.4 dbus-1.0.2 glib-2.24.2 bluez-utils-3.36 openobex-1.5 下载相应的源码解压,按照上面的顺序进行编译. bluez-libs-3.36中增加mk.sh内容如下 #!/bin/sh ./configure --prefix=/usr/bluez --host=arm-linux --t

BLE 蓝牙协议栈开发

1.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 3.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)