from Components.FanControl import fancontrol

class Sensors:
	# (type, name, unit, directory)
	TYPE_TEMPERATURE = 0
	# (type, name, unit, fanid)
	TYPE_FAN_RPM = 1
	
	def __init__(self):
		# (type, name, unit, sensor_specific_dict/list)
		self.sensors_list = []
		self.addSensors()
		
	def getSensorsCount(self, type = None):
		if type is None:
			return len(self.sensors_list)
		count = 0
		for sensor in self.sensors_list:
			if sensor[0] == type:
				count += 1
		return count
	
	# returns a list of sensorids of type "type"
	def getSensorsList(self, type = None):
		if type is None:
			return range(len(self.sensors_list))
		list = []
		for sensorid in range(len(self.sensors_list)):
			if self.sensors_list[sensorid][0] == type:
				list.append(sensorid)
		return list
	
	
	def getSensorType(self, sensorid):
		return self.sensors_list[sensorid][0]
	
	def getSensorName(self, sensorid):
		return self.sensors_list[sensorid][1]
	
	def getSensorValue(self, sensorid):
		value = -1
		sensor = self.sensors_list[sensorid]
		if sensor[0] == self.TYPE_TEMPERATURE:
			if sensor[3] == "/sys/class/thermal/thermal_zone0/temp":
				f = open(sensor[3], "r")
				value = int(f.readline().strip())/1000
			else:
				f = open("%s/value" % sensor[3], "r")
				value = int(f.readline().strip())
			f.close()
		elif sensor[0] == self.TYPE_FAN_RPM:
			value = fancontrol.getFanSpeed(sensor[3])
		return value
	
	def getSensorUnit(self, sensorid):
		return self.sensors_list[sensorid][2]

	def addSensors(self):
		import os
		if os.path.exists("/proc/stb/sensors"):
			for dirname in os.listdir("/proc/stb/sensors"):
				if dirname.find("temp", 0, 4) == 0:
					f = open("/proc/stb/sensors/%s/name" % dirname, "r")
					name = f.readline().strip()
					f.close()
					
					f = open("/proc/stb/sensors/%s/unit" % dirname, "r")
					unit = f.readline().strip()
					f.close()
					
					self.sensors_list.append((self.TYPE_TEMPERATURE, name, unit, "/proc/stb/sensors/%s" % dirname))

		if os.path.exists("/sys/class/thermal/thermal_zone0"):
			f = open("/sys/class/thermal/thermal_zone0/type", "r")
			name = f.readline().strip()
			f.close()
			self.sensors_list.append((self.TYPE_TEMPERATURE, name, "", "/sys/class/thermal/thermal_zone0/temp"))
					
		for fanid in range(fancontrol.getFanCount()):
			if fancontrol.hasRPMSensor(fanid):
				self.sensors_list.append((self.TYPE_FAN_RPM, _("Fan %d") % (fanid + 1), "rpm", fanid))
	
sensors = Sensors()
