LoRaWANCH341 Library
Loading...
Searching...
No Matches
CH341SPI.hpp
Go to the documentation of this file.
1
29#pragma once
30
31#include "SPIInterface.hpp"
32#include <libusb.h>
33#include <vector>
34#include <string>
35#include <thread>
36
41class CH341SPI : public SPIInterface {
42public:
48 CH341SPI(int device_index = 0, bool lsb_first = false);
49
53 ~CH341SPI();
54
59 bool open();
60
64 void close();
65
72 std::vector<uint8_t> transfer(const std::vector<uint8_t>& write_data, size_t read_length = 0);
73
80 bool digitalWrite(uint8_t pin, bool value);
81
87 bool digitalRead(uint8_t pin);
88
95 bool pinMode(uint8_t pin, uint8_t mode);
96
104 bool configureInterrupt(uint8_t pin, bool enable) override {
105 // CH341 doesn't support native interrupts, would need external handling
106 return false;
107 }
108
115 bool setInterruptCallback(InterruptCallback callback) override;
116
123 bool enableInterrupt(bool enable) override;
124
130 bool isActive() const override {
131 return is_open;
132 }
133
134 // Constants for CH341 pins
135 static const uint8_t PIN_D0 = 0x01;
136 static const uint8_t PIN_D1 = 0x02;
137 static const uint8_t PIN_D2 = 0x04;
138 static const uint8_t PIN_D3 = 0x08;
139 static const uint8_t PIN_D4 = 0x10;
140 static const uint8_t PIN_D5 = 0x20;
141
142private:
143 libusb_device_handle *device;
144 libusb_context *context;
147 bool is_open;
149 uint8_t _gpio_output;
152 std::thread interruptThread;
154
159 bool configStream();
160
166 bool enablePins(bool enable);
167
173 uint8_t swapBits(uint8_t byte);
174
179};
A class to interface with the CH341 USB to SPI adapter.
Definition CH341SPI.hpp:41
uint8_t swapBits(uint8_t byte)
Swaps the bits of a byte.
Definition CH341SPI.cpp:259
void close()
Closes the SPI connection.
Definition CH341SPI.cpp:168
int device_index
Index of the CH341 device.
Definition CH341SPI.hpp:145
uint8_t _gpio_direction
Direction of GPIO pins.
Definition CH341SPI.hpp:148
uint8_t _gpio_output
Output state of GPIO pins.
Definition CH341SPI.hpp:149
bool is_open
Flag to indicate whether the device is open and active.
Definition CH341SPI.hpp:147
bool pinMode(uint8_t pin, uint8_t mode)
Sets the mode of a specified pin.
Definition CH341SPI.cpp:470
static const uint8_t PIN_D4
Definition CH341SPI.hpp:139
static const uint8_t PIN_D1
Definition CH341SPI.hpp:136
libusb_context * context
Context for libusb.
Definition CH341SPI.hpp:144
bool threadRunning
Flag to indicate if the interrupt monitoring thread is running.
Definition CH341SPI.hpp:153
bool configStream()
Configures the SPI stream.
Definition CH341SPI.cpp:186
bool digitalRead(uint8_t pin)
Reads a digital value from a specified pin.
Definition CH341SPI.cpp:421
void interruptMonitoringThread()
Thread function for monitoring interrupts.
Definition CH341SPI.cpp:527
bool enableInterrupt(bool enable) override
Enable or disable interrupts.
Definition CH341SPI.cpp:504
static const uint8_t PIN_D5
Definition CH341SPI.hpp:140
bool setInterruptCallback(InterruptCallback callback) override
Set interrupt callback.
Definition CH341SPI.cpp:498
bool digitalWrite(uint8_t pin, bool value)
Writes a digital value to a specified pin.
Definition CH341SPI.cpp:389
bool enablePins(bool enable)
Enables or disables the pins.
Definition CH341SPI.cpp:219
bool open()
Opens the SPI connection.
Definition CH341SPI.cpp:59
std::vector< uint8_t > transfer(const std::vector< uint8_t > &write_data, size_t read_length=0)
Transfers data over SPI.
Definition CH341SPI.cpp:273
static const uint8_t PIN_D0
Definition CH341SPI.hpp:135
bool configureInterrupt(uint8_t pin, bool enable) override
Configure interrupt settings for a pin.
Definition CH341SPI.hpp:104
static const uint8_t PIN_D3
Definition CH341SPI.hpp:138
bool interruptEnabled
Flag to indicate if interrupts are enabled.
Definition CH341SPI.hpp:151
std::thread interruptThread
Thread for monitoring interrupts.
Definition CH341SPI.hpp:152
InterruptCallback interruptCallback
Callback function for interrupts.
Definition CH341SPI.hpp:150
libusb_device_handle * device
Handle to the libusb device.
Definition CH341SPI.hpp:143
bool lsb_first
Flag to indicate if LSB should be sent first.
Definition CH341SPI.hpp:146
bool isActive() const override
Check if the device is active/connected.
Definition CH341SPI.hpp:130
static const uint8_t PIN_D2
Definition CH341SPI.hpp:137
~CH341SPI()
Destructor for CH341SPI.
Definition CH341SPI.cpp:36
Abstract interface for SPI communication.
Definition SPIInterface.hpp:21
std::function< void(void)> InterruptCallback
Definition SPIInterface.hpp:89