nRF5 SDK (4) - nRF52 시리즈 (SDK 17.0.2) Adv. 패킷 업데이트

Updated:

4. nRF52 시리즈 (SDK 17.0.2) Adv. 패킷 업데이트 : Advertising (data) packet update example

4.1 Setup

  • Setup 과정은 이전 nRF5SDK 포스트 참조 (특이사항 없음)
  • nRF5 SDK 예제 중 Adveritisng_init() 함수 활용, 필요에 따라 Adv. 패킷 포맷 설정

4.2 Adv. 패킷 업데이트 예시

Adv. 패킷 업데이트 관련 주요 코드

BLE_ADVERTISING_DEF(m_advertising);

static type __funcion_name__(type){
    static uint8_t            data_buf[2][BLE_GAP_ADV_SET_DATA_SIZE_MAX];
    static ble_gap_adv_data_t next_advdata;
    static bool               buf_index       = false;
    ble_gap_adv_data_t*       prev_advdata    = &m_advertising.adv_data;

    //...
    next_advdata.adv_data.p_data      = data_buf[buf_index];
    next_advdata.adv_data.len         = prev_advdata->adv_data.len;
    memcpy(next_advdata.adv_data.p_data, prev_advdata->adv_data.p_data, prev_advdata->adv_data.len);

    //... next_advdata.adv_data.p_data[index] = value
    ble_advertising_advdata_update(&m_advertising, &next_advdata, true);

    //...
    buf_index = !buf_index;
}
  • (ble_gap_adv_data_t type) next_advdata: 업데이트 할 데이터 저장할 구조체
  • data_buf: next_advdata 가 참조하는 메모리 영역 (?)
  • memcpy() 함수 이용: next_advdata 변수에 기존 패킷 포맷 저장
  • ble_advertising_advdata_update: next_advdata 에 저장된 정보 반영

4.3 Beacon 패킷 업데이트

nRF5 SDK 예제 중 beacon 관련 예제가 있음. 해당 예제에서는 ble_advdata_t 변수 이용해서 비콘 Advertising 데이터를 관리함. 이러한 경우에는 처음 비콘 초기화 단계 (e.g. beacon_init)에서 사용된 Adv. 패킷이 포함되는 변수 영역에 데이터만 바꿔준 뒤, ble_advdata_encode(...) 함수로 Adv. 패킷을 업데이트 할 수 있음.

static ble_advdata_t 			    advdata;
static ble_advdata_manuf_data_t 	b_manuf_specific_data;

static type __function_init__(type){    
    // ...
    b_manuf_specific_data.data.p_data = (uint8_t *) data_buf;

    // ...
    memset(&advdata, 0, sizeof(advdata));

    // ...
    advdata.p_manuf_specific_data = &b_manuf_specific_data;
}

static type __funcion_name__(type){
    //...
    data_buf[index] = value;

    ble_advdata_encode(&advdata, b_adv_data.adv_data.p_data, &b_adv_data.adv_data.len);
}
  • (ble_advdata_t) adv_data: Adv. 패킷 관리하는 변수
  • ble_advdata_manuf_data_t 구조체 변수 이용, Adv. 패킷 참조할 변수 (data_buf) 접근
  • ble_advdata_encode() 함수 이용 패킷 업데이트

Comments