You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-sound/audicle/files/audicle-1.0.0.7-hid-smc.patch

150 lines
3.1 KiB

diff -ru audicle-1.0.0.7.orig//lang/chuck-1.2.1.3/src/util_hid.cpp audicle-1.0.0.7/lang/chuck-1.2.1.3/src/util_hid.cpp
--- audicle-1.0.0.7.orig//lang/chuck-1.2.1.3/src/util_hid.cpp 2012-03-17 10:23:39.000000000 +0100
+++ audicle-1.0.0.7/lang/chuck-1.2.1.3/src/util_hid.cpp 2012-03-17 10:25:03.000000000 +0100
@@ -7392,14 +7392,139 @@
int WiiRemote_send( const HidMsg * msg ){ return -1; }
const char * WiiRemote_name( int wr ){ return NULL; }
+#define SYSFS_TILTSENSOR_FILE "/sys/devices/platform/applesmc/position"
+#define TILTSENSOR_BUF_LEN 32
+
+static struct t_TiltSensor_data
+{
+ union
+ {
+ struct t_macbook
+ {
+ int x;
+ int y;
+ int z;
+ } macbook;
+ } data;
+ int dataType;
+ int detected;
+ int refcount;
+
+ t_TiltSensor_data()
+ {
+ refcount = 0;
+ dataType = -1;
+ detected = 0;
+ }
+
+} TiltSensor_data;
+enum
+{
+ linuxAppleSMCMacBookDataType
+};
+static int TiltSensor_detect()
+{
+ int fd;
+
+ fd = open(SYSFS_TILTSENSOR_FILE, O_RDONLY);
+
+ if (fd > 0)
+ {
+ TiltSensor_data.dataType = linuxAppleSMCMacBookDataType;
+ TiltSensor_data.detected = 1;
+ close(fd);
+ return 1;
+ }
+
+ TiltSensor_data.detected = -1;
+
+ return 0;
+}
+
+static int TiltSensor_do_read()
+{
+
+ switch(TiltSensor_data.dataType)
+ {
+ case linuxAppleSMCMacBookDataType:
+ char buf[TILTSENSOR_BUF_LEN];
+ int ret, fd;
+ fd = open(SYSFS_TILTSENSOR_FILE, O_RDONLY);
+
+ if (fd < 0) {
+ return -1;
+ }
+ ret = read(fd, buf, TILTSENSOR_BUF_LEN);
+ if (ret < 0) {
+ close(fd);
+ return -1;
+ }
+ if (sscanf(buf, "(%d,%d,%d)\n", &TiltSensor_data.data.macbook.x, &TiltSensor_data.data.macbook.y, &TiltSensor_data.data.macbook.z) != 3) {
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
void TiltSensor_init(){}
void TiltSensor_quit(){}
void TiltSensor_probe(){}
-int TiltSensor_count(){ return 0; }
-int TiltSensor_open( int ts ){ return -1; }
-int TiltSensor_close( int ts ){ return -1; }
-int TiltSensor_read( int ts, int type, int num, HidMsg * msg ){ return -1; }
-const char * TiltSensor_name( int ts ){ return NULL; }
+int TiltSensor_count()
+{
+ if(TiltSensor_data.detected == 0)
+ TiltSensor_detect();
+
+ if(TiltSensor_data.detected == -1)
+ return 0;
+ else if(TiltSensor_data.detected == 1)
+ return 1;
+
+ return 0;
+}
+int TiltSensor_open( int ts )
+{
+ if(TiltSensor_data.detected == 0)
+ TiltSensor_detect();
+
+ if(TiltSensor_data.detected == -1)
+ return -1;
+
+ TiltSensor_data.refcount++;
+
+ return 0;
+}
+int TiltSensor_close( int ts )
+{
+ TiltSensor_data.refcount--;
+
+ return 0;
+}
+int TiltSensor_read( int ts, int type, int num, HidMsg * msg )
+{
+
+ if(TiltSensor_data.detected == -1)
+ return -1;
+
+ if(!TiltSensor_do_read())
+ return -1;
+
+ if(TiltSensor_data.dataType == linuxAppleSMCMacBookDataType)
+ {
+ msg->idata[0] = TiltSensor_data.data.macbook.x;
+ msg->idata[1] = TiltSensor_data.data.macbook.y;
+ msg->idata[2] = TiltSensor_data.data.macbook.z;
+ }
+
+ return 0;
+}
+const char * TiltSensor_name( int ts )
+{
+ return "Apple Sudden Motion Sensor";
+}
#endif
Only in audicle-1.0.0.7/lang/chuck-1.2.1.3/src: util_hid.cpp.orig