Нет, КА вполне честный: В CET_COMMAND получаем 'C', переходим в состояние PARSE_CONFIG, выходим. В PARSE_CONFIG вызывается другой КА (get_cmd_byte()) по его завершению выходим.
bool get_cmd_byte(char, *data, *error) На первый вход читает старшую часть байта, и помещает его в *data, переключает состояние на прием второй части, возвращает 0. Во второй вход читает младшую часть, побитное или результата с *data, результат помещается обратно в *data, возвращает 1.
Буфер. В оригинальном девайсе собираются CDC пакеты для USB И читает также пакет в буфер.
У меня входной буфер исключен, т.к. в нем нет необходимости. А выплевывать удобней в буфер, в случае ошибки легко отменить вывод сбросив внутреннее состояние буфера.
blindman писал(а):Все таки нафигачили кучу команд избыточных ?
Избыточная по твоей терминологии тут вроде одна обобщенная команда S....P - она позволяет делать по i2c что угодно. Остальные вроде как ты и предлагал сделать?
Забыл указать команду X — сбросить шину, посути выполняет S 00 P.
Считаю что переносить С в регистр нельзя: иначе мы лишаемся возможности отделить програмный модуль Serial-to-I2C чтобы использовать его отдельно (например в малом модуле serial->i2c на какой-нибудь мелкой меге/тиньке) без использования части модуля ведомого. L в таком модуле может отсутствовать.
V удобна для проверки порта (есть кто? И если есть, то какой версии протокол?) Можно сказать эквивалент AT
На самом деле, как мне кажется, можно применить и тот и другой подходы. (можно оставить LCVX команды и сделать L необязательной, а можно сделать L обязательной и CVX сделать через i2c регистры). Всё это по причине того, что конвертер uart<->i2c это вообще говоря штука обособленная и пока мне не ясно почему оно обязательно должно быть через i2c-регистры
Поэтому если уж Vooon сделал пока так - можно так и оставить, если нет существенных противопоказаний.