SDK example 에서 제공하는 프로젝트의 경우, main 에 모든게 박혀있다.
이 시리즈의 목적은 재사용성이 좋은 base code 를 만드는 것이기 때문에 기능 구현을 하고 리팩토링을 하는 것이 아니라, 모듈화를 먼저 진행해볼 것이다.
https://github.com/tlaehdtlr/nrf52_ble_base
main 함수에서 init 하는 함수들을 분석하면 모듈화를 진행하는데 편리할 것이다. 우선적으로 함수들의 기능을 확인해보겠다.
printf를 찍는 soft debugging 은 빠른 개발하기에 유용하다. printf 역할을 하는 nrf log 가 있다. 얘는 SDK 함수의 log 를 찍어주도록 많이 작성되어있어 유용하다.
디버깅을 위해 log 를 찍는 부분이고, 앞으로 Command Line Interface (CLI)을 만드는 것과 함께 MMI module을 만들어야겠다. (man-machine interface이다.)
App timer 기능 활성화만 시키고 있고, 사용자가 추가해라고만 되어 있다.
app timer 는 주기적인 실행이 필요하거나 혹은 타이밍을 맞추기 위해 사용되는 것이다.
개발에 있어서 동시에 돌아가는 타이머가 아니라면 굳이 많은 app timer 를 만들 필요는 없을 것이다.
그러므로 이것도 PJT_timer module로 만들겠다. (프로젝트 명은 일단 base로 하겠다)
Button, LED pin 활성화와 event handler 를 등록한다. 사용자가 원하는 시점에 이벤트를 발생시키고자 사용한다.
MMI HW module로 만들어야겠다.
power 에 대해서는 잘 모르겠다.(ToDo) 우선 지금은 sleep, standby mode 에 따라서 power 공급을 제어할 수 있다는 점만 인지하겠다.
모듈화는 진행하지 않겠다.
BLE host & controller 를 제공하는 softdevice 를 활성화한다.
당연히 PJT ble module 만든다.
PJT GAP module
GATT 설정이고, service 와 연관있으므로 함께 모듈화
PJT GATT module
Connection 에서 bonding, security 등을 담당하는 것이므로 GAP 와 관련이 있다.
PJT GAP module 포함
분석을 마쳤으니 뚱뚱했던 main.c 를 아래와 같이 모듈화를 진행하였다.
아직 다듬어야할 부분이 남았지만 738 line 의 main.c 를 187 line 으로 바꾸고 나름 기능별로 윤곽을 잡는데 성공했다!
앞으로 모듈 추가 등 메모리 관리를 위해 빌드 후 정보를 남기도록 하겠다!
3-1) Queue module
3-2) Message sequence charts