src/core/android/SDL_android.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 28 Aug 2017 10:03:39 -0700
changeset 11393 3e57ce45a890
parent 11271 ab3f2402a777
child 11653 4130b92b6be4
permissions -rw-r--r--
Fixed bug 2361 - [Android] Joysticks do not have unique IDs

David Brady

When I attempted to make a mapping file for Android gamepads, I quickly discovered that most of the ones that I have here show up as the same device (Broadcom Bluetooth HID), meaning that it was impossible to make mappings on Android, since every device looked the same.

This patch will check for the existence of the getDescriptor function added in Jelly Bean, and use it if it's there. The Android Dashboard says that the majority of Android phones should support this function, and doing it this way will not force us to bump up our API version.
slouken@4994
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@10737
     3
  Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
slouken@4994
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@4994
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@4994
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@4994
    20
*/
icculus@8093
    21
#include "../../SDL_internal.h"
slouken@4994
    22
slouken@7570
    23
/* Set up for C function definitions, even when using C++ */
slouken@7570
    24
#ifdef __cplusplus
slouken@7570
    25
/* *INDENT-OFF* */
slouken@7570
    26
extern "C" {
slouken@7570
    27
/* *INDENT-ON* */
slouken@7570
    28
#endif
slouken@7570
    29
gabomdq@7659
    30
#include <EGL/eglplatform.h>
gabomdq@7659
    31
#include <android/native_window_jni.h>
gabomdq@7659
    32
slouken@6555
    33
#include "SDL_rect.h"
slouken@6555
    34
slouken@4994
    35
/* Interface from the SDL library into the Android Java activity */
slouken@5000
    36
extern void Android_JNI_SetActivityTitle(const char *title);
slouken@11270
    37
extern void Android_JNI_SetOrientation(int w, int h, int resizable, const char *hint);
slouken@11393
    38
slouken@6212
    39
extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]);
slouken@6654
    40
extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect);
philipp@9594
    41
extern void Android_JNI_HideTextInput(void);
slouken@11271
    42
extern SDL_bool Android_JNI_IsScreenKeyboardShown(void);
gabomdq@7659
    43
extern ANativeWindow* Android_JNI_GetNativeWindow(void);
slouken@4995
    44
philipp@7245
    45
/* Audio support */
icculus@10280
    46
extern int Android_JNI_OpenAudioDevice(int iscapture, int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames);
philipp@9594
    47
extern void* Android_JNI_GetAudioBuffer(void);
philipp@9594
    48
extern void Android_JNI_WriteAudioBuffer(void);
icculus@10280
    49
extern int Android_JNI_CaptureAudioBuffer(void *buffer, int buflen);
icculus@10280
    50
extern void Android_JNI_FlushCapturedAudio(void);
icculus@10280
    51
extern void Android_JNI_CloseAudioDevice(const int iscapture);
slouken@4994
    52
icculus@5582
    53
#include "SDL_rwops.h"
icculus@5582
    54
icculus@5582
    55
int Android_JNI_FileOpen(SDL_RWops* ctx, const char* fileName, const char* mode);
slouken@6642
    56
Sint64 Android_JNI_FileSize(SDL_RWops* ctx);
slouken@6642
    57
Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence);
icculus@5582
    58
size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, size_t size, size_t maxnum);
icculus@5582
    59
size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, size_t size, size_t num);
icculus@5582
    60
int Android_JNI_FileClose(SDL_RWops* ctx);
icculus@5582
    61
slouken@6464
    62
/* Clipboard support */
slouken@6464
    63
int Android_JNI_SetClipboardText(const char* text);
philipp@9594
    64
char* Android_JNI_GetClipboardText(void);
philipp@9594
    65
SDL_bool Android_JNI_HasClipboardText(void);
slouken@6464
    66
slouken@6448
    67
/* Power support */
slouken@6448
    68
int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent);
philipp@9880
    69
gabomdq@7907
    70
/* Joystick support */
philipp@9594
    71
void Android_JNI_PollInputDevices(void);
gabomdq@8057
    72
slouken@11238
    73
/* Haptic support */
slouken@11238
    74
void Android_JNI_PollHapticDevices(void);
slouken@11238
    75
void Android_JNI_HapticRun(int device_id, int length);
slouken@11238
    76
gabomdq@9173
    77
/* Video */
gabomdq@9173
    78
void Android_JNI_SuspendScreenSaver(SDL_bool suspend);
slouken@6448
    79
philipp@7786
    80
/* Touch support */
philipp@7786
    81
int Android_JNI_GetTouchDeviceIds(int **ids);
slouken@11239
    82
void Android_JNI_SetSeparateMouseAndTouch(SDL_bool new_value);
philipp@7786
    83
philipp@7245
    84
/* Threads */
gabomdq@6354
    85
#include <jni.h>
gabomdq@6354
    86
JNIEnv *Android_JNI_GetEnv(void);
gabomdq@6354
    87
int Android_JNI_SetupThread(void);
gabomdq@6354
    88
philipp@7245
    89
/* Generic messages */
slouken@6392
    90
int Android_JNI_SendMessage(int command, int param);
slouken@6392
    91
slouken@10672
    92
/* Init */
slouken@10672
    93
JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls);
slouken@10672
    94
slouken@10672
    95
/* MessageBox */
slouken@10672
    96
#include "SDL_messagebox.h"
slouken@10672
    97
int Android_JNI_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid);
slouken@10672
    98
slouken@7570
    99
/* Ends C function definitions when using C++ */
slouken@7570
   100
#ifdef __cplusplus
slouken@7570
   101
/* *INDENT-OFF* */
slouken@7570
   102
}
slouken@7570
   103
/* *INDENT-ON* */
slouken@7570
   104
#endif
slouken@7570
   105
slouken@4994
   106
/* vi: set ts=4 sw=4 expandtab: */