BLEManagerImpl.cpp 소스의 HandleTXCharCCCDWrite() 메소드안 ChipLog 출력 부분에 대한
Call stack를 따라가 봤습니다.
▶ 함수안의 다음 코드
void BLEManagerImpl::HandleTXCharCCCDWrite(struct ble_gap_event * gapEvent)
{
~~ 중략 ~~
ChipLogProgress(DeviceLayer,
"Write request/command received for CHIPoBLE TX CCCD characteristic (con %u"
" ) indicate = %d",
gapEvent->subscribe.conn_handle, gapEvent->subscribe.cur_indicate);
~~ 중략 ~~
}
↓ 시리얼 로그 출력 내용
I (57606) chip[DL]: Write request/command received for CHIPoBLE TX CCCD characteristic (con 1 ) indicate = 1
▶ 찾고자 하는 부분은 메시지중 "[DL]" 이부분 입니다.
↓ ChipLogProgress 정의 위치 찾기 ( TextOnlyLogging.h)
#define ChipLogProgress(MOD, MSG, ...) ChipInternalLog(MOD, PROGRESS, MSG, ##__VA_ARGS__)
↓ ChipInternalLog() 정의
: MOD 부분을 중심으로 봐주세요.
#define ChipInternalLog(MOD, CAT, MSG, ...) \
if (CHIP_CONFIG_LOG_MODULE_##MOD && IsModuleCategoryEnabled(MOD, CAT)) \
{ \
ChipInternalLogImpl(MOD, CHIP_LOG_CATEGORY_##CAT, MSG, ##__VA_ARGS__); \
}
: CHIP_CONFIG_LOG_MODULE_##MOD 이 CHIP_CONFIG_LOG_MODULE_DeviceLayer 로 변경 됩니ㅏㄷ.
#define CHIP_CONFIG_LOG_MODULE_DeviceLayer 1 로 Constants.h 에 정의되어 있습니다.
↓ ChipInternalLogImpl() 선언
#define ChipInternalLogImpl(MOD, CAT, MSG, ...) \
do \
{ \
if (chip::Logging::IsCategoryEnabled(CAT)) \
{ \
chip::Logging::Log(chip::Logging::kLogModule_##MOD, CAT, MSG, ##__VA_ARGS__); \
} \
} while (0)
: kLogModule_devceLayer 가 enum 타입으로 다음처럼 정의가 되어 있네요. (Constants.h)
enum LogModule
{
kLogModule_NotSpecified = 0,
~~ 중략 ~~
kLogModule_Shell,
kLogModule_DeviceLayer, <------------ 요기
kLogModule_SetupPayload,
kLogModule_AppServer,
~~ 중략 ~~
kLogModule_Max
};
↓ chip::Logging::Log() 함수 > TextOnlyLogging.cpp 참조
void Log(uint8_t module, uint8_t category, const char * msg, ...)
{
va_list v;
va_start(v, msg);
LogV(module, category, msg, v);
va_end(v);
}
: module 변수만 따라가세요.
↓ LogV() 함수 > TextOnlyLogging.cpp 참조
void LogV(uint8_t module, uint8_t category, const char * msg, va_list args)
{
const char * moduleName = GetModuleName(static_cast<LogModule>(module));
LogRedirectCallback_t redirect = sLogRedirectCallback.load();
if (redirect != nullptr)
{
redirect(moduleName, category, msg, args);
}
else
{
Platform::LogV(moduleName, category, msg, args);
}
}
↓ GetModuleName() 함수
const char * GetModuleName(LogModule module)
{
return ModuleNames[(module < kLogModule_Max) ? module : kLogModule_NotSpecified];
}
↓ ModuleNames 문자열 배열의 변수의 LogModule 인덱스를 따라가면 "DL" 에 해당됩니다.
static const char ModuleNames[kLogModule_Max][kMaxModuleNameLen + 1] = {
"-", // None
~~ 중략 ~~
"SPT", // Support
"TOO", // chipTool
"ZCL", // Zcl
"SH", // Shell
"DL", // DeviceLayer
"SPL", // SetupPayload
"SVR", // AppServer
"DIS", // Discovery
~~ 중략 ~~
};
복잡해서 한번 따라가 보았습니다.
참조하세요.
반응형
'ESP32' 카테고리의 다른 글
[esp-idf][ble_spp_server][1] 초기설정/빌드/플래시/모니터링 (0) | 2024.02.21 |
---|---|
[esp-matter][light][4] WIFI matter 에서 Thread matter로 변경하기 (0) | 2024.02.01 |
[ESP-IDF][ble_hid_device_demo][4] EXT1 Wakup 추가하기 (0) | 2024.01.12 |
[esp-matter][light][1] 프로젝트 환경설정 / build/flash/monitor (0) | 2024.01.02 |
[ESP-IDF][Matter] [1] light_switch 프로젝트 (0) | 2024.01.02 |