ban3 / python-evic Goto Github PK
View Code? Open in Web Editor NEWA USB programmer for devices based on the Joyetech Evic VTC Mini.
License: GNU General Public License v3.0
A USB programmer for devices based on the Joyetech Evic VTC Mini.
License: GNU General Public License v3.0
Program expects data flash from the device for checking if it's in LDROM
Eleaf released firmware version 1.01 for the iStick Pico today.
Now you can upload a logo with the dimensions 96x16px.
"evic-usb upload-logo" shows the following errormessage:
`$ evic-usb upload-logo musik234-96x16.bmp
Finding device...OK
Manufacturer: Joyetech
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Device name: iStick Pico
Firmware version: 0.00
Hardware version: 1.00
Image dimensions must be 64x40.
Writing logo...Traceback (most recent call last):
File "/usr/local/bin/evic-usb", line 9, in
load_entry_point('evic==0.1', 'console_scripts', 'evic-usb')()
File "/usr/local/lib/python2.7/dist-packages/click-6.2-py2.7.egg/click/core.py", line 716, in call
return self.main(_args, *_kwargs)
File "/usr/local/lib/python2.7/dist-packages/click-6.2-py2.7.egg/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python2.7/dist-packages/click-6.2-py2.7.egg/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python2.7/dist-packages/click-6.2-py2.7.egg/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, *_ctx.params)
File "/usr/local/lib/python2.7/dist-packages/click-6.2-py2.7.egg/click/core.py", line 534, in invoke
return callback(_args, **kwargs)
File "build/bdist.linux-x86_64/egg/evic/cli.py", line 290, in uploadlogo
UnboundLocalError: local variable 'logo' referenced before assignment
`
(Moved from: ClockSelect/myevic#229)
I packaged python-evic for aur:
https://aur.archlinux.org/packages/python-evic-git/
For autosync on connect:
{
echo '[Unit]'
echo 'Description=Evic RTC sync'
echo '[Service]'
echo 'ExecStart=/usr/bin/evic-usb time'
echo 'RemainAfterExit=yes'
} > "$pkgdir/usr/lib/systemd/system/evic-usb-rtc-sync.service"
{
echo "# HIDAPI/libusb RTC Sync"
echo 'ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5020", RUN+="/usr/bin/systemctl restart evic-usb-rtc-sync"'
} > "$pkgdir/usr/lib/udev/rules.d/99-nuvoton-hid-rtc-sync.rules"
AFAIK external service for sync time is needed only for systemd systems, as systemd add some restrictions to udev and evic-usb can't see device if running as script in udev.
JFYI, you can close this or say me for do a pull request. Thanks.
I was implementing verification for evic-sdk binaries and I found out that the verification in python-evic is not fully compliant with the original updater. This is not some high priority issue, just a heads up.
First, the official updater checks for "Joyetech APROM"
as a sequence of bytes (no null terminator required), just like python-evic does. But the string needs to start at least 26 bytes from the end of the file (i.e. there must be at least 25 bytes after the 'J'
). The second check, that python-evic also does, is for the device string ("E052"
for the eVic VTC Mini). This must start at least 9 bytes from the end of the file.
Immediately after the device string there are three bytes. Let's call them, in order, A
, B
and C
. Those encode the hardware version A.BC
(e.g. 01 02 03 -> 1.23
). This is the maximum hardware version supported by the firmware and is checked to be greater than or equal to the device hardware version. It makes sense since the display driver defaults to SSD1306, so newer hardware versions with SSD1327 would not work with older firmwares.
In my opinion the at-least-X-bytes-from-end thing is not really important, but the hardware version verification could be nice to have.
Hey, might just be me, but i'm stuck between $ python setup.py install
and running evic
I keep getting an error that "evic" does not contain a main module. :<
I've been experiencing problems with the last revision when using dump-dataflash:
$ sudo evic dump-dataflash -o a.bin
Found device:
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: XXXXXXXXXXXX
Traceback (most recent call last):
File "/bin/evic", line 9, in <module>
load_entry_point('evic==0.1', 'console_scripts', 'evic')()
File "build/bdist.linux-x86_64/egg/evic/cli.py", line 93, in main
UnboundLocalError: local variable 'aprom' referenced before assignment
I'm attaching a patch that fixes the issue (also args.dataflash needs to be checked for existence as it won't be set with dump-dataflash). I don't know if I'm the only one having problems with it, but it shouldn't hurt anyway.
Renamed to .txt, otherwise Issues wouldn't let me upload it: unbound-local-fix.txt
Hi, thanks for this!
upload -d
is explained as
Use data flash from a file.
But it seems that without -d
, with or without -e
or -u
, the upload
command always uses a file, so it's unclear what the difference is.
Also, while I have a firmware image to upload, I don't know if it's encrypted or not. Is there a simple way to determine that?
Thanks for any help.
Mod is not being recognized over USB. I installed python-evic, cython, libusb-1.0-dev, hidapi and udev rules. I've also tried different USB ports and cables. Using Ubuntu 16.10 with kernel 4.9.0
lsusb output:
Bus 002 Device 003: ID 174f:1469 Syntek
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0489:e042 Foxconn / Hon Hai Broadcom BCM20702 Bluetooth
Bus 001 Device 003: ID 062a:4101 Creative Labs Wireless Keyboard/Mouse
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
evic-usb output:
$ evic-usb dump-dataflash -o out.bin
Finding device...FAIL
open failed
Is there extra vendor codes or rules udev needs that I'm missing?
evic-usb upload firmwares/Reuleaux_RX23_V4.13.bin
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Verifying data flash...OK
Device name: Reuleaux RX2/3
Firmware version: 4.02
Hardware version: 1.02
Verifying APROM...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing APROM...OK
evic-usb upload-logo logo/LOGO.bmp
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Device name: Reuleaux RX2/3
Firmware version: 4.13
Hardware version: 1.02
Converting logo...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing logo...OK
@netman69 I'm opening this as a separate issue for better tracking.
Did you have the correct headers installed? On opensuse the packages you need for cython-hidapi are: libusb-1_0
, libusb-1_0-devel
and libudev-devel
.
1st attempt
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02015081302
Reading data flash...OK
Verifying data flash...OK
Device name: eVic VTwo mini
Firmware version: 3.30
Hardware version: 1.00
Verifying APROM...OK
Writing data flash...OK
Restarting the device...OK
Finding device...FAIL
2nd attempt
Finding device...OK
Manufacturer: Joyetech
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Verifying data flash...OK
Device name: eVic VTwo mini
Firmware version: 0.00
Hardware version: 1.00
Verifying APROM...OK
Writing APROM...OK
Works as expected except it has to run twice. The device is then unusable unless a second evic-usb upload
is issued, which allows using the updated device.
This is not really an issue. Or maybe it's an issue in Readme.rst. I've successfully flashed the newly released OFW 1.01 to my iStick Pico:
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Verifying data flash...OK
Device name: iStick Pico
Firmware version: 1.00
Hardware version: 1.00
Verifying APROM...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing APROM...OK
Hello! Thanks for your work!
I spent almost 6 hours trying to fix that, installing dependencies etc but no success.
Install script just gives me a bunch of errors about hid.pyx and hid.so, and in the end of output - ImportError: /usr/local/lib/python2.7/dist-packages/hid.so: undefined symbol: libusb_open.
Somehow I managed to solve these but I have recieved that:
from pkg_resources import load_entry_point
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 3138, in
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 3124, in _call_aside
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 3151, in _initialize_master_working_set
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 661, in _build_master
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 962, in require
File "build/bdist.linux-x86_64/egg/pkg_resources/init.py", line 849, in resolve
pkg_resources.DistributionNotFound: The 'hidapi>=0.7.99' distribution was not found and is required by evic
So, I guess the problem is somehow connected with hidapi. I tried different versions, tried cython-hidapi etc .
I get this, don't ask me why it happened (short of that I was uploading self-built stuff, I have no idea):
Verifying data flash...OK
Device name: eVic-VTC Mini
Firmware version: 0.00
Hardware version: 42949672.95
Please set the hardware version.
...indeed, that's exactly what I'd like to do in this situation.
After looking for options to do exactly that and finding none I downloaded the dataflash, changed the ffffffff
starting at byte 4 to 63000000
(i.e. hw version 1.04, which is the correct one), uploaded that with extensive --no-verify
(why do I also need to upload an aprom with that? no matter)... and it's not changing a thing.
Any hints, pointers, or insights?
I have python-evic installed on linux mint 17.1
The old version "evic convert ..." and "evic upload ..."worked.
After pulling the update "evic-usb upload ..." still works.
But now "evic-convert", "evic-usb dump-dataflash" and "evic-usb upload-logo" are showing errors:
evic-convert ...
evic-convert.txt
evic-usb dump-dataflash
dump-dataflash.txt
evic-usb upload-logo
upload-logo.txt
To be honest, my linux skills are quite poor, so I don't know what to do.
Thanks!
I'm on Arch Linux and installed via the python-evic-git
PKGBUILD in the AUR.
Plugged in, ran evic-usb dump-dataflash -o out.bin
:
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Device name: Presa TC75W
Firmware version: 3.00
Hardware version: 1.01
Writing data flash to the file...OK
Success!
Ran evic-usb upload Presa_TC75W_V4.03.bin
:
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: A02014090304
Reading data flash...OK
Verifying data flash...OK
Device name: Presa TC75W
Firmware version: 3.00
Hardware version: 1.01
Verifying APROM...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing APROM...OK
Success!
The screen on the device seemed distorted, but that may just be the new style. I tried evic-usb screenshot -o screenshot.png
, but it just hung after
Finding device...OK
Thanks again for enabling me to easily flash this without Windows!
If I try to upload any firmware (tested with both eVic and Presa firmwares), the device disconnects during reset. I have the Presa FW installed right now, but it also happens with the eVic one.
$ sudo evic upload somefirmware.bin
Found device:
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: XXXXXXXXXXXX
Reading data flash...
Device name: Presa TC75W
Firmware version: 1.02
Hardware version: 1.01
Writing data flash...
Traceback (most recent call last):
File "/bin/evic", line 9, in <module>
load_entry_point('evic==0.1', 'console_scripts', 'evic')()
File "build/bdist.linux-x86_64/egg/evic/cli.py", line 157, in main
File "build/bdist.linux-x86_64/egg/evic/device.py", line 205, in reset_system
File "build/bdist.linux-x86_64/egg/evic/device.py", line 125, in send_cmd
File "build/bdist.linux-x86_64/egg/usb/core.py", line 878, in write
File "build/bdist.linux-x86_64/egg/usb/backend/libusb1.py", line 778, in intr_write
File "build/bdist.linux-x86_64/egg/usb/backend/libusb1.py", line 856, in __write
File "build/bdist.linux-x86_64/egg/usb/backend/libusb1.py", line 552, in _check
usb.core.USBError: [Errno 19] No such device (it may have been disconnected)
After this obviously it won't work, but it can be brought back to life with the official updater. I worked around this by adding a try/except to the call to dev.reset_system()
in cli.py
, ignoring the exception. It works fine now, with all kinds of firmwares. Actually, the device disconnecting during reset should be expected. I'm not sure this is the best way to fix it, though.
Hi,
is it possible to upload the arctic fox custom firmware using python-evic on linux?
best regards
./evic-usb upload myevic.bin
Finding device...FAIL
open failed
I cannot get a new evic-usb executeable by running the install.
python3 setup.py install
running install
running bdist_egg
running egg_info
creating evic.egg-info
writing evic.egg-info/PKG-INFO
writing dependency_links to evic.egg-info/dependency_links.txt
writing entry points to evic.egg-info/entry_points.txt
writing requirements to evic.egg-info/requires.txt
writing top-level names to evic.egg-info/top_level.txt
writing manifest file 'evic.egg-info/SOURCES.txt'
reading manifest file 'evic.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching 'pycache' found under directory ''
warning: no previously-included files matching '.py[co]' found under directory ''
warning: no files found matching '.rst' under directory '*'
writing manifest file 'evic.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-aarch64/egg
running install_lib
running build_py
creating build
creating build/lib
creating build/lib/evic
copying evic/cli.py -> build/lib/evic
copying evic/logo.py -> build/lib/evic
copying evic/device.py -> build/lib/evic
copying evic/dataflash.py -> build/lib/evic
copying evic/init.py -> build/lib/evic
copying evic/aprom.py -> build/lib/evic
creating build/bdist.linux-aarch64
creating build/bdist.linux-aarch64/egg
creating build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/cli.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/logo.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/device.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/dataflash.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/init.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/aprom.py -> build/bdist.linux-aarch64/egg/evic
byte-compiling build/bdist.linux-aarch64/egg/evic/cli.py to cli.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/logo.py to logo.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/device.py to device.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/dataflash.py to dataflash.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/init.py to init.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/aprom.py to aprom.cpython-36.pyc
installing package data to build/bdist.linux-aarch64/egg
running install_data
creating build/bdist.linux-aarch64/egg/udev
copying udev/99-nuvoton-hid.rules -> build/bdist.linux-aarch64/egg/udev
creating build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/PKG-INFO -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/SOURCES.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/dependency_links.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/entry_points.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/requires.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/top_level.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/evic-0.1-py3.6.egg' and adding 'build/bdist.linux-aarch64/egg' to it
removing 'build/bdist.linux-aarch64/egg' (and everything under it)
Processing evic-0.1-py3.6.egg
Removing /usr/local/lib/python3.6/dist-packages/evic-0.1-py3.6.egg
Copying evic-0.1-py3.6.egg to /usr/local/lib/python3.6/dist-packages
evic 0.1 is already the active version in easy-install.pth
Installing evic script to /usr/local/bin
Installing evic-convert script to /usr/local/bin
Installing evic-usb script to /usr/local/bin
Installed /usr/local/lib/python3.6/dist-packages/evic-0.1-py3.6.egg
Processing dependencies for evic==0.1
Searching for Pillow==8.4.0
Best match: Pillow 8.4.0
Processing Pillow-8.4.0-py3.6-linux-aarch64.egg
Pillow 8.4.0 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/Pillow-8.4.0-py3.6-linux-aarch64.egg
Searching for click==8.0.3
Best match: click 8.0.3
Processing click-8.0.3-py3.6.egg
click 8.0.3 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/click-8.0.3-py3.6.egg
Searching for bitarray==2.3.4
Best match: bitarray 2.3.4
Processing bitarray-2.3.4-py3.6-linux-aarch64.egg
bitarray 2.3.4 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/bitarray-2.3.4-py3.6-linux-aarch64.egg
Searching for binstruct==1.0.1
Best match: binstruct 1.0.1
Processing binstruct-1.0.1-py3.6.egg
binstruct 1.0.1 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/binstruct-1.0.1-py3.6.egg
Searching for importlib-metadata==4.8.1
Best match: importlib-metadata 4.8.1
Adding importlib-metadata 4.8.1 to easy-install.pth file
Using /usr/local/lib/python3.6/dist-packages
Searching for typing-extensions==3.7.4.3
Best match: typing-extensions 3.7.4.3
Adding typing-extensions 3.7.4.3 to easy-install.pth file
Using /usr/local/lib/python3.6/dist-packages
Searching for zipp==3.6.0
Best match: zipp 3.6.0
Adding zipp 3.6.0 to easy-install.pth file
python3 setup.py install
running install
running bdist_egg
running egg_info
writing evic.egg-info/PKG-INFO
writing dependency_links to evic.egg-info/dependency_links.txt
writing entry points to evic.egg-info/entry_points.txt
writing requirements to evic.egg-info/requires.txt
writing top-level names to evic.egg-info/top_level.txt
reading manifest file 'evic.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching 'pycache' found under directory ''
warning: no previously-included files matching '.py[co]' found under directory ''
warning: no files found matching '.rst' under directory '*'
writing manifest file 'evic.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-aarch64/egg
running install_lib
running build_py
creating build/bdist.linux-aarch64/egg
creating build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/cli.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/logo.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/device.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/dataflash.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/init.py -> build/bdist.linux-aarch64/egg/evic
copying build/lib/evic/aprom.py -> build/bdist.linux-aarch64/egg/evic
byte-compiling build/bdist.linux-aarch64/egg/evic/cli.py to cli.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/logo.py to logo.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/device.py to device.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/dataflash.py to dataflash.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/init.py to init.cpython-36.pyc
byte-compiling build/bdist.linux-aarch64/egg/evic/aprom.py to aprom.cpython-36.pyc
installing package data to build/bdist.linux-aarch64/egg
running install_data
creating build/bdist.linux-aarch64/egg/udev
copying udev/99-nuvoton-hid.rules -> build/bdist.linux-aarch64/egg/udev
creating build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/PKG-INFO -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/SOURCES.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/dependency_links.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/entry_points.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/requires.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying evic.egg-info/top_level.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/evic-0.1-py3.6.egg' and adding 'build/bdist.linux-aarch64/egg' to it
removing 'build/bdist.linux-aarch64/egg' (and everything under it)
Processing evic-0.1-py3.6.egg
Removing /usr/local/lib/python3.6/dist-packages/evic-0.1-py3.6.egg
Copying evic-0.1-py3.6.egg to /usr/local/lib/python3.6/dist-packages
evic 0.1 is already the active version in easy-install.pth
Installing evic script to /usr/local/bin
Installing evic-convert script to /usr/local/bin
Installing evic-usb script to /usr/local/bin
Installed /usr/local/lib/python3.6/dist-packages/evic-0.1-py3.6.egg
Processing dependencies for evic==0.1
Searching for Pillow==8.4.0
Best match: Pillow 8.4.0
Processing Pillow-8.4.0-py3.6-linux-aarch64.egg
Pillow 8.4.0 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/Pillow-8.4.0-py3.6-linux-aarch64.egg
Searching for click==8.0.3
Best match: click 8.0.3
Processing click-8.0.3-py3.6.egg
click 8.0.3 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/click-8.0.3-py3.6.egg
Searching for bitarray==2.3.4
Best match: bitarray 2.3.4
Processing bitarray-2.3.4-py3.6-linux-aarch64.egg
bitarray 2.3.4 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/bitarray-2.3.4-py3.6-linux-aarch64.egg
Searching for binstruct==1.0.1
Best match: binstruct 1.0.1
Processing binstruct-1.0.1-py3.6.egg
binstruct 1.0.1 is already the active version in easy-install.pth
Using /usr/local/lib/python3.6/dist-packages/binstruct-1.0.1-py3.6.egg
Searching for importlib-metadata==4.8.1
Best match: importlib-metadata 4.8.1
Adding importlib-metadata 4.8.1 to easy-install.pth file
Using /usr/local/lib/python3.6/dist-packages
Searching for zipp==3.6.0
Best match: zipp 3.6.0
Adding zipp 3.6.0 to easy-install.pth file
Using /usr/local/lib/python3.6/dist-packages
Searching for typing-extensions==3.7.4.3
Best match: typing-extensions 3.7.4.3
Adding typing-extensions 3.7.4.3 to easy-install.pth file
Using /usr/local/lib/python3.6/dist-packages
Finished processing dependencies for evic==0.1
evic-usb upload iStick_Pico_V1.03.bin
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: REDACTED
Reading data flash...OK
Verifying data flash...OK
Device name: iStick Pico
Firmware version: 1.01
Hardware version: 1.00
Verifying APROM...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing APROM...OK
evic-usb upload-logo ../Desktop/sbuAwkN.png
Finding device...OK
Manufacturer: Nuvoton
Product: HID Transfer
Serial No: REDACTED
Reading data flash...OK
Device name: iStick Pico
Firmware version: 1.03
Hardware version: 1.00
Converting logo...OK
Writing data flash...OK
Restarting the device...OK
Finding device...OK
Writing logo...OK
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.