본문으로 바로가기

[nRF52 ] Service , charac ,cccd 핸들값 정리

category 카테고리 없음 2022. 5. 17. 15:35

: ble_app_interactive 프로젝트에서 사용되는 handle값을 UUID 와 함께 정리해 봤습니다.

 

Service   --> handle_range

typedef struct
{
  ble_uuid_t               uuid;          /**< Service UUID. */
  ble_gattc_handle_range_t handle_range;  /**< Service Handle Range. */
} ble_gattc_service_t;

characteristics

   --> decl_handle 

   --> value_handle

 

descriptor 

   --> cccd_desc_handle

typedef struct
{
    ble_uuid_t            uuid;              /**< UUID of the characteristic. */
    uint16_t              decl_handle;       /**< Handle of the characteristic declaration. */
    uint16_t              value_handle;      /**< Handle of the characteristic value. */
    uint16_t              cccd_desc_handle;  /**< Handle of the CCCD descriptors. */
    ble_gatt_char_props_t char_props;        /**< GATT Characteristic Properties. */
} char_data_t;

 

 

1> 아래 내용은  ble_app_blinky 를 연결한 상태에서 디버깅한 내용입니다.

  ▶   nRF Connect 앱에 장치를  연결한 상태에서  내용을 보시면 이해가 되실겁니다.

 

▶ 서비스가  3개  발견되고 각각의 handle_range 값은 다음과 같습니다.

service UUID handle_range(start_handle ~ end_handle) characteristics  갯수
0x1800 (Generic Access) 1 ~9 4개
0x1801 (Generic Attribute) A ~ A 0개
0x1523 (Nordic LED Button Service) : Vendor specific B ~ 0xFFFF 2개

 

총  Characteristics는  6개이고 사용되는 handle 값은 아래 내용 참고하세요.

Characteristics UUID decl_handle / value_handle  Service UUID
0x2A00 (Device Name) 2/3 0x1800
0x2A01 (Appearance) 4/5
0x2A04 (Peripheral Preferred Connection Parameters) 6/7
0x2AA6 (Central Address Resolution) 8/9
0x1524 (Button) 0x0C/0x0D 0x1523
0x1525 (LED) 0x0F/0x10

  : 순서적으로 값이 증가하다가  0xE가 빠졌네요. 0xE는 CCCD 가 할당이 되어 있습니다.

 

Descriptor UUID : indicate or notify 의 경우 사용 됩니다.

CCCD UUID cccd_desc_handle Characteristics UUID
0x2902 0x0E 0x1524

  : 0x1524 characteristics의 설정 descriptor 입니다.

 

< 기타>

  제 나름대로 정리하면

  기본적으로 service handle 값의 범ㅇ위의 start_handle 은 겹치지 안고

  end_handle은 characteristic value_handle 또는 cccd_desc_handle 과 겹치고

  handle 값 순서는 다음과 같습니다.

   cccd 가 있을경우 

   service_start_handle -->  characteristic  decl_handle --> characteristic  value_handle -->  cccd_desc_handle

        -->  characteristic  decl_handle --> characteristic  value_handle ---> ...중략 ... --> service:: end_handle

 

 cccd가 없을경우

  service_start_handle -->  characteristic  decl_handle --> characteristic  value_handle

  --> characteristic  decl_handle --> characteristic  value_handle ---> ...중략 ...  --> service:: end_handle

 

 

그럼 수고하세요

 

반응형