Как обнаружить нажатие кнопки игрового планшета на OSX 10.5 и выше?

Как я обнаруживаю нажатие кнопки на игровом планшете USB на OSX 10.5 и выше?

Я не могу перенести голову вокруг смехотворно сложного менеджера по HID (даже при том, что, по-видимому, она была упрощена с 10,5), и примеры кода в Apple имеют тысячи строк кода, которые заняли бы дни, чтобы понять и изолировать то, в чем я нуждаюсь, таким образом, я ценил бы, если кто-то отправляет простое, и полностью кодированное решение для этой изолированной проблемы.


Править: до сих пор все ответы являются ссылками на исходный код или полу неясные библиотеки для всех видов устройств HID, которые потребуют большего количества времени исследования, чем, что я хотел бы инвестировать на этом. Я запускаю щедрость для получения фактического отрывка кода, который решает эту простую проблему (пользующийся внешней библиотекой или не).


РЕДАКТИРОВАНИЕ НА МЕСТЕ ПРОДАЖИ ЩЕДРОСТЬ: благодаря всем для Вас помогают; но к сожалению ответ, который был автоматически выбран системой, не работает на меня, не может выяснить почему; и автор еще не ответил на мои комментарии. Любое понимание ценилось бы, но пока фиксация не найдена, любой ищущий ресурсы по этой теме должен взять этот ответ с щепоткой соли.

11
задан Steph Thirion 2 March 2010 в 22:03
поделиться

5 ответов

предложение Peter рамка DDHidLib точно, что вы ищете. Библиотека хорошо разработана и пример кода, который идет с библиотекой, довольно очевидно.

реализация объекта, который получает все джойстики/игровые планшеты, присоединенные к системе, и наблюдает за использованием нажатий кнопки за DDHidLib, выглядела бы примерно так:

#import <Cocoa/Cocoa.h>
#import <DDHidLib/DDHidLib.h>

@interface JoyStickWatcher : NSObject
{
    NSArray* joySticks;
}
- (void)startWatchingJoysticks;
@end


@implementation JoyStickWatcher
- (void)startWatchingJoysticks
{
    //get an array of all joystick objects
    joySticks = [[DDHidJoystick allJoysticks] retain];

    //become the delegate of all available joystick objects
    [joySticks makeObjectsPerformSelector:@selector(setDelegate:) withObject:self];
}

- (void)dealloc
{
    [joySticks release];
    [super dealloc];
}

//these are the DDHidLib joystick delegate methods related to buttons

- (void)ddhidJoystick:(DDHidJoystick *)joystick buttonDown:(unsigned)buttonNumber
{
    NSLog(@"button number %ld of joystick %p went down",joystick,buttonNumber);
}

- (void)ddhidJoystick:(DDHidJoystick *)joystick buttonUp:(unsigned)buttonNumber
{
    NSLog(@"button number %ld of joystick %p went up",joystick,buttonNumber);
}

@end
8
ответ дан 3 December 2019 в 03:52
поделиться

Я полагаю, что это связано с ошибкой sony-ericsson телефонов ( см. здесь ).

Я смог подключиться от/к устройству android 2.0 и моему mac с помощью bluetooth и полностью составленного UUID. Попытка сделать то же самое с устройством j2me (sony ericsson w910i) работала, только если андроид был сервером, иначе я получу то же исключение, что и вы.

UUID, который вы используете, насколько мне известно, является «базовым адресом» для профиля spp, и в поле ServiceClassIDList ServiceRecord, возвращаемого серверным устройством при выдаче обнаружения службы, он должен быть указан ПОСЛЕ того, как UUID вы решили использовать. (например, мой телефон сначала перечислил универсальный UUID, а затем мой пользовательский UUID).

Похоже, здесь та же ситуация. Можно попытаться вручную изменить ServiceRecord и вернуть соответствующий ServiceClassIDList. Может быть, это сработает для вас.. к сожалению, мой глупый сотовый телефон отказывается его менять: (

PS. Странно то, что мой мак действительно способен видеть сервис, даже если ServiceRecord «сломан», я думаю, что андроид просто удосуживается увидеть первый UUID в ServiceClassIDList, в то время как мой ПК проходит через список поиска каждого элемента. Но это только мое предположение:)

-121--2143449-

Вы должны попробовать Dragtable от Danvk

Я нашел этот вопрос во время поиска исправления ошибки в нем, хотя. Он не любит таблицы, расположенные в горизонтально прокручиваемых панелях.

Кроме этого, это просто фантастика.

-121--3453531-

Можно попробовать Dave Dribin DDHidLib .

4
ответ дан 3 December 2019 в 03:52
поделиться

Я использую Procontroll, но это библиотека Java. Но она хороша.

1
ответ дан 3 December 2019 в 03:52
поделиться

Может быть, вы могли бы посмотреть исходный код для MAME OS X ? Имеет хорошую поддержку геймпада.

1
ответ дан 3 December 2019 в 03:52
поделиться

Я считаю, что решил проблему, указанную на исходном плакате относительно приведенного примера кода:

DDHidJoystick * currentJoystick = [joySticks objectAtIndex: 0]; [currentJoystick startListening];

Вы должны выбрать джойстик и начать его слушать. Просто как тот! Обратите внимание, что вы можете заменить 0 любым допустимым индексом в массиве joySticks, чтобы выбрать, какой джойстик вы слушаете, и я предполагаю, что вы можете слушать более одного за раз, если хотите.

Также обратите внимание, что эта (и вышеупомянутая) инициализация должна выполняться из потока, который имеет цикл выполнения.Если вы работаете над собственными приложениями для mac os x, это не проблема, но если вы пишете переносимый код и надеетесь использовать потоки POSIX, вы обнаружите, что многие объекты какао не работают при создании внутри POSIX. нить. Я обнаружил, что обычно вы можете безопасно вызывать их из любого созданного потока, но создание должно происходить в потоке с циклом выполнения. Почти все объекты какао, которые работают через события стиля обратного вызова, запускают эти события из цикла выполнения потока, который их создает.

1
ответ дан 3 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: