1.1.0版本
This commit is contained in:
99
UniTAP/dev/ports/modules/pdc/pdo.py
Normal file
99
UniTAP/dev/ports/modules/pdc/pdo.py
Normal file
@@ -0,0 +1,99 @@
|
||||
from typing import Type
|
||||
|
||||
from UniTAP.dev.ports.modules.pdc.pdo_utils import interpret_pdo_value
|
||||
from UniTAP.dev.ports.modules.pdc.pdo_types import PdoSide, PdoType, FixedPdoSink, FixedPdoSource, BatteryPdo, \
|
||||
VariablePdo, PdoTypeEnum
|
||||
|
||||
|
||||
class Pdo:
|
||||
|
||||
"""
|
||||
Class `Pdo` describes power delivery object in PDC module. Contains information about side of PDO `PdoSide` and
|
||||
main PDO data. May have one of the available type `PdoType`: `FixedPdoSink`, `FixedPdoSource`, `BatteryPdo`,
|
||||
`VariablePdo`.
|
||||
- Get PDO type `pdo_type`, type of `PdoTypeEnum`.
|
||||
- Get PDO side `pdo_side`, type of `PdoSide`.
|
||||
- Set and get main PDO object `pdo_object`, type of `PdoType`.
|
||||
- Get pdo object as selected PDO type `PdoType` `get_pdo_as_selected_type`, type of `PdoType`.
|
||||
- Convert (interpret) from one PDO type to another `interpret_pdo_as_selected_type`.
|
||||
"""
|
||||
|
||||
def __init__(self, pdo: PdoType, side: PdoSide):
|
||||
self.__pdo = pdo
|
||||
self.__side = side
|
||||
|
||||
@property
|
||||
def pdo_type(self) -> PdoTypeEnum:
|
||||
"""
|
||||
Returns current PDO type.
|
||||
|
||||
Returns:
|
||||
object of `PdoTypeEnum` type
|
||||
"""
|
||||
return self.__pdo.pdo_type
|
||||
|
||||
@property
|
||||
def pdo_side(self) -> PdoSide:
|
||||
"""
|
||||
Returns current PDO side.
|
||||
|
||||
Returns:
|
||||
object of `PdoSide` type
|
||||
"""
|
||||
return self.__side
|
||||
|
||||
@property
|
||||
def pdo_object(self) -> PdoType:
|
||||
"""
|
||||
Returns current PDO object.
|
||||
|
||||
Returns:
|
||||
object of `PdoType` type
|
||||
"""
|
||||
return self.__pdo
|
||||
|
||||
@pdo_object.setter
|
||||
def pdo_object(self, pdo: PdoType):
|
||||
self.__pdo = pdo
|
||||
|
||||
def disable_pdo(self):
|
||||
"""
|
||||
Disable PDO. Will be filled with zeros.
|
||||
"""
|
||||
self.__pdo = FixedPdoSink(disable=True) if self.__side == PdoSide.Sink else FixedPdoSource(disable=True)
|
||||
|
||||
def get_pdo_as_selected_type(self, pdo: Type[PdoType]) -> PdoType:
|
||||
"""
|
||||
Returns PDO object as selected new PDO type.
|
||||
|
||||
Args:
|
||||
pdo (`PdoType`) - type of PDO
|
||||
|
||||
Returns:
|
||||
object of `PdoType` type
|
||||
"""
|
||||
self.interpret_pdo_as_selected_type(pdo)
|
||||
return self.__pdo
|
||||
|
||||
def interpret_pdo_as_selected_type(self, pdo: Type[PdoType]):
|
||||
"""
|
||||
Convert (interpret) from one PDO type to another.
|
||||
|
||||
Args:
|
||||
pdo (`PdoType`) - type of PDO
|
||||
"""
|
||||
if pdo == FixedPdoSink and self.__side == PdoSide.Sink:
|
||||
self.__pdo = FixedPdoSink(interpret_pdo_value(self.__pdo, pdo))
|
||||
elif pdo == FixedPdoSource and self.__side == PdoSide.Source:
|
||||
self.__pdo = FixedPdoSource(interpret_pdo_value(self.__pdo, pdo))
|
||||
elif pdo == BatteryPdo:
|
||||
self.__pdo = BatteryPdo(interpret_pdo_value(self.__pdo, pdo))
|
||||
elif pdo == VariablePdo:
|
||||
self.__pdo = VariablePdo(interpret_pdo_value(self.__pdo, pdo))
|
||||
else:
|
||||
raise ValueError(f"Incorrect PDO type: {pdo}. Available types: BatteryPdo, VariablePdo, "
|
||||
f"{'FixedPdoSink' if self.__side == PdoSide.Sink else 'FixedPdoSource'}")
|
||||
|
||||
def __str__(self):
|
||||
return f'PDO type: {self.pdo_type.name}\n' \
|
||||
f'{self.__pdo.__str__()}'
|
||||
Reference in New Issue
Block a user