主要来自http://www.cnblogs.com/bhlsheji/p/5340092.html

ble_app_proximity 程序,事实上跟防丢有关的程序

打开sdk包路径:D:\myfile\test\examples\ble_peripheral\ble_app_proximity\pca10028\s130\arm5_no_packs

1. TX Power Service 发射功率服务 :

该服务主要条件蓝牙的发射功率,从而影响设备与手机蓝牙通信距离 :

/**@brief Function for initializing the TX Power Service.

#define TX_POWER_LEVEL                      (0)

static void tps_init(void)
{
    uint32_t       err_code;
    ble_tps_init_t tps_init_obj;

memset(&tps_init_obj, 0, sizeof(tps_init_obj));
    tps_init_obj.initial_tx_power_level = TX_POWER_LEVEL;

BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(&tps_init_obj.tps_attr_md.read_perm);
    BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&tps_init_obj.tps_attr_md.write_perm);

err_code = ble_tps_init(&m_tps, &tps_init_obj);
    APP_ERROR_CHECK(err_code);
}

TX_POWER_LEVEL的范围 是4 到-20db  随着数据的减小,通信距离变短

2.Immediate Alert Service 即时报警服务

该服务能够通过手机APP 找到设备 蓝牙建立连接之后,在手机的 APP中有 Find Mebutton有效,按下Find Me ,开发板的灯会亮,这个时候 Find Mebutton 变成Silent Mebutton ,在按下Silent Mebutton 相应灯会灭,相比5介绍的Immediate Alert Service client 是一个相反的寻找方式。

/**@brief Function for initializing the Immediate Alert Service.
 */
static void ias_init(void)
{
    uint32_t       err_code;
    ble_ias_init_t ias_init_obj;

memset(&ias_init_obj, 0, sizeof(ias_init_obj));
    ias_init_obj.evt_handler = on_ias_evt;

err_code = ble_ias_init(&m_ias, &ias_init_obj);
    APP_ERROR_CHECK(err_code);
}

通过点击手机APP中的  Find Mebutton 或Silent Mebutton切换,会进入函数执行相应的灯ON/OFF,

static void on_ias_evt(ble_ias_t * p_ias, ble_ias_evt_t * p_evt)
{
    switch (p_evt->evt_type)
    {
        case BLE_IAS_EVT_ALERT_LEVEL_UPDATED:

alert_signal(p_evt->params.alert_level);
            break;//BLE_IAS_EVT_ALERT_LEVEL_UPDATED

default:
            // No implementation needed.
            break;
    }
}

通过手机直接控制设备或在蓝牙断开时,设备会执行灯闪烁或报警

/**@brief Function for the Signals alert event from Immediate Alert or Link Loss services.
 *
 * @param[in] alert_level  Requested alert level.
 */
static void alert_signal(uint8_t alert_level)
{
    uint32_t err_code;
      
    switch (alert_level)
    {
        case BLE_CHAR_ALERT_LEVEL_NO_ALERT:
            err_code = bsp_indication_set(BSP_INDICATE_ALERT_OFF);
            APP_ERROR_CHECK(err_code);
     NRF_LOG_DEBUG("BLE_CHAR_ALERT_LEVEL_NO_ALERT\r\n");
            break;//BLE_CHAR_ALERT_LEVEL_NO_ALERT

case BLE_CHAR_ALERT_LEVEL_MILD_ALERT:
            err_code = bsp_indication_set(BSP_INDICATE_ALERT_0);
            APP_ERROR_CHECK(err_code);
 NRF_LOG_DEBUG("BLE_CHAR_ALERT_LEVEL_MILD_ALERT\r\n");
            break;//BLE_CHAR_ALERT_LEVEL_MILD_ALERT

case BLE_CHAR_ALERT_LEVEL_HIGH_ALERT:
NRF_LOG_DEBUG("BLE_CHAR_ALERT_LEVEL_HIGH_ALERT\r\n");
            err_code = bsp_indication_set(BSP_INDICATE_ALERT_3);
            APP_ERROR_CHECK(err_code);
            break;//BLE_CHAR_ALERT_LEVEL_HIGH_ALERT

default:
            // No implementation needed.
            break;
    }
}

3.Link Loss Service 连接丢失服务

当连接丢失之后(有可能是电池没电或者分离APP太远)都会导致连接丢失事件,丢失后会通过通知的方式发送到手机APP,手机依据

该事件做出响应, 程序中使用通知的方式显示出来,

/**@brief Function for initializing the Link Loss Service.
 */
static void lls_init(void)
{
    uint32_t       err_code;
    ble_lls_init_t lls_init_obj;

// Initialize Link Loss Service
    memset(&lls_init_obj, 0, sizeof(lls_init_obj));

lls_init_obj.evt_handler         = on_lls_evt;
    lls_init_obj.error_handler       = service_error_handler;
    lls_init_obj.initial_alert_level = INITIAL_LLS_ALERT_LEVEL;

BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(&lls_init_obj.lls_attr_md.read_perm);
    BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(&lls_init_obj.lls_attr_md.write_perm);

err_code = ble_lls_init(&m_lls, &lls_init_obj);
    APP_ERROR_CHECK(err_code);
}

蓝牙断开或者关机会进入 on_lls_evt 函数中,执行相应的报警或灯的控制

/**@brief Function for handling Link Loss events.
 *
 * @details This function will be called for all Link Loss events which are passed to the
 *          application.
 *
 * @param[in] p_lls  Link Loss structure.
 * @param[in] p_evt  Event received from the Link Loss service.
 */
static void on_lls_evt(ble_lls_t * p_lls, ble_lls_evt_t * p_evt)
{
    switch (p_evt->evt_type)
    {
        case BLE_LLS_EVT_LINK_LOSS_ALERT:
   
            alert_signal(p_evt->params.alert_level);
            break;//BLE_LLS_EVT_LINK_LOSS_ALERT

default:
            // No implementation needed.
            break;
    }
}

4. Battery Service 电池服务

通过AD采样电池电压,发送到手机APP

5. Immediate Alert Service client -location role of the Find Me profile 定位器服务

该服务能够使用按键报警服务,按键按下,在按键处理程序中设置好报警的级别之后,通过蓝牙发送到手机APP,APP已经报警级别做不同的动作,

程序通过按键控制手机响铃和停止响铃。

/**@brief Function for initializing the immediate alert service client.

static void ias_client_init(void)
{
    uint32_t         err_code;
    ble_ias_c_init_t ias_c_init_obj;

memset(&ias_c_init_obj, 0, sizeof(ias_c_init_obj));

m_is_high_alert_signalled = false;

ias_c_init_obj.evt_handler   = on_ias_c_evt;
    ias_c_init_obj.error_handler = service_error_handler;

err_code = ble_ias_c_init(&m_ias_c, &ias_c_init_obj);
    APP_ERROR_CHECK(err_code);
}

通过按键来控制手机报警,按一下手机报警响,再次按下手机报警关

/**@brief Function for initializing buttons and leds.
 *
 * @param[out] p_erase_bonds  Will be true if the clear bonding button was pressed to wake the application up.
 */
static void buttons_leds_init(bool * p_erase_bonds)
{
    bsp_event_t startup_event;

uint32_t err_code = bsp_init(BSP_INIT_LED|BSP_INIT_BUTTONS,
                                 APP_TIMER_TICKS(100, APP_TIMER_PRESCALER),
                                 bsp_event_handler);//BSP_INIT_LED |BSP_INIT_BUTTONS,

APP_ERROR_CHECK(err_code);

err_code = bsp_btn_ble_init(NULL, &startup_event);
   APP_ERROR_CHECK(err_code);

*p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);
}

/**@brief Function for handling events from the BSP module.
 *
 * @param[in]   event   Event generated when button is pressed.
 */
static void bsp_event_handler(bsp_event_t event)
{

uint32_t err_code;

switch (event)
    {
        case BSP_EVENT_SLEEP:
           // sleep_mode_enter();
            break;//BSP_EVENT_SLEEP

case BSP_EVENT_DISCONNECT:
            err_code = sd_ble_gap_disconnect(m_ias_c.conn_handle,
                                             BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            if (err_code != NRF_ERROR_INVALID_STATE)
            {
                APP_ERROR_CHECK(err_code);
            }
            break;//BSP_EVENT_DISCONNECT

case BSP_EVENT_KEY_0:
        {
            if (m_is_ias_present)
            {
             
                if (!m_is_high_alert_signalled)
                {
                    err_code =
                        ble_ias_c_send_alert_level(&m_ias_c, BLE_CHAR_ALERT_LEVEL_HIGH_ALERT);
NRF_LOG_DEBUG("m_is_high_alert_signalled000\r\n");
                }
                else
                {
                    err_code = ble_ias_c_send_alert_level(&m_ias_c, BLE_CHAR_ALERT_LEVEL_NO_ALERT);
NRF_LOG_DEBUG("m_is_high_alert_signalled111\r\n");
                }

if (err_code == NRF_SUCCESS)
                {
                    m_is_high_alert_signalled = !m_is_high_alert_signalled;
 
                }
                else if (
                    (err_code != BLE_ERROR_NO_TX_PACKETS)
                    &&
                    (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING)
                    &&
                    (err_code != NRF_ERROR_NOT_FOUND)
                        )
                {
                    APP_ERROR_HANDLER(err_code);
                }
            }

}break;//BSP_EVENT_KEY_0

case BSP_EVENT_KEY_1: // STOP_ALERTING_BUTTON_ID
            err_code = bsp_indication_set(BSP_INDICATE_ALERT_OFF);
            APP_ERROR_CHECK(err_code);
            break;//BSP_EVENT_KEY_1

default:
            break;
    
    }

}

51822 proximity相关推荐

  1. 51822模拟ble广播-理论

    http://blog.chinaunix.net/uid/28852942/cid-219646-list-1.html 这讲教程介绍如何使用51822的radio部分来模拟实现ble广播功能,并使 ...

  2. 51822模拟ble广播-实践

    http://blog.chinaunix.net/uid-28852942-id-5745469.html 理论部分主要介绍了BLE广播包的 数据包格式,知道了数据包格式只需要按照格式要求设置数据包 ...

  3. NEU(Fst Network Embedding Enhancement via High Order Proximity Approximation)

    NEU(Fst Network Embedding Enhancement via High Order Proximity Approximation) NEU(Fst Network Embedd ...

  4. verp之增加接近传感器(proximity sensor)

    V-REP offers a very powerful and efficient way to simulate proximity sensors. The user can model alm ...

  5. Android 8.1 DisplayPowerController(二) Proximity Sensor的亮灭屏

    概述 P-Sensor亮屏和按Power键亮屏流程还是有些不同之处,如开始调用位置.PowerManagerService中的流程等,由于在平常遇到过许多PSensor亮屏相关Bug,因此这里独立地进 ...

  6. ElasticSearch教程——proximity match 近似匹配

    ElasticSearch汇总请查看:ElasticSearch教程--汇总篇 1.什么是近似匹配 两个句子 java is my favourite programming language, an ...

  7. android 距离传感器 api,Android传感器API之:近距离感应Proximity功能源码

    并不是所有Android手机上都保留有距离感应器.基于这个感应器可以有一些很不错的小应用,比如近距离感应锁屏.解锁-- 分享Rexsee的距离感应功能源码,回头可以自个儿做..更多的传感器API我这几 ...

  8. Proximity indication

    [摘要]文章首先介绍LTE Release 9版本的基本情况,然后详细分析了Rel 9新增功能.增强功能以及信令增强,并对Rel 9新增功能中紧急呼叫的两种应用场景进行验证,给出了实现验证的步骤及信令 ...

  9. Proximity模块管理设备距离传感器,可获取当前设备的接近距离信息,通过plus.proximity可获取设备距离传感管理对象

    方法: getCurrentProximity: 获取当前设备的接近距离信息 watchProximity: 监听设备接近距离的变化 clearWatch: 关闭监听设备接近距离变化 回调方法: Pr ...

最新文章

  1. SQL备份与恢复之备份类型和选项
  2. 计算机电缆zrdjypvp,ZRDJYPVP电缆什么标准
  3. python后端开发工程师做什么-如何面试Python后端工程师?
  4. Mysql用navicat操作导出查询结果
  5. 15.4.2:可变参数与泛型化方法
  6. html 占用空间 滚动轴_滚动轴承润滑及密封,轧机轴承技术(104)
  7. windows下eclipse搭建android_ndk开发环境
  8. 创业者应该了解的五大无服务器AWS服务
  9. win7下cmd常用命令
  10. ue4文档接口类学习
  11. 笔记本指纹识别linux版驱动程序,联想Thinkpad指纹识别驱动
  12. 基于SSH的网上购书系统设计与实现
  13. 互联网晚报 | 06月08日 星期三 | ​教育部回应高考试题疑泄露;​上海落户新规;字节跳动考虑出售得物少数股份...
  14. 实变函数自制笔记9:勒贝格积分的极限定理
  15. 京东数据化运营(三)- 复购率
  16. Linux(Centos7) 报 “RTNETLINK answers: File exists” 问题的解决
  17. axios 的简化写法
  18. Go语言操作sqllite
  19. Git操作 fatal: bad numeric config value ‘“false”‘ for ‘http.sslverify‘: invalid unit错误
  20. 客户端与服务器端通信方式总结

热门文章

  1. 推广、策划、运营都在用这些工具,不知道就太out了
  2. 初识Postman工具
  3. pip install 后面加个点是什么意思?
  4. Python 赵云被动免伤计算
  5. 邮件发送时间怎么修改 python_使用python通过电子邮件发送日期时间
  6. 链家租房市场分析(R爬虫、数据可视化)
  7. WPF开发经验-实现Win10虚拟触摸键盘
  8. 通过安卓手机,获取微信小程序包进行反编译方法
  9. android什么叫服务器,Android系统中神秘的Bootloader究竟是什么
  10. [cesium] | 城市警情模拟