210 lines
5.5 KiB
C++
210 lines
5.5 KiB
C++
#include "mcp2521_hardware_handle.hpp"
|
|
|
|
#ifdef ESP_PLATFORM
|
|
#include "mcp2521_hardware_esp.hpp"
|
|
|
|
const uint8_t null_buffer[32] = {0};
|
|
|
|
void MCP2521_HardwareHandle_ESP::spi_transmit(spi_transaction_t *t) {
|
|
xSemaphoreTake(spiMutex, portMAX_DELAY);
|
|
spi_device_transmit(this->spi_device_handle, t);
|
|
xSemaphoreGive(spiMutex);
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::execute(uint8_t cmd) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = 0,
|
|
.length = 0,
|
|
.rxlength = 0,
|
|
.tx_buffer = NULL,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 0,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::execute(uint8_t cmd, uint8_t address) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = address,
|
|
.length = 0,
|
|
.rxlength = 0,
|
|
.tx_buffer = NULL,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 8,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::read(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = address,
|
|
.length = 8*length,
|
|
.rxlength = 8*length,
|
|
.tx_buffer = null_buffer,
|
|
.rx_buffer = data
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 8,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::read(uint8_t cmd, uint8_t *data, size_t length) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = 0,
|
|
.length = 8*length,
|
|
.rxlength = 8*length,
|
|
.tx_buffer = null_buffer,
|
|
.rx_buffer = data
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 0,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
uint8_t MCP2521_HardwareHandle_ESP::read(uint8_t cmd, uint8_t address) {
|
|
uint8_t result = 0;
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = address,
|
|
.length = 8,
|
|
.rxlength = 8,
|
|
.tx_buffer = null_buffer,
|
|
.rx_buffer = &result
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 8,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
return result;
|
|
}
|
|
|
|
uint8_t MCP2521_HardwareHandle_ESP::read(uint8_t cmd) {
|
|
uint8_t result;
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = 0,
|
|
.length = 8,
|
|
.rxlength = 8,
|
|
.tx_buffer = null_buffer,
|
|
.rx_buffer = &result
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 0,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
return result;
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::write(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) {
|
|
uint8_t result;
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = address,
|
|
.length = 8*length,
|
|
.rxlength = 0,
|
|
.tx_buffer = data,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 8,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::write(uint8_t cmd, uint8_t *data, size_t length) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = 0,
|
|
.length = 8*length,
|
|
.rxlength = 0,
|
|
.tx_buffer = data,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 0,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::write(uint8_t cmd, uint8_t data, uint8_t address) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = address,
|
|
.length = 8,
|
|
.rxlength = 0,
|
|
.tx_buffer = &data,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 8,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESP::write(uint8_t cmd, uint8_t data) {
|
|
spi_transaction_ext_t t = {
|
|
.base = {
|
|
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
|
|
.cmd = cmd,
|
|
.addr = 0,
|
|
.length = 8,
|
|
.rxlength = 0,
|
|
.tx_buffer = &data,
|
|
.rx_buffer = NULL
|
|
},
|
|
.command_bits = 8,
|
|
.address_bits = 0,
|
|
.dummy_bits = 0,
|
|
};
|
|
|
|
spi_transmit((spi_transaction_t*)(&t));
|
|
}
|
|
|
|
#endif
|