blob: cec4545cd74a1bf7802930c240ddb0410958b0b5 [file] [log] [blame]
#!/usr/bin/python
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from abc import abstractmethod
class Abstract_Power_Monitor(object):
"""
Provides a simple interface to use the power meter.
The implementer should establish communications with the power monitor
on __init__:
monitor = <<Implementing Class>>(...)
Afterward, data can be collected multiple times via the
series of calls, for example:
montior.StartDataCollection()
data = True
while data is not None:
data = monitor.CollectData()
<<do-something-with-data>>
monitor.StopDataCollection()
On exit, Close should be called:
monitor.Close()
The method GetStatus() can be used to check voltage setting as well as
ensure status of the USB passthrough connection.
"""
def __init__(self ):
pass
@abstractmethod
def Close(self):
"""Close the connection to the device, preventing
further interactions. This should be called only
when the power monitor is no longer needed
(e.g. on exit)
"""
pass
@abstractmethod
def GetStatus(self):
""" Requests and waits for status. Returns status dictionary.
This should at a minimum contain entries for "usbPassthroughMode"
and "outputVoltageSetting" """
pass
@abstractmethod
def SetVoltage(self, v):
""" Set the output voltage, 0 to disable. """
pass
@abstractmethod
def SetMaxCurrent(self, i):
"""Set the max output current."""
pass
@abstractmethod
def SetUsbPassthrough(self, val):
""" Set the USB passthrough mode: 0 = off, 1 = on, 2 = auto. """
pass
@abstractmethod
def StartDataCollection(self):
""" Tell the device to start collecting and sending measurement data. """
pass
@abstractmethod
def StopDataCollection(self):
""" Tell the device to stop collecting measurement data. """
pass
@abstractmethod
def CollectData(self, verbose = True):
""" Return some current samples. Call StartDataCollection() first.
Returns None if no data available"""
pass