Example #1
0
	def _connect(self,state,data):
		if state:
			# we connected
			self._dev = Device(data,self._config['baudRate'],retries=4,callback=self._button)
			self._foobar = PlayerFoobar(self._config['playerExe'],
										self._config['playingFile'],
										self._config['fileFormat'],
										callback=self._player,
										verbose=verbosity['Player'],verboseFile=verbosity['FM'])
			self._foobar.setSongChangeCallback(self._songchange)
		else:
			# we lost connection
			self._internalstop()
			if self._verbose:
				print("Manager: Lost connection")
Example #2
0
class Manager:
	def __init__(self):
		self._dev = None
		self._foobar = None
		self._verbose = verbosity['Manager']
		scriptdir = os.path.dirname(os.path.realpath(__file__))
		self._config = demjson.decode(open(os.path.join(scriptdir,"config.js")).read())
		self._profiles = scanProfiles(os.path.join(scriptdir,"profiles"))
		self._wm = WMIMonitor(self._config['deviceId'],callback=self._connect,verbose=verbosity['WMI'])
		self.profile = None

	def _button(self,button,state):
		
		if (button == 1) and (state == 1):
			self._foobar.playpause()
		elif (button == 0) and (state == 1):
			self._foobar.next()
		elif (button == 4) and (state == 1):
			self._foobar.prev()
		# TODO: can be much better

	def printButtonState(self):
		for k,v in self._dev.buttonState.iteritems():
			print("    %d: %d" % (k,v))

	def printLightState(self):
		for k,v in self._dev.lightState.iteritems():
			print("    %d: (%d,%d,%d)" % (k,v[0],v[1],v[2]))

	def keymode(self,value):
		if self._dev is not None:
			self._dev.setKeymode(value)

	def _internalstop(self):
		if self._dev is not None:
			self._dev.stop()
			self._dev = None
		if self._foobar is not None:
			self._foobar.stop()
			self._foobar = None

	def _player(self,state):
		try:
			if state["playing"] == "playing":
				percent = 0
				try:
					percent = int(self._foobar.state("percent"))
				except:
					pass
				self._dev.setLight(0,(3,3,int(percent / 5.0)))
			else:
				self._dev.setLight(0,(15,0,0))
		except:
			if self._verbose:
				traceback.print_exc()

	def _songchange(self):
		rating = 0
		if self._verbose:
			print("Song change")
		try:
			rating = 5+int(self._foobar.state("rating"))*2
			self._dev.setLight(1,(rating-2,5,5))
		except:
			self._dev.setLight(1,(0,0,0))

	def stop(self):
		self._wm.stop()
		self._internalstop()

	def loadProfile(self,profile):
		if profile not in self._profiles:
			print("Not a profile")
			return
		prof = self._profiles[profile]
		if self._dev is not None:
			self._dev.progKeymode(prof)
		self._profile = profile

	def connect(self):
		self._connect(True,self._config['defaultPort'])
		self._wm.assumeConnected()

	def _connect(self,state,data):
		if state:
			# we connected
			self._dev = Device(data,self._config['baudRate'],retries=4,callback=self._button)
			self._foobar = PlayerFoobar(self._config['playerExe'],
										self._config['playingFile'],
										self._config['fileFormat'],
										callback=self._player,
										verbose=verbosity['Player'],verboseFile=verbosity['FM'])
			self._foobar.setSongChangeCallback(self._songchange)
		else:
			# we lost connection
			self._internalstop()
			if self._verbose:
				print("Manager: Lost connection")