Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: 1394, есть пара вопросов....  (Прочитано 6680 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
zloi7777
Постоялец

ru
Offline Offline

« : 23-04-2005 16:44 » 

Написал дровину для обмена между двумя компами по фариварному каналу, работает замечательно....
Соединяю комп по 1394 с  двумя другими компами ( в реале, вместо двух компов будут одинаковые устройства с фариварным интерфейсом) и начинаются проблемы:
 1. на каждом компе запускаются по две копи драйвера и обмена нет ни с одной парой компов. Вопрос, как сделать чтобы запускался тока один драйвер, и через него взаимодействовать с двумя узрами?
 2. из первого вопроса подвунктом вытикает второй - как послать запрос на чтение или запись на конкретный узел понятно из MSDN, а вот как определить адрес узла откуда получены данные совершенно непонятно, в запросе REQUEST_ALLOCATE_ADDRESS_RANGE неслова о адресе узла нет ( хотя при программировании контроллера 1394 на прямую, в заголовках пакетов вся эта информация есть)?

Заранее благодарен за любую информацию по данному поводу.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 28-04-2005 07:37 » 

По первому пункту. IMHO такого быть не может в случае нормального WDM драйвера. То есть твое утверждение, что DriverEntry два раза вызывают, система если модуль уже загружен второй раз его не пытается загружать. А вот если AddDevice два раза вызывают то это нормально, так и должно быть в случае двух устройств.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-08-2005 11:48 » 

по поводу
" из первого вопроса подвунктом вытикает второй - как послать запрос на чтение или запись на конкретный узел понятно из MSDN, а вот как определить адрес узла откуда получены данные совершенно непонятно, в запросе REQUEST_ALLOCATE_ADDRESS_RANGE неслова о адресе узла нет ( хотя при программировании контроллера 1394 на прямую, в заголовках пакетов вся эта информация есть)?"
когда ты располагаешь память и мапируешь еез  REQUEST_ALLOCATE_ADDRESS_RANGE  - ты просто мапируешь память - никаких обращений к шине 1394 не происходит в этот момент. Узлом является твой комп с выделенным ему PHIS_ID и BUS_ID.
информацию о запросах к этой области можно получить по факту запроса. установив нотификейшен, на эту область. он будет вызываться при попытках чтения записи в этот регион. в нотификейшене будет инфо о ID того кто туда пытался достучатсяи даже весь заголовок пакета.
Юра.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
R2D2_RnD
Гость
« Ответ #3 : 24-10-2005 08:26 » 

Единственным способом определить откуда пришел запрос на чтение/запись адреса является способ выделения адресов No Backing Store - в этом случае на драйвер устройства ложится обязанность по разбору содержимого пакета 1394 и отправке (в случае необходимости) response пакета (напр. на broadcast по стандарту ответные пакеты не отправляются).
Указатель на пакет получаем от драйвера шины в структуре NOTIFICATION_INFO - указатель на нее является параметром callback функции, указываемой при выделении адресов шины 1394.
Т.к. в этом случае драйвер устройства получает весь пакет, то становится возможным узнать все подробности - адрес отправителя, скорость передачи и пр.

Более подробно расписано на:
http://www.wd-3.com/archive/AddressRange.htm
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines