ORFA Introspection driver — различия между версиями
=DeaD= (обсуждение | вклад) (Новая страница: «=== Драйвер интроспекции === Cпециальнsq драйвер в ядре, который закреплен на регистре 0x00. Тип...») |
=DeaD= (обсуждение | вклад) (→Примеры) |
||
| (не показано 11 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | + | [[Категория:Open Robotics]] | |
| − | + | ||
| + | == Драйвер интроспекции == | ||
| + | Cпециальный драйвер, всегда закрепленный за регистром 0x00. Позволяет узнать какие вообще драйверы присутствуют в устройстве, какой версии эти драйвера и какие регистры им назначены. | ||
Типы запросов (регистр, данные…): | Типы запросов (регистр, данные…): | ||
| Строка 6: | Строка 8: | ||
# <code>00 nn</code> — запросить информацию о драйвере nn, нужно прочитать 6 байт | # <code>00 nn</code> — запросить информацию о драйвере nn, нужно прочитать 6 байт | ||
| − | Структура информации | + | Структура информации в ответе на запрос <code>00 nn</code>: |
{| class="standard" | {| class="standard" | ||
! Байт | ! Байт | ||
| Строка 38: | Строка 40: | ||
То есть все регистры драйвера это интервал <code>(Start Register)..(Start Register + Count of registers - 1)</code> | То есть все регистры драйвера это интервал <code>(Start Register)..(Start Register + Count of registers - 1)</code> | ||
|} | |} | ||
| + | |||
| + | ==Примеры== | ||
| + | '''ВНИМАНИЕ! Все команды должны оканчиваться переводом строки, который означает окончание команды и передачу её на исполнение!''' | ||
| + | |||
| + | ===Определяем сколько драйверов в устройстве=== | ||
| + | |||
| + | Запрос: | ||
| + | L40 | ||
| + | S40 00 00 S41 01 P | ||
| + | |||
| + | Ответ: | ||
| + | L40 | ||
| + | SWAASR06P | ||
| + | |||
| + | Разбор: | ||
| + | * Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее). | ||
| + | * Второй запрос - S40 00 00 - отправим в устройство 0x40 номер регистра 00 и тип запроса 00 - получить количество драйверов, S41 01 - получить ответ 1 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 06 - получили 1 байт ответа (количество драйверов), P - конец ответа. | ||
| + | |||
| + | ===Определяем информацию об одном из драйверов=== | ||
| + | |||
| + | |||
| + | Запрос: | ||
| + | L40 | ||
| + | S40 00 02 S41 06 P | ||
| + | |||
| + | Ответ: | ||
| + | L40 | ||
| + | SWAASR003101001002P | ||
| + | |||
| + | Разбор: | ||
| + | * Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее). | ||
| + | * Второй запрос - S40 00 02 - отправим в устройство 0x40 номер регистра 00 и тип запроса 02 - получить информацию о драйвере 0x02, S41 01 - получить ответ 6 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 003101001002 - получили 6 байт ответа (информация о драйвере - 0x0031 - идентификатор тип драйвера, 0x01.0x00 - версия драйвера, 0x10 - номер первого регистра драйвера, 0x02 - количество регистров драйвера), P - конец ответа. | ||
Текущая версия на 07:19, 4 ноября 2009
Содержание
Драйвер интроспекции
Cпециальный драйвер, всегда закрепленный за регистром 0x00. Позволяет узнать какие вообще драйверы присутствуют в устройстве, какой версии эти драйвера и какие регистры им назначены.
Типы запросов (регистр, данные…):
00 00— запросить количество драйверов, нужно прочитать 1 байт00 nn— запросить информацию о драйвере nn, нужно прочитать 6 байт
Структура информации в ответе на запрос 00 nn:
| Байт | Название | Комментарий |
|---|---|---|
| 0, 1 | UID | Уникальный идентификатор драйвера.
Может быть получен у команды проекта «Open Robotics». Таблица уже выданных идентификаторов. Для личного использования зарезервирован диапазон адресов с первым байтом 0xFF. |
| 2 | Major Version | Старший номер версии |
| 3 | Minor Version | Младший номер версии |
| 4 | Start Register | Номер начального регистра |
| 5 | Count of registers | Количество регистров
То есть все регистры драйвера это интервал |
Примеры
ВНИМАНИЕ! Все команды должны оканчиваться переводом строки, который означает окончание команды и передачу её на исполнение!
Определяем сколько драйверов в устройстве
Запрос:
L40 S40 00 00 S41 01 P
Ответ:
L40 SWAASR06P
Разбор:
- Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
- Второй запрос - S40 00 00 - отправим в устройство 0x40 номер регистра 00 и тип запроса 00 - получить количество драйверов, S41 01 - получить ответ 1 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 06 - получили 1 байт ответа (количество драйверов), P - конец ответа.
Определяем информацию об одном из драйверов
Запрос:
L40 S40 00 02 S41 06 P
Ответ:
L40 SWAASR003101001002P
Разбор:
- Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
- Второй запрос - S40 00 02 - отправим в устройство 0x40 номер регистра 00 и тип запроса 02 - получить информацию о драйвере 0x02, S41 01 - получить ответ 6 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 003101001002 - получили 6 байт ответа (информация о драйвере - 0x0031 - идентификатор тип драйвера, 0x01.0x00 - версия драйвера, 0x10 - номер первого регистра драйвера, 0x02 - количество регистров драйвера), P - конец ответа.