%PDF- %PDF-
Direktori : /usr/lib/calibre/calibre/devices/eb600/ |
Current File : //usr/lib/calibre/calibre/devices/eb600/driver.py |
__license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __docformat__ = 'restructuredtext en' ''' Device driver for the Netronix EB600 Windows PNP strings: ('USBSTOR\\DISK&VEN_NETRONIX&PROD_EBOOK&REV_062E\\6&1A275569&0&EB6001009 2W00000&0', 2, u'F:\\') ('USBSTOR\\DISK&VEN_NETRONIX&PROD_EBOOK&REV_062E\\6&1A275569&0&EB6001009 2W00000&1', 3, u'G:\\') ''' import re from calibre.devices.usbms.driver import USBMS class EB600(USBMS): name = 'Netronix EB600 Device Interface' gui_name = 'Netronix EB600' description = _('Communicate with the EB600 e-book reader.') author = 'Kovid Goyal' supported_platforms = ['windows', 'osx', 'linux'] # Ordered list of supported formats FORMATS = ['epub', 'mobi', 'prc', 'chm', 'djvu', 'html', 'rtf', 'txt', 'pdf'] DRM_FORMATS = ['prc', 'mobi', 'html', 'pdf', 'txt'] VENDOR_ID = [0x1f85] PRODUCT_ID = [0x1688] BCD = [0x110] VENDOR_NAME = ['NETRONIX', 'WOLDER', 'MD86371'] WINDOWS_MAIN_MEM = ['EBOOK', 'MIBUK_GAMMA_6.2', 'MD86371'] WINDOWS_CARD_A_MEM = ['EBOOK', 'MD86371'] OSX_MAIN_MEM = 'EB600 Internal Storage Media' OSX_CARD_A_MEM = 'EB600 Card Storage Media' MAIN_MEMORY_VOLUME_LABEL = 'EB600 Main Memory' STORAGE_CARD_VOLUME_LABEL = 'EB600 Storage Card' EBOOK_DIR_MAIN = '' EBOOK_DIR_CARD_A = '' SUPPORTS_SUB_DIRS = True class TOLINO(EB600): name = 'Tolino Shine Device Interface' gui_name = 'Tolino Shine' description = _('Communicate with the Tolino Shine and Vision readers') FORMATS = ['epub', 'pdf', 'txt'] EPOS_PRODUCT_ID = [0x6053] VISION6_PRODUCT_ID = [0x8000] OTHER_TOLINO_PRODUCT_ID = [0x6033, 0x6052] PRODUCT_ID = EB600.PRODUCT_ID + OTHER_TOLINO_PRODUCT_ID + EPOS_PRODUCT_ID + VISION6_PRODUCT_ID KOBO_VENDOR_ID = [0x4173] # Some newer Tolino devices have the Kobo Vendor ID. But, they still use different software. VENDOR_ID = EB600.VENDOR_ID + KOBO_VENDOR_ID BCD = [0x226, 0x9999] VENDOR_NAME = ['DEUTSCHE', 'LINUX'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['_TELEKOMTOLINO', 'FILE-CD_GADGET'] EBOOK_DIR_MAIN = '' EXTRA_CUSTOMIZATION_MESSAGE = [ _('Swap main and card A') + ':::' + _('Check this box if the device\'s main memory is being seen as card a and the card ' 'is being seen as main memory. Some tolino devices may need this option.'), ] EXTRA_CUSTOMIZATION_DEFAULT = [ True, ] OPT_SWAP_MEMORY = 0 def get_device_information(self, end_session=True): self.set_device_name() return super().get_device_information(end_session) # There are apparently two versions of this device, one with swapped # drives and one without, see https://bugs.launchpad.net/bugs/1240504 def linux_swap_drives(self, drives): e = self.settings().extra_customization if len(drives) < 2 or not drives[0] or not drives[1] or not e[self.OPT_SWAP_MEMORY]: return drives drives = list(drives) t = drives[0] drives[0] = drives[1] drives[1] = t return tuple(drives) def windows_sort_drives(self, drives): e = self.settings().extra_customization if len(drives) < 2 or not e[self.OPT_SWAP_MEMORY]: return drives main = drives.get('main', None) carda = drives.get('carda', None) if main and carda: drives['main'] = carda drives['carda'] = main return drives def osx_sort_names(self, names): e = self.settings().extra_customization if len(names) < 2 or not e[self.OPT_SWAP_MEMORY]: return names main = names.get('main', None) card = names.get('carda', None) if main is not None and card is not None: names['main'] = card names['carda'] = main return names def post_open_callback(self): # The tolino vision only handles books inside the Books folder product_id, bcd = self.device_being_opened[1], self.device_being_opened[2] is_tolino = product_id in (0x6033, 0x6052, 0x6053) or (product_id == 0x1688 and bcd == 0x226) self.ebook_dir_for_upload = 'Books' if is_tolino else '' def get_main_ebook_dir(self, for_upload=False): if for_upload: return getattr(self, 'ebook_dir_for_upload', self.EBOOK_DIR_MAIN) return self.EBOOK_DIR_MAIN def isEpos(self): return self.detected_device.idProduct in self.EPOS_PRODUCT_ID def isVision6(self): return self.detected_device.idProduct in self.VISION6_PRODUCT_ID def set_device_name(self): device_name = self.gui_name if self.isEpos(): device_name = 'tolino epos' elif self.isVision6(): device_name = 'tolino vision 6' self.__class__.gui_name = device_name return device_name class COOL_ER(EB600): name = 'Cool-er device interface' gui_name = 'Cool-er' FORMATS = ['epub', 'mobi', 'prc', 'pdf', 'txt'] VENDOR_NAME = 'COOL-ER' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'EREADER' OSX_MAIN_MEM = 'COOL-ER eReader Media' EBOOK_DIR_MAIN = 'my docs' class SHINEBOOK(EB600): name = 'ShineBook device Interface' gui_name = 'ShineBook' FORMATS = ['epub', 'prc', 'rtf', 'pdf', 'txt'] VENDOR_NAME = 'LONGSHIN' WINDOWS_MAIN_MEM = 'ESHINEBOOK' MAIN_MEMORY_VOLUME_LABEL = 'ShineBook Main Memory' STORAGE_CARD_VOLUME_LABEL = 'ShineBook Storage Card' @classmethod def can_handle(cls, dev, debug=False): return dev[4] == 'ShineBook' class POCKETBOOK360(EB600): # Device info on OS X # (8069L, 5768L, 272L, u'', u'', u'1.00') name = 'PocketBook 360 Device Interface' gui_name = 'PocketBook 360' VENDOR_ID = [0x1f85, 0x525] PRODUCT_ID = [0x1688, 0xa4a5] BCD = [0x110] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'txt'] VENDOR_NAME = ['PHILIPS', '__POCKET', 'POCKETBO'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['MASS_STORGE', 'BOOK_USB_STORAGE', 'OK_POCKET_611_61', 'OK_POCKET_360+61'] OSX_MAIN_MEM = OSX_CARD_A_MEM = 'Philips Mass Storge Media' OSX_MAIN_MEM_VOL_PAT = re.compile(r'/Pocket') @classmethod def can_handle(cls, dev, debug=False): return dev[-1] == '1.00' and not dev[-2] and not dev[-3] class POCKETBOOKHD(EB600): name = 'Pocket Touch HD Device Interface' gui_name = 'PocketBook HD' PRODUCT_ID = [0x6a42] BCD = [0x9999] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'docx', 'doc', 'pdf', 'djvu', 'rtf', 'chm', 'txt'] class GER2(EB600): name = 'Ganaxa GeR2 Device Interface' gui_name = 'Ganaxa GeR2' FORMATS = ['pdf'] VENDOR_ID = [0x3034] PRODUCT_ID = [0x1795] BCD = [0x132] VENDOR_NAME = 'GANAXA' WINDOWS_MAIN_MEN = 'GER2_________-FD' WINDOWS_CARD_A_MEM = 'GER2_________-SD' class ITALICA(EB600): name = 'Italica Device Interface' gui_name = 'Italica' icon = I('devices/italica.png') FORMATS = ['epub', 'rtf', 'fb2', 'html', 'prc', 'mobi', 'pdf', 'txt'] VENDOR_NAME = 'ITALICA' WINDOWS_MAIN_MEM = 'EREADER' WINDOWS_CARD_A_MEM = WINDOWS_MAIN_MEM OSX_MAIN_MEM = 'Italica eReader Media' OSX_CARD_A_MEM = OSX_MAIN_MEM MAIN_MEMORY_VOLUME_LABEL = 'Italica Main Memory' STORAGE_CARD_VOLUME_LABEL = 'Italica Storage Card' class ECLICTO(EB600): name = 'eClicto Device Interface' gui_name = 'eClicto' FORMATS = ['epub', 'pdf', 'htm', 'html', 'txt'] VENDOR_NAME = 'ECLICTO' WINDOWS_MAIN_MEM = 'EBOOK' WINDOWS_CARD_A_MEM = 'EBOOK' EBOOK_DIR_MAIN = 'Text' EBOOK_DIR_CARD_A = '' class DBOOK(EB600): name = 'Airis Dbook Device Interface' gui_name = 'Airis Dbook' FORMATS = ['epub', 'mobi', 'prc', 'fb2', 'html', 'pdf', 'rtf', 'txt'] VENDOR_NAME = 'INFINITY' WINDOWS_MAIN_MEM = 'AIRIS_DBOOK' WINDOWS_CARD_A_MEM = 'AIRIS_DBOOK' class INVESBOOK(EB600): name = 'Inves Book Device Interface' gui_name = 'Inves Book 600' FORMATS = ['epub', 'mobi', 'prc', 'fb2', 'html', 'pdf', 'rtf', 'txt'] BCD = [0x110, 0x323] VENDOR_NAME = ['INVES_E6', 'INVES-WI', 'POCKETBO'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['00INVES_E600', 'INVES-WIBOOK', 'OK_POCKET_611_61'] class BOOQ(EB600): name = 'Booq Device Interface' gui_name = 'bq Reader' FORMATS = ['epub', 'mobi', 'prc', 'fb2', 'pdf', 'doc', 'rtf', 'txt', 'html'] VENDOR_NAME = ['NETRONIX', '36LBOOKS'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['EB600', 'ELEQTOR'] class MENTOR(EB600): name = 'Astak Mentor EB600' gui_name = 'Mentor' description = _('Communicate with the Astak Mentor EB600') FORMATS = ['epub', 'fb2', 'mobi', 'prc', 'pdf', 'txt'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'MENTOR' class ELONEX(EB600): name = 'Elonex 600EB' gui_name = 'Elonex' FORMATS = ['epub', 'pdf', 'txt', 'html'] VENDOR_NAME = 'ELONEX' WINDOWS_MAIN_MEM = 'EBOOK' WINDOWS_CARD_A_MEM = 'EBOOK' @classmethod def can_handle(cls, dev, debug=False): return dev[3] == 'Elonex' and dev[4] == 'eBook' class POCKETBOOK301(USBMS): name = 'PocketBook 301 Device Interface' description = _('Communicate with the PocketBook 301 Reader.') author = 'Kovid Goyal' supported_platforms = ['windows', 'osx', 'linux'] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'txt'] SUPPORTS_SUB_DIRS = True MAIN_MEMORY_VOLUME_LABEL = 'PocketBook 301 Main Memory' STORAGE_CARD_VOLUME_LABEL = 'PocketBook 301 Storage Card' VENDOR_ID = [0x1] PRODUCT_ID = [0x301] BCD = [0x132] class POCKETBOOK602(USBMS): name = 'PocketBook Pro 602/902 Device Interface' gui_name = 'PocketBook' description = _('Communicate with the PocketBook 515/602/603/902/903/Pro 912 reader.') author = 'Kovid Goyal' supported_platforms = ['windows', 'osx', 'linux'] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'doc', 'tcr', 'txt'] EBOOK_DIR_MAIN = 'books' SUPPORTS_SUB_DIRS = True SCAN_FROM_ROOT = True VENDOR_ID = [0x0525] PRODUCT_ID = [0xa4a5] BCD = [0x0324, 0x0330, 0x0399] VENDOR_NAME = ['', 'LINUX'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['PB602', 'PB603', 'PB902', 'PB903', 'Pocket912', 'PB', 'FILE-STOR_GADGET'] class POCKETBOOK622(POCKETBOOK602): name = 'PocketBook 622 Device Interface' description = _('Communicate with the PocketBook 622 and 623 readers.') EBOOK_DIR_MAIN = '' VENDOR_ID = [0x0489] PRODUCT_ID = [0xe107, 0xcff1] BCD = [0x0326] VENDOR_NAME = 'LINUX' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'FILE-STOR_GADGET' class POCKETBOOK360P(POCKETBOOK602): name = 'PocketBook 360+ Device Interface' description = _('Communicate with the PocketBook 360+ reader.') BCD = [0x0323] EBOOK_DIR_MAIN = '' VENDOR_NAME = '__POCKET' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'BOOK_USB_STORAGE' class POCKETBOOK701(USBMS): name = 'PocketBook 701 Device Interface' gui_name = 'PocketBook' description = _('Communicate with the PocketBook 701') author = _('Kovid Goyal') supported_platforms = ['windows', 'osx', 'linux'] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'doc', 'tcr', 'txt'] EBOOK_DIR_MAIN = 'books' SUPPORTS_SUB_DIRS = True VENDOR_ID = [0x18d1] PRODUCT_ID = [0xa004] BCD = [0x0224] VENDOR_NAME = 'ANDROID' WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '__UMS_COMPOSITE' def windows_sort_drives(self, drives): if len(drives) < 2: return drives main = drives.get('main', None) carda = drives.get('carda', None) if main and carda: drives['main'] = carda drives['carda'] = main return drives class POCKETBOOK740(USBMS): name = 'PocketBook 701 Device Interface' gui_name = 'PocketBook' description = _('Communicate with the PocketBook 740') supported_platforms = ['windows', 'osx', 'linux'] FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'doc', 'tcr', 'txt'] EBOOK_DIR_MAIN = 'books' SUPPORTS_SUB_DIRS = True SCAN_FROM_ROOT = True VENDOR_ID = [0x18d1] PRODUCT_ID = [0x0001] BCD = [0x0101] class PI2(EB600): name = 'Infibeam Pi2 Device Interface' gui_name = 'Infibeam Pi2' author = 'Michael Scalet' description = _('Communicate with the Infibeam Pi2 reader.') version = (1,0,1) # Ordered list of supported formats FORMATS = ['epub', 'mobi', 'prc', 'html', 'htm', 'doc', 'pdf', 'rtf', 'txt'] VENDOR_NAME = 'INFIBEAM' WINDOWS_MAIN_MEM = 'INFIBEAM_PI' WINDOWS_CARD_A_MEM = 'INFIBEAM_PI' DELETE_EXTS = ['.rec']