Home | History | Annotate | Download | only in power_monitors
      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 
     18 from abc import abstractmethod
     19 
     20 class 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