Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1118069208
Эдик Дятлов
2005-06-06 18:46
2005.06.29
Сохранить запись, содержащую динамический массив, в файл


1-1117879184
Kolan
2005-06-04 13:59
2005.06.29
Условная компиляция


14-1117132827
Копир
2005-05-26 22:40
2005.06.29
Нарушение авторских прав. Гомер. Одиссея.


9-1111237106
Xeno
2005-03-19 15:58
2005.06.29
Проблемы с камерой


1-1118209050
Ega23
2005-06-08 09:37
2005.06.29
Перекрытие методов TDataLink





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский