Skip to content
Snippets Groups Projects
Commit 9ea0f935 authored by moon2's avatar moon2 :speech_balloon:
Browse files

buttons

parent 51f9da1b
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,7 @@ idf_component_register(
leds.c
scope.c
synth.c
spio.c
INCLUDE_DIRS
include
REQUIRES
......
......@@ -168,27 +168,33 @@ static void IRAM_ATTR gpio_isr_handler(void* arg)
xQueueSendFromISR(gpio_evt_queue, &chip, NULL);
}
static uint16_t pressed_top, pressed_bot;
static void captouch_chip_readout(struct ad714x_chip * chip){
uint16_t pressed;
ad714x_i2c_read(chip, 9, &pressed, 1);
ESP_LOGI(TAG, "Addr %x, High interrupt %X", chip->addr, pressed);
pressed &= ((1 << chip->stages) - 1);
if(chip == &chip_top) pressed_top = pressed;
if(chip == &chip_bot) pressed_bot = pressed;
}
void manual_captouch_readout(uint8_t top)
{
struct ad714x_chip* chip = top ? (&chip_top) : (&chip_bot);
xQueueSend(gpio_evt_queue, &chip, NULL);
captouch_chip_readout(chip);
//xQueueSend(gpio_evt_queue, &chip, NULL);
}
static uint16_t pressed_top, pressed_bot;
void gpio_event_handler(void* arg)
{
static unsigned long counter = 0;
struct ad714x_chip* chip;
uint16_t pressed;
while(true) {
if(xQueueReceive(gpio_evt_queue, &chip, portMAX_DELAY)) {
ad714x_i2c_read(chip, 9, &pressed, 1);
ESP_LOGI(TAG, "Addr %x, High interrupt %X", chip->addr, pressed);
pressed &= ((1 << chip->stages) - 1);
if(chip == &chip_top) pressed_top = pressed;
if(chip == &chip_bot) pressed_bot = pressed;
captouch_chip_readout(chip);
}
}
}
......@@ -306,7 +312,7 @@ void captouch_init(void)
});
gpio_evt_queue = xQueueCreate(10, sizeof(const struct ad714x_chip*));
xTaskCreate(gpio_event_handler, "gpio_event_handler", 2048 * 2, NULL, configMAX_PRIORITIES - 2, NULL);
//xTaskCreate(gpio_event_handler, "gpio_event_handler", 2048 * 2, NULL, configMAX_PRIORITIES - 2, NULL);
}
static void captouch_print_debug_info_chip(const struct ad714x_chip* chip)
......
......@@ -2,6 +2,7 @@
#include "badge23/audio.h"
#include "badge23/leds.h"
#include "badge23/display.h"
#include "badge23/spio.h"
#include "../../../revision_config.h"
#include "esp_log.h"
......@@ -58,6 +59,7 @@ void os_app_main(void)
set_global_vol_dB(-90);
audio_init();
leds_init();
init_buttons();
captouch_init();
vTaskDelay(2000 / portTICK_PERIOD_MS);
......@@ -69,6 +71,8 @@ void os_app_main(void)
vTaskDelay((CAPTOUCH_POLLING_PERIOD) / portTICK_PERIOD_MS);
manual_captouch_readout(0);
vTaskDelay((CAPTOUCH_POLLING_PERIOD) / portTICK_PERIOD_MS);
update_button_state();
vTaskDelay((CAPTOUCH_POLLING_PERIOD) / portTICK_PERIOD_MS);
//display_draw_scope();
}
......
#pragma once
#include <stdint.h>
int8_t get_button_state(bool leftbutton);
void update_button_state();
void init_buttons();
//special purpose input outputs
#include "driver/gpio.h"
#include "../../../revision_config.h"
#include "stdint.h"
static int8_t leftbutton = 0;
static int8_t rightbutton = 0;
typedef
#ifdef HARDWARE_REVISION_01
#define RIGHT_BUTTON_LEFT 37
#define RIGHT_BUTTON_MID 0
#define RIGHT_BUTTON_RIGHT 35
#define LEFT_BUTTON_LEFT 7
#define LEFT_BUTTON_MID 6
#define LEFT_BUTTON_RIGHT 5
static void _init_buttons(){
//configure all buttons as pullup
uint64_t mask = 0;
mask |= (1 << RIGHT_BUTTON_LEFT);
mask |= (1 << RIGHT_BUTTON_RIGHT);
mask |= (1 << LEFT_BUTTON_LEFT);
mask |= (1 << LEFT_BUTTON_MID);
mask |= (1 << LEFT_BUTTON_RIGHT);
gpio_config_t cfg = {
.pin_bit_mask = mask,
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
ESP_ERROR_CHECK(gpio_config(&cfg));
cfg.pin_bit_mask = 1;
cfg.pull_up_en = GPIO_PULLUP_DISABLE;
ESP_ERROR_CHECK(gpio_config(&cfg));
}
void update_button_state(){
if(!gpio_get_level(RIGHT_BUTTON_LEFT)){
rightbutton = -1;
} else if(!gpio_get_level(RIGHT_BUTTON_MID)){
rightbutton = 2;
} else if(!gpio_get_level(RIGHT_BUTTON_RIGHT)){
rightbutton = 1;
} else {
rightbutton = 0;
}
if(!gpio_get_level(LEFT_BUTTON_LEFT)){
leftbutton = -1;
} else if(!gpio_get_level(LEFT_BUTTON_MID)){
leftbutton = 2;
} else if(!gpio_get_level(LEFT_BUTTON_RIGHT)){
leftbutton = 1;
} else {
leftbutton = 0;
}
}
#endif
#ifdef HARDWARE_REVISION_04
#include "driver/i2c.h"
#define I2C_MASTER_NUM 0
#define TIMEOUT_MS 1000
//on ESP32
#define LEFT_BUTTON_LEFT 3
#define LEFT_BUTTON_MID 0
//on PORTEXPANDER
#define LEFT_BUTTON_RIGHT 0
#define RIGHT_BUTTON_LEFT 6
#define RIGHT_BUTTON_MID 5
#define RIGHT_BUTTON_RIGHT 7
static void _init_buttons(){
//configure all buttons as pullup
gpio_config_t cfg = {
.pin_bit_mask = 1 << LEFT_BUTTON_LEFT,
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
ESP_ERROR_CHECK(gpio_config(&cfg));
cfg.pin_bit_mask = 1;
cfg.pull_up_en = GPIO_PULLUP_DISABLE;
ESP_ERROR_CHECK(gpio_config(&cfg));
printf("nya");
}
void update_button_state(){
uint8_t port;
esp_err_t ret = i2c_master_read_from_device(I2C_MASTER_NUM, 0b1101101, &port, sizeof(port), TIMEOUT_MS / portTICK_PERIOD_MS);
uint8_t rr = port & (1 << RIGHT_BUTTON_RIGHT);
uint8_t rm = port & (1 << RIGHT_BUTTON_MID);
uint8_t rl = port & (1 << RIGHT_BUTTON_LEFT);
uint8_t lr = port & (1 << LEFT_BUTTON_RIGHT);
uint8_t ll = gpio_get_level(LEFT_BUTTON_LEFT);
uint8_t lm = gpio_get_level(LEFT_BUTTON_MID);
if(!rl){
rightbutton = -1;
} else if(!rm){
rightbutton = 2;
} else if(!rr){
rightbutton = 1;
} else {
rightbutton = 0;
}
if(!ll){
leftbutton = -1;
} else if(!lm){
leftbutton = 2;
} else if(!lr){
leftbutton = 1;
} else {
leftbutton = 0;
}
}
#endif
void init_buttons(){
_init_buttons();
}
//#define ALWAYS_UPDATE_BUTTON
int8_t get_button_state(bool left){
#ifdef ALWAYS_UPDATE_BUTTON
update_button_state();
#endif
if(left) return leftbutton;
return rightbutton;
}
menu "GC9A01 LCD Config"
config GC9A01_Width
int "GC9A01 LCD Width"
range 64 1024
default 240
config GC9A01_Height
int "GC9A01 LCD Height"
range 64 1024
default 240
#---------------------------------------------
choice GC9A01_SPI_HOST
prompt "GC9A01 SPI HOST"
default USE_SPI3_HOST
help
Hardware SPI , HSPI=SPI2 , VSPI=SPI3
config USE_SPI1_HOST
bool "USE SPI1 HOST"
config USE_SPI2_HOST
bool "USE SPI2 HOST"
config USE_SPI3_HOST
bool "USE SPI3 HOST"
config USE_SPI4_HOST
bool "USE SPI4 HOST"
endchoice
config GC9A01_SPI_HOST
int
default 0 if USE_SPI1_HOST
default 1 if USE_SPI2_HOST
default 2 if USE_SPI3_HOST
default 3 if USE_SPI4_HOST
#---------------------------------------------
config GC9A01_PIN_NUM_SCK
int "LCD SPI SCK Pin"
range 0 48
default 18
help
Must Support SPI SCK
config GC9A01_PIN_NUM_MOSI
int "LCD SPI MOSI Pin"
range 0 48
default 23
help
Must Support SPI MOSI
config GC9A01_PIN_NUM_CS
int "LCD SPI CS Pin"
range 0 48
default 05
config GC9A01_PIN_NUM_DC
int "LCD DC(Data or Command) GPIO Pin Number"
range 0 48
default 21
config GC9A01_SPI_SCK_FREQ_M
int "SPI Clock Freq in MHz"
range 1 80
default 40
config GC9A01_CONTROL_BACK_LIGHT_USED
bool "LCD Control Back Light"
default y
config GC9A01_PIN_NUM_BCKL
int "LCD BL(Back Light) GPIO Pin Number"
depends on GC9A01_CONTROL_BACK_LIGHT_USED
range 0 48
default 19
#---------------------------------------------
choice GC9A01_CONTROL_BACK_LIGHT_MODE
prompt "GC9A01b Control Back Light Mode"
default GC9A01_BACK_LIGHT_MODE_PWM
depends on GC9A01_CONTROL_BACK_LIGHT_USED
help
PWM use LEDC_TIMER_0 and LEDC_CHANNEL_0
config GC9A01_BACK_LIGHT_MODE_On_OFF
bool "USE GPIO ON/OF"
config GC9A01_BACK_LIGHT_MODE_PWM
bool "USE PWM"
endchoice
config GC9A01_CONTROL_BACK_LIGHT_MODE
int
default 0 if GC9A01_BACK_LIGHT_MODE_On_OFF
default 1 if GC9A01_BACK_LIGHT_MODE_PWM
#---------------------------------------------
config GC9A01_RESET_USED
bool "GC9A01 RESET Pin Used"
default y
help
Use GC9A01 Hard Reset Pin
config GC9A01_PIN_NUM_RST
int "LCD RST GPIO Pin Number"
depends on GC9A01_RESET_USED
range 0 48
default 22
config GC9A01_BUFFER_MODE
bool "Enable Buffer Mode"
default y
help
Disable for Direct Mode
config GC9A01_BUFFER_SCREEN_FAST_MODE
bool "Don't Convert Buffer for Screen_Load() & Screen_Shot()"
default n
depends on GC9A01_BUFFER_MODE
help
If Enabled , the Screen_load() & Screen_Shot() don't run SwapBytes() for Buffer
& Direct Save Data to SPI Buffer,So the data must manually SwapBytes before Send to LCD.
endmenu
......@@ -1357,28 +1357,6 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_11KV_SUPPORT is not set
# end of Supplicant
#
# GC9A01 LCD Config
#
CONFIG_GC9A01_Width=240
CONFIG_GC9A01_Height=240
# CONFIG_USE_SPI1_HOST is not set
# CONFIG_USE_SPI2_HOST is not set
CONFIG_USE_SPI3_HOST=y
# CONFIG_USE_SPI4_HOST is not set
CONFIG_GC9A01_SPI_HOST=2
CONFIG_GC9A01_PIN_NUM_SCK=39
CONFIG_GC9A01_PIN_NUM_MOSI=41
CONFIG_GC9A01_PIN_NUM_CS=40
CONFIG_GC9A01_PIN_NUM_DC=42
CONFIG_GC9A01_SPI_SCK_FREQ_M=80
# CONFIG_GC9A01_CONTROL_BACK_LIGHT_USED is not set
CONFIG_GC9A01_RESET_USED=y
CONFIG_GC9A01_PIN_NUM_RST=38
CONFIG_GC9A01_BUFFER_MODE=y
# CONFIG_GC9A01_BUFFER_SCREEN_FAST_MODE is not set
# end of GC9A01 LCD Config
# end of Component config
#
......
......@@ -15,6 +15,7 @@
#include "badge23/leds.h"
#include "badge23/captouch.h"
#include "badge23/display.h"
#include "badge23/spio.h"
STATIC mp_obj_t mp_display_update(size_t n_args, const mp_obj_t *args) {
display_update();
......@@ -60,6 +61,13 @@ STATIC mp_obj_t mp_captouch_autocalib(size_t n_args, const mp_obj_t *args) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_captouch_autocalib_obj, 0, 2, mp_captouch_autocalib);
STATIC mp_obj_t mp_get_button(size_t n_args, const mp_obj_t *args) {
uint8_t leftbutton = mp_obj_get_int(args[0]);
int8_t ret = get_button_state(leftbutton);
return mp_obj_new_int(ret);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_get_button_obj, 1, 2, mp_get_button);
STATIC mp_obj_t mp_set_global_volume_dB(size_t n_args, const mp_obj_t *args) {
mp_float_t x = mp_obj_get_float(args[0]);
int8_t d = x;
......@@ -115,6 +123,7 @@ STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_badge_audio) },
{ MP_ROM_QSTR(MP_QSTR_get_captouch), MP_ROM_PTR(&mp_get_captouch_obj) },
{ MP_ROM_QSTR(MP_QSTR_captouch_autocalib), MP_ROM_PTR(&mp_captouch_autocalib_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_button), MP_ROM_PTR(&mp_get_button_obj) },
{ MP_ROM_QSTR(MP_QSTR_set_global_volume_dB), MP_ROM_PTR(&mp_set_global_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_count_sources), MP_ROM_PTR(&mp_count_sources_obj) },
{ MP_ROM_QSTR(MP_QSTR_dump_all_sources), MP_ROM_PTR(&mp_dump_all_sources_obj) },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment