void signal_shutting_down() { led_digits_set_blink(0); led_digits_enable(); led_green_set(0); led_green_set_blink(0); led_red_set(1); led_red_set_blink(1); }
void signal_boot_up() { led_digits_set_value(0); led_digits_set_blink(0); led_red_set(0); led_green_set(1); led_green_set_blink(1); led_red_set_blink(1); }
void keyboard_task() { uint16_t input; while(1) { input = read_inputs_image(); if(input&BUTT_0_MASK) led_green_toggle(); if(input&BUTT_1_MASK) led_red_toggle(); if(input&BUTT_2_MASK) {led_green_toggle();led_red_toggle();} if(input&BUTT_3_MASK) {led_green_set();led_red_set();} if(input&BUTT_4_MASK) {led_green_reset();led_red_reset();} if(input&BUTT_5_MASK) {led_green_set();} if(input&BUTT_6_MASK) {led_red_set();} if(input&BUTT_7_MASK) {led_green_reset();} if(input&BUTT_8_MASK) {led_red_reset();} if(input&BUTT_9_MASK) {} if(input&BUTT_F_MASK) {} if(input&BUTT_N_MASK) {} } }
/***************************************************************************** ** Main Function main() ******************************************************************************/ int main (void) { /* Setup SysTick Timer for 10 msec interrupts */ if (SysTick_Config(SystemCoreClock / 100)) { while (1); /* Capture error */ } if (!(SysTick->CTRL & SysTick_CTRL_CLKSOURCE_Msk)) { /* When external reference clock is used(CLKSOURCE in Systick Control and register bit 2 is set to 0), the SYSTICKCLKDIV must be a non-zero value and 2.5 times faster than the reference clock. When core clock, or system AHB clock, is used(CLKSOURCE in Systick Control and register bit 2 is set to 1), the SYSTICKCLKDIV has no effect to the SYSTICK frequency. See more on Systick clock and status register in Cortex-M3 technical Reference Manual. */ LPC_SYSCON->SYSTICKCLKDIV = 0x08; } GPIOInit(); init_timers(); // The LED on Xpresso /* Set port 0_7 to output */ GPIOSetDir( LED_PORT, LED_BIT, 1 ); GPIOSetValue( 0, 7, LEDvalue ); // buttons buttons_init(); power_mgr_init(); // check for 'next' button if (GPIOGetValue(0, 6)) { led_digits_init(); led_digits_enable(); //led_digits_set_blink(1); led_red_set(1); led_green_set(1); } else { GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); } // BARCODE reader barcode_init(); barcode_reset(); // RFID reader rdm630_init(); rdm630_reset(); // UART UARTInit(115200); // Enable the UART Interrupt NVIC_EnableIRQ(UART_IRQn); LPC_UART->IER = IER_RBR | IER_RLS; logger_setEnabled(1); logger_logStringln("/O:entering main loop..."); // send online message (means i'm online) uint8_t counter = 0; for(counter = 0; counter < 100; counter++) { led_digits_set_value(counter); delay32Ms(0, 20); } for(counter = 0; counter < 10; counter++) { led_digits_set_value_by_chars('0' + counter, '0' + counter); delay32Ms(0, 200); } delay32Ms(0, 200); led_digits_enable(); signal_boot_up(); int8_t last_remaining_seconds = -1; while (1) { /* process logger */ if (logger_dataAvailable() && UARTTxEmpty) { uint8_t iCounter; // fill transmit FIFO with 14 bytes for (iCounter = 0; iCounter < 14 && logger_dataAvailable(); iCounter++) { UARTSendByte(logger_read()); } } power_mgr_process(msTicks); barcode_process(msTicks); rdm630_process(msTicks); buttons_process(msTicks); led_digits_process(msTicks); /* if (power_mgr_is_shutting_down()) { if (power_mgr_get_remaining_player_seconds() != last_remaining_seconds) { last_remaining_seconds = power_mgr_get_remaining_player_seconds(); led_digits_set_value(last_remaining_seconds); } if (last_remaining_seconds == 0) { led_green_set(0); led_red_set(1); led_digits_disable(); } continue; } */ main_process_barcode(); main_process_rfid(); main_process_buttons(); main_process_uart(); } }
void main_process_uart() { if (UARTCount > 0 && UARTBuffer[UARTCount-1] == 0x0A) { // command structure: // [0] = '/' => identifier // [1] = <command> // [2] = ':' => separator // [3] = <param1> // [4] = <param2> // etc. // [n] = 0x0A if (UARTCount > 3 && UARTBuffer[0] == '/' && UARTBuffer[2] == ':') { uint8_t command = UARTBuffer[1]; // heart beat message from player if (command == 'H') { led_digits_set_blink(0); led_digits_set_blink_interval(500); led_green_set_blink(0); led_red_set_blink(0); led_red_set(0); led_green_set(1); // send heart beat logger_logString("/H:0"); logger_logCRLF(); } // set led digits // e.g. /L:13 -> output 13 if (command == 'L' && UARTCount > 5) { uint8_t digit1 = UARTBuffer[3]; uint8_t digit0 = UARTBuffer[4]; // update only if new /* if (digit0 != last_digit_0 || digit1 != last_digit_1) { last_digit_0 = digit0; last_digit_1 = digit1; } */ led_digits_set_value_by_chars(digit0, digit1); } // set led // "/l:R0" -> led red off // "/l:R1" -> led red on // "/l:R2" -> led red blink off // "/l:R3" -> led red blink on // "/l:G0" -> led green off // "/l:G1" -> led green on // "/l:G2" -> led green blink off // "/l:G3" -> led green blink on if (command == 'l' && UARTCount > 5) { uint8_t param1 = UARTBuffer[3]; uint8_t param2 = UARTBuffer[4]; if (param1 == 'R') { switch (param2) { case '0' : led_red_set(0); break; case '1' : led_red_set(1); break; case '2' : led_red_set_blink(0); break; case '3' : led_red_set_blink(1); break; } } if (param1 == 'G') { switch (param2) { case '0' : led_green_set(0); break; case '1' : led_green_set(1); break; case '2' : led_green_set_blink(0); break; case '3' : led_green_set_blink(1); break; } } } // shutdown message // message '/S:xx' // e.g. '/S:30' shutdown in 30 seconds if (command == 'S' && UARTCount > 5) { // do somegthing int8_t param1 = get_char_to_int(UARTBuffer[3]); int8_t param2 = get_char_to_int(UARTBuffer[4]); if (param1 > -1 && param2 > -1) { signal_shutting_down(); int8_t seconds = param1*10 + param2; power_mgr_shutdown_player(seconds); } } // message blink digits if (command == 'D' && UARTCount > 4) { uint8_t param1 = UARTBuffer[3]; switch (param1) { case '0' : led_digits_disable(); led_digits_set_blink(0); break; case '1' : led_digits_enable(); led_digits_set_blink(0); break; case '2' : led_digits_set_blink(0); led_digits_enable(); break; case '3' : led_digits_set_blink(1); break; } /* // e.g. '/D:15' if (UARTCount >= 5 && UARTBuffer[4] >= '0' && UARTBuffer[4] <= '9') { uint16_t interval = 100 * UARTBuffer[4]; led_digits_set_blink_interval(interval); } */ } // message power management control // "/P:P0" -> player off (use with care!) // "/P:P1" -> player on (obsolete) // "/P:A0" -> amp off // "/P:A1" -> amp on if (command == 'P' && UARTCount > 5) { uint8_t param1 = UARTBuffer[3]; uint8_t param2 = UARTBuffer[4]; if (param1 == 'P') { switch (param2) { case '0' : power_mgr_set_player(0); break; case '1' : power_mgr_set_player(1); break; } } if (param1 == 'A') { switch (param2) { case '0' : power_mgr_set_amp(0); break; case '1' : power_mgr_set_amp(1); break; } } } } UARTCount = 0; } }