Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизДоступ к PCI - устройству Найти похожие ветки
← →
Shuhrat (2005-04-26 11:55) [0]Здравствуйте, мастера Дельфи!
Есть одна проблема, правда пока еще до конца неосознанная:
Есть какой-либо девайс в PCI-шине, с сигналами на контактах разъема (по типу выходных сигналов контролера, входные где-то снаружи), нужно считывать эти сигналы в программу.
Есть следующие варианты ответов:
1) Такой девайс в принципе невозможен
2) Нужно писать драйвер устройства под Windows
3) Есть стандартные API функции, позволяющие считать состояние сигналов с PCI-шины
4) Свой вариант
Если кто-то сталкивался с похожей задачей, дайте знать
← →
Digitman © (2005-04-26 12:16) [1]2)
← →
Anatoly Podgoretsky © (2005-04-26 12:21) [2]Если ты не собираешься работать с нумератором PCI, то он ни чем не отличатся от ISA или другого интерфейса. Так как устройство твое то нужен драйвер.
← →
Deka © (2005-04-26 12:22) [3]Задай вопрос корректнее. А прочитать сигналы шины PCI программно наверное невозможно. По крайней мере стандартным API. Все сигналы на шине динамические и посмотреть их можно осциллографом.
← →
Deka © (2005-04-26 12:25) [4]Какую скорость имеют поступающие в устройство сигналы? Сколько сигналов (каналов поступления) может быть? Может быть лучше реализовать не PCI, а USB устройство? Есть стандартные микросхемы и даже модули с гтовыми драйверами и API.
← →
Dozer © (2005-05-01 13:12) [5]Переходи на DOS/Win98, там это намного проще
← →
Marser © (2005-05-01 14:22) [6]
>Dozer © (01.05.05 13:12) [5][Ответить]
> Переходи на DOS/Win98, там это намного проще
Браво! Умнее ничего не мог придумать?
Помню, в "Спектруме" вообще всё было очень просто...
← →
Shuhrat (2005-05-06 11:54) [7]Не получилось ответить раньше. Почему-то delphimaster.ru не грузился...
Для начала две ссылки:
http://azbukavb.narod.ru/teorie/LPTPort.html#B (что-то в тему)
http://www.entechtaiwan.net/ - TVicHW32 - инструмент для работы с различной аппаратурой непосредственно из Win32 приложения (с примерами на для различных сред разработок)
> Deka © (26.04.05 12:22) [3]
> Задай вопрос корректнее.
А конкретнее вопрос наверное не получится - уровень знаний слишком низок :(
Возможно вопрос будет звучать так:
Имееется от какого-либо производителя PCI-девайс , имеются родные дрова (Я думаю свой контроллер типа вход-обработка-выход лучше делать внешний и в комп заводить через внешние контакты LPT/COM/USB )
Значит с девайса можно считывать информацию, используя функции dll производителя. Можно ли это считывание организовать не собственному таймеру, а по прерыванию девайса. Если можно, то как его запихать в Delphi ?
← →
Digitman © (2005-05-06 12:05) [8]
> Имееется .. PCI-девайс
> в комп заводить через внешние контакты LPT/COM/USB
что за бред ?
дивайс УЖЕ подключен к PCI-шине, это - ВНУТРЕННИЙ дивайс, он НЕ нуждается НИ в каких иных интерфейсах.
наЧЕрта нужны какие-то там интерфейсы для коммуникации с ВНЕШНЕЙ периферией, а-ля LPT/COM/USB ?
← →
Deka © (2005-05-06 12:16) [9]Да вот и я все никак в толк не возьму, чего есть и чего надо то? Опыт разработки драйверов есть (правда в ДОС, а для WIN есть книжка, инет и т.д.), опыт построения девайсов тоже есть, а ничем помочь не могу... Печально...
← →
Shuhrat (2005-05-07 09:13) [10]
> что за бред ?
Бред как бред :(
Еще раз сначала:
Имееется PCI-дивайс , имеются родные драйвера и dll-ки от производителя. Можно ли это считывание c дивайса организовать не собственному таймеру, а по аппаратному прерыванию дивайса. Если можно, то как его запихать в Delphi ? Дивайс может быть любой.
Например:
Поставил на комп карточку видеозахвата (TV-тюнер), в родной dll-ке нашел две нужные функции:
1-я Init(var h:ссылка на контекст воспроизведения), задаешь h ссылку на дескриптор визуальной панели и видео в реальном времени отображается на панели.
2-я GetBMP(Var b:TBitmap ), получаешь стоп-кадр с видео. Так вот эту функцию посадил на обработчик стандартного Ttimer и получается с определенной дискретностью считывал информацию с карточки. А как надо сделать, чтобы при поступании видео программа автоматически считывала стоп-кадры, т.е. есть видео-есть прерывание с дивайса-есть стоп-кадр, нет видео-нет никакой обработки
Кстати, если не секрет: Deka © не с Чирчика?
← →
Deka © (2005-05-07 10:37) [11]Нет, не с Чирчика.
Ну вот теперь более-менее понятно. По крайней мере про пример.
Начнем с того, что давай определимся что значит "при поступании видео"? Кто его поступает? Его как-то подают или подключают?
Теперь дальше. Я, как электронщик, мог бы сделать эоектронику карты видеозахвата работающую по двум алгоритмам:
1. Видеозахват работает всегда, вне зависимостиот наличия видеосигнала и поэтому функция Init просто определяет окно, куда направлять снятый видеопоток.
2. Вся электроника платы, отвечающая за захват видео находится в режиме низкого энергопотребления (отключена) и никакого захвата не идет до тех пор, пока не выполнена функция инициализации (Init). Только после этого начинается захват.
Теперь дальше.
Видеосигнал - электрический сигнал. Поэтому для его наличия в кабеле (идущем на плату видеозахвата) нужен датчик. Ну и конечно сигнал с этого датчика надо куда-нить подать для анализа. Отсюда можно взять прерывание о котором ты говоришь.
Думаю что есть еще програмный вариант. Надо использовать алгоритм работы систем видеоохраны. В потоке видео сравниваются текущий и предыдущий кадры и по наличию отличий (допустимый уровень отличия задается в процентах) производится видеосъемка до момента понижения уровней отличий ниже заданнорго порого либо до момента исчерпания места на жестком диске. ;) Т.е. можно сделать так: сравниваешь два кадра и если они сильно отличаются - есть видео! Думаю что такой алгоритм будет работать с физически отключаемым источником видео, так как при отключенном источнике видео, карта видеозахвата должна выдавать статическую картинку.
Программные способы не будут работать при статическом видео - только при динамическом.
Остается еще один способ - поискать служебные функции. Может быть карта может передавать служебную информацию? Типа есть видео - нет видео и всякого рода свои внутренние настройки. Может быть есть передача информации о состоянии (девайс то довольно сложный) и взять инфу оотуда? Любой видеосигнал характеризуется частотами строчной и кадровой развертки. Плате необходимо настроится на эти частоты, чтобы правильно выполнить видеозахват. Если есть врзможность прочитать информацию об параметрах поступающего видео (кадровая частота, строчная и т.д.) то вот он и датчик наличия видео.
P.S. Все это время твоя программа должна наблюдать за картой и по ее состоянию делать вывода... Так что прерывание тебе не нужно.
← →
Eraser © (2005-05-07 13:41) [12]Shuhrat
Имееется PCI-дивайс , имеются родные драйвера и dll-ки от производителя.
А вот насчёт DLL поподробнее. Есть ли к ним заголовочные файлы или описание функций? Возможно они- уже готовый интерфейс.
← →
Shuhrat (2005-05-07 14:56) [13]Еще раз сначала:
Имеется PCI-дивайс , имеются родные дрова и dll-ки.
Можно ли считывание информации с дивайса организовать не собственному таймеру, а по прерыванию девайса. Если можно, то как его запихать в Delphi ? Дивайс может быть любой.
Например:
Была карточка видеозахвата (ТВ-тюнер). В родной dll-ке нашел функцию GetBMP(var B:TBitmap), которая получала стоп-кадр с входного видео. Эту функцию посадил на обработчик OnTimer компонента Ttimer и считывал с определенной дискретностью информацию с карточки. А можно ли считывать информацию по аппаратному прерыванию, т.е. есть видео->есть прерывание-> обработка стоп-кадра, нет видео->никаких действий
← →
Eraser © (2005-05-07 15:07) [14]Shuhrat
А тебе не приходила мысль, что через эту ДЛЛ, может быть возможно, зарегистрировать CallBack ф-ю, которая вызывается при прерывании.
Драйвер ядра написАть никогда не поздно, но ведь возможно есть более простые варианты!
← →
Deka © (2005-05-07 15:17) [15]Буду краток и лаконичен.
>Можно ли считывание информации с дивайса организовать не собственному таймеру, а по прерыванию девайса.
МОЖНО
> как его запихать в Delphi ? Дивайс может быть любой.
зависит от девайса, дров и т.д.
← →
tesseract (2005-05-07 16:00) [16]>Можно ли считывание информации с дивайса организовать не собственному таймеру, а по прерыванию девайса.
>>МОЖНО - читай про IRP_
> как его запихать в Delphi ? Дивайс может быть любой.
зависит от девайса, дров и т.д.
>> Никак. Нужен имеено драйвер, если его API неизвестен под Delphi это проблема.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c