Russian Qt Forum

Программирование => С/C++ => Тема начата: igor_bogomolov от Июль 16, 2009, 20:13



Название: собственная реализация hotplug на с++
Отправлено: igor_bogomolov от Июль 16, 2009, 20:13
Приветствую всех.
Как реализавать собственную программу "горячего" обнаружения устройств в системе (hotplug).

Задача чисто абстрактная, не привязанная, пока, ни к каким конкретным устройствам и интерфейсам.
Т.е. нужно реализовать некий абстрактный интерфейс и набор классов, используя которые в дальнейшем можно будет описать реальные устройства с различными интерфейсами, которые можно подключать/отключать во время работы прораммы, которая в свою очередь все это коректно отслеживала.

Мне нужно понять в теории, как построить такую систему, как производить опрос/поиск оборудования. И как сделать систему легко расширяемой. Т.е. сделали некое новое устройство, мы создаем класс для него, унаследованный от некого абстрактного базового класса описывающего в общем виде любое устройство. Добавляем его в список поддерживаемого оборудования после чего оно должно определяться и работать. (Это мое скромное понимание задачи, как в реальности работают подобные системы я не знаю)

Мне  нужно продумать уровень абстракции. Но я не знаю с чего начать, нет опыта. Какую необходимую реализацию нужно задать для устройства, какую для интерфейса, как их увязывать. Как правильно организовать цикл обнаружения оборудования???

Помогите с идейками. Не знаю с какого конца браться.


Название: Re: собственная реализация hotplug на с++
Отправлено: Rcus от Июль 16, 2009, 20:19
Ну для начала посмотреть как это работает в существующих решениях, например kdelibs/Solid


Название: Re: собственная реализация hotplug на с++
Отправлено: igor_bogomolov от Июль 16, 2009, 21:25
Огромное спасибо за ссылку, то что надо. Буду разбираться.
P.S. Если есть еще какие мысли, буду очень признателен.


Название: Re: собственная реализация hotplug на с++
Отправлено: Alex Custov от Июль 16, 2009, 21:48
В linux есть Hardware Abstraction Layer - HAL (http://www.linux.org.ru/wiki/en/HAL)


Название: Re: собственная реализация hotplug на с++
Отправлено: lit-uriy от Июль 16, 2009, 22:10
>>В linux есть Hardware Abstraction Layer - HAL
это сильно низкий уровень, Игорю нужен прикладной, для работы некой софтины с промоборудованием.


Название: Re: собственная реализация hotplug на с++
Отправлено: Alex Custov от Июль 16, 2009, 22:26
>>В linux есть Hardware Abstraction Layer - HAL
это сильно низкий уровень, Игорю нужен прикладной, для работы некой софтины с промоборудованием.

это как раз довольно высокий уровень. Получить список оборудования и делать обнаружение новых устройств он может, следовательно на его основе можно написать что-то своё. На нём сделано автообнаружение устройств в KDE3, когда выскакивает диалог с выбором действий в зависимости от вставленного устройства. По-мойму как раз оно.


Название: Re: собственная реализация hotplug на с++
Отправлено: lit-uriy от Июль 16, 2009, 23:57
AX, вполне возможно, я про него (HAL) лишь читал.


Название: Re: собственная реализация hotplug на с++
Отправлено: kuzulis от Июль 17, 2009, 07:49
1. вот тут есть альтернатива HAL : http://broadcast.oreilly.com/2009/02/vl-hot-a-non-polling-alternati.html
2. можно использовать udev

Это что касаемо Linux

Что касаемо винды - может из реестра брать инфу? Не?

Ешё по HAL есть примеры на ЛОР

Цитировать
Мне нужно понять в теории, как построить такую систему, как производить опрос/поиск оборудования. И как сделать систему легко расширяемой. Т.е. сделали некое новое устройство, мы создаем класс для него, унаследованный от некого абстрактного базового класса описывающего в общем виде любое устройство. Добавляем его в список поддерживаемого оборудования после чего оно должно определяться и работать. (Это мое скромное понимание задачи, как в реальности работают подобные системы я не знаю)

а зачем что-то придумывать - если это уже все есть?  все поддерживается самими ОС ! Зачем писать новое приложение? Я не понял шот! :)

и тут нужно еще писать свой драйвер ...


Название: Re: собственная реализация hotplug на с++
Отправлено: Авварон от Июль 17, 2009, 08:15
udev более низкий уровень по сравнению с HAL'ом.


Название: Re: собственная реализация hotplug на с++
Отправлено: lit-uriy от Июль 17, 2009, 08:25
а ему только линух и надо.


Название: Re: собственная реализация hotplug на с++
Отправлено: igor_bogomolov от Июль 17, 2009, 17:59
а зачем что-то придумывать - если это уже все есть?  все поддерживается самими ОС ! Зачем писать новое приложение? Я не понял шот! :)
Есть набор оборудования (плат) собственного производства. Они объединяются в некую единую систему. В эту систему входит также встраеваемая процессорная плата, на которой установлена ос Linux. Посредством некоторых интерфейсов (I2C, MPI(это даже и не знаю пока что за интерфейс) и еще может какие будут), мы можем получать доступ к нашему оборудованию. Сам Linux про это оборудование ничего не знает и определить их не может. Вот и стоит задача написания некой собственной реализации hotplug.   

На данный момент нужно абстрогироваться от конкренной реализации оборудования и интерфейсов. Надо построить некую абстрактную архетиктуру, которую дальше можно будет расширять уже конкретной реализацией.

Цитата: igor_bogomolov
Мне  нужно продумать уровень абстракции. Но я не знаю с чего начать, нет опыта. Какую необходимую реализацию нужно задать для устройства, какую для интерфейса, как их увязывать. Как правильно организовать цикл обнаружения оборудования ? ? ?
Буду рад любой помощи.


Название: Re: собственная реализация hotplug на с++
Отправлено: Rcus от Июль 17, 2009, 18:13
oh... а я наивно полагал что вопрос касается юзерленда


Название: Re: собственная реализация hotplug на с++
Отправлено: kuzulis от Июль 17, 2009, 20:26
Цитировать
Сам Linux про это оборудование ничего не знает и определить их не может.
Так для этого нужно написать драйвер, создайте правила , и все должно получится :)

К примеру FM тюнеры через I2C вроде управляются. Может есть смысл в этом направлении посмотреть (т.е как реализовано там)?
Цитировать
(I2C, MPI(это даже и не знаю пока что за интерфейс) и еще может какие будут),
так может все на PCI будет висеть

Попахивает системным программированием ИМХО :)