aboutsummaryrefslogtreecommitdiff
path: root/src/joystick.cpp
diff options
context:
space:
mode:
authorRichard <q@1bpm.net>2021-03-18 15:48:41 +0000
committerRichard <q@1bpm.net>2021-03-18 15:48:41 +0000
commitb4158f460d59dcc440e46d011d432bebbd42f7f5 (patch)
tree5e359adfc5357962c3dd80fdf9f035d9a36f7446 /src/joystick.cpp
downloadcsound-jstick-b4158f460d59dcc440e46d011d432bebbd42f7f5.tar.gz
csound-jstick-b4158f460d59dcc440e46d011d432bebbd42f7f5.tar.bz2
csound-jstick-b4158f460d59dcc440e46d011d432bebbd42f7f5.zip
initial
Diffstat (limited to 'src/joystick.cpp')
-rw-r--r--src/joystick.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/joystick.cpp b/src/joystick.cpp
new file mode 100644
index 0000000..1b40650
--- /dev/null
+++ b/src/joystick.cpp
@@ -0,0 +1,69 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright Drew Noakes 2013-2016
+
+#include "joystick.hpp"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <iostream>
+#include <string>
+#include <sstream>
+#include "unistd.h"
+
+
+
+void Joystick::init(int joystickNumber) {
+ std::stringstream sstm;
+ sstm << "/dev/input/js" << joystickNumber;
+ openPath(sstm.str(), false);
+}
+
+void Joystick::openPath(std::string devicePath, bool blocking)
+{
+ // Open the device using either blocking or non-blocking
+ _fd = open(devicePath.c_str(), blocking ? O_RDONLY : O_RDONLY | O_NONBLOCK);
+}
+
+bool Joystick::sample(JoystickEvent* event)
+{
+ int bytes = read(_fd, event, sizeof(*event));
+
+ if (bytes == -1)
+ return false;
+
+ // NOTE if this condition is not met, we're probably out of sync and this
+ // Joystick instance is likely unusable
+ return bytes == sizeof(*event);
+}
+
+bool Joystick::isFound()
+{
+ return _fd >= 0;
+}
+
+Joystick::~Joystick()
+{
+ close(_fd);
+}
+
+std::ostream& operator<<(std::ostream& os, const JoystickEvent& e)
+{
+ os << "type=" << static_cast<int>(e.type)
+ << " number=" << static_cast<int>(e.number)
+ << " value=" << static_cast<int>(e.value);
+ return os;
+}
+
+