페이지

글목록

2016년 4월 2일 토요일

[dialog] 긴 device Name을 사용하는 방법 (SPI 메모리 사용시)

이번에 DA14583 으로 제작한 DSPS BLE 모듈에 Device 이름과 MAC Address를 바꿀 상황이 생겨서 
프로그램을 수정하면서 알게된 내용입니다.

SPI Flash 나 JTAG Debug로 RAM에 프로그램을 하는 경우,
Device Name 과 MAC Address 를 수정하는 곳은 nvds.c 파일 입니다.

이 파일에서 다음과 같은 부분을 수정해 주면 됩니다.
const struct nvds_data_struct nvds_data_storage __attribute__((section("nvds_data_storage_area"))) 구조체의 내용인

 //   .NVDS_TAG_DEVICE_NAME                   = "DA1458x",
    .NVDS_TAG_DEVICE_NAME                   = "FiSi Signage",
 //   .NVDS_TAG_BD_ADDRESS                    = {0x01, 0x00, 0x00, 0xCA, 0xEA, 0x80},
    .NVDS_TAG_BD_ADDRESS                    = {0x01, 0x00, 0x00, 0x00, 0x34, 0x12}, // MAC Address 01
    .ADV_DATA_TAG_LEN                       = 27,
    .SCAN_RESP_DATA_TAG_LEN                 = 10,
//    .DEVICE_NAME_TAG_LEN                    = 7,
    .DEVICE_NAME_TAG_LEN                    = 12,

그런데, NVDS.C 파일에서 DEVICE NAME 수정 (길이를 늘렸는데 다 안나옴-8Byte만 나옴)

여기저기 인터넷을 찾아본 결과 (링크)
app_sps_device_project.h 파일에서 다음과 같이 바꿈

#define APP_DFLT_ADV_DATA        "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"
#define APP_DFLT_ADV_DATA_LEN    (18)
을 다음과 같이 수정
#define APP_DFLT_ADV_DATA        "\x04\xFFHi!"
#define APP_DFLT_ADV_DATA_LEN    (5)

(위의 내용의 설명)
A BLE advertisement package can actually  carry 31bytes of payload in addition to the 6bytes Bluetooth Device Address - total of 37bytes.

In the DSPS implementation, 3 bytes are used for flags and 18 bytes are used for a unique service ID (includes one byte for length and one byte for type). This leaves 10bytes for the length of the name (1 byte), the data type of the name (1byte) and the name itself. As you can see this limits the name to 8bytes/characters.

But don't panic ;o)

You don't have to put a unique service ID in the advertising data. You can just go ahead and remove it. In app_sps_device_project.h change 
#define APP_DFLT_ADV_DATA        "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"
#define APP_DFLT_ADV_DATA_LEN    (18)
to
#define APP_DFLT_ADV_DATA        "\x04\xFFHi!"
#define APP_DFLT_ADV_DATA_LEN    (5)

This changes the advertised data to a manufacturer specific data set of the phrase "Hi!". And you can extend the Bluetooth Device name in NVDS like this: