polling AXP209 PEK every 30ms

This commit is contained in:
Vincent-FK 2020-01-11 18:06:49 +08:00
parent c633a9435c
commit 6bc084a4d1
5 changed files with 45 additions and 19 deletions

0
.gitignore vendored Normal file → Executable file
View File

View File

@ -58,26 +58,26 @@ bool axp209_init(void) {
// Enable only chosen interrupts (PEK short and long presses)
int err;
err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_1_ENABLE, 0x00);
/*err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_1_ENABLE, 0x00);
if(err < 0){
printf("ERROR initializing interrupts 1 for AXP209\n");
}
err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_2_ENABLE, 0x00);
if(err < 0){
printf("ERROR initializing interrupts 2 for AXP209\n");
}
}*/
err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_3_ENABLE, 0x03);
if(err < 0){
printf("ERROR initializing interrupts 3 for AXP209\n");
}
err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_4_ENABLE, 0x00);
/*err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_4_ENABLE, 0x00);
if(err < 0){
printf("ERROR initializing interrupts 4 for AXP209\n");
}
err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_5_ENABLE, 0x00);
if(err < 0){
printf("ERROR initializing interrupts 5 for AXP209\n");
}
}*/
return true;
}
@ -95,7 +95,7 @@ int axp209_read_interrupt_bank_3(void){
}
// Clear interrupts
int err = i2c_smbus_write_byte_data(fd_axp209 , AXP209_INTERRUPT_BANK_3_STATUS, 0xFF);
int err = i2c_smbus_write_byte_data( fd_axp209 ,AXP209_INTERRUPT_BANK_3_STATUS, 0xFF );
if(err < 0){
return err;
}

BIN
funkey_gpio_management_BAK Executable file

Binary file not shown.

14
gpio_mapping.c Normal file → Executable file
View File

@ -39,10 +39,10 @@
// This define forces to perform a gpio sanity check after a timeout.
// If not declared, there will be no timeout and no periodical sanity check of GPIO expander values
#define TIMEOUT_SEC_SANITY_CHECK_GPIO_EXP 1
//#define TIMEOUT_MICROSEC_SANITY_CHECK_GPIO_EXP (500*1000)
//#define TIMEOUT_SEC_SANITY_CHECK_GPIO_EXP 1
#define TIMEOUT_MICROSEC_SANITY_CHECK_GPIO_EXP (30*1000)
// This is for debug purposes on cards or eval boards that do not have the AXP209
// Comment this for debug purposes on cards or eval boards that do not have the AXP209
#define ENABLE_AXP209_INTERRUPTS
#define KEY_IDX_MAPPED_FOR_SHORT_PEK_PRESS 16 //KEY_Q
@ -62,6 +62,8 @@ static fd_set fds;
static bool * mask_gpio_value;
static bool interrupt_i2c_expander_found = false;
static bool interrupt_axp209_found = false;
static bool mapping_PEK_short_press_activated = false;
static bool mapping_PEK_long_press_activated = false;
/****************************************************************
@ -330,8 +332,10 @@ int listen_gpios_interrupts(void)
if(!nb_interrupts){
// Timeout case
GPIO_PRINTF(" Timeout, forcing sanity check\n");
// Timeout forcing a "Found interrupt" event for sanity check
interrupt_i2c_expander_found = true;
interrupt_axp209_found = true;
}
else if ( nb_interrupts < 0) {
perror("select");
@ -385,11 +389,15 @@ int listen_gpios_interrupts(void)
if(val_int_bank_3 & AXP209_INTERRUPT_PEK_SHORT_PRESS){
GPIO_PRINTF(" AXP209 short PEK key press detected\n");
sendKeyAndStopKey(KEY_IDX_MAPPED_FOR_SHORT_PEK_PRESS);
/*sendKey(KEY_IDX_MAPPED_FOR_SHORT_PEK_PRESS, !mapping_PEK_short_press_activated);
mapping_PEK_short_press_activated = !mapping_PEK_short_press_activated;*/
}
if(val_int_bank_3 & AXP209_INTERRUPT_PEK_LONG_PRESS){
GPIO_PRINTF(" AXP209 long PEK key press detected\n");
sendKeyAndStopKey(KEY_IDX_MAPPED_FOR_LONG_PEK_PRESS);
/*sendKey(KEY_IDX_MAPPED_FOR_LONG_PEK_PRESS, !mapping_PEK_long_press_activated);
mapping_PEK_long_press_activated = !mapping_PEK_long_press_activated;*/
}
}
#endif //ENABLE_AXP209_INTERRUPTS

View File

@ -35,18 +35,11 @@
//#include "config.h"
//include "daemon.h"
#include "uinput.h"
#include <time.h>
static int sendRel(int dx, int dy);
static int sendSync(void);
static struct input_event uidev_ev;
static int uidev_fd;
/*static keyinfo_s lastkey;*/
#define die(str, args...) do { \
perror(str); \
return(EXIT_FAILURE); \
} while(0)
/****************************************************************
* Defines
****************************************************************/
#define DEBUG_UINPUT_PRINTF (0)
#if DEBUG_UINPUT_PRINTF
@ -54,7 +47,31 @@ static int uidev_fd;
#else
#define UINPUT_PRINTF(...)
#endif
#define SLEEP_TIME_SEND_STOP_KEY_US 20*1000
#define die(str, args...) do { \
perror(str); \
return(EXIT_FAILURE); \
} while(0)
/****************************************************************
* Static functions declaration
****************************************************************/
static int sendRel(int dx, int dy);
static int sendSync(void);
/****************************************************************
* Static variables
****************************************************************/
static struct input_event uidev_ev;
static int uidev_fd;
/*static keyinfo_s lastkey;*/
/****************************************************************
* Functions Implementation
****************************************************************/
int init_uinput(void)
{
int fd;
@ -187,6 +204,7 @@ int sendKey(int key, int value)
int sendKeyAndStopKey(int key)
{
sendKey(key, 1);
usleep(SLEEP_TIME_SEND_STOP_KEY_US);
sendKey(key, 0);
return 0;