给 TI BLE 添加自己UUID
来源:互联网 发布:国家行政学院博士 知乎 编辑:程序博客网 时间:2024/06/06 03:13
本文摘录于:http://blog.csdn.net/liqinghan/article/details/40428941
给 TI BLE 添加自己UUID
个人觉得这里的UUID就像USB报告的里面的ID作用一样,一个USB的设备可以根据ID读写不同数据长度的数据块,蓝牙也如此通过特性的UUID来识别读写不同长度的数据块!
可以参考demo的给 的 SIMPLEPROFILE_CHAR1 的样式
我这里使用 CHAR5 因为在demo中CHAR5 没有配置成我想要的,我就配置为 16byte的数据长度的可读写!
simpleGATTprofile.h 文件
1、
- // Profile Parameters
- #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 4 valuet
- // 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
- // Length of Characteristic 5 in bytes
- #define SIMPLEPROFILE_CHAR5_LEN 16 //数据长度
simpleGATTprofile.c文件
- // Characteristic 5 UUID: 0xFFF5
- CONST uint8 simpleProfilechar5UUID[ATT_BT_UUID_SIZE] =
- {
- LO_UINT16(SIMPLEPROFILE_CHAR5_UUID), HI_UINT16(SIMPLEPROFILE_CHAR5_UUID)
- };
- // Simple Profile Characteristic 5 Properties
- static uint8 simpleProfileChar5Props = GATT_PROP_READ | GATT_PROP_WRITE ;
- // Characteristic 16 Value
- static uint8 simpleProfileChar5[SIMPLEPROFILE_CHAR5_LEN] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
- // Simple Profile Characteristic 5 User Description
- static uint8 simpleProfileChar5UserDesp[17] = "Characteristic 5\0";
//如果要添加自己的,注意SERVAPP_NUM_ATTR_SUPPORTED这个下标值
- static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED]={
- ...
- ...
- // Characteristic 5 Declaration
- {
- { ATT_BT_UUID_SIZE, characterUUID },
- GATT_PERMIT_READ ,
- 0,
- &simpleProfileChar5Props
- },
- // Characteristic Value 5
- {
- { ATT_BT_UUID_SIZE, simpleProfilechar5UUID },
- GATT_PERMIT_READ | GATT_PERMIT_WRITE,
- 0,
- simpleProfileChar5
- },
- // Characteristic 5 User Description
- {
- { ATT_BT_UUID_SIZE, charUserDescUUID },
- GATT_PERMIT_READ,
- 0,
- simpleProfileChar5UserDesp
- },
- }
- bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value ){
- ....
- case SIMPLEPROFILE_CHAR5:
- if ( len == SIMPLEPROFILE_CHAR5_LEN )
- {
- VOID osal_memcpy( simpleProfileChar5, value, SIMPLEPROFILE_CHAR5_LEN );
- }
- else
- {
- ret = bleInvalidRange;
- }
- break;
- ....
- }
- bStatus_t SimpleProfile_GetParameter( uint8 param, void *value ){
- ....
- case SIMPLEPROFILE_CHAR5:
- VOID osal_memcpy( value, simpleProfileChar5, SIMPLEPROFILE_CHAR5_LEN );
- break;
- .....
- }
- static uint8 simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen )
- {
- ....
- case SIMPLEPROFILE_CHAR5_UUID:
- *pLen = SIMPLEPROFILE_CHAR5_LEN;
- VOID osal_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR5_LEN );
- break;
- ...
- }
- static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 *pValue, uint8 len, uint16 offset ){
- ..
- case SIMPLEPROFILE_CHAR5_UUID:
- //Validate the value
- // Make sure it's not a blob oper
- if ( offset == 0 )
- {
- if ( len != SIMPLEPROFILE_CHAR5_LEN )
- {
- status = ATT_ERR_INVALID_VALUE_SIZE;
- }
- }
- else
- {
- status = ATT_ERR_ATTR_NOT_LONG;
- }
- //Write the value
- if ( status == SUCCESS )
- {
- osal_memcpy(pAttr->pValue,pValue,SIMPLEPROFILE_CHAR5_LEN);
- notifyApp = SIMPLEPROFILE_CHAR5;
- }
- break;
- ...
- }
//app
// simpleBLEPeripheral.c
- void SimpleBLEPeripheral_Init( uint8 task_id ){
- ..
- uint8 charValue1 = 1;
- uint8 charValue2 = 2;
- uint8 charValue3 = 3;
- uint8 charValue4 = 4;
- uint8 charValue5[SIMPLEPROFILE_CHAR5_LEN];
- osal_memset(charValue5,0,SIMPLEPROFILE_CHAR5_LEN);
- SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR1, sizeof ( uint8 ), &charValue1 );
- SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR2, sizeof ( uint8 ), &charValue2 );
- SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR3, sizeof ( uint8 ), &charValue3 );
- SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, sizeof ( uint8 ), &charValue4 );
- SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR5, SIMPLEPROFILE_CHAR5_LEN, charValue5 );
- ..
- }
- static void simpleProfileChangeCB( uint8 paramID ){
- uint8 temp[HAL_LCD_MAX_BUFF];
- //前面的省略.....
- case SIMPLEPROFILE_CHAR5:
- SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR5, temp ); //获取特征值
- //可以对自己的数据进行分析,实现自己想要的功能,
- //这里仅仅用来串口和LCD打印出来
- temp[SIMPLEPROFILE_CHAR5_LEN] = '\0';
- #if (defined HAL_LCD) && (HAL_LCD == TRUE)
- ;
- //HalLcdWriteStringValue( "Char 5:", (uint16)(newValue), 10,HAL_LCD_LINE_3 );
- #endif // (defined HAL_LCD) && (HAL_LCD == TRUE)
- #if(HAL_OLED)
- LCD_CLSLineAt8x16Pix(CLS_START_LINE3, CLS_LINE2);
- LCD_P8x16Str(0,WRITE_START_LINE3,"Char 5:");
- LCD_P8x16Str(0,WRITE_START_LINE4,temp);
- uart_printNotline("Char 5:");
- uart_printLine((char*)temp);
- #endif
- break;
- <pre code_snippet_id="574739" snippet_file_name="blog_20150108_9_5222020" name="code" class="cpp">//省略.....
- }
实验结果:
使用CC2540 Dongle 作为 central 打开Btool完成连接,
利用UUID通信,读写数据
central发送数据:
串口输出
液晶屏的输出:
阅读全文
0 0
- 给 TI BLE 添加自己UUID
- 给 TI BLE 添加自己UUID
- 给 TI BLE 添加自己UUID
- TI BLE 添加自己UUID
- BLE UUID
- TI BLE 1.4.1 协议栈 定义128位UUID的方法
- 【BLE】CC2541 imageA GATT添加自定义UUID实例
- TI BLE STACK - OSAL
- TI CC2540 BLE
- TI BLE CC2541 Notification
- BLE UUID记录
- BLE之UUID
- TI BLE协议栈简介
- TI低功耗蓝牙(BLE)介绍
- TI ble低功耗蓝牙 bluetooth4.0
- TI低功耗蓝牙(BLE)介绍
- TI BLE 协议栈 初始化流程图
- TI低功耗蓝牙(BLE)介绍
- [JZOJ5163] 【NOIP2017模拟6.25】PS的烦恼
- Spring Boot 集成MyBatis
- jsp两种不同的include
- 剑指offer--合并两个排序的链表
- Hystrix系列-4-Hystrix的动态配置
- 给 TI BLE 添加自己UUID
- 浅析c++中virtual关键字
- 手机的存储结构
- (目前WA)hihocoder1264-神奇字符串-JAVA版
- hdu 6025 gcd+前缀和+后缀和
- Storm原理
- Mybatis自定义TypeHandler
- Spring Boot 集成Shiro和CAS
- leetcode611. Valid Triangle Number