annotate bin/gyrocontroller @ 254:1546c423b467

Fix bugs introduced in "SubClient created, keyboardcomposer and gyrocontroller use it now"
author David McClosky <dmcc@bigasterisk.com>
date Wed, 15 Jun 2005 09:00:27 +0000
parents a92b6d1ac072
children 6f6d9235e8a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
1 #!/usr/bin/env python
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
2 # vi: syntax=python
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
3
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
4 import run_local
254
1546c423b467 Fix bugs introduced in "SubClient created, keyboardcomposer and gyrocontroller use it now"
David McClosky <dmcc@bigasterisk.com>
parents: 253
diff changeset
5 from light9.Submaster import Submasters, combine_subdict
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
6 from light9.subclient import SubClient
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
7
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
8 class circcycle:
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
9 """Like itertools.cycle, but with a prev() method too. You lose
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
10 all iterator benefits by using this, since it will store the whole
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
11 sequence/iterator in memory. Also, do not run this on an infinite
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
12 iterator, as it tuple'ifies the input."""
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
13 def __init__(self, sequence):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
14 self.sequence = tuple(sequence)
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
15 self.index = 0
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
16 def __iter__(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
17 return self
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
18 def change_index(self, delta):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
19 self.index = (self.index + delta) % len(self.sequence)
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
20 def next(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
21 ret = self.sequence[self.index]
254
1546c423b467 Fix bugs introduced in "SubClient created, keyboardcomposer and gyrocontroller use it now"
David McClosky <dmcc@bigasterisk.com>
parents: 253
diff changeset
22 self.change_index(1)
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
23 return ret
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
24 def prev(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
25 ret = self.sequence[self.index]
254
1546c423b467 Fix bugs introduced in "SubClient created, keyboardcomposer and gyrocontroller use it now"
David McClosky <dmcc@bigasterisk.com>
parents: 253
diff changeset
26 self.change_index(-1)
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
27 return ret
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
28
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
29 class AbstractSimpleController(SubClient):
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
30 """Simple controller with minimal input and output:
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
31
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
32 Input is 4 directions and 3 buttons.
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
33 Output is an integer and a color and maybe more.
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
34
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
35 Left + B1/right + B1: prev/next sub
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
36 Y-axis + B2: set current level
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
37 B3: toggle keep/solo mode
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
38 Double-B3: clear kept levels"""
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
39 def __init__(self, subnames):
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
40 SubClient.__init__(self)
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
41 self.subnames = subnames
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
42 self.refresh()
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
43 def refresh(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
44 # reload subs from disk
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
45 self.submasters = Submasters()
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
46 self.all_subs = circcycle(self.subnames)
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
47 self.current_sub = self.all_subs.next()
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
48 self.current_level = 1.0
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
49 self.kept_levels = {} # subname : level [0..1]
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
50 self.keep_solo_mode = 'keep' # either 'keep' or 'solo'
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
51 def clear_kept_levels(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
52 self.kept_levels.clear()
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
53 def next(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
54 if self.keep_solo_mode == 'keep':
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
55 self.kept_levels[self.current_sub] = self.current_level
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
56
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
57 self.current_sub = self.submasters.get_sub_by_name(self.all_subs.next())
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
58 def prev(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
59 if self.keep_solo_mode == 'keep':
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
60 self.kept_levels[self.current_sub] = self.current_level
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
61
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
62 self.current_sub = self.submasters.get_sub_by_name(self.all_subs.prev())
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
63
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
64 def get_levels_as_sub(self):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
65 if self.keep_solo_mode == 'keep':
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
66 # send all levels in self.kept_levels
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
67 levelsub = combine_subdict(self.kept_levels)
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
68 else:
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
69 levelsub = self.current_sub * self.current_level
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
70
253
a92b6d1ac072 SubClient created, keyboardcomposer and gyrocontroller use it now
David McClosky <dmcc@bigasterisk.com>
parents: 246
diff changeset
71 return levelsub
246
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
72
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
73 if __name__ == "__main__":
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
74 if 0:
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
75 x = range(20)
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
76 for z in circcycle(x):
89cd37c4314b gyrocontroller and Submaster.combine_subdict
David McClosky <dmcc@bigasterisk.com>
parents:
diff changeset
77 print z