Changeset 4566
- Timestamp:
- 07/31/08 17:59:46 (5 years ago)
- Location:
- developers/john_lee/pyfso
- Files:
-
- 2 edited
-
__init__.py (modified) (1 diff)
-
accelerometer.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
developers/john_lee/pyfso/__init__.py
r4539 r4566 5 5 GPLv2 or later 6 6 """ 7 from accelerometer import MockAccelerometer, FSOAccelerometer 7 from accelerometer import MockAccelerometer, FSOAccelerometer, Gta02Accelerometer 8 8 from dialer import Dialer, MockDialer, FSODialer 9 9 from fso_backend import FSOObject -
developers/john_lee/pyfso/accelerometer.py
r4540 r4566 1 1 """ 2 2 Get accelerometer signals from dbus and parse them. 3 or: read directly from input dev. 4 3 5 (C) 2008 John Lee <john_lee@openmoko.com> 4 6 (C) 2008 Openmoko, Inc. 5 7 GPLv2 or later 6 8 """ 7 import math 9 import math, os, struct 8 10 9 class MockAccelerometer(object): 11 class Accelerometer(object): 12 def retrieve(self): 13 raise NotImplementedError 14 15 16 class MockAccelerometer(Accelerometer): 10 17 """ 11 18 """ … … 14 21 15 22 16 class FSOAccelerometer(object): 23 class InputDevAccelerometer(Accelerometer): 24 """Read values from kernel input device 25 """ 26 27 # Event types 28 EV_SYN = 0x00 29 EV_KEY = 0x01 30 EV_REL = 0x02 31 EV_ABS = 0x03 32 EV_MSC = 0x04 33 EV_SW = 0x05 34 EV_LED = 0x11 35 EV_SND = 0x12 36 EV_REP = 0x14 37 EV_FF = 0x15 38 EV_PWR = 0x16 39 EV_FF = 0x17 40 EV_MAX = 0x1f 41 EV_CNT = (EV_MAX+1) 42 43 # Relative axes 44 REL_X = 0x00 45 REL_Y = 0x01 46 REL_Z = 0x02 47 REL_RX = 0x03 48 REL_RY = 0x04 49 REL_RZ = 0x05 50 REL_HWHEEL = 0x06 51 REL_DIAL = 0x07 52 REL_WHEEL = 0x08 53 REL_MISC = 0x09 54 REL_MAX = 0x0f 55 REL_CNT = REL_MAX + 1 56 57 input_event_struct = "@llHHi" 58 input_event_size = struct.calcsize(input_event_struct) 59 60 def __init__(self, device): 61 super(InputDevAccelerometer, self).__init__() 62 self.device_fd = os.open(device, os.O_RDONLY | os.O_SYNC) 63 64 def _unpack(self): 65 """struct input_event { 66 struct timeval time; /* (long, long) */ 67 __u16 type; 68 __u16 code; 69 __s32 value; 70 }; 71 return (tv_sec, tv_usec, type, code, value) 72 """ 73 i = 0 74 while True: 75 try: 76 data = os.read(self.device_fd, InputDevAccelerometer.input_event_size) 77 except OSError: 78 pass # what should i do with this? 79 else: 80 if len(data) >= InputDevAccelerometer.input_event_size: 81 break; 82 return struct.unpack(InputDevAccelerometer.input_event_struct, data) 83 84 def _unpack_xyz(self): 85 """return a 3 tuple 86 """ 87 # wait for EV_SYN 88 while self._unpack()[2] != InputDevAccelerometer.EV_SYN: 89 pass 90 # now return (x, y, z) 91 return (self._unpack()[4], self._unpack()[4], self._unpack()[4]) 92 93 94 class Gta02Accelerometer(InputDevAccelerometer): 95 """Read values from gta02. for now we use just one. 96 >>> g = Gta02Accelerometer() 97 >>> g.sample_rate = 400 98 >>> g.sample_rate 99 400 100 >>> g.sample_rate = 100 101 >>> g.sample_rate 102 100 103 """ 104 105 INPUT_DEV = '/dev/input/event3' 106 SYS_SAMPLE_RATE = '/sys/devices/platform/spi_s3c24xx_gpio.1/spi0.1/sample_rate' 107 108 def __init__(self, device=None, sample_rate=None): 109 if device is None: 110 device = Gta02Accelerometer.INPUT_DEV 111 super(Gta02Accelerometer, self).__init__(device) 112 if sample_rate is not None: 113 self.sample_rate = sample_rate 114 115 def _get_sample_rate(self): 116 f = open(Gta02Accelerometer.SYS_SAMPLE_RATE, 'r', 0) 117 sample_rate = int(f.read()) 118 f.close() 119 return sample_rate 120 121 def _set_sample_rate(self, sample_rate): 122 """possible values: 100, 400 123 """ 124 if sample_rate != 100 and sample_rate != 400: 125 return 126 f = open(Gta02Accelerometer.SYS_SAMPLE_RATE, 'w', 0) 127 f.write('%d\n' % sample_rate) 128 f.close() 129 130 sample_rate = property(_get_sample_rate, _set_sample_rate) 131 132 def retrieve(self): 133 return self._unpack_xyz() 134 135 136 class FSOAccelerometer(Accelerometer): 137 """read value from dbus 138 """ 17 139 def __init__(self, fso): 18 140 self.fso = fso … … 20 142 def retrieve(self): 21 143 return self.fso.accelerometer_iface.Value() 144 22 145 23 146 # shamelessly stoled from olv
Note: See TracChangeset
for help on using the changeset viewer.
