mirror of
https://github.com/usatiuk/cardboy.git
synced 2025-10-29 07:37:48 +01:00
shutdown button
This commit is contained in:
@@ -6,5 +6,6 @@ idf_component_register(SRCS
|
|||||||
src/i2c_global.cpp
|
src/i2c_global.cpp
|
||||||
src/disp_tools.cpp
|
src/disp_tools.cpp
|
||||||
src/disp_tty.cpp
|
src/disp_tty.cpp
|
||||||
|
src/shutdowner.cpp
|
||||||
PRIV_REQUIRES spi_flash esp_driver_i2c driver
|
PRIV_REQUIRES spi_flash esp_driver_i2c driver
|
||||||
INCLUDE_DIRS "include")
|
INCLUDE_DIRS "include")
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#ifndef CB_CONFIG_HPP
|
#ifndef CB_CONFIG_HPP
|
||||||
#define CB_CONFIG_HPP
|
#define CB_CONFIG_HPP
|
||||||
|
|
||||||
#include "soc/gpio_num.h"
|
|
||||||
#include "hal/spi_types.h"
|
#include "hal/spi_types.h"
|
||||||
|
#include "soc/gpio_num.h"
|
||||||
|
|
||||||
#define I2C_SCL GPIO_NUM_8
|
#define I2C_SCL GPIO_NUM_8
|
||||||
#define I2C_SDA GPIO_NUM_9
|
#define I2C_SDA GPIO_NUM_9
|
||||||
@@ -14,7 +14,10 @@
|
|||||||
|
|
||||||
#define SPI_BUS SPI2_HOST
|
#define SPI_BUS SPI2_HOST
|
||||||
|
|
||||||
#define DISP_WIDTH 400
|
#define DISP_WIDTH 400
|
||||||
#define DISP_HEIGHT 240
|
#define DISP_HEIGHT 240
|
||||||
|
|
||||||
#endif
|
#define PWR_INT GPIO_NUM_10
|
||||||
|
#define PWR_KILL GPIO_NUM_12
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
18
Firmware/main/include/shutdowner.hpp
Normal file
18
Firmware/main/include/shutdowner.hpp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// Created by Stepan Usatiuk on 02.03.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CB_SHUTDOWNER_HPP
|
||||||
|
#define CB_SHUTDOWNER_HPP
|
||||||
|
|
||||||
|
|
||||||
|
class Shutdowner {
|
||||||
|
public:
|
||||||
|
static Shutdowner& get();
|
||||||
|
private:
|
||||||
|
Shutdowner();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CB_SHUTDOWNER_HPP
|
||||||
@@ -8,18 +8,6 @@
|
|||||||
|
|
||||||
#include "driver/spi_master.h"
|
#include "driver/spi_master.h"
|
||||||
|
|
||||||
spi_device_interface_config_t devcfg = {
|
|
||||||
.command_bits = 0,
|
|
||||||
.address_bits = 0,
|
|
||||||
.mode = 0, // SPI mode 0
|
|
||||||
.clock_speed_hz = 4 * 1000 * 1000, // Clock out at 10 MHz
|
|
||||||
.spics_io_num = SPI_DISP_CS, // CS pin
|
|
||||||
.flags = SPI_DEVICE_POSITIVE_CS,
|
|
||||||
.queue_size = 1, // We want to be able to queue 7 transactions at a time
|
|
||||||
// .pre_cb = lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// This solution is attributed to Rich Schroeppel in the Programming Hacks section
|
// This solution is attributed to Rich Schroeppel in the Programming Hacks section
|
||||||
// TODO: Why does the device flag not work?
|
// TODO: Why does the device flag not work?
|
||||||
unsigned char reverse_bits3(unsigned char b) { return (b * 0x0202020202ULL & 0x010884422010ULL) % 0x3ff; }
|
unsigned char reverse_bits3(unsigned char b) { return (b * 0x0202020202ULL & 0x010884422010ULL) % 0x3ff; }
|
||||||
@@ -35,7 +23,6 @@ std::array<uint8_t, SMD::kLineBytes> SMD::prep_line(const SMD::disp_line_t& line
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SMD& SMD::get() {
|
SMD& SMD::get() {
|
||||||
static SMD smd;
|
static SMD smd;
|
||||||
return smd;
|
return smd;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include "i2c_global.hpp"
|
#include "i2c_global.hpp"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <shutdowner.hpp>
|
||||||
#include <spi_global.hpp>
|
#include <spi_global.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ extern "C" void app_main() {
|
|||||||
// .max_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ, .min_freq_mhz = 16, .light_sleep_enable = true};
|
// .max_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ, .min_freq_mhz = 16, .light_sleep_enable = true};
|
||||||
// ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
|
// ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
|
||||||
printf("Hello world!\n");
|
printf("Hello world!\n");
|
||||||
|
Shutdowner::get();
|
||||||
I2cGlobal::get();
|
I2cGlobal::get();
|
||||||
BatMon::get();
|
BatMon::get();
|
||||||
SpiGlobal::get();
|
SpiGlobal::get();
|
||||||
|
|||||||
32
Firmware/main/src/shutdowner.cpp
Normal file
32
Firmware/main/src/shutdowner.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
//
|
||||||
|
// Created by Stepan Usatiuk on 02.03.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "shutdowner.hpp"
|
||||||
|
|
||||||
|
#include <driver/gpio.h>
|
||||||
|
|
||||||
|
#include "config.hpp"
|
||||||
|
|
||||||
|
Shutdowner& Shutdowner::get() {
|
||||||
|
static Shutdowner instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void shutdown(void* arg) {
|
||||||
|
// printf("Shutting down...\n");
|
||||||
|
ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
Shutdowner::Shutdowner() {
|
||||||
|
ESP_ERROR_CHECK(gpio_reset_pin(PWR_INT));
|
||||||
|
ESP_ERROR_CHECK(gpio_reset_pin(PWR_KILL));
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(gpio_set_direction(PWR_INT, GPIO_MODE_INPUT));
|
||||||
|
ESP_ERROR_CHECK(gpio_set_direction(PWR_KILL, GPIO_MODE_OUTPUT));
|
||||||
|
ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 1));
|
||||||
|
ESP_ERROR_CHECK(gpio_set_pull_mode(PWR_INT, GPIO_FLOATING));
|
||||||
|
ESP_ERROR_CHECK(gpio_set_intr_type(PWR_INT, GPIO_INTR_NEGEDGE));
|
||||||
|
ESP_ERROR_CHECK(gpio_install_isr_service(0));
|
||||||
|
gpio_isr_handler_add(PWR_INT, shutdown, nullptr);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user