# libps2000_re (Reverse Engineered) Полная реконструкция драйвера `libps2000.so` для осциллографов PicoScope 2000 series на языке C. ## Архитектура Проект разделен на функциональные модули, восстанавливающие логику оригинальной C++ библиотеки: - **`ps2000_core.c`**: Управление жизненным циклом контекста, глобальное состояние, подсчет ссылок. - **`ps2000_ops.c`**: Диспетчер операций (реконструкция `sub_237C0`), таблица виртуальных методов. - **`ps2000_usb.c`**: Транспортный уровень на базе `libusb-1.0`. - **`ps2000_hw.c`**: Уровень абстракции оборудования (HAL), IO-команды, SPI, FPGA. - **`ps2000_math.c`**: Централизованная математика (SSE/SSE2 паттерны, быстрое округление через 2^52). - **`ps2000_osc.c`**: Осциллограф, расчет таймбаз, обработка данных. - **`ps2000_gen.c`**: Генератор сигналов (DDS/AWG), встроенные формы волн. - **`ps2000_cfg.c`**: Чтение EEPROM, калибровка, информация об устройстве. - **`ps2000_trig.c`**: Валидация и расчет позиции триггера. - **`ps2000_stream.c`**: Стриминг, кольцевой буфер, обработка raw-данных. - **`ps2000_thread.c`**: Обертка над pthreads (замена C++ `IRunnable`). - **`ps2000_fw.c`**: Загрузчик прошивок (протокол Cypress Anchor). - **`ps2000_init_tbl.c`**: Парсер бинарного скрипта инициализации регистров. - **`ps2000_log.c`**: Подсистема логирования с поддержкой callback. ## Сборка ```bash make