88#include " zephyrInternal.h"
99#include < zephyr/kernel.h>
1010
11- arduino::ZephyrSPI::ZephyrSPI (const struct device *spi) : spi_dev(spi) {}
11+ arduino::ZephyrSPI::ZephyrSPI (const struct device *spi) : spi_dev(spi) {
12+ }
1213
1314uint8_t arduino::ZephyrSPI::transfer (uint8_t data) {
14- int ret;
15- uint8_t rx;
16- const struct spi_buf tx_buf = {.buf = &data, .len = sizeof (data)};
17- const struct spi_buf_set tx_buf_set = {
18- .buffers = &tx_buf,
19- .count = 1 ,
20- };
21- const struct spi_buf rx_buf = {.buf = &rx, .len = sizeof (rx)};
22- const struct spi_buf_set rx_buf_set = {
23- .buffers = &rx_buf,
24- .count = 1 ,
25- };
26-
27- ret = spi_transceive (spi_dev, &config, &tx_buf_set, &rx_buf_set);
28- if (ret < 0 ) {
29- return 0 ;
30- }
31-
32- return rx;
15+ int ret;
16+ uint8_t rx;
17+ const struct spi_buf tx_buf = {.buf = &data, .len = sizeof (data)};
18+ const struct spi_buf_set tx_buf_set = {
19+ .buffers = &tx_buf,
20+ .count = 1 ,
21+ };
22+ const struct spi_buf rx_buf = {.buf = &rx, .len = sizeof (rx)};
23+ const struct spi_buf_set rx_buf_set = {
24+ .buffers = &rx_buf,
25+ .count = 1 ,
26+ };
27+
28+ ret = spi_transceive (spi_dev, &config, &tx_buf_set, &rx_buf_set);
29+ if (ret < 0 ) {
30+ return 0 ;
31+ }
32+
33+ return rx;
3334}
3435
3536uint16_t arduino::ZephyrSPI::transfer16 (uint16_t data) {
36- int ret;
37- uint16_t rx;
38- const struct spi_buf tx_buf = {.buf = &data, .len = sizeof (data)};
39- const struct spi_buf_set tx_buf_set = {
40- .buffers = &tx_buf,
41- .count = 1 ,
42- };
43- const struct spi_buf rx_buf = {.buf = &rx, .len = sizeof (rx)};
44- const struct spi_buf_set rx_buf_set = {
45- .buffers = &rx_buf,
46- .count = 1 ,
47- };
48-
49- ret = spi_transceive (spi_dev, &config16, &tx_buf_set, &rx_buf_set);
50- if (ret < 0 ) {
51- return 0 ;
52- }
53-
54- return rx;
37+ int ret;
38+ uint16_t rx;
39+ const struct spi_buf tx_buf = {.buf = &data, .len = sizeof (data)};
40+ const struct spi_buf_set tx_buf_set = {
41+ .buffers = &tx_buf,
42+ .count = 1 ,
43+ };
44+ const struct spi_buf rx_buf = {.buf = &rx, .len = sizeof (rx)};
45+ const struct spi_buf_set rx_buf_set = {
46+ .buffers = &rx_buf,
47+ .count = 1 ,
48+ };
49+
50+ ret = spi_transceive (spi_dev, &config16, &tx_buf_set, &rx_buf_set);
51+ if (ret < 0 ) {
52+ return 0 ;
53+ }
54+
55+ return rx;
5556}
5657
5758void arduino::ZephyrSPI::transfer (void *buf, size_t count) {
58- int ret;
59- const struct spi_buf tx_buf = {.buf = buf, .len = count};
60- const struct spi_buf_set tx_buf_set = {
61- .buffers = &tx_buf,
62- .count = 1 ,
63- };
64-
65- uint8_t rx[count];
66- const struct spi_buf rx_buf = {.buf = &rx, .len = count};
67- const struct spi_buf_set rx_buf_set = {
68- .buffers = &rx_buf,
69- .count = 1 ,
70- };
71-
72- spi_transceive (spi_dev, &config, &tx_buf_set, &rx_buf_set);
73- memcpy (buf, rx, count);
59+ int ret;
60+ const struct spi_buf tx_buf = {.buf = buf, .len = count};
61+ const struct spi_buf_set tx_buf_set = {
62+ .buffers = &tx_buf,
63+ .count = 1 ,
64+ };
65+
66+ uint8_t rx[count];
67+ const struct spi_buf rx_buf = {.buf = &rx, .len = count};
68+ const struct spi_buf_set rx_buf_set = {
69+ .buffers = &rx_buf,
70+ .count = 1 ,
71+ };
72+
73+ spi_transceive (spi_dev, &config, &tx_buf_set, &rx_buf_set);
74+ memcpy (buf, rx, count);
7475}
7576
7677void arduino::ZephyrSPI::usingInterrupt (int interruptNumber) {
@@ -84,41 +85,52 @@ void arduino::ZephyrSPI::notUsingInterrupt(int interruptNumber) {
8485#endif
8586
8687void arduino::ZephyrSPI::beginTransaction (SPISettings settings) {
87- memset (&config, 0 , sizeof (config));
88- memset (&config16, 0 , sizeof (config16));
89- config.frequency = settings.getClockFreq () > SPI_MIN_CLOCK_FEQUENCY ? settings.getClockFreq () : SPI_MIN_CLOCK_FEQUENCY;
90- config16.frequency = config.frequency ;
91-
92- auto mode = SPI_MODE_CPOL | SPI_MODE_CPHA;
93- switch (settings.getDataMode ()) {
94- case SPI_MODE0:
95- mode = 0 ; break ;
96- case SPI_MODE1:
97- mode = SPI_MODE_CPHA; break ;
98- case SPI_MODE2:
99- mode = SPI_MODE_CPOL; break ;
100- case SPI_MODE3:
101- mode = SPI_MODE_CPOL | SPI_MODE_CPHA; break ;
102- }
103- config.operation = SPI_WORD_SET (8 ) | (settings.getBitOrder () == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) | mode;
104- config16.operation = SPI_WORD_SET (16 ) | (settings.getBitOrder () == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) | mode;
88+ memset (&config, 0 , sizeof (config));
89+ memset (&config16, 0 , sizeof (config16));
90+ config.frequency = settings.getClockFreq () > SPI_MIN_CLOCK_FEQUENCY ? settings.getClockFreq () :
91+ SPI_MIN_CLOCK_FEQUENCY;
92+ config16.frequency = config.frequency ;
93+
94+ auto mode = SPI_MODE_CPOL | SPI_MODE_CPHA;
95+ switch (settings.getDataMode ()) {
96+ case SPI_MODE0:
97+ mode = 0 ;
98+ break ;
99+ case SPI_MODE1:
100+ mode = SPI_MODE_CPHA;
101+ break ;
102+ case SPI_MODE2:
103+ mode = SPI_MODE_CPOL;
104+ break ;
105+ case SPI_MODE3:
106+ mode = SPI_MODE_CPOL | SPI_MODE_CPHA;
107+ break ;
108+ }
109+ config.operation = SPI_WORD_SET (8 ) |
110+ (settings.getBitOrder () == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) |
111+ mode;
112+ config16.operation =
113+ SPI_WORD_SET (16 ) |
114+ (settings.getBitOrder () == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) | mode;
105115}
106116
107117void arduino::ZephyrSPI::endTransaction (void ) {
108- spi_release (spi_dev, &config);
118+ spi_release (spi_dev, &config);
109119}
110120
111- void arduino::ZephyrSPI::attachInterrupt () {}
112-
113- void arduino::ZephyrSPI::detachInterrupt () {}
121+ void arduino::ZephyrSPI::attachInterrupt () {
122+ }
114123
124+ void arduino::ZephyrSPI::detachInterrupt () {
125+ }
115126
116127void arduino::ZephyrSPI::begin () {
117- beginTransaction (SPISettings ());
118- endTransaction ();
128+ beginTransaction (SPISettings ());
129+ endTransaction ();
119130}
120131
121- void arduino::ZephyrSPI::end () {}
132+ void arduino::ZephyrSPI::end () {
133+ }
122134
123135#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), spis)
124136#if (DT_PROP_LEN(DT_PATH(zephyr_user), spis) > 1)
0 commit comments