Skip to content

Commit

Permalink
intermediate: late assigmnet of mosi to gpio
Browse files Browse the repository at this point in the history
  • Loading branch information
andreas committed Sep 7, 2024
1 parent 9ae5533 commit 500a58e
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions lib/ledspitask/GwLedSpiTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
#include "GwHardware.h"
#include "GwApi.h"
#include <driver/spi_master.h>
#include <driver/gpio.h>
#include <esp_rom_gpio.h>
#include <soc/spi_periph.h>
#include "ColorTo3Byte.h"

/*
Expand Down Expand Up @@ -102,6 +105,20 @@ static size_t ledsToBuffer(int numLeds,const Color *leds,uint8_t *buffer){
return p-buffer;
}

bool prepareGpio(GwLog *logger, uint8_t pin){
esp_err_t err=gpio_set_direction((gpio_num_t)pin,GPIO_MODE_OUTPUT);
if (err != ESP_OK){
LOG_DEBUG(GwLog::ERROR,"unable to set gpio mode for %d: %d",pin,(int)err);
return false;
}
err=gpio_set_level((gpio_num_t)pin,0);
if (err != ESP_OK){
LOG_DEBUG(GwLog::ERROR,"unable to set gpio level for %d: %d",pin,(int)err);
return false;
}
return true;
}

#define EXIT_TASK delay(50);vTaskDelete(NULL);return;
void handleSpiLeds(GwApi *api){
GwLog *logger=api->getLogger();
Expand Down Expand Up @@ -135,12 +152,13 @@ void handleSpiLeds(GwApi *api){
LOG_DEBUG(GwLog::ERROR,"SpiLed task started");
uint8_t ledPin=GWLED_PIN;
spi_bus_config_t buscfg = {
.mosi_io_num = ledPin,
.mosi_io_num = -1,
.miso_io_num = -1,
.sclk_io_num = -1,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = 0
.max_transfer_sz = 0,
.flags=SPICOMMON_BUSFLAG_GPIO_PINS
};
esp_err_t err=spi_bus_initialize(bus,&buscfg,SPI_DMA_CH_AUTO);
if (err != ESP_OK){
Expand Down Expand Up @@ -168,6 +186,9 @@ void handleSpiLeds(GwApi *api){
(int)bus,ledPin,(int)err);
EXIT_TASK;
}
if (! prepareGpio(logger,ledPin)){
EXIT_TASK;
}
const int NUMLEDS=2;
Color leds[NUMLEDS];
size_t bufferSize=NUMLEDS*3*3;
Expand Down Expand Up @@ -239,7 +260,9 @@ void handleSpiLeds(GwApi *api){
.tx_buffer = outbuffer
};
int64_t now=esp_timer_get_time();
esp_rom_gpio_connect_out_signal(ledPin,spi_periph_signal[bus].spid_out,false,false);
esp_err_t ret = spi_device_transmit(device, &ta);
esp_rom_gpio_connect_out_signal(ledPin,SIG_GPIO_OUT_IDX,false,false);
int64_t end=esp_timer_get_time();
if (ret != ESP_OK){
LOG_DEBUG(GwLog::ERROR,"unable to send led data: %d",(int)ret);
Expand Down

0 comments on commit 500a58e

Please sign in to comment.