You are not logged in.
Pages: 1
Решил поэкспериментировать с джойстиком, установил Microsoft DirectX SDK нашел пример, как раз с демонстрацией вибрации. Начал переделывать под Delphi, но застрял вот здесь:
// This application needs only one effect: Applying raw forces. DWORD rgdwAxes[2] = { DIJOFS_X, DIJOFS_Y }; LONG rglDirection[2] = { 0, 0 }; DICONSTANTFORCE cf = { 0 }; DIEFFECT eff; ZeroMemory( &eff, sizeof(eff) ); eff.dwSize = sizeof(DIEFFECT); eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; eff.dwDuration = INFINITE; eff.dwSamplePeriod = 0; eff.dwGain = DI_FFNOMINALMAX; eff.dwTriggerButton = DIEB_NOTRIGGER; eff.dwTriggerRepeatInterval = 0; eff.cAxes = g_dwNumForceFeedbackAxis; eff.rgdwAxes = rgdwAxes; eff.rglDirection = rglDirection; eff.lpEnvelope = 0; eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); eff.lpvTypeSpecificParams = &cf; eff.dwStartDelay = 0; // Create the prepared effect if( FAILED( hr = g_pDevice->CreateEffect( GUID_ConstantForce, &eff, &g_pEffect, NULL ) ) ) { return hr; // !!!!!!!!!!!!! }
вроде простой кусок но функция g_pDevice->CreateEffect всегда возвращает ошибку. Скомпилировал бы сам на си, но в наличие сейчас только Visual C++ 2005 Express Edition. Может прокинете какие-нибудь примеры на Delphi если есть.
Offline
Эх, я бы возможно помог - когда я разрабатывал HUME 2, пришлось повозиться с Direct X, но это был DirectShow, а не DirectInput. И исходники те мною, похоже, утеряны.
На всякий случай кину линк на msdn:
http://msdn.microsoft.com/en-us/library … S.85).aspx
EDIT:
Покопался в старых файлах, нашел кое-что. Есть библиотека DelphiX, реализующая основные функции DirectX на языке Delphi. Найти можно, конечно, на torry.net. Там есть и примеры с FF, множество функций и классов для работы с джойстиком.
Last edited by Seemann (23-06-2008 00:10)
Offline
Offline
Смотря кому. Мне - легко. (На USB - совсем легко, на COM - нужно чутка повозиться).
Тебе, судя по вопросу - нет. (Сколько на USB контактов? Назначение их знаешь?)
Я неверно поставил вопрос, попытаюсь упростить:
Я хочу реализовать в САне отдачу на руль
Просто надо при значении 1 по какому-либо адресу памяти выводилось на любые 2 контакта USB разъёма вольт 12 или 5 хотябы
Интересен исходник для вывода напряжения)))
Возможно ли это в Visual или Quick Basic?
Last edited by 3Doomer (26-07-2008 22:05)
GIMS developer
Offline
Вопрос-то верный. Неверна постановка в принципе.
Вопрос примерно того же класса: как мне сделать, чтобы при значении 1 по какому-нибудь адресу памяти, на один из контактов ethernet выводилось вольт 12 или 5 хотя бы.
Если посмотреть на техническую стророну, у USB - 4 контакта. Два из них - питание. Два - дифференциальная пара для двунаправленного обмена. Обмен идет пакетами. Для каждого подключенного устройства, должен обрабатываться как минимум один пакет в одну миллисекунду. Если устройство не подает признаков жизни в течение трех миллисекунд, значит его отключили или оно повисло. Если на устройство не поступило ни одного пакета за десять миллисекунд, значит компьютер выключили, и нужно выключиться тоже.
И откуда, при всем этом безобразии, взять "свободный контакт" ?
Хорошее краткое описание, как это работает (USB in a nutshell) - есть на beyondlogic.org.
Т.е., если хочется добавить force feedback в какое-то устройство - есть два пути:
1) если есть возможность менять прошивку контроллера этого устройства, нужно в HID-дескриптор добавить поле для feedback, и сделать обработку соответствущего report-а (при наличии исходника прошивки и свободного выхода контроллера - минут двадцать работы). После этого, все приложения, которые используют feedback, будут работать с этим устройством без каких либо изменений.
2) подключиться к свободному контакту LPT или COM и повесить хук на соответствующий опкод. Для LPT - использовать что-то типа DLPortIO (примеры есть в комплекте), для COM, если подключиться к DTE, достаточно будет просто открыть/закрыть устройство.
Offline
Pages: 1