1#!/usr/bin/python
2
3# Copyright (C) 2014 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18from abc import abstractmethod
19
20class Abstract_Power_Monitor(object):
21  """
22  Provides a simple interface to use the power meter.
23  The implementer should establish communications with the power monitor
24  on __init__:
25
26  monitor = <<Implementing Class>>(...)
27
28  Afterward, data can be collected multiple times via the
29  series of calls, for example:
30
31      montior.StartDataCollection()
32      data = True
33      while data is not None:
34          data = monitor.CollectData()
35          <<do-something-with-data>>
36      monitor.StopDataCollection()
37
38  On exit, Close should be called:
39
40      monitor.Close()
41
42  The method GetStatus() can be used to check voltage setting as well as
43  ensure status of the USB passthrough connection.
44  """
45
46
47
48  def __init__(self ):
49      pass
50
51  @abstractmethod
52  def Close(self):
53      """Close the connection to the device, preventing
54      further interactions.  This should be called only
55      when the power monitor is no longer needed
56      (e.g. on exit)
57      """
58      pass
59
60  @abstractmethod
61  def GetStatus(self):
62    """ Requests and waits for status.  Returns status dictionary.
63    This should at a minimum contain entries for "usbPassthroughMode"
64    and "outputVoltageSetting" """
65    pass
66
67  @abstractmethod
68  def SetVoltage(self, v):
69    """ Set the output voltage, 0 to disable. """
70    pass
71
72  @abstractmethod
73  def SetMaxCurrent(self, i):
74    """Set the max output current."""
75    pass
76
77  @abstractmethod
78  def SetUsbPassthrough(self, val):
79    """ Set the USB passthrough mode: 0 = off, 1 = on,  2 = auto. """
80    pass
81
82  @abstractmethod
83  def StartDataCollection(self):
84    """ Tell the device to start collecting and sending measurement data. """
85    pass
86
87  @abstractmethod
88  def StopDataCollection(self):
89    """ Tell the device to stop collecting measurement data. """
90    pass
91
92  @abstractmethod
93  def CollectData(self, verbose = True):
94    """ Return some current samples.  Call StartDataCollection() first.
95    Returns None if no data available"""
96    pass
97