Никогда такое не писал, хотелось бы узнать как правильно архитектура должна выглядеть. Вот я хочу сделать подсветку для компьютера как у телевизоров - это устройство. К нему должна быть программа которая будет задавать параметры работы, включать и выключать и т.д. А общение будет с устройством через драйвер. А вот куда должен писатся код который будет следить за пикселями на экране? По идее это должна делать программа. Но вот вдруг я захочу написать еще одну другую программу, не логичнее что например за это должен отвечать драйвер тогда? Что должен уметь драйвер, он только должен посылать данные в устройство и отдавать от него какую-нибудь информацию (например я хочу еще поставить датчик освящености чтобы динамически менять яркость). Или драйвер это что-то вроде фреймворка который должен уметь делать всякую логику? Еще пока не читал ничего про драйвера не знаю как их пишут и что они умеют только обшее представления Собираюсь вот пока программу писать и сразу возник вопрос а что именно в нее писать.
Все зависит от задачи и от функций ПО. Определитесь с конкретной задачей или набором задач и для этой комбинации уже можно начинать придумывать архитектуру системы.
главная задача: - брать средний цвет в определенных учасках экрана - обработать его например из-за настроек сделать темнее - отправлять на устройство чтобы оно зажгло нужные лампочки за экраном побочные: - вкл/выкл устройство - зажечь все определенным цветом куча неизвестных задача, аля плагины. например пришла почта - начать мигать зеленым цветом. И вот тут не понятно, кто что должен делать? главную задачу должен драйвер уметь делать или он должен уметь только принимать команды какой цвет куда послать? Или вот я еще подумал - 1. должен быть драйвер который только может цвет слать 2. фреймворк который может брать цвета с экрана, посылать их в драйвер, обрабатывать как захочется 3. программа которая общается только с фреймворком, типа просто gui? Наверное надо драйвер/фреймворк/программа, типа как ОС сделана?
Если устройство на основе Arduino (любой, кроме Leonardo и похожих со встроенным в контроллер USB) - тогда общение в любом случае через последовательный порт. Специальный драйвер не нужен, но можно и нужно будет придумать свой язык (систему команд), а в контроллер вшить их интерпретатор. Если это Arduino Leonardo или любой другой на основе ATmega**U** - тогда есть соблазн сделать свое полноценное USB (USB HID) устройство и серьезно усложнить и расширить программную часть. Здесь уже может понадобиться свой драйвер, если это не HID устройство. Вот только чем меньше сложностей- тем лучше. А как будет устроена программа, что общается с контроллером - это ее личное дело.
Поддерживаю вопрос..., но не полностью Меня интересует, как можно узнать цвет того или иного пикселя (или каким путем тут лучше идти?). И выходит что если экран с разрешением 1280х1024, то каждую секунду придётся опрашивать 2х1280+2х1024 пикселей (т.е. все крайние, тем паче, что это не всегда будет хорошо смотреться - как мне кажется - и стоит взять по 3-4 пикселя от бока)?
Ну прототип буду на Uno делать, но потом хочу спаять нормальное устройство с нуля. Там еще не знаю как думал что поставить какой нибудь контролер для USB. Ну вот есть же fs232, что-то типа того. Или сразу МК с встроенным USB, или софт эмуляцию сделать. Но это будет точно полноценный USB. И не HID это же не HID по определению получается. Поэтому и драйвер надо будет. Мне лучше. Я же учусь! Через несколько лет буду в колледж поступать хочу уже уметь. Хочу как правильно
А для какой ОС? В разных по разному и везде свои особенности. Есть общие подходы типа получить дескриптор экрана и отрисовать его в картинку. Но это медленно. Или специальные например я пишу под Mac OS, там быстрее через opengl по идее будет. Как в линуксе даже не знаю там же вообще разные графические оболочки. А еще в винде есть например directx в играх/видео и там просто так не получить доступ нужно перехватывать у программы общение с библиотекой по идее. Все опрашивать не нужно нужны же какие то края. Нужно ведь потом посчитать средний цвет его нужно считать на краях а не для всего экрана. Вот сколько лампочек будет для стольких участков отдельно и посчитать. И по несколько пикселей это будет мала считать. Например на макбуке 15" разрешение будет 2880x1800. А сами вычисления над пикселями я буду делать через специальный фильтр для opengl типа шейдер, можно написать любой код обработки. Там очень бысто можно считать не нагружая процессор лишней работой. И можно считать будет не 2 раза в секунду, а хоть 10. Тут скорее будут проблемы чтобы успевать лампочками моргать чем на компьютере все посчитать.
А вы готовы выложить $5000 регистратору для получения уникального диапазона идентификаторов USB? Есть конечно способы сэкономить, например выкупить только PID для чужого VID (http://www.voti.nl/docs/usb-pid.html)... Впрочем, если кроме вас это устройство никто больше не увидит, тогда все ок, можете в порядке отладки взять какие-нибудь неиспользуемые VID/PID, а иначе можно наделать проблем...
Ахах, не Но можно ведь любые идентификаторы выдавать самому. Это для меня и подарю крестной такой еще, все.