/** **************************************************************************************** * @brief All GPIO interrupt callback **************************************************************************************** */ void gpio_interrupt_callback(enum gpio_pin pin) { switch(pin) { case BUTTON1_PIN: //Button 1 is used to enter adv mode. usr_button1_cb(); break; case BUTTON2_PIN: //Button 2 is used to control buzzer off usr_button2_cb(); break; #if (defined(QN_TEST_CTRL_PIN)) case QN_TEST_CTRL_PIN: //When test controll pin is changed to low level, this function will reboot system. gpio_disable_interrupt(QN_TEST_CTRL_PIN); syscon_SetCRSS(QN_SYSCON, SYSCON_MASK_REBOOT_SYS); break; #endif default: break; } }
/** **************************************************************************************** * @brief All GPIO interrupt callback **************************************************************************************** */ void gpio_interrupt_callback(enum gpio_pin pin) { switch(pin) { case BUTTON1_PIN: //Button 1 is used to enter adv mode. usr_button1_cb(); break; #if (defined(QN_TEST_CTRL_PIN)) case QN_TEST_CTRL_PIN: //When test controll pin is changed to low level, this function will reboot system. gpio_disable_interrupt(QN_TEST_CTRL_PIN); syscon_SetCRSS(QN_SYSCON, SYSCON_MASK_REBOOT_SYS); break; #endif case ACCEL_INT_PIN: accel_int_handler(); break; default: //QPRINTF("GPIO INT DETECTED but not dealt with!!!\r\n"); break; } }
static void siglog_deferred(void) { const struct gpio_info *g = gpio_list; unsigned int i; timestamp_t tdiff = {.val = 0}; /* Disable interrupts for input signals while we print stuff.*/ for (i = 0; i < POWER_SIGNAL_COUNT; i++) gpio_disable_interrupt(power_signal_list[i].gpio); CPRINTF("%d signal changes:\n", siglog_entries); for (i = 0; i < siglog_entries; i++) { if (i) tdiff.val = siglog[i].time.val - siglog[i-1].time.val; CPRINTF(" %.6ld +%.6ld %s => %d\n", siglog[i].time.val, tdiff.val, g[siglog[i].signal].name, siglog[i].level); } if (siglog_truncated) CPRINTF(" SIGNAL LOG TRUNCATED...\n"); siglog_entries = siglog_truncated = 0; /* Okay, turn 'em on again. */ for (i = 0; i < POWER_SIGNAL_COUNT; i++) gpio_enable_interrupt(power_signal_list[i].gpio); } DECLARE_DEFERRED(siglog_deferred); static void siglog_add(enum gpio_signal signal) { if (siglog_entries >= MAX_SIGLOG_ENTRIES) { siglog_truncated = 1; return; } siglog[siglog_entries].time = get_time(); siglog[siglog_entries].signal = signal; siglog[siglog_entries].level = gpio_get_level(signal); siglog_entries++; hook_call_deferred(siglog_deferred, SECOND); } #define SIGLOG(S) siglog_add(S) #else #define SIGLOG(S) #endif /* CONFIG_BRINGUP */ void power_signal_interrupt(enum gpio_signal signal) { SIGLOG(signal); /* Shadow signals and compare with our desired signal state. */ power_update_signals(); /* Wake up the task */ task_wake(TASK_ID_CHIPSET); }