roboforum.ru

Технический форум по робототехнике.

Обсуждение протокола шлюз-контроллера

Разработка стандартизированных модулей для домашнего робостроения.
Правила форума
Правила раздела OpenRobotics

Re: Обсуждение протокола шлюз-контроллера

Сообщение =DeaD= » 14 май 2009, 21:15

blindman писал(а):Или я невнятно изъясняюсь, или кто-то по диагонали читает :) Я именно это и имею в виду - супер-драйвер возвращает только информацию, которую драйвера сообщили ядру во время своей регистрации.

Может быть и по диагонали :pardon: Но супер-драйвер всегда может понять что такое у него за информация? Или там есть просто неясная последовательность байт которая может быть чем угодно в зависимости от типа драйвера? ;)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение протокола шлюз-контроллера

Сообщение blindman » 14 май 2009, 21:27

У него только та информация, которую драйвера ему сообщили, через строго определенные программные интерфейсы. Эта информация имеет смысл для любого драйвера. А раз интерфейсы определены - значит можно говорить и об определенной структуре информации. Супер-драйвер может дать только ту информацию, которая есть у ядра, и которой должен обладать клиент, чтобы достучаться до драйвера. Ядро знает только код (или название) драйвера, количество и номера регистров. Соответственно супер-драйвер может выдать только эту информацию. Все прочее - через сам драйвер.

Кстати, номера регистров передавать не надо - достаточно количества и базового номера.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение протокола шлюз-контроллера

Сообщение =DeaD= » 14 май 2009, 21:31

blindman писал(а):У него только та информация, которую драйвера ему сообщили, через строго определенные программные интерфейсы. Эта информация имеет смысл для любого драйвера. А раз интерфейсы определены - значит можно говорить и об определенной структуре информации. Супер-драйвер может дать только ту информацию, которая есть у ядра, и которой должен обладать клиент, чтобы достучаться до драйвера. Ядро знает только код (или название) драйвера, количество и номера регистров. Соответственно супер-драйвер может выдать только эту информацию. Все прочее - через сам драйвер.

Тогда значит я не так понял. А можем сейчас приземлить эту структуру информации?

Например, если так?
* 2 байта - идентификатор типа драйвера;
* 2 байта - номер версии и субверсии драйвера;
* 2 байта - номер начального регистра драйвера и количество регистров;
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение протокола шлюз-контроллера

Сообщение Vooon » 15 май 2009, 21:32

Написал драйвер.

00 00 — получить количество драйверов — 1 байт
00 nn — получить информацию о драйвере nn — 6 байт

1. 2 байта — uid
2. 1 байт — major version
3. 1 байт — minor version
4. 1 байт — start register
5. 1 байт — register count

Добавлено спустя 9 минут 43 секунды:
А также написал код поддержки для PyOR.

Код: Выделить всёРазвернуть
import pyor
import serial
import sys

from pyor.testio import LogIO

def main():
    ser = serial.Serial(sys.argv[1])
    log = LogIO(ser)
    req = pyor.Request(log)
    intro = pyor.Introspection(req)

    req.localhost = 0x40
    intro.load_info()

    print intro.reg

if __name__ == '__main__':
        main()


Код: Выделить всёРазвернуть
vovan@vovan-laptop:/tmp$ python t.py /dev/rfcomm0
< L40\n                                         
> L40\r                                         
> \n                                             
< S400000                                       
< S4101                                         
< P\n                                           
> # > cmd_start(0x40, 0)\r                       
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_start(0x41, 1)\r                       
> \n                                             
> # > cmd_rxc(0x41, 0)\r                         
> \n                                             
> # > cmd_stop()\r                               
> \n                                             
> SWAASR04P\r                                   
> \n                                             
< S400001                                       
< S4106                                         
< P\n                                           
> # > cmd_start(0x40, 0)\r                       
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_txc(0x01)\r                           
> \n                                             
> # > cmd_start(0x41, 1)\r                       
> \n                                             
> # > cmd_rxc(0x41, 1)\r                         
> \n                                             
> # > cmd_rxc(0x01, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x01, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x60, 0)\r                         
> \n                                             
> # > cmd_stop()\r                               
> \n                                             
> SWAASR010001006004P\r                         
> \n                                             
< S400002                                       
< S4106                                         
< P\n                                           
> # > cmd_start(0x40, 0)\r                       
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_txc(0x02)\r                           
> \n                                             
> # > cmd_start(0x41, 1)\r                       
> \n                                             
> # > cmd_rxc(0x41, 1)\r                         
> \n                                             
> # > cmd_rxc(0x10, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x01, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x51, 0)\r                         
> \n                                             
> # > cmd_stop()\r                               
> \n                                             
> SWAASR100001005102P\r                         
> \n                                             
< S400003                                       
< S4106                                         
< P\n                                           
> # > cmd_start(0x40, 0)\r                       
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_txc(0x03)\r                           
> \n                                             
> # > cmd_start(0x41, 1)\r                       
> \n                                             
> # > cmd_rxc(0x41, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x10, 1)\r                         
> \n                                             
> # > cmd_rxc(0x01, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x44, 0)\r                         
> \n                                             
> # > cmd_stop()\r                               
> \n                                             
> SWAASR001001004408P\r                         
> \n                                             
< S400004                                       
< S4106                                         
< P\n                                           
> # > cmd_start(0x40, 0)\r                       
> \n                                             
> # > cmd_txc(0x00)\r                           
> \n                                             
> # > cmd_txc(0x04)\r                           
> \n                                             
> # > cmd_start(0x41, 1)\r                       
> \n                                             
> # > cmd_rxc(0x41, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n                                             
> # > cmd_rxc(0x00, 1)\r                         
> \n
> # > cmd_rxc(0x01, 1)\r
> \n
> # > cmd_rxc(0x00, 1)\r
> \n
> # > cmd_rxc(0x00, 0)\r
> \n
> # > cmd_stop()\r
> \n
> SWAASR000001000001P\r
> \n
{'DIR2': 99, 'DIR1': 98, 'PORTD': 71, 'PORTB': 69, 'PORTC': 70, 'PORTA': 68, 'DDRD': 75, 'DDRB': 73, 'DDRC': 74, 'DDRA': 72, 'PWM1': 96, 'PWM2': 97}
vovan@vovan-laptop:/tmp$
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение протокола шлюз-контроллера

Сообщение =DeaD= » 15 май 2009, 21:33

Надо потом будет интерфейс переделать - чтобы 00 nn было эквивалентно по ответам серии 00 01, 01 01, 02 01, ..., (N-1) 01.

Добавлено спустя 25 секунд:
По возможности конечно :) если сильно не усложнит.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение протокола шлюз-контроллера

Сообщение Vooon » 15 май 2009, 22:28

Эмм не понял, зачем 01 01, 02 01, 03 01 нужны?
И это потребует вмешаться в работу драйвера.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение протокола шлюз-контроллера

Сообщение =DeaD= » 15 май 2009, 22:46

Забей пока :) потом если придумаю как красиво сделать - предложу :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.

Вернуться в Open Robotics

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8