NXP的这个BLE蓝牙方案也很有趣, 一起研究.

这个函数在app_gpa_task.c里面

****************************************************************************************
 * @brief Handles create connection request complete event from the GAP.    *//**  处理GAP连接结束后的事件.
 *
 * @param[in] msgid     GAP_LE_CREATE_CONN_REQ_CMP_EVT   参数一是GAP连接请求处理完毕的event的id
 * @param[in] param     Pointer to struct gap_le_create_conn_req_cmp_evt 参数二是这个event的struct的指针.
 * @param[in] dest_id   TASK_APP   目的设备的id
 * @param[in] src_id    TASK_GAP  源设备的id
 *
 * @return If the message was consumed or not.  return是消息是否成功发送.
 * @description
 *
 * This handler is used to inform the application the outcome of connection establishment.
 ****************************************************************************************
 */
#if (!BLE_BROADCASTER && !BLE_OBSERVER)     //确定一下不是广播或者观察设备.
int app_gap_le_create_conn_req_cmp_evt_handler(ke_msg_id_t const msgid, struct gap_le_create_conn_req_cmp_evt const *param,
                                               ke_task_id_t const dest_id, ke_task_id_t const src_id)   //参数跟函数名.
{
    QPRINTF("Connection with %02X%02X%02X%02X%02X%02X result is 0x%x.\r\n",   //打印一下, 这个连接上来的设备是谁, 地址多少, 这个地址会变化, 应该不是mac地址...
        param->conn_info.peer_addr.addr[5],
        param->conn_info.peer_addr.addr[4],
        param->conn_info.peer_addr.addr[3],
        param->conn_info.peer_addr.addr[2],
        param->conn_info.peer_addr.addr[1],
        param->conn_info.peer_addr.addr[0],
        param->conn_info.status);

if (APP_ADV == ke_state_get(TASK_APP))  //这里TASK_APP, 是在一个在ke_task.h的文件里面定义的, 我看了一下, 跟OSAL的定义很像, 定义了一个枚举类型, 里面有两个是app层面的task, 一个叫TASK_APP, 另一个叫TASK_USER, 这里的意思是确定一下当前的state是广告
    {
        ke_state_set(TASK_APP, APP_IDLE);  //既然连接上了, 就把state设置成APP_IDLE
        app_set_role(GAP_PERIPHERAL_SLV);   //然后把角色设置成peripheral还是个slave
    }
    else
    {
        app_set_role(GAP_CENTRAL_MST);   //如果当前不是广告的, 是这个设备主动连的人家, 那就是central+master了.
    }

if (param->conn_info.status == CO_ERROR_NO_ERROR)   //这里是连接出错的处理
    {
        app_set_link_status_by_conhdl(param->conn_info.conhdl, &param->conn_info, true);

// Enable service here, for Server init phase 2
#if (BLE_PERIPHERAL)   //如果设备设置成peripheral, 那么就要启动server, 提供service
        app_enable_server_service(true, param->conn_info.conhdl);
#endif
    }

app_task_msg_hdl(msgid, param);    //这里估计就跟OSAL一样, 将标记恢复成已处理状态, 避免事件被重复执行.
    
    return (KE_MSG_CONSUMED);
}
#endif

上面是连接成功, 紧接着断开就不分析了, 差不多.

来看看写入char的值是如何处理的.

在app_qpps_task.c里面, 有个app_qpps_data_ind_handler的函数.

///Client value send to APP
    QPPS_DAVA_VAL_IND,

****************************************************************************************
 * @brief Handles the data ind message from the QPPS.       *//**
 *
 * @param[in] msgid     QPPS_DAVA_VAL_IND  看上面的define, 内意思, 这个时候, client, 就是手机, 发送了数据给server, 即9020
 * @param[in] param     Pointer to the struct qpps_data_val_ind   数据都在这儿了.
 * @param[in] dest_id   TASK_APP 
 * @param[in] src_id    TASK_QPPS
 *
 * @return If the message was consumed or not.
 * @description
 * This handler is used to handle the data sent form peer device
 *
 ****************************************************************************************
 */
int app_qpps_data_ind_handler(ke_msg_id_t const msgid,
                              struct qpps_data_val_ind *param,
                              ke_task_id_t const dest_id,
                              ke_task_id_t const src_id)
{
    if (param->length > 0)
    {
        QPRINTF("len=%d, I%02X", param->length, param->data[0]);
    }
    QPRINTF("\r\n");

return (KE_MSG_CONSUMED);
}

我xue微的修改一下, 把内容打印一下吧.

unsigned int i;
    QPRINTF("Client sent:");
    if (param->length > 0)
    {
        //QPRINTF("len=%d, I%02X", param->length, param->data[0]);
            for(i=0;i<param->length;i++){
            QPRINTF("%02X ", param->data[i]);
            }
    }
    QPRINTF("\r\n");

欧了.

NXP QN9020的更多相关文章

  1. NXP NFC移植及学习笔记(原创)

    NFC功能介绍 NFC 目前使用的三种功能: 1. P2P模式:基于LLCP协议的基础上,以NDEF数据交换格式来通信. 2. 读写模式:当作为读卡器,对NFC Tag的读写. 3. 卡模拟模式:模块 ...

  2. NXP恩智浦P89V51RB2/RC2/RD2单片机解密芯片破解方法!

    NXP恩智浦P89V51RB2/RC2/RD2单片机解密芯片破解 P89V51RB2/RC2/RD2是一款80C51微控制器,包含16/32/64kB Flash和1024字节的数据RAM. P89V ...

  3. NXP恩智浦P89V52X2单片机破解P89C52X2BA芯片解密技术分享!

    NXP恩智浦P89V52X2单片机破解P89C52X2BA芯片解密 P89V52X2是一款带有8kB Flash.256B数据RAM和192B数据EEPROM的80C51微控制器.这个器件可以在完全替 ...

  4. NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?

    NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591  单片机解密 #####[ ...

  5. NXP Mifare S50标准IC卡- 访问位(Access Bits) 分析

    Mifare S50 标准IC卡有1K 字节的EEPROM,主要用来存储数据和控制信息.1K 字节的EEPROM分成16 个区,每区又分成4 段,每1段中有16 个字节.每个区的最后一个段叫“尾部&q ...

  6. Cortex-M0(NXP LPC11C14)启动代码分析

    作者:刘老师,华清远见嵌入式学院讲师. 启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程 ...

  7. NXP开源自动驾驶计算平台Bluebox 打造现实无人汽车

    知名半导体制造商恩智浦NXP已经准备好了自家的自动驾驶计算开源平台Bluebox,将为汽车制造商提供现成的一体化自动 驾驶计算解决方案.专为自动驾驶设备的BlueBox中央计算引擎.不仅能够为无人驾驶 ...

  8. Cheap CK100 1024 tokens NXP FIX Chip on Eobd2

    CK100 is a well-known and cost-effective key programmer for many cars. Some said it is a must for bo ...

  9. NXP LPC11xx I2C Slave 从机程序

    /**************************************************************************** * $Id:: i2cslave.c 363 ...

随机推荐

  1. Fast and Robust Hand Tracking Using Detection-Guided Optimization

    http://handtracker.mpi-inf.mpg.de/projects/FastHandTracker/

  2. 微信公众平台开发(98) UnionID

    关键字 微信公众平台 微信开放平台 UnionID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin98-get-user-UnionID.html ...

  3. Android Platform Guide

    This guide shows how to set up your SDK environment to deploy Cordova apps for Android devices, and ...

  4. 项目重新部署后报The attribute required is undefined for the annotation type XmlElementRef

    在另外一台机器上部署项目,项目导进Eclipse中发现有异常 public class BooleanFeatureType extends FeatureBaseType{ @XmlElementR ...

  5. Android之绚丽的图片游览效果--有点像W7效果,透明的倒影,层叠的图片,渐变的颜色透明度

    这里转载一个牛人的博客:http://www.cnblogs.com/tankaixiong/archive/2011/02/24/1964340.html 下面,是我参照他的博客实现的一个效果图.这 ...

  6. SLAM学习笔记(2)SLAM算法

    SLAM算法分为三类:Kalman滤波.概率滤波.图优化 Kalman滤波方法包括EKF.EIF:概率滤波包括RBPF,FastSLAM是RBPF滤波器最为成功的实例, 也是应用最为广泛的SLAM方法 ...

  7. 从 Vue 1.x 迁移

    FAQ 哇,非常长的一页!是否意味着 Vue2.0 已经完全不同了呢,是否需要从头学起呢,Vue1.0 的项目是不是没法迁移了? 非常开心地告诉你,并不是! 几乎90%的 API 和核心概念都没有变. ...

  8. PHP编码规范(转)

    一.文件格式 1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" .这是为了防止多余的空格或者其它字符影响到代码.例如:<?php$foo = ' ...

  9. 使用HttpClient抓取网站首页

    HttpClient是Apache开发的第三方Java库,可以用来进行网络爬虫的开发,相关API的可以在http://hc.apache.org/httpcomponents-client-ga/ht ...

  10. 启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

    此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { publi ...