Софтовая обвязка устройства

Тема в разделе "Флудилка", создана пользователем Витя, 26 фев 2013.

  1. Витя

    Витя Гик

    Никогда такое не писал, хотелось бы узнать как правильно архитектура должна выглядеть. Вот я хочу сделать подсветку для компьютера как у телевизоров - это устройство. К нему должна быть программа которая будет задавать параметры работы, включать и выключать и т.д. А общение будет с устройством через драйвер. А вот куда должен писатся код который будет следить за пикселями на экране? По идее это должна делать программа. Но вот вдруг я захочу написать еще одну другую программу, не логичнее что например за это должен отвечать драйвер тогда? Что должен уметь драйвер, он только должен посылать данные в устройство и отдавать от него какую-нибудь информацию (например я хочу еще поставить датчик освящености чтобы динамически менять яркость). Или драйвер это что-то вроде фреймворка который должен уметь делать всякую логику?

    Еще пока не читал ничего про драйвера не знаю как их пишут и что они умеют только обшее представления :( Собираюсь вот пока программу писать и сразу возник вопрос а что именно в нее писать.
     
  2. Unixon

    Unixon Оракул Модератор

    Все зависит от задачи и от функций ПО. Определитесь с конкретной задачей или набором задач и для этой комбинации уже можно начинать придумывать архитектуру системы.
     
  3. Витя

    Витя Гик

    главная задача:
    - брать средний цвет в определенных учасках экрана
    - обработать его например из-за настроек сделать темнее
    - отправлять на устройство чтобы оно зажгло нужные лампочки за экраном

    побочные:
    - вкл/выкл устройство
    - зажечь все определенным цветом

    куча неизвестных задача, аля плагины. например пришла почта - начать мигать зеленым цветом.

    И вот тут не понятно, кто что должен делать? главную задачу должен драйвер уметь делать или он должен уметь только принимать команды какой цвет куда послать?
    Или вот я еще подумал -
    1. должен быть драйвер который только может цвет слать
    2. фреймворк который может брать цвета с экрана, посылать их в драйвер, обрабатывать как захочется
    3. программа которая общается только с фреймворком, типа просто gui?

    Наверное надо драйвер/фреймворк/программа, типа как ОС сделана?
     
  4. Unixon

    Unixon Оракул Модератор

    Если устройство на основе Arduino (любой, кроме Leonardo и похожих со встроенным в контроллер USB) - тогда общение в любом случае через последовательный порт. Специальный драйвер не нужен, но можно и нужно будет придумать свой язык (систему команд), а в контроллер вшить их интерпретатор. Если это Arduino Leonardo или любой другой на основе ATmega**U** - тогда есть соблазн сделать свое полноценное USB (USB HID) устройство и серьезно усложнить и расширить программную часть. Здесь уже может понадобиться свой драйвер, если это не HID устройство.

    Вот только чем меньше сложностей- тем лучше.

    А как будет устроена программа, что общается с контроллером - это ее личное дело.
     
  5. Иван С

    Иван С Гик

    Поддерживаю вопрос..., но не полностью ;)
    Меня интересует, как можно узнать цвет того или иного пикселя (или каким путем тут лучше идти?). И выходит что если экран с разрешением 1280х1024, то каждую секунду придётся опрашивать 2х1280+2х1024 пикселей (т.е. все крайние, тем паче, что это не всегда будет хорошо смотреться - как мне кажется - и стоит взять по 3-4 пикселя от бока)?
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

  7. Витя

    Витя Гик

    Ну прототип буду на Uno делать, но потом хочу спаять нормальное устройство с нуля. Там еще не знаю как думал что поставить какой нибудь контролер для USB. Ну вот есть же fs232, что-то типа того. Или сразу МК с встроенным USB, или софт эмуляцию сделать. Но это будет точно полноценный USB. И не HID это же не HID по определению получается. Поэтому и драйвер надо будет.

    Мне лучше. Я же учусь! Через несколько лет буду в колледж поступать хочу уже уметь.

    Хочу как правильно :)
     
  8. Витя

    Витя Гик

    А для какой ОС? В разных по разному и везде свои особенности. Есть общие подходы типа получить дескриптор экрана и отрисовать его в картинку. Но это медленно. Или специальные например я пишу под Mac OS, там быстрее через opengl по идее будет. Как в линуксе даже не знаю там же вообще разные графические оболочки. А еще в винде есть например directx в играх/видео и там просто так не получить доступ нужно перехватывать у программы общение с библиотекой по идее.

    Все опрашивать не нужно нужны же какие то края. Нужно ведь потом посчитать средний цвет его нужно считать на краях а не для всего экрана. Вот сколько лампочек будет для стольких участков отдельно и посчитать. И по несколько пикселей это будет мала считать. Например на макбуке 15" разрешение будет 2880x1800. А сами вычисления над пикселями я буду делать через специальный фильтр для opengl типа шейдер, можно написать любой код обработки. Там очень бысто можно считать не нагружая процессор лишней работой. И можно считать будет не 2 раза в секунду, а хоть 10. Тут скорее будут проблемы чтобы успевать лампочками моргать чем на компьютере все посчитать.
     
    nailxx нравится это.
  9. Unixon

    Unixon Оракул Модератор

    А вы готовы выложить $5000 регистратору для получения уникального диапазона идентификаторов USB? :) Есть конечно способы сэкономить, например выкупить только PID для чужого VID (http://www.voti.nl/docs/usb-pid.html)...

    Впрочем, если кроме вас это устройство никто больше не увидит, тогда все ок, можете в порядке отладки взять какие-нибудь неиспользуемые VID/PID, а иначе можно наделать проблем...
     
  10. Витя

    Витя Гик

    Ахах, не :) Но можно ведь любые идентификаторы выдавать самому. Это для меня и подарю крестной такой еще, все.