diff --git a/cdemu/device.py b/cdemu/device.py new file mode 100644 --- /dev/null +++ b/cdemu/device.py @@ -0,0 +1,100 @@ +from event.sync import EventDispatcher +from .proxy import OP_BS_EMU, OP_DEV_ID, OP_DPM_EMU, OP_TR_EMU + + +class CDEmuDevice(EventDispatcher): + def __init__(self, device_id, cdemu): + super().__init__( + 'change' + ) + self.cdemu = cdemu + self._device_id = device_id + self._mapped_sr = None + self._mapped_sg = None + self._img = False + self._dpm = False + self._tr = False + self._bs = False + self._vendor = None + self._product = None + self._revision = None + self._vendor_specific = None + + def get_name(self): + return 'Device {}'.format(self._device_id) + + @property + def mapped_sr(self): + return self._mapped_sr + + @property + def mapped_sg(self): + return self._mapped_sg + + def get_img(self): + return self._img + + def load(self, img): + self.cdemu.load(self, img) + + def unload(self): + self.cdemu.unload(self) + + def get_dpm(self): + """ + get current dpm emulation state + :return: True if dpm emulation is on, False otherwise + """ + return self._dpm + + def set_dpm(self, dpm): + """ + set dpm emulation state + :param dpm: True to enable emulation, False to disable + """ + self.cdemu.set_device_option(self._device_id, OP_DPM_EMU, dpm) + + def get_tr(self): + """ + get current transfer rate emulation state + :return: True if transfer rate emulation is enabled, False otherwise + """ + return self._tr + + def set_tr(self, tr): + """ + set transfer rate emulation state + :param tr: True to enable emulation, False to disable + """ + self.cdemu.set_device_option(self._device_id, OP_TR_EMU, tr) + + def get_bs(self): + """ + get current bad sector emulation state + :return: True if bad sector emulation is enabled, False otherwise + """ + return self._bs + + def set_bs(self, bs): + """ + set bad sector emulation state + :param bs: True to enable emulation, False to disable + """ + self.cdemu.set_device_option(self._device_id, OP_BS_EMU, bs) + + def get_id(self): + """ + get current device id + :return: tuple(str(vendor_id), str(product_id), str(revision), str(vendor_specific)) + """ + return (self._vendor, self._product, self._revision, self._vendor_specific) + + def set_id(self, vendor, product, revision, vendor_specific): + """ + set device id + :param vendor: vendor_id - 8 character string + :param product: product_id - 16 character string + :param revision: - 4 character string + :param vendor_specific: - 20 character string + """ + self.cdemu.set_device_option(self._device_id, OP_DEV_ID, (vendor, product, revision, vendor_specific))