## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+## along with this program; if not, see <http://www.gnu.org/licenses/>.
##
# TODO: Better support for various LM75 compatible devices.
}
class Decoder(srd.Decoder):
- api_version = 1
+ api_version = 3
id = 'lm75'
name = 'LM75'
longname = 'National LM75'
desc = 'National LM75 (and compatibles) temperature sensor.'
license = 'gplv2+'
inputs = ['i2c']
- outputs = ['lm75']
- probes = []
- optional_probes = [
- {'id': 'os', 'name': 'OS', 'desc': 'Overtemperature shutdown'},
- {'id': 'a0', 'name': 'A0', 'desc': 'I²C slave address input 0'},
- {'id': 'a1', 'name': 'A1', 'desc': 'I²C slave address input 1'},
- {'id': 'a2', 'name': 'A2', 'desc': 'I²C slave address input 2'},
- ]
- options = {
- 'sensor': ['Sensor type', 'lm75'],
- 'resolution': ['Resolution', 9], # 9-12 bit, sensor/config dependent
- }
- annotations = [
- ['celsius', 'Temperature in degrees Celsius'],
- ['kelvin', 'Temperature in Kelvin'],
- ['text-verbose', 'Human-readable text (verbose)'],
- ['text', 'Human-readable text'],
- ['warnings', 'Human-readable warnings'],
- ]
-
- def __init__(self, **kwargs):
+ outputs = []
+ tags = ['Sensor']
+ options = (
+ {'id': 'sensor', 'desc': 'Sensor type', 'default': 'lm75',
+ 'values': ('lm75',)},
+ {'id': 'resolution', 'desc': 'Resolution (bits)', 'default': 9,
+ 'values': (9, 10, 11, 12)},
+ )
+ annotations = (
+ ('celsius', 'Temperature in degrees Celsius'),
+ ('kelvin', 'Temperature in Kelvin'),
+ ('text-verbose', 'Human-readable text (verbose)'),
+ ('text', 'Human-readable text'),
+ ('warnings', 'Human-readable warnings'),
+ )
+
+ def __init__(self):
+ self.reset()
+
+ def reset(self):
self.state = 'IDLE'
self.reg = 0x00 # Currently selected register
self.databytes = []
def start(self):
- # self.out_proto = self.register(srd.OUTPUT_PYTHON)
self.out_ann = self.register(srd.OUTPUT_ANN)
def putx(self, data):
def putb(self, data):
# Helper for annotations which span a block of I²C packets.
- self.put(self.block_start, self.block_end, self.out_ann, data)
+ self.put(self.ss_block, self.es_block, self.out_ann, data)
def warn_upon_invalid_slave(self, addr):
# LM75 and compatible devices have a 7-bit I²C slave address where
def handle_temperature_reg(self, b, s, rw):
# Common helper for the temperature/T_HYST/T_OS registers.
if len(self.databytes) == 0:
- self.block_start = self.ss
+ self.ss_block = self.ss
self.databytes.append(b)
return
self.databytes.append(b)
- self.block_end = self.es
+ self.es_block = self.es
self.output_temperature(s, rw)
self.databytes = []
else:
# self.putx([0, ['Ignoring: %s (data=%s)' % (cmd, databyte)]])
pass
- else:
- raise Exception('Invalid state: %s' % self.state)
-