Здравствуйте, Vladimir_, Вы писали:
V_>Тема непопулярная, но всё-таки может кто-нибудь сталкивался с WOSA/XFS и сможет мне помочь?
V_>Выполняю V_> WFSStartUp V_> WFSOpen V_> WFSLock V_>Затем WFSExecute(..., WFS_CMD_CDM_START_EXCHANGE,...),
V_>но функция WFSExecute возвращает WFS_ERR_INTERNAL_ERROR. В чем может быть проблема??
V_>
V_>WFSCDMSTARTEX WfsStartEx; // input data
V_>USHORT ausNum[1]; // input data
V_>LPWFSCDMCUINFO lpCuInfoOut; // output data
V_>HRESULT hRes; // Result of the API call
V_>LPWFSRESULT lpWfsRet; // Output
V_>// prepare input data
V_>// ==================
V_>ausNum[0] = 2; // change logical cash unit number 2
V_>WfsStartEx.usCount = 1;
V_>WfsStartEx.lpusCUNumList = ausNum;
V_>hRes = WFSExecute (hService,
V_> WFS_CMD_CDM_START_EXCHANGE,
V_> (LPVOID)&WfsStartEx,
V_> WFS_INDEFINITE_WAIT,
V_> &lpWfsRet);
V_>
Здравствуйте Владимир, тема WOSA/XFS действительно непопулярна... В связи с этим хотелось бы задать вопрос... У меня ситуация следующая:
Выполняю
WFSStartUp
WFSOpen
Эти 2 функции выполняются успешно. После этого пытаюсь запустить WFSRegister, WFSGetInfo, WFSExecute... не работает даже WFSClose... все
эти функции возвращают 0хffffffd5, что означает недоступность библиотеки с драйвером устройства... В описании написано, что эта бага может
возникнуть при выполнении функции WFSOpen, но она возвращает успех... Если вы уже побывали в такой ситуации и вышли победителем... поведайте пожалуйста в чем было дело
Здравствуйте, Nagelo, Вы писали:
N>Здравствуйте Владимир, тема WOSA/XFS действительно непопулярна... В связи с этим хотелось бы задать вопрос... У меня ситуация следующая: N>Выполняю
N> WFSStartUp N> WFSOpen N>Эти 2 функции выполняются успешно. После этого пытаюсь запустить WFSRegister, WFSGetInfo, WFSExecute... не работает даже WFSClose... все N>эти функции возвращают 0хffffffd5, что означает недоступность библиотеки с драйвером устройства... В описании написано, что эта бага может N>возникнуть при выполнении функции WFSOpen, но она возвращает успех... Если вы уже побывали в такой ситуации и вышли победителем... поведайте пожалуйста в чем было дело
Возможно дело в параметре lpszLogicalName, который Вы передаёте в WFSOpen.
Попробуйте его изменить:
// in this example the ATM service is opened
// (this has to be done for each service that should be used)
lpszLogicalName = "ATM"; // corresponds to the name in the
// LOGICAL_SERVICES part of the registry
hApp = WFS_DEFAULT_HAPP; // use the default handle
lpszAppID = "Example Application"; // name of the application
dwTraceLevel = 0; // no tracing
dwTimeOut = WFS_INDEFINITE_WAIT; // wait until completion
dwVersionsRequired = 0x00010002; // all versions from 1.0-2.0
// are allowed
// open the ATM service
hRes = WFSOpen(lpszLogicalName, hApp, lpszAppID, dwTraceLevel,
dwTimeOut, dwVersionsRequired, &SrvcVersion,
&SPIVersion, &hService);
Здравствуйте, Vladimir_, Вы писали:
V_>Здравствуйте, Nagelo, Вы писали:
N>>Здравствуйте Владимир, тема WOSA/XFS действительно непопулярна... В связи с этим хотелось бы задать вопрос... У меня ситуация следующая: N>>Выполняю
N>> WFSStartUp N>> WFSOpen N>>Эти 2 функции выполняются успешно. После этого пытаюсь запустить WFSRegister, WFSGetInfo, WFSExecute... не работает даже WFSClose... все N>>эти функции возвращают 0хffffffd5, что означает недоступность библиотеки с драйвером устройства... В описании написано, что эта бага может N>>возникнуть при выполнении функции WFSOpen, но она возвращает успех... Если вы уже побывали в такой ситуации и вышли победителем... поведайте пожалуйста в чем было дело
V_>Возможно дело в параметре lpszLogicalName, который Вы передаёте в WFSOpen. V_>Попробуйте его изменить:
V_>
V_> // in this example the ATM service is opened
V_> // (this has to be done for each service that should be used)
V_> lpszLogicalName = "ATM"; // corresponds to the name in the
V_> // LOGICAL_SERVICES part of the registry
V_> hApp = WFS_DEFAULT_HAPP; // use the default handle
V_> lpszAppID = "Example Application"; // name of the application
V_> dwTraceLevel = 0; // no tracing
V_> dwTimeOut = WFS_INDEFINITE_WAIT; // wait until completion
V_> dwVersionsRequired = 0x00010002; // all versions from 1.0-2.0
V_> // are allowed
V_> // open the ATM service
V_> hRes = WFSOpen(lpszLogicalName, hApp, lpszAppID, dwTraceLevel,
V_> dwTimeOut, dwVersionsRequired, &SrvcVersion,
V_> &SPIVersion, &hService);
V_>
Здравствуйте Владимир, спасибо за совет... в общем то с драйвером я разобрался... сейчас другая проблема... выглядит она примерно так:
в качестве сервиса я создал приложение, с которым в функции Open создается TCP соединение, в XFS Manager из этой же функции Open я посылаю хэндл соединения (сокета). Однако другие функции все равно не вызываются. Причем когда я впервые создал TCP сессию между WFPOpen и сервисом WFSClose возвратила успех. Но к сожалению в ходе дальнейшей работы этот результат был утерян и возвращаемое всеми функциями значение — 0xfffffff1(WFS_INTERNAL_ERROR)
N>Здравствуйте Владимир, спасибо за совет... в общем то с драйвером я разобрался... сейчас другая проблема... выглядит она примерно так: N>в качестве сервиса я создал приложение, с которым в функции Open создается TCP соединение, в XFS Manager из этой же функции Open я посылаю хэндл соединения (сокета). Однако другие функции все равно не вызываются. Причем когда я впервые создал TCP сессию между WFPOpen и сервисом WFSClose возвратила успех. Но к сожалению в ходе дальнейшей работы этот результат был утерян и возвращаемое всеми функциями значение — 0xfffffff1(WFS_INTERNAL_ERROR)
хмм.. хороший вопрос..так сходу никаких идей нет ((...
Тема *супер* непопулярная вот натолкнулся случайно спустя столько лет. Возможно кто-то может еще ответить. Стоит задача собирать сообщения от устройств по мере их поступления, т.е. подписаться на все сообщения которые ходят в WOSA и фильтровать их для логирования. Может кто сталкивался с подобной задачей? Все что смог найти это спецификации CEN, но к сожалению там написано хоть и много, но без определенных примеров, и понять достаточно сложно, не говоря уж о том что разные вендоры выпускают различные менеджеры и прочее. Буду благодарен за любую инфу.
Здравствуйте , да тема действительно не самая популярная. Задача несложная, но требует наличия соответствующей документации по WOSA.
В качестве небольшого примера работы с event'ом из доков:
The WFS_EXEE_PTR_MEDIAINSERTED Execute Event is generated by the commands of the PTR service.
Как я понял оба ответа Ваши, спасибо большое! А что это за такая *соответствующая* секретная документация ? Например WFS_EXEE_PTR_MEDIAINSERTED в спецификации от CEN я ненашел. Не видел я и таких примеров. В спецификации описан типичный сценарий StartUp->Open->Register->...->Deregister->Close->CleanUp. Собственно непонятен шаг регистрации.
Во-первых, описаны 4 вида событий SERVICE_EVENTS, USER_EVENTS, SYSTEV_EVENTS, EXECUTE_EVENTS. Судя по описанию мне в основном нужны события последнего типа, но там же сказано что они посылаются *только* приложению которое вызывало WFSExecute. Мне же как раз нужно чтобы мое приложение перехватывало события которые происходят в системе, мое же приложения никаких функций провайдеров использовать не будет.
Во-вторых, далее описан пример вызова функции
hr = WFSRegister( hService,USER_EVENTS|SERVICE_EVENTS,hWnd );
как я понимаю здесь hService это то что мне вернуло WFSOpen по LogicalName. Но если я незнаю какие устройства присутствуют в системе? Я не нашел ни одной функции типа EnumerateServices. Можно конечно прочитать реестр, но это же не факт что все эти сервисы запущены. Как правильно поступить в этой ситуации?
Здравствуйте, vaduha, Вы писали:
V>Во-вторых, далее описан пример вызова функции V>hr = WFSRegister( hService,USER_EVENTS|SERVICE_EVENTS,hWnd ); V>как я понимаю здесь hService это то что мне вернуло WFSOpen по LogicalName.
Да, именно так.
V>Но если я незнаю какие устройства присутствуют в системе? Я не нашел ни одной функции типа EnumerateServices. Можно V>конечно прочитать реестр, но это же не факт что все эти сервисы запущены. Как правильно поступить в этой ситуации?
К сожалению, Вам нужно знать logical names устройств, которые вы хотите "слушать".