コード例 #1
0
ファイル: Joystick.cpp プロジェクト: PaulForey/lovepd
	Joystick::~Joystick()
	{
		// Closes any open joysticks.
		for (int i = 0; i != getNumJoysticks(); i++)
		{
			if (isOpen(i))
				close(i);
		}

		free(joysticks);

		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
	}
コード例 #2
0
ファイル: jvm_connection.cpp プロジェクト: prunn/rfDynHUD
bool JVMInputFunctions::init( JNIEnv* _env, jclass rfdynhudClass, jobject _rfdynhudObject )
{
    env = _env;
    rfdynhudObject = _rfdynhudObject;
    
    unsigned short numKeys = getNumKeys();
    unsigned char maxKeyNameLength = getMaxKeyNameLength();
    
    unsigned int bufferSize = 2 + 1 + numKeys * ( maxKeyNameLength + 1 );
    
    unsigned char numJoysticks = getNumJoysticks();
    unsigned char* numButtons = (unsigned char*)malloc( numJoysticks );
    bufferSize += 1 + numJoysticks * MAX_JOYSTICK_NAME_LENGTH;
    for ( unsigned char i = 0; i < numJoysticks; i++ )
    {
        numButtons[i] = getNumButtons( i );
        bufferSize += 1 + numButtons[i] * MAX_JOYSTICK_BUTTON_NAME_LENGTH;
    }
    
    jbyteArray arr = env->NewByteArray( bufferSize );
    char* buffer = (char*)env->GetPrimitiveArrayCritical( arr, &isCopy );
    
    unsigned int bufferOffset = 0;
    *( (unsigned short*)( buffer + bufferOffset ) ) = numKeys;
    bufferOffset += 2;
    *( (unsigned char*)( buffer + bufferOffset ) ) = maxKeyNameLength;
    bufferOffset += 1;
    getAllKeyNames( buffer + bufferOffset );
    bufferOffset += numKeys * ( maxKeyNameLength + 1 );
    
    *( (unsigned char*)( buffer + bufferOffset ) ) = numJoysticks;
    bufferOffset += 1;
    
    getJoystickNames( (char*)( buffer + bufferOffset ) );
    bufferOffset += numJoysticks * MAX_JOYSTICK_NAME_LENGTH;
    
    for ( unsigned char i = 0; i < numJoysticks; i++ )
    {
        *( (unsigned char*)( buffer + bufferOffset ) ) = numButtons[i];
        bufferOffset += 1;
        
        getJoystickButtonNames( i, (char*)( buffer + bufferOffset ) );
        bufferOffset += numButtons[i] * MAX_JOYSTICK_BUTTON_NAME_LENGTH;
    }
    
    env->ReleasePrimitiveArrayCritical( arr, buffer, 0 );
    
    jmethodID mid = env->GetMethodID( rfdynhudClass, "initInput", "([B)V" );
    
    if ( mid == 0 )
    {
        logg( "ERROR: Failed to find the initInput() method." );
        return ( false );
    }
    
    logg( "Initializing input bindings..." );
    env->CallVoidMethod( _rfdynhudObject, mid, arr );
    logg( "Finished initialization of input bindings." );
    
    env->DeleteLocalRef( arr );
    
    mid = env->GetMethodID( rfdynhudClass, "getInputBuffer", "()Ljava/nio/ByteBuffer;" );
    
    if ( mid == 0 )
    {
        logg( "ERROR: Failed to find the getInputBuffer() method." );
        return ( false );
    }
    
    inputBufferObj = env->CallObjectMethod( _rfdynhudObject, mid );
    
    if ( inputBufferObj == NULL )
    {
        logg( "ERROR: Failed to get the input buffer." );
        return ( false );
    }
    
    inputBuffer = (char*)env->GetDirectBufferAddress( inputBufferObj );
    
    if ( inputBuffer == NULL )
    {
        logg( "ERROR: Input buffer is null." );
        return ( false );
    }
    
    updateInputMethod = env->GetMethodID( rfdynhudClass, "updateInput", "(I)B" );
    
    if ( updateInputMethod == 0 )
    {
        logg( "ERROR: Failed to find the updateInput() method." );
        return ( false );
    }
    
    return ( true );
}
コード例 #3
0
ファイル: Joystick.cpp プロジェクト: PaulForey/lovepd
	bool Joystick::checkIndex(int index)
	{
		return index >= 0 && index < getNumJoysticks();
	}