Commit 173420e8 authored by Antoine Cellerier's avatar Antoine Cellerier

Add support for applesmc motion sensors (macbooks) on linux. (Untested

since the sensor doesn't want to work on my laptop)
parent 74400291
...@@ -49,7 +49,8 @@ ...@@ -49,7 +49,8 @@
*****************************************************************************/ *****************************************************************************/
struct intf_sys_t struct intf_sys_t
{ {
enum { NO_SENSOR, HDAPS_SENSOR, AMS_SENSOR, UNIMOTION_SENSOR } sensor; enum { NO_SENSOR, HDAPS_SENSOR, AMS_SENSOR, APPLESMC_SENSOR,
UNIMOTION_SENSOR } sensor;
#ifdef __APPLE__ #ifdef __APPLE__
enum sms_hardware unimotion_hw; enum sms_hardware unimotion_hw;
#endif #endif
...@@ -76,6 +77,8 @@ vlc_module_begin(); ...@@ -76,6 +77,8 @@ vlc_module_begin();
set_shortname( N_("motion")); set_shortname( N_("motion"));
set_category( CAT_INTERFACE ); set_category( CAT_INTERFACE );
set_description( N_("motion control interface") ); set_description( N_("motion control interface") );
set_help( N_("Use HDAPS, AMS, APPLESMC or UNIMOTION motion sensors " \
"to rotate the video") )
add_bool( "motion-use-rotate", 0, NULL, add_bool( "motion-use-rotate", 0, NULL,
USE_ROTATE_TEXT, USE_ROTATE_TEXT, false ); USE_ROTATE_TEXT, USE_ROTATE_TEXT, false );
...@@ -121,6 +124,24 @@ int Open ( vlc_object_t *p_this ) ...@@ -121,6 +124,24 @@ int Open ( vlc_object_t *p_this )
/* Apple Motion Sensor support */ /* Apple Motion Sensor support */
p_intf->p_sys->sensor = AMS_SENSOR; p_intf->p_sys->sensor = AMS_SENSOR;
} }
else if( access( "/sys/devices/applesmc.768/position", R_OK ) == 0 )
{
/* Apple SMC (newer macbooks) */
/* Should be factorised with HDAPS */
f = fopen( "/sys/devices/applesmc.768/calibrate", "r" );
if( f )
{
i_x = i_y = 0;
fscanf( f, "(%d,%d)", &i_x, &i_y );
fclose( f );
p_intf->p_sys->i_calibrate = i_x;
p_intf->p_sys->sensor = APPLESMC_SENSOR;
}
else
{
p_intf->p_sys->sensor = NO_SENSOR;
}
}
#ifdef __APPLE__ #ifdef __APPLE__
else if( p_intf->p_sys->unimotion_hw = detect_sms() ) else if( p_intf->p_sys->unimotion_hw = detect_sms() )
p_intf->p_sys->sensor = UNIMOTION_SENSOR; p_intf->p_sys->sensor = UNIMOTION_SENSOR;
...@@ -242,10 +263,8 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -242,10 +263,8 @@ static void RunIntf( intf_thread_t *p_intf )
static int GetOrientation( intf_thread_t *p_intf ) static int GetOrientation( intf_thread_t *p_intf )
{ {
FILE *f; FILE *f;
int i_x, i_y; int i_x, i_y, i_z = 0;
#ifdef __APPLE__
int i_z;
#endif
switch( p_intf->p_sys->sensor ) switch( p_intf->p_sys->sensor )
{ {
case HDAPS_SENSOR: case HDAPS_SENSOR:
...@@ -272,6 +291,20 @@ static int GetOrientation( intf_thread_t *p_intf ) ...@@ -272,6 +291,20 @@ static int GetOrientation( intf_thread_t *p_intf )
fclose( f ); fclose( f );
return - i_x * 30; /* FIXME: arbitrary */ return - i_x * 30; /* FIXME: arbitrary */
case APPLESMC_SENSOR:
f = fopen( "/sys/devices/applesmc.768/position", "r" );
if( !f )
{
return 0;
}
i_x = i_y = i_z = 0;
fscanf( f, "(%d,%d,%d)", &i_x, &i_y, &i_z );
fclose( f );
return ( i_x - p_intf->p_sys->i_calibrate ) * 10;
#ifdef __APPLE__ #ifdef __APPLE__
case UNIMOTION_SENSOR: case UNIMOTION_SENSOR:
if( read_sms_raw( p_intf->p_sys->unimotion_hw, &i_x, &i_y, &i_z ) ) if( read_sms_raw( p_intf->p_sys->unimotion_hw, &i_x, &i_y, &i_z ) )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment