nrf51822 --- 微信移植 (官方例子移植到SDK10.0)

1.目的

      把官方的代码移植到sdk10.0版本

2.分析

    由于官方的版本过低,移植到高版本

3.平台:

协议栈版本:SDK10.0.0

编译软件:keil 5.12

硬件平台:nrf51822最小系统

例子:SDK 10.0.0\examples\ble_peripheral\ble_app_uart\pca10028\s110\arm4

4.步骤

   需要准备的资料,

    一个是微信官方代码,一个是nrfSDK

   微信下载地址:http://iot.weixin.qq.com/wiki/new/index.html?page=6-1  

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第1张图片

首先,添加几个文件夹:

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第2张图片

文件夹的内容分别实在微信的对应名字的文件copy出来的,把他们加到SDK10.0.0\examples\ble_peripheral\ble_app_uart\pca10028\s110\arm4工程里面,并添加对应的路径

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第3张图片

main.c里面添加


ble_evt_dispatch()函数变为如下:

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第4张图片

services_init()函数变为:

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第5张图片

advertising_init()函数变为:

  1. **@brief Function for initializing the Advertising functionality.  
  2.  */  
  3. static void advertising_init(void)  
  4. {  
  5.     uint32_t      err_code;  
  6.     ble_advdata_t advdata;  
  7.     //ble_advdata_t scanrsp;  
  8.       
  9. //   uint32_t      err_code;  
  10.     //ble_advdata_t advdata;  
  11.         /**< LE General Discoverable Mode, BR/EDR not supported. */  
  12.     uint8_t       flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;  
  13.   
  14.     ble_uuid_t adv_uuids[] =  
  15.     {  
  16.         {BLE_UUID_WECHAT_SERVICE,         BLE_UUID_TYPE_BLE}  
  17.     };  
  18.         memset(&advdata, 0, sizeof(advdata));  
  19.           
  20.     advdata.name_type               = BLE_ADVDATA_FULL_NAME;  
  21.     advdata.include_appearance      = false;      
  22.     advdata.flags                     = flags;  
  23.     advdata.uuids_complete.uuid_cnt = sizeof(adv_uuids) / sizeof(adv_uuids[0]);  
  24.     advdata.uuids_complete.p_uuids  = adv_uuids;          
  25.           
  26.         ble_advdata_manuf_data_t        manuf_data;  
  27.     manuf_data.company_identifier = COMPANY_IDENTIFIER;  
  28.     manuf_data.data.size          = sizeof(m_addl_adv_manuf_data);  
  29.     manuf_data.data.p_data        = m_addl_adv_manuf_data;  
  30.     advdata.p_manuf_specific_data = &manuf_data;  
  31.           
  32.     err_code = ble_advdata_set(&advdata, NULL);  
  33.     APP_ERROR_CHECK(err_code);  
  34.             // Initialize advertising parameters (used when starting advertising)  
  35.     //memset(&m_adv_params, 0, sizeof(m_adv_params));  
  36.   
  37.   
  38.     // Build and set advertising data  
  39.     // Build advertising data struct to pass into @ref ble_advertising_init.  
  40. //    memset(&advdata, 0, sizeof(advdata));  
  41. //    advdata.name_type          = BLE_ADVDATA_FULL_NAME;  
  42. //    advdata.include_appearance = false;  
  43. //    advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;  
  44. //    memset(&scanrsp, 0, sizeof(scanrsp));  
  45. //    scanrsp.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);  
  46. //    scanrsp.uuids_complete.p_uuids  = m_adv_uuids;  
  47.   
  48.     ble_adv_modes_config_t options = {0};  
  49.     options.ble_adv_fast_enabled  = BLE_ADV_SLOW_ENABLED;  
  50.     options.ble_adv_fast_interval = APP_ADV_INTERVAL;  
  51.     options.ble_adv_fast_timeout  = APP_ADV_TIMEOUT_IN_SECONDS;  
  52.   
  53.     err_code = ble_advertising_init(&advdata, NULL, &options, on_adv_evt, NULL);  
  54.     APP_ERROR_CHECK(err_code);  
  55. }  
添加如下代码:

  1. /**************************************************************************** 
  2. ?    ?: get_mac_addr() 
  3. ?    ?: »ñµÃÀ¶ÑÀµÄmacµØÖ· 
  4. ????: void 
  5. ????: ? 
  6. ****************************************************************************/  
  7. void get_mac_addr(uint8_t *p_mac_addr)  
  8. {  
  9.         uint32_t error_code;  
  10.         ble_gap_addr_t *p_mac_addr_t = (ble_gap_addr_t*)malloc(sizeof(ble_gap_addr_t));  
  11.         error_code = sd_ble_gap_address_get(p_mac_addr_t);  
  12.         APP_ERROR_CHECK(error_code);  
  13. #ifdef CATCH_LOG  
  14.         printf("\r\n error:%d",error_code);  
  15.         printf("\r\n get mac addr");  
  16. #endif  
  17.         uint8_t *d = p_mac_addr_t->addr;     for ( uint8_t i = 6; i >0;)  
  18.     {     
  19.         i--;  
  20.         p_mac_addr[5-i]= d[i];  
  21.         #ifdef CATCH_LOG  
  22.         printf ( ":%02x", d[i]);  
  23.         #endif  
  24.     }  
  25.     #ifdef CATCH_LOG  
  26.         putchar ( '\n' );  
  27.     #endif  
  28.     free(p_mac_addr_t);  
  29.     p_mac_addr_t = NULL;  
  30. }  
  1. /**************************************************************************** 
  2. ?    ?: data_handler_init() 
  3. ?    ?: »Øµ÷º¯Êý 
  4. ????: void 
  5. ????: ? 
  6. ****************************************************************************/  
  7. void    data_handler_init(data_handler** p_data_handler, uint8_t product_type)  
  8. {  
  9.     if (*p_data_handler == NULL)   
  10.         {  
  11.             *p_data_handler = get_handler_by_type(product_type);  
  12.         }  
  13. }  
  1. /**************************************************************************** 
  2. ?    ?: register_all_products() 
  3. ?    ?: ×¢²á»Øµ÷º¯Êý 
  4. ????: void 
  5. ????: ? 
  6. ****************************************************************************/  
  7. //function for register all products  
  8.  void register_all_products(void) {  
  9.         REGISTER(mpbledemo2);  
  10. }  
主函数如下:

  1. /**@brief Application main function. 
  2.  */  
  3. int main(void)  
  4. {  
  5.     uint32_t err_code;  
  6.     bool erase_bonds;  
  7.     uint8_t  start_string[] = START_STRING;  
  8.       
  9.     // Initialize.  
  10.     APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);  
  11.     uart_init();  
  12.     buttons_leds_init(&erase_bonds);  
  13.     ble_stack_init();  
  14.     //微信处理    
  15.       get_mac_addr(m_addl_adv_manuf_data);  
  16.     register_all_products();  
  17.       data_handler_init(&m_mpbledemo2_handler,  PRODUCT_TYPE_MPBLEDEMO2);  
  18.       
  19.     gap_params_init();  
  20.     services_init();  
  21.     advertising_init();  
  22.     conn_params_init();  
  23.       
  24.     printf("%s",start_string);  
  25.     //  
  26.       
  27.     err_code = ble_advertising_start(BLE_ADV_MODE_FAST);  
  28.     APP_ERROR_CHECK(err_code);  
  29.   
  30.     // Enter main loop.  
  31.     for (;;)  
  32.     {  
  33.         power_manage();  
  34.               m_mpbledemo2_handler->m_data_main_process_func(&m_ble_wechat);  
  35.     }  
  36. }  
OK,移植完毕。。编译如下。。。有重复定义的宏。

nrf51822 --- 微信移植 (官方例子移植到SDK10.0)_第6张图片

打开#include "ble_wechat_service.h"文件,屏蔽


OK。。。待测试。




你可能感兴趣的:(射频电路(RFID)和物联网)