include/SDL_system.h
author Steven M. Vascellaro <svascellaro@gmail.com>
Mon, 22 Oct 2018 10:55:18 -0400
changeset 12379 5dc13016cf34
parent 12137 161f67f4a7c6
child 12503 806492103856
permissions -rw-r--r--
joystick: Add Linux mappings for "Xbox One Wireless Controller (Model 1708)"

Adds controller bindings to support the "Xbox One Wireless Controller
(Model 1708)" on Linux. The Model 1708 was released in 2016 alongside the
Xbox One S. It is the current model being sold by Microsoft as of writing.
(October 22, 2018)
slouken@8582
     1
/*
slouken@8582
     2
  Simple DirectMedia Layer
slouken@11811
     3
  Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
slouken@8582
     4
slouken@8582
     5
  This software is provided 'as-is', without any express or implied
slouken@8582
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@8582
     7
  arising from the use of this software.
slouken@8582
     8
slouken@8582
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@8582
    10
  including commercial applications, and to alter it and redistribute it
slouken@8582
    11
  freely, subject to the following restrictions:
slouken@8582
    12
slouken@8582
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@8582
    14
     claim that you wrote the original software. If you use this software
slouken@8582
    15
     in a product, an acknowledgment in the product documentation would be
slouken@8582
    16
     appreciated but is not required.
slouken@8582
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@8582
    18
     misrepresented as being the original software.
slouken@8582
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@8582
    20
*/
slouken@8582
    21
slouken@8582
    22
/**
slouken@8582
    23
 *  \file SDL_system.h
slouken@8582
    24
 *
slouken@8582
    25
 *  Include file for platform specific SDL API functions
slouken@8582
    26
 */
slouken@8582
    27
slouken@10638
    28
#ifndef SDL_system_h_
slouken@10638
    29
#define SDL_system_h_
slouken@8582
    30
slouken@8582
    31
#include "SDL_stdinc.h"
slouken@8582
    32
#include "SDL_keyboard.h"
slouken@8582
    33
#include "SDL_render.h"
slouken@8582
    34
#include "SDL_video.h"
slouken@8582
    35
slouken@8582
    36
#include "begin_code.h"
slouken@8582
    37
/* Set up for C function definitions, even when using C++ */
slouken@8582
    38
#ifdef __cplusplus
slouken@8582
    39
extern "C" {
slouken@8582
    40
#endif
slouken@8582
    41
slouken@8582
    42
slouken@8582
    43
/* Platform specific functions for Windows */
slouken@8582
    44
#ifdef __WIN32__
slouken@9597
    45
	
slouken@9597
    46
/**
slouken@9597
    47
   \brief Set a function that is called for every windows message, before TranslateMessage()
slouken@9597
    48
*/
slouken@9599
    49
typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam);
slouken@9599
    50
extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata);
slouken@8582
    51
philipp@9309
    52
/**
philipp@9309
    53
   \brief Returns the D3D9 adapter index that matches the specified display index.
philipp@9309
    54
slouken@8582
    55
   This adapter index can be passed to IDirect3D9::CreateDevice and controls
slouken@8582
    56
   on which monitor a full screen application will appear.
slouken@8582
    57
*/
slouken@8582
    58
extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex );
slouken@8582
    59
philipp@9309
    60
typedef struct IDirect3DDevice9 IDirect3DDevice9;
philipp@9309
    61
/**
philipp@9309
    62
   \brief Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer.
philipp@9309
    63
slouken@8582
    64
   Once you are done using the device, you should release it to avoid a resource leak.
slouken@8582
    65
 */
slouken@8582
    66
extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer);
slouken@8582
    67
philipp@9309
    68
/**
philipp@9309
    69
   \brief Returns the DXGI Adapter and Output indices for the specified display index.
philipp@9309
    70
slouken@8213
    71
   These can be passed to EnumAdapters and EnumOutputs respectively to get the objects
slouken@8213
    72
   required to create a DX10 or DX11 device and swap chain.
slouken@8213
    73
 */
slouken@8719
    74
extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex );
slouken@8213
    75
slouken@8582
    76
#endif /* __WIN32__ */
slouken@8582
    77
slouken@8582
    78
slouken@11947
    79
/* Platform specific functions for Linux */
slouken@11947
    80
#ifdef __LINUX__
slouken@11947
    81
slouken@11947
    82
/**
slouken@11947
    83
   \brief Sets the UNIX nice value for a thread, using setpriority() if possible, and RealtimeKit if available.
slouken@11947
    84
slouken@11947
    85
   \return 0 on success, or -1 on error.
slouken@11947
    86
 */
slouken@11947
    87
extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority);
slouken@11947
    88
 
slouken@11947
    89
#endif /* __LINUX__ */
slouken@11947
    90
	
slouken@8582
    91
/* Platform specific functions for iOS */
slouken@8582
    92
#if defined(__IPHONEOS__) && __IPHONEOS__
slouken@8582
    93
slime73@9539
    94
#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
slouken@8582
    95
extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam);
slime73@9539
    96
slime73@9539
    97
#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
slouken@8582
    98
extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled);
slouken@8582
    99
slouken@8582
   100
#endif /* __IPHONEOS__ */
slouken@8582
   101
slouken@8582
   102
slouken@8582
   103
/* Platform specific functions for Android */
slouken@8582
   104
#if defined(__ANDROID__) && __ANDROID__
slouken@8582
   105
philipp@9309
   106
/**
philipp@9309
   107
   \brief Get the JNI environment for the current thread
philipp@9309
   108
slouken@8582
   109
   This returns JNIEnv*, but the prototype is void* so we don't need jni.h
slouken@8582
   110
 */
slouken@10672
   111
extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void);
slouken@8582
   112
philipp@9309
   113
/**
philipp@9309
   114
   \brief Get the SDL Activity object for the application
philipp@9309
   115
slouken@8582
   116
   This returns jobject, but the prototype is void* so we don't need jni.h
slouken@8582
   117
   The jobject returned by SDL_AndroidGetActivity is a local reference.
slouken@8582
   118
   It is the caller's responsibility to properly release it
slouken@8582
   119
   (using env->Push/PopLocalFrame or manually with env->DeleteLocalRef)
slouken@8582
   120
 */
slouken@10672
   121
extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void);
slouken@8582
   122
philipp@9309
   123
/**
slouken@11844
   124
   \brief Return true if the application is running on Android TV
slouken@11844
   125
 */
slouken@11844
   126
extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void);
slouken@11844
   127
slouken@11844
   128
/**
slouken@12008
   129
   \brief Return true if the application is running on a Chromebook
slouken@12008
   130
 */
slouken@12008
   131
extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void);
slouken@12008
   132
slouken@12008
   133
/**
slouken@12024
   134
  \brief Return true is the application is running on a Samsung DeX docking station
slouken@12024
   135
 */
slouken@12024
   136
extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void);
slouken@12024
   137
slouken@12024
   138
/**
slouken@12059
   139
 \brief Trigger the Android system back button behavior.
slouken@12059
   140
 */
slouken@12059
   141
extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void);
slouken@12059
   142
slouken@12059
   143
/**
philipp@9309
   144
   See the official Android developer guide for more information:
slouken@8582
   145
   http://developer.android.com/guide/topics/data/data-storage.html
slouken@8582
   146
*/
slouken@8582
   147
#define SDL_ANDROID_EXTERNAL_STORAGE_READ   0x01
slouken@8582
   148
#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE  0x02
slouken@8582
   149
philipp@9309
   150
/**
philipp@9309
   151
   \brief Get the path used for internal storage for this application.
philipp@9309
   152
slouken@8582
   153
   This path is unique to your application and cannot be written to
slouken@8582
   154
   by other applications.
slouken@8582
   155
 */
slouken@10672
   156
extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void);
slouken@8582
   157
philipp@9309
   158
/**
philipp@9309
   159
   \brief Get the current state of external storage, a bitmask of these values:
slouken@8582
   160
    SDL_ANDROID_EXTERNAL_STORAGE_READ
slouken@8582
   161
    SDL_ANDROID_EXTERNAL_STORAGE_WRITE
philipp@9309
   162
slouken@8582
   163
   If external storage is currently unavailable, this will return 0.
slouken@8582
   164
*/
slouken@10672
   165
extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void);
slouken@8582
   166
philipp@9309
   167
/**
philipp@9309
   168
   \brief Get the path used for external storage for this application.
philipp@9309
   169
slouken@8582
   170
   This path is unique to your application, but is public and can be
slouken@8582
   171
   written to by other applications.
slouken@8582
   172
 */
slouken@10672
   173
extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void);
slouken@8582
   174
slouken@8582
   175
#endif /* __ANDROID__ */
slouken@8582
   176
slouken@8582
   177
/* Platform specific functions for WinRT */
slouken@8582
   178
#if defined(__WINRT__) && __WINRT__
slouken@8582
   179
slouken@8582
   180
/**
slouken@8582
   181
 *  \brief WinRT / Windows Phone path types
slouken@8582
   182
 */
slouken@8582
   183
typedef enum
slouken@8582
   184
{
slouken@8582
   185
    /** \brief The installed app's root directory.
slouken@8582
   186
        Files here are likely to be read-only. */
slouken@8582
   187
    SDL_WINRT_PATH_INSTALLED_LOCATION,
slouken@8582
   188
slouken@8582
   189
    /** \brief The app's local data store.  Files may be written here */
slouken@8582
   190
    SDL_WINRT_PATH_LOCAL_FOLDER,
slouken@8582
   191
slouken@8582
   192
    /** \brief The app's roaming data store.  Unsupported on Windows Phone.
slouken@8582
   193
        Files written here may be copied to other machines via a network
slouken@8582
   194
        connection.
slouken@8582
   195
    */
slouken@8582
   196
    SDL_WINRT_PATH_ROAMING_FOLDER,
slouken@8582
   197
slouken@8582
   198
    /** \brief The app's temporary data store.  Unsupported on Windows Phone.
slouken@8582
   199
        Files written here may be deleted at any time. */
slouken@8582
   200
    SDL_WINRT_PATH_TEMP_FOLDER
slouken@8582
   201
} SDL_WinRT_Path;
slouken@8582
   202
slouken@8582
   203
slouken@8582
   204
/**
slouken@11757
   205
 *  \brief WinRT Device Family
slouken@11757
   206
 */
slouken@11757
   207
typedef enum
slouken@11757
   208
{
slouken@11757
   209
    /** \brief Unknown family  */
slouken@11757
   210
    SDL_WINRT_DEVICEFAMILY_UNKNOWN,
slouken@11757
   211
slouken@11757
   212
    /** \brief Desktop family*/
slouken@11757
   213
    SDL_WINRT_DEVICEFAMILY_DESKTOP,
slouken@11757
   214
slouken@11757
   215
    /** \brief Mobile family (for example smartphone) */
slouken@11757
   216
    SDL_WINRT_DEVICEFAMILY_MOBILE,
slouken@11757
   217
slouken@11757
   218
    /** \brief XBox family */
slouken@11757
   219
    SDL_WINRT_DEVICEFAMILY_XBOX,
slouken@11757
   220
} SDL_WinRT_DeviceFamily;
slouken@11757
   221
slouken@11757
   222
slouken@11757
   223
/**
slouken@8582
   224
 *  \brief Retrieves a WinRT defined path on the local file system
slouken@8582
   225
 *
slouken@8582
   226
 *  \note Documentation on most app-specific path types on WinRT
slouken@8582
   227
 *      can be found on MSDN, at the URL:
slouken@8582
   228
 *      http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
slouken@8582
   229
 *
slouken@8582
   230
 *  \param pathType The type of path to retrieve.
philipp@9309
   231
 *  \return A UCS-2 string (16-bit, wide-char) containing the path, or NULL
slouken@8582
   232
 *      if the path is not available for any reason.  Not all paths are
slouken@8582
   233
 *      available on all versions of Windows.  This is especially true on
slouken@8582
   234
 *      Windows Phone.  Check the documentation for the given
slouken@8582
   235
 *      SDL_WinRT_Path for more information on which path types are
slouken@8582
   236
 *      supported where.
slouken@8582
   237
 */
slouken@8582
   238
extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType);
slouken@8582
   239
slouken@8582
   240
/**
slouken@8582
   241
 *  \brief Retrieves a WinRT defined path on the local file system
slouken@8582
   242
 *
slouken@8582
   243
 *  \note Documentation on most app-specific path types on WinRT
slouken@8582
   244
 *      can be found on MSDN, at the URL:
slouken@8582
   245
 *      http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
slouken@8582
   246
 *
slouken@8582
   247
 *  \param pathType The type of path to retrieve.
philipp@9309
   248
 *  \return A UTF-8 string (8-bit, multi-byte) containing the path, or NULL
slouken@8582
   249
 *      if the path is not available for any reason.  Not all paths are
slouken@8582
   250
 *      available on all versions of Windows.  This is especially true on
slouken@8582
   251
 *      Windows Phone.  Check the documentation for the given
slouken@8582
   252
 *      SDL_WinRT_Path for more information on which path types are
slouken@8582
   253
 *      supported where.
slouken@8582
   254
 */
slouken@8582
   255
extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType);
slouken@8582
   256
slouken@11757
   257
/**
slouken@11757
   258
 *  \brief Detects the device family of WinRT plattform on runtime
slouken@11757
   259
 *
slouken@11757
   260
 *  \return Device family
slouken@11757
   261
 */
slouken@11757
   262
extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily();
slouken@11757
   263
slouken@8582
   264
#endif /* __WINRT__ */
slouken@8582
   265
slouken@12137
   266
/**
slouken@12137
   267
 \brief Return true if the current device is a tablet.
slouken@12137
   268
 */
slouken@12137
   269
extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void);
slouken@12137
   270
slouken@8582
   271
/* Ends C function definitions when using C++ */
slouken@8582
   272
#ifdef __cplusplus
slouken@8582
   273
}
slouken@8582
   274
#endif
slouken@8582
   275
#include "close_code.h"
slouken@8582
   276
slouken@10638
   277
#endif /* SDL_system_h_ */
slouken@8582
   278
slouken@8582
   279
/* vi: set ts=4 sw=4 expandtab: */