Цитата
В принципе, глобально - вопрос был в том, может ли устройство корректно передать компу масив символов, не умея принимать комманды от ПК и реагировать на них.
Ну, разве если вы уверены, что ваше устройство не будет включено вместо клавы на этапе загрузки... Но и в таком случае вы должны уметь обработать ситуацию, когда хост "дергает" CLK в 0 и на входе DATA - 0. Это значит, что хост "просит" передать данные. Тогда вам нужно выдать клоки для приема данных от хоста...
Цитата
Относительно передачи байтов, я примерно так и делаю, как говорил Dimmy - перед сбросом в 0 клока проверяю уровень на нем, если 1 - передаю байт заново :
...а надо проверять на 0... - что вы и делаете

if (!(PS2_PIN&(1<<PS2_CLK))) return (false); //low level on PS2_CLK
так что тут все правильно...
Только вы забыли об основной ситуации - когда клавиатура в покое, а мышка двигается. Тогда хост на время приема данных от мыши выставляет 0 на CLK. Так что я посоветовал бы Вам обрабатывать его в прерывании и в нем проверять состояние вывода DATA. Если он в 0 - то это запрос от хоста на передачу данных. Вам надо их синхронизировать. Если на DATA 1 - то Вам ничего не надо делать минимум в течение 2мс...
Сообщение отредактировал Dimmy - Jul 5 2007, 19:01