Имеется самодельная железка и самодельный же софт для работы с ней. Связь происходит по UART.
В настоящий момент времени железка умеет выполнять только одну команду - запрос своего состояния. И по этой команде она возвращает данные со всех своих датчиков и отладочные переменные (например, время цикла опроса датчиков).
Возвращаю данные в простом формате - набор чисел разделённых запятыми. Соответственно, в программе-клиенте захардкожено «1-ое число это температура, 2-ое число это время опроса, 3-е число это ...». В итоге получается, что при изменении данных, которые может выдавать девайс, софт, который работает с ними придётся переписывать.
Хочу, чтобы протокол связи умел в интроспекцию. То есть можно было бы особой командой запросить у железки схему данных (она вернёт какой тип (целое, вещественное, трёхмерный вектор, кватернион, строка) и какое имя имеет каждое поле), а потом уже обычным образом запрашивать циферки, разделёнными запятыми, однако программа уже будет знать как именно отобразить каждую из них (она сможет сделать к каждому числу в интерфейсе подпись, которую юзер поймёт, например).
В итоге при обновлении прошивки устройства, управляющий софт уже будет знать как работать с новыми данными.
Ну, разумеется, подобное и для управляющих команд (чтобы можно было запросить коды команд их user-friendly идентификаторы и список типов аргументов, а потом уже вызывать их).
Оверхеда быть не должно, потому что изменится лишь инициализация общения - надо будет вытянуть из железки описания всех команд и данных. А потом будет всё тот же легковесный протокол из значений, разделённых запятыми (принципиально, чтобы данные были текстовыми, во избежание ошибок синхронизации, а ещё чтобы в крайнем случае можно было работать с девайсом из minicom).
Конечно, я могу сделать свой велосипед, но нет ли уже готовых стандартов, которые мне подходят? Важно, чтобы после описания схемы данных обмен данными шёл с минимумом накладных расходов, так что всякие JSON'ы и XML идут лесом.