Я немного запутался в вашем вопросе, но я думаю, что ваше понимание состоит в том, что вы должны изолировать метод связи от кода более высокого уровня в своем приложении.
Ответ на этот вопрос - да, создайте уровень абстракции в вашем приложении и пусть этот уровень будет взаимодействовать с устройством любыми необходимыми вам средствами (модем, IP, последовательный порт и т. Д.). Это, вероятно, лучше всего создать, определив интерфейс, который поддерживает необходимые вызовы связи, а затем создайте классы, реализующие этот интерфейс, которые выполняют работу, необходимую для выбранного метода связи. Таким образом, ваш код более высокого уровня не заботится о том, какой метод связи используется, кроме необходимости выбирать один.
Используя этот метод, довольно просто добавить методы связи в программное обеспечение. Напишите класс, который выполняет грязную работу связи, основываясь на работе вашего устройства, и добавьте некоторый метод для выбора этого метода связи в основном приложении.
На передней панели операционной системы вам потребуется код, управляющий низкоуровневыми деталями связи с устройством, и так как эти подробности очень часто зависят от типа соединения, я не вижу никакой выгоды от попыток принудительного управления соединением в ОС как-то, это только усложняет администрирование. Вы можете получить некоторую выгоду, демонизируя «менеджер связи» и отделяя остальную часть своего приложения, чтобы просто просматривать или обрабатывать собранные данные.
Я не понимаю, как вы ожидаете, что любая архитектура на стороне приложения каким-то образом создаст ситуацию, когда устройство не нужно обновлять, чтобы отправлять отчеты по новому протоколу, так как соответствие SMTP, например, абсолютно требует новой код на устройстве.