/
electronic_modules
/
USB
Обзор
Документация
Войти
/
electronic_modules
/
USB
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
USB2.cpp
142 строки
4 KB
electronic_modules
USB
21 окт 2025, 12:31
21 окт 2025, 12:31
d349ad5
Код
Авторство
О чём код?
#include "USB2.h" USB2::USB2(int USB2_DATA_IN_P, int USB2_DATA_IN_M, int USB2_DATA_OUT_P, int USB2_DATA_OUT_M) { _USB2_DATA_IN_P = USB2_DATA_IN_P; _USB2_DATA_IN_M = USB2_DATA_IN_M; _USB2_DATA_OUT_P = USB2_DATA_OUT_P; _USB2_DATA_OUT_M = USB2_DATA_OUT_M; _deviceConnected = false; _initialized = false; _highSpeedMode = false; } void USB2::initial() { // Initialize USB 2.0 pins pinMode(_USB2_DATA_IN_P, INPUT_PULLUP); pinMode(_USB2_DATA_IN_M, INPUT_PULLUP); pinMode(_USB2_DATA_OUT_P, OUTPUT); pinMode(_USB2_DATA_OUT_M, OUTPUT); // USB 2.0 initialization sequence delay(100); usb2Reset(); // Try to negotiate high speed mode _highSpeedMode = negotiateHighSpeed(); _initialized = true; Serial.println(F("USB 2.0 Initialized")); Serial.print(F("Mode: ")); Serial.println(_highSpeedMode ? F("High Speed") : F("Full Speed")); } bool USB2::deviceDetect() { if (!_initialized) return false; // USB 2.0 device detection with chirp sequence bool inPState = digitalRead(_USB2_DATA_IN_P); bool inMState = digitalRead(_USB2_DATA_IN_M); _deviceConnected = (inPState != inMState); if (_deviceConnected) { Serial.println(F("USB 2.0 Device Detected")); } return _deviceConnected; } bool USB2::isConnected() { return _deviceConnected; } bool USB2::dataAvailable() { if (!_deviceConnected) return false; // Check if data is available on input lines return digitalRead(_USB2_DATA_IN_P) == LOW || digitalRead(_USB2_DATA_IN_M) == LOW; } uint8_t USB2::readData() { // FIXED: Changed USB:: to USB2:: if (!_deviceConnected) return 0; // USB 2.0 data reading implementation uint8_t data = 0; // This would involve differential signaling reading return data; } void USB2::writeData(uint8_t data) { if (!_deviceConnected) return; // USB 2.0 data writing with differential signaling digitalWrite(_USB2_DATA_OUT_P, (data & 0x01) ? HIGH : LOW); digitalWrite(_USB2_DATA_OUT_M, (data & 0x01) ? LOW : HIGH); Serial.print(F("USB2 Write: 0x")); Serial.println(data, HEX); } void USB2::bulkTransfer(uint8_t* data, size_t length) { if (!_deviceConnected || !_highSpeedMode) return; startBulkTransfer(); for (size_t i = 0; i < length; i++) { writeData(data[i]); delayMicroseconds(2); // High speed timing } endBulkTransfer(); Serial.print(F("USB2 Bulk Transfer: ")); Serial.print(length); Serial.println(F(" bytes")); } bool USB2::isHighSpeed() { return _highSpeedMode; } void USB2::finish() { _deviceConnected = false; _initialized = false; _highSpeedMode = false; // Reset all pins pinMode(_USB2_DATA_IN_P, INPUT); pinMode(_USB2_DATA_IN_M, INPUT); pinMode(_USB2_DATA_OUT_P, INPUT); pinMode(_USB2_DATA_OUT_M, INPUT); Serial.println(F("USB 2.0 Finished")); } void USB2::usb2Reset() { // USB 2.0 reset sequence digitalWrite(_USB2_DATA_OUT_P, LOW); digitalWrite(_USB2_DATA_OUT_M, LOW); delay(20); pinMode(_USB2_DATA_OUT_P, INPUT_PULLUP); pinMode(_USB2_DATA_OUT_M, INPUT_PULLUP); } bool USB2::negotiateHighSpeed() { // High speed negotiation sequence // This is simplified - real implementation would be more complex return digitalRead(_USB2_DATA_IN_P) == HIGH && digitalRead(_USB2_DATA_IN_M) == LOW; } void USB2::startBulkTransfer() { // Start bulk transfer sequence digitalWrite(_USB2_DATA_OUT_P, HIGH); digitalWrite(_USB2_DATA_OUT_M, LOW); } void USB2::endBulkTransfer() { // End bulk transfer sequence digitalWrite(_USB2_DATA_OUT_P, LOW); digitalWrite(_USB2_DATA_OUT_M, LOW); }