Посмотрел исходники CCommunicationManager. В принципе переписать его в Builder несложно.
Нужно будет переписать инициализацию ISettingsData* m_pSettings;
Думаю что без особой надобности переписывать его не нужно, нужно просто использовать его внутри реализации твоего API.
ISettingsData тебе не нужен, так как он описывает доступ к настройкам менеджера, а тебе они не нужны. В местах где вызываются функции этого интерфейса просто поставь нужные тебе значения или свои функции.
Нужно-ли в API беспокоиться о взаимодействии адаптеров и контроллеров? Или достаточно, например:
m_pControlApp->SetEventHandler(m_pAppAdapter);
Нет, беспокоиться не нужно. Адаптеры и контроллеры уже связываются вместе и инициализируются в CCommunicationManager.
А что делает объект EventHandler в классе CCommunicationManager?
Если открыть окно настроек менеджера и нажать ОК, то вызовется метод MainFrameController::OnAppSettings(), он в свою очередь сделает вызов m_pCommunicationManager.Init(), а тот в свою очередь вызовет EventHandler (это функция). Каждый контроллер вкладки в менеджере подписывается на на вызов EventHandler вызывая ССommunicationManager::setOnSettingsChanged() и передавая в качестве параметра адрес своего метода (например см. СParamMonTabController::OnSettingsChanged()). Таким образом каждый контроллер вкладки уведомляется о том, что настройки менеджера изменились.
Для чего и как часто нужно включать/выключать контроллеры?
(в контексте API)
В менеджере они включаются/выключаются при переходе между вкладками. Переключение контроллеров нужно чтобы работать или с прошивкой или с бутлоадером. В принципе это не нужно, просто я с самого начала так сделал (когда только начинал писать менеджер), а потом не стал переделывать.
Тебе понадобится переключать их если ты захочешь работать и с прошивкий и с загрузчиком. Если тебе нужно работать только с прошивкой, то включи 1 раз при инициализации API соответствующий контроллер и все.