一、简介

本文介绍如何在SimpleBLEPeripheral工程中,以char7为例。实现用手机端APP更改蓝牙设备名称.

二、实验平台

编译环境:IAR820.02

协议栈:BLE-CC254x-1.40

代码查看器:Source Insight 3.5

硬件平台:SmartRf 开发板

安卓APP平台: SmartRf

三、编写声明

作者:爱已oО欠费

相关CC2541群:606444519

淘宝小店:https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4023-16306486995.5.hdKUUO&id=548576956486
四、实验前提

请完成以下博文:

【cc2541历程】ds18b20发送数值到App:http://blog.csdn.net/wangjiawu7/article/details/72648402

五、硬件原理图

暂无

六、实验步骤

1.增加char7宏定义((simpleGATTprofile.h中CONSTANTS段部分))
#define SIMPLEPROFILE_CHAR1                   0  // RW uint8 - Profile Characteristic 1 value
#define SIMPLEPROFILE_CHAR2                   1  // RW uint8 - Profile Characteristic 2 value
#define SIMPLEPROFILE_CHAR3                   2  // RW uint8 - Profile Characteristic 3 value
#define SIMPLEPROFILE_CHAR4                   3  // RW uint8 - Profile Characteristic 4 value
#define SIMPLEPROFILE_CHAR5                   4  // RW uint8 - Profile Characteristic 5 value#define SIMPLEPROFILE_CHAR6            5  //RW uint8 - Profile Characteristic 6 value
#define SIMPLEPROFILE_CHAR7                   6  // RW uint8 - Profile Characteristic 7 value
#define SIMPLEPROFILE_CHARA         9  //RW uint8 - Profile Characteristic A value      // Simple Profile Service UUID
#define SIMPLEPROFILE_SERV_UUID               0xFFF0// Key Pressed UUID
#define SIMPLEPROFILE_CHAR1_UUID            0xFFF1
#define SIMPLEPROFILE_CHAR2_UUID            0xFFF2
#define SIMPLEPROFILE_CHAR3_UUID            0xFFF3
#define SIMPLEPROFILE_CHAR4_UUID            0xFFF4
#define SIMPLEPROFILE_CHAR5_UUID            0xFFF5#define SIMPLEPROFILE_CHAR6_UUID            0xFFF6
#define SIMPLEPROFILE_CHAR7_UUID            0xFFF7
#define SIMPLEPROFILE_CHARA_UUID            0xFFFA// Simple Keys Profile Services bit fields
#define SIMPLEPROFILE_SERVICE               0x00000001// Length of Characteristic 5 in bytes
#define SIMPLEPROFILE_CHAR5_LEN           5 #define SIMPLEPROFILE_CHAR6_LEN          4     // 温度传输
#define SIMPLEPROFILE_CHAR7_LEN          20    // 设备名称
#define SIMPLEPROFILE_CHARA_LEN           4     // pwm 输出
2.增加char6的UUID(simpleGATTprofile.c中GLOBAL VARIABLES段部分)
// Characteristic 7 UUID: 0xFFF7
CONST uint8 simpleProfilechar7UUID[ATT_BT_UUID_SIZE] =
{ LO_UINT16(SIMPLEPROFILE_CHAR7_UUID), HI_UINT16(SIMPLEPROFILE_CHAR7_UUID)
};
3.增加char7的配置属性(simpleGATTprofile.c中Profile Attributes - variables段)
// Simple Profile Characteristic 7 Properties
static uint8 simpleProfileChar7Props = GATT_PROP_READ | GATT_PROP_WRITE;// Characteristic 5 Value
static uint8 simpleProfileChar7[SIMPLEPROFILE_CHAR7_LEN] = {0};
static uint8 simpleProfileChar7Len = 0;// Simple Profile Characteristic 7 User Description
static uint8 simpleProfileChar7UserDesp[19] = "Device Name Config\0";
4.修改属性表.

1)修改属性表宏定义(simpleGATTprofile.c中CONSTANTS部分):

#define SERVAPP_NUM_ATTR_SUPPORTED                   27//24//20//17
2)修改属性表(simpleGATTprofile.c中simpleProfileAttrTbl部分):
      // Characteristic 7 Declaration{ { ATT_BT_UUID_SIZE, characterUUID },GATT_PERMIT_READ, 0,&simpleProfileChar7Props },// Characteristic Value 7{ { ATT_BT_UUID_SIZE, simpleProfilechar7UUID },GATT_PERMIT_READ | GATT_PERMIT_WRITE,0, simpleProfileChar7 },// Characteristic 7 User Description{ { ATT_BT_UUID_SIZE, charUserDescUUID },GATT_PERMIT_READ, 0, simpleProfileChar7UserDesp },
5.修改特征值参数
1)增加char7数值可设置处理(simpleGATTprofile.c中SimpleProfile_SetParameter部分):
    case SIMPLEPROFILE_CHAR7:case SIMPLEPROFILE_CHARA:ret = bleInvalidRange;break;
2)增加char7数值可获取处理(simpleGATTprofile.c中SimpleProfile_GetParameter部分):
    case SIMPLEPROFILE_CHAR7:VOID osal_memcpy( value, simpleProfileChar7, simpleProfileChar7Len );*returnBytes = simpleProfileChar7Len;break;  
6.增加修改特征值读写
1)增加char7数值读取处理(simpleGATTprofile.c中simpleProfile_ReadAttrCB部分):
  case SIMPLEPROFILE_CHAR7_UUID:case SIMPLEPROFILE_CHAR6_UUID:case SIMPLEPROFILE_CHARA_UUID:{uint8 newValue[20];extern uint8 simpleProfileReadConfig(uint16 uuid, uint8 *newValue);            *pLen = simpleProfileReadConfig(uuid, newValue);VOID osal_memcpy( pValue, newValue, *pLen );}break;
2)增加char7数值写入处理(simpleGATTprofile.c中simpleProfile_WriteAttrCB部分)
        case SIMPLEPROFILE_CHAR7_UUID:if ( offset == 0 ){if ( len > SIMPLEPROFILE_CHAR7_LEN ){status = ATT_ERR_INVALID_VALUE_SIZE;}}else{status = ATT_ERR_ATTR_NOT_LONG;}//Write the valueif ( status == SUCCESS ){VOID osal_memcpy( pAttr->pValue, pValue, len );simpleProfileChar7Len = len;notifyApp = SIMPLEPROFILE_CHAR7;}break;    
7.修改应用层
1)修改设备初始化名称(simpleBLEPeripheral.c中GAP GATT Attributes部分)
// GAP GATT Attributes
#define DEVICE_NAME  "SmartRF"
2)修改结构体初始化(simpleBLEPeripheral.c中 Simple GATT Profile Callbacks)
typedef struct
{uint8 name[GAP_DEVICE_NAME_LEN];      //本机设备名称uint8 pwm[4];
}SYS_CONFIG;SYS_CONFIG sys_set;
3)初始化相关参数(simpleBLEPeripheral.c中GATT Profile Callbacks部分)
void Init_Paramter(void)
{int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_set);if(NV_OPER_FAILED == ret8){// 未初始化osal_memset(&sys_set, 0, sizeof(SYS_CONFIG));sprintf((char*)sys_set.name, DEVICE_NAME);  // 默认设备名称// 4路 pwm 设置, 相对于0xFF 的占空比sys_set.pwm[0] = 0x10;sys_set.pwm[1] = 0x20;sys_set.pwm[2] = 0x30;sys_set.pwm[3] = 0x40;osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_set);    // 写所有参数}
}
4)在初始化函数中添加函数(simpleBLEPeripheral.c中SimpleBLEPeripheral_Init)
   Init_Paramter();
5)添加设置广播相关参数(simpleBLEPeripheral.c中SimpleBLEPeripheral_Init中的Role Parameters部分)
//    GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );{uint8 scanRspDataLen = 11 + osal_strlen((char*)sys_set.name);uint8 scanRspDataTemp[B_MAX_ADV_LEN];uint8 i = 0;scanRspDataTemp[i++] = 1 + osal_strlen((char*)sys_set.name);scanRspDataTemp[i++] =  GAP_ADTYPE_LOCAL_NAME_COMPLETE; // length of this dataosal_memcpy(&scanRspDataTemp[i], sys_set.name, osal_strlen((char*)sys_set.name));i = 2 + osal_strlen((char*)sys_set.name);// connection interval rangescanRspDataTemp[i++] = 0x05,   // length of this datascanRspDataTemp[i++] = GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,   scanRspDataTemp[i++] = LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL );   // 100msscanRspDataTemp[i++] = HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL );scanRspDataTemp[i++] = LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL );   // 1sscanRspDataTemp[i++] = HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL );// Tx power levelscanRspDataTemp[i++] = 0x02;   // length of this datascanRspDataTemp[i++] = GAP_ADTYPE_POWER_LEVEL;scanRspDataTemp[i++] = 0;       // 0dBmGAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, scanRspDataLen, scanRspDataTemp );}
6)修改应用层读取函数(simpleBLEPeripheral.c中simpleProfileReadConfig部分)
      case SIMPLEPROFILE_CHAR7_UUID:HalLcdWriteString( "Char 7 read", HAL_LCD_LINE_3 );len = osal_strlen((char*)sys_set.name);osal_memcpy(newValue, sys_set.name, len);        break;
7)修改应用层写入函数(simpleBLEPeripheral.c中simpleProfileChangeCB部分)
    case SIMPLEPROFILE_CHAR7: // 收到 CHAR7 的数据SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR7, &newValue, &returnBytes);osal_memset(sys_set.name, 0, sizeof(sys_set.name));osal_memcpy(sys_set.name, newValue, returnBytes);osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_set);    // 写所有参数HalLcdWriteString( "Char 7 Set", HAL_LCD_LINE_4 );break;

七、实验结果

在APP端点击修改设备名称,然后重启硬件设备。广播到的设备名称已改变,实验成功。

【cc2541历程】APP更改蓝牙设备名称相关推荐

  1. linux如何更改设备名称,如何更改蓝牙广播设备名称?

    问题描述 我无法想象改变我的蓝牙设备名称的方法. 有什么命令吗? 最佳解决办法 您不能在ubuntu中的控制面板中更改蓝牙设备名称.这里是bug report,它提供了这个解决方法: If you w ...

  2. 如何更改应用在app store的名称

    如何修改应用在app store 的名称,我修改了plist里面的bundle display name,现在安装后在设备上会显示修改后的名称,可是app store里面还是原来的名称. 何把app ...

  3. Android Studio App 图标更改 以及名称更改

    Android Studio App 图标更改 以及名称更改 Android Gradle Build Error:Some file crunching failed, see logs for d ...

  4. windows更改服务名称_如何在Windows 10的登录屏幕上更改名称

    windows更改服务名称 Whenever you sign in to Windows 10, your full name appears above the password entry. Y ...

  5. 在leangoo里怎么创建看板,更改看板名称?

    创建看板: 1. 登录Leangoo,进入看板清单页面,点击右上角 "+" 按钮. 2. 点击新建看板,输入看板名称.看板默认为个人看板,无所属项目,您可以根据需要选择看板属于哪个 ...

  6. WIN7如何更改计算机名称

    经常在局域网中我们需要更改计算机名称以便管理员更好的识别电脑使用人员或者方便资料共享与查找等,近期有网友问小编win7怎么改计算机名字?下面本文小编将与小白朋友分享下win7如何改计算机名,有兴趣的朋 ...

  7. Linux更改主机名称(hostname)和设置DNS解析以及设置IP

    linux更改主机名称 vi  /etc/sysconfig/network打开配置文件 设置HOSTNAME=hadoop(自己想更改的名称) 退出保存即可 测试:重启机器 设置DNS域名解析 vi ...

  8. java更改包名称_更改Java包名称如何改变我的系统架构

    java更改包名称 即使只是少量更改角度,也可能对您如何使用系统产生深远影响. 假设您正在用Java编写Web应用程序. 在系统中,您处理订单,客户和产品. 作为一个Web应用程序,您的类包括诸如Co ...

  9. 计算机管理员账户不能创建新的用户名,win10为什么无法更改账户名称解决方法 win10系统管理员用户名更改...

    win10为什么无法更改账户名称解决方法 win10系统管理员用户名更改 我们在使用电脑的时候,总是会遇到很多的电脑难题.当我们在遇到了Win10系统如何更改用户登录名的时候,那么我们应该怎么办呢?今 ...

  10. 【WIN10】win10更改以太网名称以及以太网下网络名称

    一.win10更改以太网名称: 不管是无线路由器.还是本地网卡在更改过设置以后(例如:驱动升级.路由器重新配置等),计算机再次连接时往往会自动生成一个新的网络连接名称,如果原来的命名是本地连接,新的可 ...

最新文章

  1. Numpy 多维数组变为常量、增加维度、元素复制、按块复制、横轴竖轴合并数组、连接数组
  2. 边缘计算架构_Openshift为边缘计算提供三节点架构部署
  3. Nginx之负载均衡
  4. 百度元宇宙产品“希壤”将于12月27日发布
  5. AndroidStudio_安卓原生开发_自己设计android端_到springboot端的请求验证Token系统---Android原生开发工作笔记158
  6. 【李宏毅2020 ML/DL】P74 Generative Adversarial Network | Basic Idea
  7. 图像处理_描述下SIFT特征?(清晰易懂)
  8. 建议不要使用Android studio的SVN功能
  9. 广发99元旅游分期,来一场说走就走的旅行?
  10. c 中空格的asc码表_ascii码表由小到大空格字符
  11. 练习Go语言-HTTP压力测试.md
  12. Brocade博科光纤交换机之 常用命令
  13. git remote: error: hook declined to update
  14. python检查https过期_Python实现HTTPS网站证书过期监控及更新
  15. 第一次将所学的指针和递归结合在一起
  16. 干货/企业推广软文写作技巧
  17. 用python来解 PAT乙级1082射击比赛 -20-满分
  18. 【JavaWeb - 网页编程】一 HTML技术与CSS技术
  19. 胡侃EXCEL服务器设计需要的因素
  20. NVIDIA NX刷机,配置深度学习环境

热门文章

  1. python代码生成_python代码生成 python代码自动生成器
  2. Linux C++ UDP Socket(超详细)
  3. 计算机软考程序员试题,最全历年程序员软考考试上午真题合集(附答案).doc...
  4. c实现一个简单的线性反馈移位寄存器LFSR
  5. HTML5游戏开发5条建议及开发工具分享
  6. c语言学生综合测评系统_学生综合评价系统
  7. html文件vbs病毒,又一个VBS病毒源码的解密
  8. RSA攻击手法及相应例题解析
  9. 【网络安全】XCodeGhost事件刨根问底
  10. 在CentOS中安装MySql数据库教程