1.1 --- a/pkg/devices/lib/spi/include/spi-gpio.h Tue Nov 07 19:20:32 2023 +0100
1.2 +++ b/pkg/devices/lib/spi/include/spi-gpio.h Thu Nov 09 18:40:31 2023 +0100
1.3 @@ -21,32 +21,47 @@
1.4
1.5 #pragma once
1.6
1.7 -#include <l4/devices/gpio.h>
1.8 #include <stdint.h>
1.9
1.10
1.11
1.12 #ifdef __cplusplus
1.13
1.14 -/* SPI peripheral device. */
1.15 +#include <l4/devices/gpio.h>
1.16 +#include <l4/devices/spi.h>
1.17
1.18 -class Spi_gpio
1.19 +/* SPI channel abstraction. */
1.20 +
1.21 +class Spi_gpio : public Spi_channel_base
1.22 {
1.23 + uint64_t _frequency;
1.24 Hw::Gpio_chip *_clock_device;
1.25 int _clock_pin;
1.26 Hw::Gpio_chip *_data_device;
1.27 int _data_pin;
1.28 Hw::Gpio_chip *_enable_device;
1.29 int _enable_pin;
1.30 - uint64_t _frequency;
1.31 + Hw::Gpio_chip *_control_device;
1.32 + int _control_pin;
1.33
1.34 public:
1.35 + explicit Spi_gpio(uint64_t frequency,
1.36 + Hw::Gpio_chip *clock_device, int clock_pin,
1.37 + Hw::Gpio_chip *data_device, int data_pin,
1.38 + Hw::Gpio_chip *enable_device, int enable_pin,
1.39 + Hw::Gpio_chip *control_device = NULL, int control_pin = 0);
1.40 +
1.41 explicit Spi_gpio(Hw::Gpio_chip *clock_device, int clock_pin,
1.42 Hw::Gpio_chip *data_device, int data_pin,
1.43 Hw::Gpio_chip *enable_device, int enable_pin,
1.44 - uint64_t frequency = 0);
1.45 + Hw::Gpio_chip *control_device = NULL, int control_pin = 0);
1.46 +
1.47 + uint32_t send(uint32_t bytes, const uint8_t data[]);
1.48
1.49 - void send(int bytes, const uint8_t data[]);
1.50 + uint32_t send_dc(uint32_t bytes, const uint8_t data[], const int dc[]);
1.51 +
1.52 + uint32_t send_units(uint32_t bytes, const uint8_t data[], uint8_t unit_size,
1.53 + uint8_t char_size);
1.54 };
1.55
1.56 #endif /* __cplusplus */
1.57 @@ -57,11 +72,18 @@
1.58
1.59 EXTERN_C_BEGIN
1.60
1.61 -void *spi_gpio_get_channel(void *clock_chip, int clock_pin,
1.62 +void *spi_gpio_get_channel(uint64_t frequency,
1.63 + void *clock_chip, int clock_pin,
1.64 void *data_chip, int data_pin,
1.65 void *enable_chip, int enable_pin,
1.66 - uint64_t frequency);
1.67 + void *control_chip, int control_pin);
1.68 +
1.69 +uint32_t spi_gpio_send(void *channel, uint32_t bytes, const uint8_t data[]);
1.70
1.71 -void spi_gpio_send(void *channel, int bytes, const uint8_t data[]);
1.72 +uint32_t spi_gpio_send_dc(void *channel, uint32_t bytes, const uint8_t data[],
1.73 + const int dc[]);
1.74 +
1.75 +uint32_t spi_gpio_send_units(void *channel, uint32_t bytes, const uint8_t data[],
1.76 + uint8_t unit_size, uint8_t char_size);
1.77
1.78 EXTERN_C_END