59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
#ifdef ESP_PLATFORM
|
|
#include "freertos/FreeRTOS.h"
|
|
|
|
#include "mcp2521_hardware_esp_bus.hpp"
|
|
#include "mcp2521_hardware_esp.hpp"
|
|
|
|
MCP2521_HardwareHandle_ESPBus::MCP2521_HardwareHandle_ESPBus(
|
|
QueueHandle_t send_queue,
|
|
spi_host_device_t spi_host,
|
|
spi_bus_config_t * bus_config,
|
|
gpio_num_t cs,
|
|
gpio_num_t int_pin
|
|
) : MCP2521_HardwareHandle_ESP(spi_host, bus_config, cs, int_pin) {
|
|
this->send_queue = send_queue;
|
|
this->receive_queue = xQueueCreate(3, sizeof(spi_message_t));
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESPBus::spi_transmit(spi_transaction_t *t) {
|
|
spi_message_t message = {
|
|
.transaction = t,
|
|
.queue = send_queue,
|
|
.spi_device_handle = spi_device_handle
|
|
};
|
|
|
|
xQueueSend(send_queue, &message, portMAX_DELAY);
|
|
xQueueReceive(receive_queue, &message, portMAX_DELAY);
|
|
}
|
|
|
|
void MCP2521_HardwareHandle_ESPBus::initPins(
|
|
gpio_num_t int_pin
|
|
) {
|
|
canInterruptSemaphore = xSemaphoreCreateBinary();
|
|
|
|
gpio_config_t io_conf;
|
|
io_conf.intr_type = GPIO_INTR_NEGEDGE;
|
|
io_conf.mode = GPIO_MODE_INPUT;
|
|
io_conf.pin_bit_mask = 1 << int_pin;
|
|
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
|
io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
|
gpio_config(&io_conf);
|
|
|
|
gpio_isr_handler_add(int_pin, gpio_isr_can_handler, this);
|
|
|
|
char taskName[32];
|
|
sprintf(taskName, "canInterruptTask_%d", int_pin);
|
|
|
|
xTaskCreatePinnedToCore(
|
|
(TaskFunction_t)&handleInteruptTaskCallerFn,
|
|
taskName,
|
|
2048,
|
|
this,
|
|
5,
|
|
&canInterruptTaskHandle,
|
|
0
|
|
);
|
|
}
|
|
|
|
#endif
|