From 3ee5b75c46d5d1950784e59376ea6afe239725e1 Mon Sep 17 00:00:00 2001 From: loki Date: Fri, 6 Dec 2019 00:13:16 +0100 Subject: [PATCH] Prepare for gamepads --- CMakeLists.txt | 16 ++++++++++++++-- main.cpp | 1 + platform/common.h | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47c8f232..fec71631 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,17 @@ set(SUNSHINE_TARGET_FILES utility.h uuid.h config.h config.cpp - main.cpp crypto.cpp crypto.h nvhttp.cpp nvhttp.h stream.cpp stream.h video.cpp video.h queue.h input.cpp input.h audio.cpp audio.h platform/linux.cpp platform/common.h) + main.cpp + crypto.cpp crypto.h + nvhttp.cpp nvhttp.h + stream.cpp stream.h + video.cpp video.h + queue.h + input.cpp input.h + audio.cpp audio.h + platform/linux.cpp + platform/linux_evdev.cpp + platform/common.h) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} @@ -50,6 +60,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/moonlight-common-c/enet/include ${CMAKE_CURRENT_SOURCE_DIR}/moonlight-common-c/reedsolomon ${X11_INCLUDE_DIR} + /usr/include/libevdev-1.0 ${FFMPEG_INCLUDE_DIRS} ) @@ -82,7 +93,8 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES pulse pulse-simple - opus) + opus + evdev) add_definitions(-DSUNSHINE_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets") add_executable(sunshine ${SUNSHINE_TARGET_FILES}) diff --git a/main.cpp b/main.cpp index c4dfbaf3..476bffc0 100644 --- a/main.cpp +++ b/main.cpp @@ -12,6 +12,7 @@ extern "C" { } #include "config.h" +#include "platform/common.h" using namespace std::literals; int main(int argc, char *argv[]) { if(argc > 1) { diff --git a/platform/common.h b/platform/common.h index ec4ac958..e8e4f5d3 100644 --- a/platform/common.h +++ b/platform/common.h @@ -14,17 +14,30 @@ void freeDisplay(void*); void freeImage(void*); void freeAudio(void*); void freeMic(void*); +void freeGamePad(void*); using display_t = util::safe_ptr; using img_t = util::safe_ptr; using mic_t = util::safe_ptr; using audio_t = util::safe_ptr; +using gamepad_t = util::safe_ptr; + +struct gamepad_state_t { + std::uint16_t buttonFlags; + std::uint8_t lt; + std::uint8_t rt; + std::uint16_t lsX; + std::uint16_t lsY; + std::uint16_t rsX; + std::uint16_t rsY; +}; std::string get_local_ip(); display_t display(); img_t snapshot(display_t &display); mic_t microphone(); audio_t audio(mic_t &mic, std::uint32_t sample_size); +gamepad_t gamepad(); int32_t img_width(img_t &); int32_t img_height(img_t &); @@ -36,6 +49,7 @@ void move_mouse(display_t::element_type *display, int deltaX, int deltaY); void button_mouse(display_t::element_type *display, int button, bool release); void scroll(display_t::element_type *display, int distance); void keyboard(display_t::element_type *display, uint16_t modcode, bool release); +void gamepad_event(gamepad_t &gamepad, const gamepad_state_t &gamepad_state); } #endif //SUNSHINE_COMMON_H