static void controller_task (void) { unsigned int button_last_state = BUTTON_UP; unsigned int mode = 0; while(1) { if (button_get_state(BUTTON_CENTER) == BUTTON_DOWN) { if (button_last_state == BUTTON_UP) { switch(mode) { case 0: add_task(func_task_b); mode++; break; case 1: add_task(func_task_a); mode++; break; default: mode++; //TODO: shutdown } } button_last_state = BUTTON_DOWN; } else { button_last_state = BUTTON_UP; } } }
static gboolean on_is_on(Button *btn, GDBusMethodInvocation *invocation, gpointer user_data) { gboolean btn_state=button_get_state(btn); button_complete_is_on(btn,invocation,btn_state); return TRUE; }
int main(void) { _delay_ms(250); servo_init(); ir_init(); bluetooth_init(); ultrasonic_init(); buttons_init(); sei(); while(1) { comm_exec(); move_proc(); if (button_get_state(1)) move_enable(false); if (button_get_state(2)) move_enable(true); } }
/* Manual calibration task */ void calibration_manual_task(void) { uint16_t value = 0; if(button_get_state(1) == BUTTON_PRESSED) { value = servo_angle_decrease(SERVO_1); uprintf("boutton 1 value = %d\r\n",value); } if(button_get_state(2) == BUTTON_PRESSED) { value = servo_angle_increase(SERVO_1); uprintf("boutton 2 value = %d\r\n",value); } if(button_get_state(3) == BUTTON_PRESSED) { value = servo_angle_increase(SERVO_2); uprintf("boutton 3 value = %d\r\n",value); } if(button_get_state(4) == BUTTON_PRESSED) { value = servo_angle_decrease(SERVO_2); uprintf("boutton 4 value = %d\r\n",value); } }
/** * Entry point */ int main(void) { /* Misc variables */ DCPU_registers reg; // CPU registers states (at boot) /* Hardware initialisation */ cli(); led_setup(); spi_setup(SPI_PRESCALER, SPI_MODE, SPI_BITS_ORDER); uart_setup(UART_BAUDRATE); DEBUG_STR("Main init", "UART ready"); button_setup(); buzzer_setup(BUZZER_FREQUENCY, BUZZER_DURATION); ram_setup(); rom_setup(); microvga_setup(); microvga_enable(); dcpu_register_init(®); DEBUG_STR("Main init", "done"); sei(); /* MicroVGA initialisation */ _delay_ms(1000); // MicroVGA boot time microvga_clear_screen(); // Clear screen and goto (0, 0) microvga_goto_cursor(0, 0); uart_puts_PSTR(PSTR("SkyWodd DCPU-16 hardware emulator")); // Screen test buzzer_beep(); DEBUG_STR("Main init", "MicroVGA ready"); /* Hardware self-test */ DEBUG_STR("Main init", "self-test run"); led_run_write(1); // Led test _delay_ms(250); led_run_write(0); led_cpu_write(1); _delay_ms(250); led_cpu_write(0); led_rom_write(1); _delay_ms(250); led_rom_write(0); led_ram_write(1); _delay_ms(250); led_ram_write(0); DEBUG_STR("Main init", "self-test done"); /* Keyboard & MicroVGA api test */ DEBUG_STR("Main init", "waiting for keypress"); microvga_goto_cursor(0, 1); uart_puts_PSTR(PSTR("Press any key to boot ...")); keyboard_wait(); uart_puts_PSTR(PSTR("Loading please wait ...")); dcpu_setup(reg); buzzer_beep(); microvga_clear_screen(); microvga_goto_cursor(0, 0); DEBUG_STR("Main init", "ready to run"); /* Infinite loop */ for(;;) { /* Handle pause */ while(!button_get_state()); #ifdef SERIAL_DEBUG_SUPPORT /* Debug */ dcpu_registers_dump(); #endif /* Fetch opcode from ROM */ dcpu_step(); } }