mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-26 12:14:56 +00:00
18 files changed
+75
-104
No files matched your search
+2
-2
@@ -1178,7 +1178,7 @@ static bool cyw_spi_write(unsigned int f, uint32_t addr, void *data,
|
||||
uint16_t len) {
|
||||
struct mg_tcpip_driver_cyw_data *d =
|
||||
(struct mg_tcpip_driver_cyw_data *) s_ifp->driver_data;
|
||||
struct mg_tcpip_spi_ *s = (struct mg_tcpip_spi_ *) d->bus;
|
||||
struct mg_tcpip_spi *s = (struct mg_tcpip_spi *) d->bus;
|
||||
uint32_t hdr = CYW_SPID_WR | CYW_SPID_INC | CYW_SPID_FUNC(f) |
|
||||
CYW_SPID_ADDR(addr) | CYW_SPID_LEN(len); // gSPI header
|
||||
// TODO(scaprile): check spin in between and timeout values, return false
|
||||
@@ -1208,7 +1208,7 @@ static void cyw_spi_read(unsigned int f, uint32_t addr, void *data,
|
||||
uint16_t len) {
|
||||
struct mg_tcpip_driver_cyw_data *d =
|
||||
(struct mg_tcpip_driver_cyw_data *) s_ifp->driver_data;
|
||||
struct mg_tcpip_spi_ *s = (struct mg_tcpip_spi_ *) d->bus;
|
||||
struct mg_tcpip_spi *s = (struct mg_tcpip_spi *) d->bus;
|
||||
uint32_t padding =
|
||||
f == CYW_SPID_FUNC_CHIP
|
||||
? 4
|
||||
|
||||
@@ -4,14 +4,6 @@
|
||||
((defined(MG_ENABLE_DRIVER_CYW) && MG_ENABLE_DRIVER_CYW) || \
|
||||
(defined(MG_ENABLE_DRIVER_CYW_SDIO) && MG_ENABLE_DRIVER_CYW_SDIO))
|
||||
|
||||
struct mg_tcpip_spi_ {
|
||||
void *spi; // Opaque SPI bus descriptor
|
||||
void (*begin)(void *); // SPI begin: slave select low
|
||||
void (*end)(void *); // SPI end: slave select high
|
||||
void (*txn)(void *, uint8_t *, uint8_t *,
|
||||
size_t len); // SPI transaction: write-read len bytes
|
||||
};
|
||||
|
||||
struct mg_tcpip_driver_cyw_firmware {
|
||||
const uint8_t *code_addr;
|
||||
size_t code_len;
|
||||
|
||||
@@ -439,7 +439,7 @@ static size_t st67w6_spi_poll(uint8_t *write, uint8_t *read) {
|
||||
struct mg_tcpip_driver_st67w6_data *d =
|
||||
(struct mg_tcpip_driver_st67w6_data *) s_ifp->driver_data;
|
||||
struct spi_hdr *th, *rh = (struct spi_hdr *) read;
|
||||
struct mg_tcpip_spi_ *s = (struct mg_tcpip_spi_ *) d->spi;
|
||||
struct mg_tcpip_spi *s = (struct mg_tcpip_spi *) d->spi;
|
||||
size_t padded;
|
||||
unsigned int times;
|
||||
|
||||
|
||||
@@ -3,14 +3,6 @@
|
||||
#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_ST67W6) && \
|
||||
MG_ENABLE_DRIVER_ST67W6
|
||||
|
||||
struct mg_tcpip_spi_ {
|
||||
void *spi; // Opaque SPI bus descriptor
|
||||
void (*begin)(void *); // SPI begin: slave select low
|
||||
void (*end)(void *); // SPI end: slave select high
|
||||
void (*txn)(void *, uint8_t *, uint8_t *,
|
||||
size_t len); // SPI transaction: write-read len bytes
|
||||
};
|
||||
|
||||
struct mg_tcpip_driver_st67w6_data {
|
||||
struct mg_wifi_data wifi;
|
||||
void *spi;
|
||||
|
||||
+3
-7
@@ -4,16 +4,12 @@
|
||||
|
||||
static void w5100_txn(struct mg_tcpip_spi *s, uint16_t addr, bool wr, void *buf,
|
||||
size_t len) {
|
||||
size_t i;
|
||||
uint8_t *p = (uint8_t *) buf;
|
||||
uint8_t control = wr ? 0xF0 : 0x0F;
|
||||
uint8_t cmd[] = {control, (uint8_t) (addr >> 8), (uint8_t) (addr & 255)};
|
||||
s->begin(s->spi);
|
||||
for (i = 0; i < sizeof(cmd); i++) s->txn(s->spi, cmd[i]);
|
||||
for (i = 0; i < len; i++) {
|
||||
uint8_t r = s->txn(s->spi, p[i]);
|
||||
if (!wr) p[i] = r;
|
||||
}
|
||||
s->txn(s->spi, cmd, NULL, sizeof(cmd));
|
||||
if (wr) s->txn(s->spi, (uint8_t *) buf, NULL, len);
|
||||
if (!wr) s->txn(s->spi, NULL, (uint8_t *) buf, len);
|
||||
s->end(s->spi);
|
||||
}
|
||||
|
||||
|
||||
+3
-7
@@ -6,16 +6,12 @@ enum { W5500_CR = 0, W5500_S0 = 1, W5500_TX0 = 2, W5500_RX0 = 3 };
|
||||
|
||||
static void w5500_txn(struct mg_tcpip_spi *s, uint8_t block, uint16_t addr,
|
||||
bool wr, void *buf, size_t len) {
|
||||
size_t i;
|
||||
uint8_t *p = (uint8_t *) buf;
|
||||
uint8_t cmd[] = {(uint8_t) (addr >> 8), (uint8_t) (addr & 255),
|
||||
(uint8_t) ((block << 3) | (wr ? 4 : 0))};
|
||||
s->begin(s->spi);
|
||||
for (i = 0; i < sizeof(cmd); i++) s->txn(s->spi, cmd[i]);
|
||||
for (i = 0; i < len; i++) {
|
||||
uint8_t r = s->txn(s->spi, p[i]);
|
||||
if (!wr) p[i] = r;
|
||||
}
|
||||
s->txn(s->spi, cmd, NULL, sizeof(cmd));
|
||||
if (wr) s->txn(s->spi, (uint8_t *) buf, NULL, len);
|
||||
if (!wr) s->txn(s->spi, NULL, (uint8_t *) buf, len);
|
||||
s->end(s->spi);
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -122,10 +122,11 @@ extern struct mg_tcpip_driver mg_tcpip_driver_atcmd;
|
||||
|
||||
// Drivers that require SPI, can use this SPI abstraction
|
||||
struct mg_tcpip_spi {
|
||||
void *spi; // Opaque SPI bus descriptor
|
||||
void (*begin)(void *); // SPI begin: slave select low
|
||||
void (*end)(void *); // SPI end: slave select high
|
||||
uint8_t (*txn)(void *, uint8_t); // SPI transaction: write 1 byte, read reply
|
||||
void *spi; // Opaque SPI bus descriptor
|
||||
void (*begin)(void *); // SPI begin: slave select active
|
||||
void (*end)(void *); // SPI end: slave select inactive
|
||||
void (*txn)(void *, uint8_t *write, uint8_t *read,
|
||||
size_t len); // SPI transaction: write-read len bytes
|
||||
};
|
||||
|
||||
// Alignment and memory section requirements
|
||||
|
||||
Reference in new issue
Block a user