개요 | |
Dialog사의 SDK 기반 BLE기능 코딩하기 위한 핵심 개념 정리.
본 정보는 제조사 제공 UM-B-015 : User Manual - Software Architecture ( pdf 바로보기 ) 의 내용기반으로 정리한 것임.
기반정보. Dialog 사 SDK 개요. http://igotit.tistory.com/370
| |
|
Software 설정. | ||
6.3.1 . 내장, 외부 MCU 모드 선택. 응용측 개발을 내장 MCU사용하는 모드 혹은 외부 MCU이용하는 모드가 가능하며 개발시 jump table의 첫번째 요소에서 모드를 지정할 수 있다.
즉, 위 코드에서 보이듯이 TASK_APP 가 선택된 것이 응용코드를 내장 MCU에서 구현하는 경우의 설정이며, TASK_GTL 을 선택하게 되면 외부 MCU에서 응용코드 구현하는 경우의 설정이다.
6.3.2 Configuration derectives.
da14580_config.h 모든 SDK 프로젝트는 configuration header file인 da14580_config.h(Keil_projects 폴더에 있음.) 를 인클루드 하고 있고 응용측의 다양한 셋팅이 가능하다. 예로 CFG_APP 를 define 한 경우는 내장MCU 에 응용코드 구현모드 로 설정되고 정의하지 않은 경우 외부 MCU에서 응용코드구현모드로 설정된다. da14580_scatter_config.h : Scatter file and memory map configuration.. <- 수정하면안됨. da14580_stack_config.h : BLE stack and kernel definition. <-수정하면 안됨.
추가의 설정가능한 stack parameter 는 아래 2개 파일에 있다. ● dk_apps\src\ip\ble\hl\src\rwble_hl\rwble_hl_config.h
| ||
|
내장 MCU mode API | |
Integrated processor mode API
SDK 예제 코드 중 proximity reporter 예제코드로 설명.
6.4.1 Application to kernel API. 응용측에서 kernel 과 통신하기 위해서는 아래 2개 파일을 include 해야한다. ke_task.h ke_timer.h
Adding an application task. 응용개발자는 각 state마다 state handler table 을 정의해야하고, default handler app_default_handler() 도 제공되어야 한다. 예제코드에서는 app_task.c 와 app_task.h 에서 구현되어있다.
Creating an applicaition environment connection handle, security tag 같은 주요 데이터들을 저장가능해야한다. 환경변수 구조체 app_env_tag 는 app.h 에 선언되어있고, app.c 에서 struct app_env_tag app_env; 로 정의되어있다.
System startup main 함수에서 요구되는 startup 필수 요구사항. BLE Stack initialization .
6.4.2 Applicaiton initialisation 상기 System startup 과정에서 호출되는 app_init() 함수 내에서 처리되어야 할 사항. 1. lintialise the profiles. 2. application task 생성과 초기화. 3. security task 초기화. (CFG_APP_SEC 활성화 한 경우 )
6.4.3 Application to GAP API. RW-BLE GAP 에서는 BLE기기의 discovery, link 를 담당하며, 또한 securty mode,levels 사용과 관련 처리사항들도 정의된다.
Adding GAP event handler. 앞의 system startup에서 main_func() 내에서 BLE Stack initialization이 이뤄지고 이 과정에서 GAP entity 도 초기화 되어 상위 계층으로 서비스 가능한 상태가 되었을때 이벤트 : GAPM_DEVICE_READY_IND 가 상위 계층으로 전달된다. 응용코드에서의 이 이벤트를 수신한 application task에서 함수 : gapm_device_ready_ind_handler() 를 호출한다. 개발자 임의로 필요한 GAP 이벤트 핸들러를 추가할 수 있다.
참고. GAP module 은 2개의 task로 구성되어있다. GAP Manager (TASK_GAPM) GAP Controller(TASK_GAPC)
GAP setup
단계1. 예제코드(proximity reporter) 에서는 이벤트 : GAPM_DEVICE_READY_IND 수신한 application 은 가장 먼저 GAP module 의 TASK_GAPM에 커맨드 : GAPM_RESET_CMD 를 전송하면 GAPM 은 GAPM_CMP_EVT 발생으로 반응하고 이를 수신하는 응용측 핸들러는 gapm_cmp_evt_handler() 이며, 커맨드: GAPM_SET_DEV_CONFIG_CMD 를 TASK_GAPM 으로 전송한다. 최종적으로 달성된 상태는 PM에서 이전 커맨드 처리되었고 TASK_GAPM 의 initialization이 완료.
단계2. 상기 단계1 의 최종상태 달성 이후 함수 : app_db_init() 호출하여 profile database 를 초기화 한다. (모든 프로파일들에 대해서 이뤄져야한다. 앞의 6.4.2 절에서의 모든 프로파일.)
단계3. 상기 단계 2 이후 profile task(kernel측) 는 "프로파일이름_CREATE_DB_CFM" message 를 응용측으로 전송하고 이를 처리하는 핸들러 프로파일이름_create_db_cfm_handler() 가 실행되면서 APP_MODULE_INIT_CMP_EVT 메시지가 TASK_APP 로 전송되면 이를 처리하는 핸들러 app_module_init_cmp_evt_handler() 가 실행되면서 다음 프로파일(있다면) 에 대한 함수 : app_db_init() 호출된다. 다름 프로파일이 없다면 함수 : app_adv_start() 호출되어 advertising procudure 가 시작된다.
Advertising data 예제코드 proximity reporter 인 경우 advertising data 는 app_proxr_proj.h 에 정의되어있고 아래와 같다. #define APP_ADV_DATA "\x07\x03\x03\x18\x02\x18\x04\x18" 의미는 아래와 같다. x07 Length
Advertising procedure 앞의 단계3의 app_adv_start() 함수내에는 app_adv_func() 에서는 GAPM측으로 GAPM_START_ADVERTISE_CMD 메시지를 전송한다. 메시지 데이터 예는 아래와 같다.
cmd->op.code = GAPM_ADV_UNDIRECT; cmd->info.host.adv_data_len 에는 advertising data size 를 정확히 기록해야한다. 데이터 사이즈가 정확하지 않은 경우 GAPM은 해당 메시지 처리하지 않고 무시한다.
응용측에서 advertising 절차를 중단하고 싶은경우 함수 app_adv_stop() 호출한다.
Device connected Advertising 이후 connected state 로 진입한 경우 GAPC 는 GAPC_CONNECTION_REQ_IND 메시지 전송하고 이를 처리하는 핸들러 gapc_connection_req_ind_handler() 실행되면서 app_connection_func() 함수를 호출하게된다.
응용측에서는 GAPC 로 GAPC_CONNECTION_CFM 메시지 전송하는 것으로 connection confirm 한다. 만일 Security 가 필요한 경우에는 함수 app_security_enable() 호출되어 security mode 로 셋업되고, security parameter 가 GAPC 로 전달된다.
이 단계가 기기는 connected 된 것이며 응용측은 profile service 를 사용할 수 있는 상태가 달성된 것.
6.4.4 Application to profile API. proxomity reporter 를 비롯한 profile API 활용정보는 별도로 제공되는 문서와 헤더파일 proximity 인 경우 proxr_task.h 를 참조하여 구현한다.
위 전체 내용 상세 : UM-B-015 : User Manual – Software Architecture 의 페이지 14 6.4 절 전체. | |
|
외부 MCU mode API | |
External processor API 이 모드에선 GAP계층 이하만 DA14580/1/3 에서 구동되고, 응용계층(host applicaiton)은 외부 별도 MCU 에서 작동되며, 외부 MCU와 BLE 칩과는 UART 통신한다.
SDK 에서 제공되는 proximity monitor 예제코드가 External processor mode 구현예이다. 상세 : UM-B-015 : User Manual – Software Architecture 의 페이지 19. 6.5 절 내용.
| |
|
본 글이 포함된 상위 정리 글.
Connectivity : http://igotit.tistory.com/280 의 Bluetooth
|
'임베디드.일렉트로닉스' 카테고리의 다른 글
TI 사. BLE-STACK 1 개요. 설치. - CC2540/CC2541 개발용. (0) | 2015.07.28 |
---|---|
TI 사. Packet Sniffer 개요. 설치. - RF Packet viewer PC Software (0) | 2015.07.28 |
TI 사. CC2540 BLE USB Dongle. (0) | 2015.07.25 |
개발중 BLE기기 정상동작 여부 PC에서 확인 방법. Cypress 사의 CySmart로 디버깅하기.- Advertising, Connection 정상동작 확인, Service, Characteristic 정보 확인. (0) | 2015.07.25 |
Dialog 사. BLE Development Kit Pro. boot mode 및 점퍼 설정법. (0) | 2015.07.25 |
댓글