Tue, 03 Oct 2023 17:24:06 +0200
Version 0.3.0. Backported network code from experimental roaming project. Will now connect after reset to the strongest AP. Id the signal level drops below -67, extra scans are done to see for a better AP. Nothing is done yet. Removed config.conf file, all info is taken from the project menu and live tests. Better log the board type and send it via json mqtt. Send bssid and current channel too.
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
1 | /** |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
2 | * @file u8g2_esp32_hal.c |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
3 | * @date Feb 12, 2017 |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
4 | * @author kolban |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
5 | */ |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
6 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
7 | #include <stdio.h> |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
8 | #include <string.h> |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
9 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
10 | #include "sdkconfig.h" |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
11 | #include "esp_log.h" |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
12 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
13 | #include "freertos/FreeRTOS.h" |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
14 | #include "freertos/task.h" |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
15 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
16 | #include "u8g2_esp32_hal.h" |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
17 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
18 | static const char *TAG = "u8g2_hal"; |
55
43362bb8f3c0
Added DS18B20 error counters. Bigger font for the error counters screen and added the DS18B20 counter. Patched the u8g2_esp32_hal to fix the sudden system reboots.
Michiel Broek <mbroek@mbse.eu>
parents:
39
diff
changeset
|
19 | static const unsigned int I2C_TIMEOUT_MS = 1000; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
20 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
21 | static spi_device_handle_t handle_spi; ///< SPI handle. |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
22 | static i2c_cmd_handle_t handle_i2c; ///< I2C handle. |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
23 | static u8g2_esp32_hal_t u8g2_esp32_hal; ///< HAL state data. |
55
43362bb8f3c0
Added DS18B20 error counters. Bigger font for the error counters screen and added the DS18B20 counter. Patched the u8g2_esp32_hal to fix the sudden system reboots.
Michiel Broek <mbroek@mbse.eu>
parents:
39
diff
changeset
|
24 | static bool initialized = false; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
25 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
26 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
27 | /* |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
28 | * Initialze the ESP32 HAL. |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
29 | */ |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
30 | void u8g2_esp32_hal_init(u8g2_esp32_hal_t u8g2_esp32_hal_param) { |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
31 | u8g2_esp32_hal = u8g2_esp32_hal_param; |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
32 | } // u8g2_esp32_hal_init |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
33 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
34 | /* |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
35 | * HAL callback function as prescribed by the U8G2 library. This callback is invoked |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
36 | * to handle SPI communications. |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
37 | */ |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
38 | uint8_t u8g2_esp32_spi_byte_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
39 | { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
40 | ESP_LOGD(TAG, "spi_byte_cb: Received a msg: %d, arg_int: %d, arg_ptr: %p", msg, arg_int, arg_ptr); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
41 | switch(msg) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
42 | case U8X8_MSG_BYTE_SET_DC: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
43 | if (u8g2_esp32_hal.dc != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
44 | gpio_set_level(u8g2_esp32_hal.dc, arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
45 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
46 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
47 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
48 | case U8X8_MSG_BYTE_INIT: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
49 | if (u8g2_esp32_hal.clk == U8G2_ESP32_HAL_UNDEFINED || u8g2_esp32_hal.mosi == U8G2_ESP32_HAL_UNDEFINED || |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
50 | u8g2_esp32_hal.cs == U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
51 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
52 | } |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
53 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
54 | spi_bus_config_t bus_config; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
55 | memset(&bus_config, 0, sizeof(spi_bus_config_t)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
56 | bus_config.sclk_io_num = u8g2_esp32_hal.clk; // CLK |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
57 | bus_config.mosi_io_num = u8g2_esp32_hal.mosi; // MOSI |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
58 | bus_config.miso_io_num = -1; // MISO |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
59 | bus_config.quadwp_io_num = -1; // Not used |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
60 | bus_config.quadhd_io_num = -1; // Not used |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
61 | //ESP_LOGI(TAG, "... Initializing bus."); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
62 | ESP_ERROR_CHECK(spi_bus_initialize(HSPI_HOST, &bus_config, 1)); |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
63 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
64 | spi_device_interface_config_t dev_config; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
65 | dev_config.address_bits = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
66 | dev_config.command_bits = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
67 | dev_config.dummy_bits = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
68 | dev_config.mode = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
69 | dev_config.duty_cycle_pos = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
70 | dev_config.cs_ena_posttrans = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
71 | dev_config.cs_ena_pretrans = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
72 | dev_config.clock_speed_hz = 10000; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
73 | dev_config.spics_io_num = u8g2_esp32_hal.cs; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
74 | dev_config.flags = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
75 | dev_config.queue_size = 200; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
76 | dev_config.pre_cb = NULL; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
77 | dev_config.post_cb = NULL; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
78 | //ESP_LOGI(TAG, "... Adding device bus."); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
79 | ESP_ERROR_CHECK(spi_bus_add_device(HSPI_HOST, &dev_config, &handle_spi)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
80 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
81 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
82 | } |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
83 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
84 | case U8X8_MSG_BYTE_SEND: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
85 | spi_transaction_t trans_desc; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
86 | trans_desc.addr = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
87 | trans_desc.cmd = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
88 | trans_desc.flags = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
89 | trans_desc.length = 8 * arg_int; // Number of bits NOT number of bytes. |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
90 | trans_desc.rxlength = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
91 | trans_desc.tx_buffer = arg_ptr; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
92 | trans_desc.rx_buffer = NULL; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
93 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
94 | //ESP_LOGI(TAG, "... Transmitting %d bytes.", arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
95 | ESP_ERROR_CHECK(spi_device_transmit(handle_spi, &trans_desc)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
96 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
97 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
98 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
99 | return 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
100 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
101 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
102 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
103 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
104 | /* |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
105 | * HAL callback function as prescribed by the U8G2 library. This callback is invoked |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
106 | * to handle I2C communications. |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
107 | */ |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
108 | uint8_t u8g2_esp32_i2c_byte_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
109 | { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
110 | ESP_LOGD(TAG, "i2c_cb: Received a msg: %d, arg_int: %d, arg_ptr: %p", msg, arg_int, arg_ptr); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
111 | switch(msg) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
112 | case U8X8_MSG_BYTE_SET_DC: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
113 | if (u8g2_esp32_hal.dc != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
114 | gpio_set_level(u8g2_esp32_hal.dc, arg_int); |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
115 | } |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
116 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
117 | } |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
118 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
119 | case U8X8_MSG_BYTE_INIT: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
120 | if (u8g2_esp32_hal.sda == U8G2_ESP32_HAL_UNDEFINED || u8g2_esp32_hal.scl == U8G2_ESP32_HAL_UNDEFINED || initialized) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
121 | // here i test if already initialized, if it's the case don't do it again! |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
122 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
123 | } |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
124 | |
74 | 125 | i2c_config_t conf = { |
126 | .mode = I2C_MODE_MASTER, | |
127 | .sda_io_num = u8g2_esp32_hal.sda, | |
128 | .sda_pullup_en = GPIO_PULLUP_ENABLE, | |
129 | .scl_io_num = u8g2_esp32_hal.scl, | |
130 | .scl_pullup_en = GPIO_PULLUP_ENABLE, | |
131 | .master.clk_speed = I2C_MASTER_FREQ_HZ, | |
132 | }; | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
133 | ESP_ERROR_CHECK(i2c_param_config(I2C_MASTER_NUM, &conf)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
134 | ESP_LOGI(TAG, "I2C gpio_sda: %d gpio_scl: %d clk_speed: %d master_num: %d", |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
135 | u8g2_esp32_hal.sda, u8g2_esp32_hal.scl, I2C_MASTER_FREQ_HZ, I2C_MASTER_NUM); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
136 | ESP_ERROR_CHECK(i2c_driver_install(I2C_MASTER_NUM, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
137 | initialized = true; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
138 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
139 | } |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
140 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
141 | case U8X8_MSG_BYTE_SEND: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
142 | uint8_t* data_ptr = (uint8_t*)arg_ptr; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
143 | ESP_LOG_BUFFER_HEXDUMP(TAG, data_ptr, arg_int, ESP_LOG_VERBOSE); |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
144 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
145 | while( arg_int > 0 ) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
146 | ESP_ERROR_CHECK(i2c_master_write_byte(handle_i2c, *data_ptr, ACK_CHECK_EN)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
147 | data_ptr++; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
148 | arg_int--; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
149 | } |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
150 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
151 | } |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
152 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
153 | case U8X8_MSG_BYTE_START_TRANSFER: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
154 | uint8_t i2c_address = u8x8_GetI2CAddress(u8x8); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
155 | handle_i2c = i2c_cmd_link_create(); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
156 | ESP_LOGD(TAG, "Start I2C transfer to %02X.", i2c_address>>1); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
157 | ESP_ERROR_CHECK(i2c_master_start(handle_i2c)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
158 | ESP_ERROR_CHECK(i2c_master_write_byte(handle_i2c, i2c_address | I2C_MASTER_WRITE, ACK_CHECK_EN)); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
159 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
160 | } |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
161 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
162 | case U8X8_MSG_BYTE_END_TRANSFER: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
163 | ESP_LOGD(TAG, "End I2C transfer."); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
164 | ESP_ERROR_CHECK(i2c_master_stop(handle_i2c)); |
74 | 165 | i2c_master_cmd_begin(I2C_MASTER_NUM, handle_i2c, I2C_TIMEOUT_MS / portTICK_PERIOD_MS); |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
166 | i2c_cmd_link_delete(handle_i2c); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
167 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
168 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
169 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
170 | return 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
171 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
172 | |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
173 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
174 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
175 | /* |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
176 | * HAL callback function as prescribed by the U8G2 library. This callback is invoked |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
177 | * to handle callbacks for GPIO and delay functions. |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
178 | */ |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
179 | uint8_t u8g2_esp32_gpio_and_delay_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
180 | { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
181 | ESP_LOGD(TAG, "gpio_and_delay_cb: Received a msg: %d, arg_int: %d, arg_ptr: %p", msg, arg_int, arg_ptr); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
182 | switch(msg) { |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
183 | // Initialize the GPIO and DELAY HAL functions. If the pins for DC and RESET have been |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
184 | // specified then we define those pins as GPIO outputs. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
185 | case U8X8_MSG_GPIO_AND_DELAY_INIT: { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
186 | uint64_t bitmask = 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
187 | if (u8g2_esp32_hal.dc != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
188 | bitmask = bitmask | (1ull<<u8g2_esp32_hal.dc); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
189 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
190 | if (u8g2_esp32_hal.reset != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
191 | bitmask = bitmask | (1ull<<u8g2_esp32_hal.reset); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
192 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
193 | if (u8g2_esp32_hal.cs != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
194 | bitmask = bitmask | (1ull<<u8g2_esp32_hal.cs); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
195 | } |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
196 | |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
197 | if (bitmask==0) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
198 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
199 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
200 | gpio_config_t gpioConfig; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
201 | gpioConfig.pin_bit_mask = bitmask; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
202 | gpioConfig.mode = GPIO_MODE_OUTPUT; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
203 | gpioConfig.pull_up_en = GPIO_PULLUP_DISABLE; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
204 | gpioConfig.pull_down_en = GPIO_PULLDOWN_ENABLE; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
205 | gpioConfig.intr_type = GPIO_INTR_DISABLE; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
206 | gpio_config(&gpioConfig); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
207 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
208 | } |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
209 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
210 | // Set the GPIO reset pin to the value passed in through arg_int. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
211 | case U8X8_MSG_GPIO_RESET: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
212 | if (u8g2_esp32_hal.reset != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
213 | gpio_set_level(u8g2_esp32_hal.reset, arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
214 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
215 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
216 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
217 | // Set the GPIO client select pin to the value passed in through arg_int. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
218 | case U8X8_MSG_GPIO_CS: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
219 | if (u8g2_esp32_hal.cs != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
220 | gpio_set_level(u8g2_esp32_hal.cs, arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
221 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
222 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
223 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
224 | // Set the Software I²C pin to the value passed in through arg_int. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
225 | case U8X8_MSG_GPIO_I2C_CLOCK: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
226 | if (u8g2_esp32_hal.scl != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
227 | gpio_set_level(u8g2_esp32_hal.scl, arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
228 | // printf("%c",(arg_int==1?'C':'c')); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
229 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
230 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
231 | |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
232 | // Set the Software I²C pin to the value passed in through arg_int. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
233 | case U8X8_MSG_GPIO_I2C_DATA: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
234 | if (u8g2_esp32_hal.sda != U8G2_ESP32_HAL_UNDEFINED) { |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
235 | gpio_set_level(u8g2_esp32_hal.sda, arg_int); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
236 | // printf("%c",(arg_int==1?'D':'d')); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
237 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
238 | break; |
0
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
239 | |
88d965579617
Initial import of the CO2 meter application.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
240 | // Delay for the number of milliseconds passed in through arg_int. |
57
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
241 | case U8X8_MSG_DELAY_MILLI: |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
242 | vTaskDelay(arg_int/portTICK_PERIOD_MS); |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
243 | break; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
244 | } |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
245 | return 0; |
232f318a6b51
Code cleanup, doxygen comments added.
Michiel Broek <mbroek@mbse.eu>
parents:
56
diff
changeset
|
246 | } |