Я недавно выпустил версию 0.10 pylibftdi - "минимального питонного интерфейса для libftdi", предназначенного для наиболее лёгкого (из всех возможных?) способов работы с чипами и модулями FTDI имитирующими последовательный порт при подключении к usb. Версия 0.10 добавляет несколько новых возможностей и исправляет несколько ошибок.
Долгое время я был в плену заблуждения, что номера версий должны соответствовать правилам десятичной системы, и что после версии 0.9 должна идти версия 1.0. Но, поскольку, я хочу, чтобы версия 1.0 была стабильной (а нынешний статус я всё ещё рассматриваю как "бета"), я попал в тупик. В итоге я решил, что новая версия будет иметь номер 0.10. В любом случае, я всё ещё хочу улучшить документацию (и не только) перед выпуском 1.0.
Изменения в 0.10
- Запуск юнит-тестов теперь проще благодаря некоторым реорганизациям - просто выполните python -m unittest discover в папке верхнего уровня
- Поддержка устройств FT232H - это другой PID (USB product ID) для тех устройств, которые я раньше использовал - в основном FT245BM/RL, FT232R/RL. Все эти устройства имели PID 0x6001, тогда как новый FT232H имел PID 0x6014. Я экспериментировал с дополнительными параметрами для определения VID и PID целевого устройства, но это оказалось слишком сложно для конечного пользователя, а я бы хотел, чтобы pylibftdi можно было бы использовать с параметрами по умолчанию для большинства основных операций. В итоге я взял два списка (USB_VID_LIST,USB_PID_LIST) и код поиска устройства должен просто провести итерации по их декартову произведению (то есть вложенный цикл, реализованный через itertools.product). Так что добавление новых PID в будущем будет простым - надо лишь добавить его в USB_VID_LIST, и тогда устройство может быть открыто без параметров конструктором Device() если на USB шине есть только FTDI устройство.
- Устройство при открытии устанавливается в параллельный режим. В рассылке libftdi был спор о том, как эту логику реализовать, но в pylibftdi это сделать достаточно легко. Вообще это позволяет избежать неопределённого состояния, так как раньше, если предыдущее приложение, которое работало с устройством в режиме BitBang, то новое открытие устройства при помощи Device() отрывало его тоже в режиме BitBang, а не в ожидаемом параллельном режиме (для устройств, которые поддерживают оба режима).
- В конструктор Device() добавлен параметр 'buffer_size' (по умолчанию равен 0, что соответствует поведению раньше), который разбивает на куски операции чтения и записи. Это позволяет избежать проблемы, когда вызов (например) dev.write ('hello' * 100000) при передаче 9600 занимал невероятно много времени, а так как он протекал в контексте библиотеки (через вызов ctypes), его нельзя было прервать при помощи Ctrl-C
- Убрана устаревшая возможность использовать Driver() как синоним Device()
- Обновлено: Я уже сделал два дополнительных релиза в последние часы - текущая версия - 0.10.2. Одним из значимых изменений является то, что теперь субпакет exmaples включён в sdist, так что python -m pylibftdi.examples.led_flash будет работать, если у Вас диод подключён к D0 на устройстве.
Планы на будущее: причесать, добавить примеры, улучшить документацию...