Merge pull request #7 from marto87/device/009a
Add support for 009a sensor initializer
This commit is contained in:
commit
95bdee3aaa
1 changed files with 17 additions and 9 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
# 2020 - Marco Trevisan
|
# 2020 - Marco Trevisan
|
||||||
#
|
#
|
||||||
# Initializer for ThinkPad's validity sensors 0090 and 0097
|
# Initializer for ThinkPad's validity sensors 138a:0090 and 138a:0097 and 06cb:009a
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,22 +25,24 @@ import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
|
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from usb import core as usb_core
|
from usb import core as usb_core
|
||||||
|
|
||||||
from proto9x.calibrate import calibrate
|
|
||||||
from proto9x.flash import read_flash
|
from proto9x.flash import read_flash
|
||||||
from proto9x.init_db import init_db
|
from proto9x.init_db import init_db
|
||||||
from proto9x.init_flash import init_flash
|
from proto9x.init_flash import init_flash
|
||||||
|
from proto9x.sensor import sensor as vfs_sensor
|
||||||
from proto9x.sensor import factory_reset
|
from proto9x.sensor import factory_reset
|
||||||
from proto9x.tls import tls as vfs_tls
|
from proto9x.tls import tls as vfs_tls
|
||||||
from proto9x.upload_fwext import upload_fwext
|
from proto9x.upload_fwext import upload_fwext
|
||||||
from proto9x.usb import usb as vfs_usb
|
from proto9x.usb import usb as vfs_usb
|
||||||
|
|
||||||
class VFS(Enum):
|
class VFS(Enum):
|
||||||
DEV_90 = 0x0090
|
DEV_90 = (0x138a, 0x0090)
|
||||||
DEV_97 = 0x0097
|
DEV_97 = (0x138a, 0x0097)
|
||||||
|
DEV_9a = (0x06cb, 0x009a)
|
||||||
|
|
||||||
DEFAULT_URIS = {
|
DEFAULT_URIS = {
|
||||||
VFS.DEV_90: {
|
VFS.DEV_90: {
|
||||||
|
|
@ -50,12 +52,17 @@ DEFAULT_URIS = {
|
||||||
VFS.DEV_97: {
|
VFS.DEV_97: {
|
||||||
'driver': 'https://download.lenovo.com/pccbbs/mobiles/n1mgf03w.exe',
|
'driver': 'https://download.lenovo.com/pccbbs/mobiles/n1mgf03w.exe',
|
||||||
'referral': 'https://download.lenovo.com/pccbbs/mobiles/n1mgf03w.exe'
|
'referral': 'https://download.lenovo.com/pccbbs/mobiles/n1mgf03w.exe'
|
||||||
|
},
|
||||||
|
VFS.DEV_9a: {
|
||||||
|
'driver': 'https://download.lenovo.com/pccbbs/mobiles/nz3gf07w.exe',
|
||||||
|
'referral': 'https://download.lenovo.com/pccbbs/mobiles/nz3gf07w.exe'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFAULT_FW_NAMES = {
|
DEFAULT_FW_NAMES = {
|
||||||
VFS.DEV_90: '6_07f_Lenovo.xpfwext',
|
VFS.DEV_90: '6_07f_Lenovo.xpfwext',
|
||||||
VFS.DEV_97: '6_07f_lenovo_mis.xpfwext',
|
VFS.DEV_97: '6_07f_lenovo_mis.xpfwext',
|
||||||
|
VFS.DEV_9a: '6_07f_lenovo_mis_qm.xpfwext'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -90,8 +97,8 @@ class VFSInitializer():
|
||||||
serial_number=self.product_serial)
|
serial_number=self.product_serial)
|
||||||
|
|
||||||
def open_device(self, init=False):
|
def open_device(self, init=False):
|
||||||
print('Opening device',hex(self.dev_type.value))
|
print('Opening device',hex(self.dev_type.value[1]))
|
||||||
vfs_usb.open(product=self.dev_type.value)
|
vfs_usb.open(product=self.dev_type.value[1])
|
||||||
|
|
||||||
if init:
|
if init:
|
||||||
vfs_usb.send_init()
|
vfs_usb.send_init()
|
||||||
|
|
@ -185,12 +192,13 @@ class VFSInitializer():
|
||||||
calib_data_file = 'calib-data.bin'
|
calib_data_file = 'calib-data.bin'
|
||||||
|
|
||||||
print('Calibrating, re-using {}, if any...'.format(calib_data_file))
|
print('Calibrating, re-using {}, if any...'.format(calib_data_file))
|
||||||
|
vfs_sensor.open()
|
||||||
if os.path.exists(calib_data_file):
|
if os.path.exists(calib_data_file):
|
||||||
calibrate(calib_data_path=calib_data_file)
|
vfs_sensor.calibrate()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
calib_data_file = os.path.join(tempfile.mkdtemp(), 'calib-data.bin')
|
calib_data_file = os.path.join(tempfile.mkdtemp(), 'calib-data.bin')
|
||||||
calibrate(calib_data_path=calib_data_file)
|
vfs_sensor.calibrate()
|
||||||
print('Calibration data saved at {}'.format(calib_data_file))
|
print('Calibration data saved at {}'.format(calib_data_file))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('Calibration failed using device data ({}), ' \
|
print('Calibration failed using device data ({}), ' \
|
||||||
|
|
@ -224,7 +232,7 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
usb_dev = None
|
usb_dev = None
|
||||||
for d in VFS:
|
for d in VFS:
|
||||||
dev = usb_core.find(idVendor=0x138a, idProduct=d.value)
|
dev = usb_core.find(idVendor=d.value[0], idProduct=d.value[1])
|
||||||
if dev:
|
if dev:
|
||||||
dev_type = d
|
dev_type = d
|
||||||
usb_dev = dev
|
usb_dev = dev
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue