aboutsummaryrefslogtreecommitdiff
path: root/main/main.c
blob: 5f8055deb3466ae524a5a993b2857243468069ef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "driver/spi_master.h"
#include "drv/ws2812b.h"
#include "esp_flash_spi_init.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
#include "freertos/task.h"
#include "http_server.h"
#include "sdkconfig.h"
#include "station.h"
#include "tcp_server.h"
#include "ws2812b_writer.h"

#ifdef CONFIG_IDF_TARGET_ESP32
#define LCD_HOST HSPI_HOST

#define PIN_NUM_MISO 25
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK 19
#define PIN_NUM_CS 22

#define PIN_NUM_DC 21
#define PIN_NUM_RST 18
#define PIN_NUM_BCKL 5
#elif defined CONFIG_IDF_TARGET_ESP32S2
#define LCD_HOST SPI2_HOST

#define PIN_NUM_MISO 37
#define PIN_NUM_MOSI 35
#define PIN_NUM_CLK 36
#define PIN_NUM_CS 34

#define PIN_NUM_DC 4
#define PIN_NUM_RST 5
#define PIN_NUM_BCKL 6
#elif defined CONFIG_IDF_TARGET_ESP32C3
#define LCD_HOST SPI2_HOST

#define PIN_NUM_MISO 2
#define PIN_NUM_MOSI 7
#define PIN_NUM_CLK 6
#define PIN_NUM_CS 10

#define PIN_NUM_DC 9
#define PIN_NUM_RST 4
#define PIN_NUM_BCKL 5
#endif

static ws_params_t ws_params;

void app_main(void)
{
  esp_err_t error;
  spi_device_handle_t spi;
  spi_bus_config_t cfg = {
      .miso_io_num = PIN_NUM_MISO,
      .mosi_io_num = PIN_NUM_MOSI,
      .sclk_io_num = PIN_NUM_CLK,
      .quadwp_io_num = -1,
      .quadhd_io_num = -1,
      .max_transfer_sz = 320 * 2 + 8,
  };

  spi_device_interface_config_t devcfg = {
      .clock_speed_hz = 24 * 100 * 1000, /* 2.5 MHz */
      .mode = 0,
      .spics_io_num = PIN_NUM_CS,
      .queue_size = 7,
      .pre_cb = NULL,
  };

  printf("Hello, World!\n");
  printf("miso: %d\n", PIN_NUM_MISO);
  printf("mosi: %d\n", PIN_NUM_MOSI);
  printf("sclk: %d\n", PIN_NUM_CLK);
  printf("Tick period ms: %d\n", (int)portTICK_PERIOD_MS);

  error = spi_bus_initialize(HSPI_HOST, &cfg, SPI_DMA_CH_AUTO);
  printf("Bus Init\n");
  ESP_ERROR_CHECK(error);

  error = spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
  printf("Add Device\n");
  ESP_ERROR_CHECK(error);

  ws_params.drv = ws2812b_init(spi);
  ws_params.state_lock = xSemaphoreCreateMutex();
  configASSERT(ws_params.state_lock != NULL);
  reset_parameters(&ws_params);

  printf("Configuration complete!!\n");

  ESP_LOGI("main", "Connection to AP");
  wifi_init_station("Wort", "JoshIsBau5");
  ESP_LOGI("main", "Complete!");

  if (xSemaphoreTake(ws_params.state_lock, portMAX_DELAY) == pdTRUE) {
    esp_err_t load_err = ws_state_load(&ws_params.state);
    if (load_err == ESP_OK) {
      ESP_LOGI("main", "Restored state from NVS");
    } else {
      ESP_LOGI("main", "No saved state (%d); using defaults", load_err);
    }
    xSemaphoreGive(ws_params.state_lock);
  }

  /* Pin the LED writer to core 1 to avoid preemption by Wi-Fi/IDF tasks. */
  xTaskCreatePinnedToCore(
      ws2812b_write_task,
      "ws2812b_writer",
      /* stack_depth = */ 4096,
      &ws_params,
      /* priority = */ 4,
      NULL,
      /* core_id = */ 1);
  xTaskCreate(
      tcp_server,
      "tcp_server",
      /* stack_depth = */ 4096,
      &ws_params,
      /* priority = */ 2,
      NULL);

  start_webserver(&ws_params);
}