TI BLE 添加自己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;

...

}


实验结果:

使用CC2540 Dongle 作为 central 打开Btool完成连接,



利用UUID通信,读写数据



central发送数据:

串口输出



猜你喜欢

转载自blog.csdn.net/Jasonprokk/article/details/42004669
TI