В структуре пакета данных для команд 0x1E - 0x20 приводится псевдокод для упаковки и распаковки пакетов. В коде распаковки есть ошибка:
Пример. Имеем не упакованную последовательность '\x01\x02\x03\x04', после упаковки получаем '\xCA\xCA\xCB\xC8\xC9', а после распаковки она превращается в '\x80\x80\x01\x02'. Видно, что последовательность смещена в право, а так же, что значение 0x00 распаковывается не полностью, для него выполняется операция XOR, но не выполняется операция из второго цикла:
for(i=0;i<4;i++)OUT[i]=IN[i]|(((IN[4]>>i)&1)<<7);
Если тут IN[4] заменить на IN, то последовательность преобразится в '\x00\x00\x01\x02', а замена индексов i у IN на i+1 исправит и смещение, т.е. данная строка в документации должна выглядеть так:
for(i=0;i<4;i++)OUT[i]=IN[i+1]|(((IN[i+1]>>i)&1)<<7);
Если IN[4] там было не просто так и я потенциально что-то сломал, то сообщите об этом пожалуйста, но код с сохранением IN[4], а так же с заменой IN[4] на IN[5] не возвращает изначальной последовательности