int main (void) { IRMP_DATA irmp_data; ROM_FPUEnable(); ROM_FPUStackingEnable(); ROM_SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); irmp_init(); // initialize irmp timer1_init(); // initialize timer1 sei (); // enable interrupts for (;;) { if (irmp_get_data (&irmp_data)) { // ir signal decoded, do something here... // irmp_data.protocol is the protocol, see irmp.h // irmp_data.address is the address/manufacturer code of ir sender // irmp_data.command is the command code // irmp_protocol_names[irmp_data.protocol] is the protocol name (if enabled, see irmpconfig.h) } } }
void ICACHE_FLASH_ATTR user_init() { void* p; uint32 now,diff; //~ system_timer_reinit(); //US_TIMER uart_init(BIT_RATE_115200, BIT_RATE_115200); os_printf("\n\nESP8266 IRMP Test v0.3 W.Strobl 20151120\n"); os_printf("F_INTERRUPTS==%d\n",F_INTERRUPTS); sysinfo(); hw_timer_init(NMI_SOURCE,1); hw_timer_set_func(irmp_timer); hw_timer_arm (1000000/F_INTERRUPTS); // Initialize the GPIO subsystem. gpio_init(); irmp_init (); //Start os task system_os_task(user_procTask, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen); system_os_post(user_procTaskPrio, 0, 0 ); os_printf("IRMP listening ...\n"); }
/** * @brief Entry point to start execution at * * This is the main entry point where execution will start. It initializes the * hardware and enters an infinite loop handling any upcoming events not yet * covered. * * @note This function makes use of the attribute "OS_main". For details * refer to [1]. * * [1]: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html * * @return Should never return anything */ __attribute__((OS_main)) int main() { uart_init(); log_main("Init...\n"); preferences_init(); #if (ENABLE_DCF_SUPPORT == 1) dcf77_init(); #endif display_init(); datetime_init(); ldr_init(); pwm_init(); irmp_init(); timer_init(); user_init(); sei(); pwm_on(); log_main("Init finished\n"); while (1) { brightness_handle(); datetime_handle(); handle_ir_code(); #if (ENABLE_UART_PROTOCOL == 1) uart_protocol_handle(); #endif /* (ENABLE_UART_PROTOCOL == 1) */ #if (ENABLE_DCF_SUPPORT == 1) datetime_t dt; // TODO: Make sure dcf77_getDateTime() validates its result if (dcf77_get_datetime(&dt)) { datetime_set(&dt); } #endif } }
/*--------------------------------------------------------------------------------------------------------------------------------------------------- * MAIN: main routine *--------------------------------------------------------------------------------------------------------------------------------------------------- */ //int main(void) __attribute__((noreturn)); /* saves some Bytes but produces warning */ int main (void) { static DATETIME datetime; uart_init(); // initialize uart log_main("Init...\n"); wcEeprom_init(); # if (DCF_PRESENT == 1) dcf77_init (); // initialize dcf77 # endif display_init (); // initialize display { // local to save stack uint8_t i2c_errorcode; uint8_t i2c_status; if (! i2c_rtc_init (&i2c_errorcode, &i2c_status)) // initialize rtc { log_main("RTC init failed\n"); // TODO: error handling } } ldr_init (); // initialize ldr pwm_init (); // initialize pwm irmp_init (); // initialize irmp timer_init (); // initialize timer user_init(); sei (); // enable interrupts pwm_on (); // switch on pwm //pwm_set_base_brightness_step(MAX_PWM_STEPS-1); /// @todo remove if ldr stuff is working log_main("Init finished\n"); for (;;) { handle_brightness (); handle_datetime (&datetime); // check & display new time, if necessary handle_ir_code (); // handle ir user interaction # if (DCF_PRESENT == 1) if (dcf77_getDateTime (&datetime)) // handle dcf77 examination (enable_dcf77_ISR must be TRUE to enable analysis) { i2c_rtc_write (&datetime); soft_seconds = datetime.ss; user_setNewTime (&datetime); } # endif /** (DCF_PRESENT == 1) */ } }
/** * use TIM15 as timer and TIM17 as PWM generator */ void startIRPage(void) { setZeroAcceleratorGyroValue(); TouchButton::setDefaultButtonColor(COLOR_GREEN); int tXPos = 0; for (unsigned int i = 0; i < NUMBER_OF_IR_BUTTONS; ++i) { TouchButtonsIRSend[i] = TouchButton::allocAndInitSimpleButton(tXPos, 0, BUTTON_WIDTH_4, BUTTON_HEIGHT_5, 0, IRButtonStrings[i], TEXT_SIZE_11, BUTTON_FLAG_DO_BEEP_ON_TOUCH, i, &doIRButtons); tXPos += BUTTON_WIDTH_4 + BUTTON_DEFAULT_SPACING; } TouchButtonToggleSendReceive = TouchButton::allocAndInitSimpleButton(BUTTON_WIDTH_3_POS_3, BUTTON_HEIGHT_4_LINE_4, BUTTON_WIDTH_3, BUTTON_HEIGHT_4, COLOR_RED, StringReceive, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, 0, &doToggleSendReceive); TouchButtonToggleLights = TouchButton::allocAndInitSimpleButton(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_4_LINE_4, BUTTON_WIDTH_3, BUTTON_HEIGHT_4, COLOR_BLACK, StringLights, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, sLightValue, &doToggleRedGreenButton); TouchButtonToggleLights->setRedGreenButtonColorAndDraw(); // Velocity TouchSliderVertical.initSlider(TEXT_SIZE_11_WIDTH, BUTTON_HEIGHT_5_LINE_2 + 10, TOUCHSLIDER_DEFAULT_SIZE * 2, VELOCITY_SLIDER_SIZE, VELOCITY_SLIDER_SIZE - 10, 0, StringVelocity, TOUCHSLIDER_DEFAULT_TOUCH_BORDER, TOUCHSLIDER_SHOW_BORDER | TOUCHSLIDER_SHOW_VALUE, &doVelocitySlider, &mapVelocityValue); TouchSliderVertical2.initSlider(70, BUTTON_HEIGHT_5_LINE_3, TOUCHSLIDER_DEFAULT_SIZE, NICK_MAX_VALUE, NICK_ZERO_VALUE, NICK_ZERO_VALUE, StringNick, TOUCHSLIDER_DEFAULT_TOUCH_BORDER, TOUCHSLIDER_SHOW_VALUE, NULL, NULL); TouchSliderHorizontal.initSlider(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_5_LINE_3, TOUCHSLIDER_DEFAULT_SIZE, YAW_MAX_VALUE - YAW_MIN_VALUE, YAW_ZERO_VALUE, YAW_ZERO_VALUE, StringYaw, TOUCHSLIDER_DEFAULT_TOUCH_BORDER, TOUCHSLIDER_SHOW_VALUE | TOUCHSLIDER_IS_HORIZONTAL, NULL, NULL); TouchButtonYaw_Minus = TouchButton::allocAndInitSimpleButton(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_4_LINE_3 + BUTTON_HEIGHT_4 - BUTTON_HEIGHT_6, BUTTON_WIDTH_10, BUTTON_HEIGHT_6, COLOR_RED, StringMinus, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, -3, &doSetYawTrim); TouchButtonYaw_Plus = TouchButton::allocAndInitSimpleButton(BUTTON_WIDTH_3_POS_2 + BUTTON_WIDTH_8 + 2 * BUTTON_DEFAULT_SPACING, BUTTON_HEIGHT_4_LINE_3 + BUTTON_HEIGHT_4 - BUTTON_HEIGHT_6, BUTTON_WIDTH_8, BUTTON_HEIGHT_6, COLOR_RED, StringPlus, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, 3, &doSetYawTrim); // enable high sink capability // SYSCFG_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus_PB9, ENABLE); irsnd_init(); irmp_init(); sSend = false; sIRSendData.protocol = IRMP_IHELICOPTER_PROTOCOL; //compute autoreload value for 16 bit timer without prescaler RCC_GetClocksFreq(&RCC_Clocks); IR_Timer_initialize((RCC_Clocks.PCLK2_Frequency / F_INTERRUPTS) - 1); IR_Timer_Start(); displayIRPage(); registerSimpleResizeAndReconnectCallback(&displayIRPage); }
void IRTask ( void * pvParameters ) { TimerInit ( ); irmp_init ( ); // initialize irmp IRMP_DATA irmp_data; while ( 1 ) { if ( irmp_get_data ( &irmp_data ) ) { printf ( "Protocol: %d, Address: %d, Command: %d, Flags: %d\n", ( uint16_t ) irmp_data.protocol, irmp_data.command, irmp_data.flags, ( uint16_t ) irmp_data.protocol ); }; } }
int main (void) { IRMP_DATA irmp_data; irmp_init(); // initialize irmp timer2_init(); // initialize timer2 for (;;) { if (irmp_get_data (&irmp_data)) { // ir signal decoded, do something here... // irmp_data.protocol is the protocol, see irmp.h // irmp_data.address is the address/manufacturer code of ir sender // irmp_data.command is the command code // irmp_protocol_names[irmp_data.protocol] is the protocol name (if enabled, see irmpconfig.h) } } }
int main ( void ) { timer2ini ( ); SystemInit ( ); irmp_init ( ); // initialize irmp IRMP_DATA irmp_data; while ( 1 ) { if ( irmp_get_data ( &irmp_data ) ) { printf ( "Protocol: %d, Address: %d, Command: %d, Flags: %d\n", ( uint16_t ) irmp_data.protocol, irmp_data.command, irmp_data.flags, ( uint16_t ) irmp_data.protocol ); }; }; };
int main (void) { IRMP_DATA irmp_data; irmp_init(); // initialize irmp // infinite loop, interrupts will blink PORTD pins and handle UART communications. while (1) { LATBbits.LATB0 = ~LATBbits.LATB0; if (irmp_get_data (&irmp_data)) { // ir signal decoded, do something here... // irmp_data.protocol is the protocol, see irmp.h // irmp_data.address is the address/manufacturer code of ir sender // irmp_data.command is the command code // irmp_protocol_names[irmp_data.protocol] is the protocol name (if enabled, see irmpconfig.h) printf("proto %d addr %d cmd %d\n", irmp_data.protocol, irmp_data.address, irmp_data.command ); } } }
int main(void) { out(DEBUGLED); for(uint8_t i=0; i<5; i++) { toggle(DEBUGLED); _delay_ms(100); } off(DEBUGLED); bt_init(); irmp_init(); timer1_init(); pwm_init(); IRMP_DATA irmp_data; sei(); // polling mode while(1) { checkIR(&irmp_data); checkBT(); } }//end main
int main(void) { uchar i; int intro = 1; static char reciveErrorCount = 0; static char carrierErrorCount = 0; wdt_enable(WDTO_1S); /* Even if you don't use the watchdog, turn it off here. On newer devices, * the status of the watchdog (on/off, period) is PRESERVED OVER RESET! * RESET status: all port bits are inputs without pull-up. * That's the way we need D+ and D-. Therefore we don't need any * additional hardware initialization. */ usbInit(); usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */ i = 0; while (--i) { // fake USB disconnect for > 250 ms wdt_reset(); _delay_ms(1); } usbDeviceConnect(); //sei(); //Ports initialization and other piperials LCD_Initalize(); LCD_Clear(); /* About project screen */ //LCD_GoTo(center("SMiW 2011/2012"), 0); //LCD_WriteText("SMiW 2011/2012"); //LCD_GoTo(center("Marcin Jabrzyk"), 2); //LCD_WriteText("Marcin Jabrzyk"); irmp_init(); //IR libary timer_init(); //IR timmer and ADC starter adc_init(); //ADC configuration cli(); intro = 0; if (RFM70_Initialize(0, (uint8_t*) "Smiw2")) { LCD_GoTo(center("Init RFM70"), 2); LCD_WriteText("Init RFM70"); _delay_ms(100); } else { LCD_GoTo(center("ERR init RFM70"), 1); LCD_WriteText("ERR init RFM70"); } if (RFM70_Present()) { LCD_GoTo(center("RFM70 present"), 3); LCD_WriteText("RFM70 present"); } else { LCD_GoTo(center("RFM70 not present"), 3); LCD_WriteText("RFM70 not present"); } sei(); for (;;) { /* main event loop */ wdt_reset(); usbPoll(); if (RFM70_Present()) { sprintf(screenDebug[0], screenDebugTemplate[0], "OK"); } else { sprintf(screenDebug[0], screenDebugTemplate[0], "ERROR"); } if (Carrier_Detected()) { sprintf(screenDebug[1], screenDebugTemplate[1], "OK"); carrierErrorCount = 0; } else { carrierErrorCount++; } if (carrierErrorCount > 50) { sprintf(screenDebug[1], screenDebugTemplate[1], "NONE"); } char* _tempGrzejnik; if (Packet_Received()) { sprintf(screenDebug[2], screenDebugTemplate[2], "OK"); Receive_Packet(message); //if from grzejnik starts with "a" else from piec _tempGrzejnik = strchr(message, 'a'); if (_tempGrzejnik != NULL ) { strncpy(tempFromGrzejnik, _tempGrzejnik, 4); sprintf(screenCenter[2], screenCenterTemplate[2], _tempGrzejnik); } else { strncpy(tempFromPiec, message, 4); sprintf(screenCenter[1], screenCenterTemplate[1], message); } reciveErrorCount = 0; } else { reciveErrorCount++; } if (reciveErrorCount > 90) { sprintf(screenDebug[2], screenDebugTemplate[2], "WAIT"); } if (irmp_get_data(&irmp_data)) { // When IR decodes a new key presed. lastKey = irmp_data.command; //Save the key itoa(irmp_data.command, lastKeyStr, 10); //Convert it to string sprintf(screenCenter[3], screenCenterTemplate[3], lastKeyStr); isChanged = 1; intro = 0; } if (intro == 0) { switch (lastKey) { //Change the view case 69: printScreenWithCenter(screenLeft); break; //CH- case 70: printScreen(screenCenter); break; //CH case 71: printScreenWithCenter(screenRight); break; //CH+ case 82: printScreen(screenDebug); break; default: printScreen(screenCenter); break; //Any other key } } usbPoll(); } return 0; }
static void led3_thread_entry(void* parameter) { rt_kprintf ( "\r\n led3_thread_entry!!\r\n"); irmp_init(); // initialize irmp irsnd_init(); timer2_init(); // initialize timer2 rt_kprintf ( "\r\n 红外收发系统初始化完成!\r\n"); for (;;) { char *str; // rt_kprintf ( "IRMP is going!!!\r\n"); rt_thread_delay(1); if(RT_EOK== (rt_mb_recv(&dfs_mb,(rt_uint32_t*)&str,RT_WAITING_NO))) {rt_kprintf("接收到控制邮件,数据为 %s",str); // TIM_Cmd(TIM2, ENABLE); if(strcmp(str,"getremote")==0) hot_remote_state=1; if(strcmp(str,"sendremote")==0) hot_remote_send=1; } if (irmp_get_data (&irmp_data)) { rt_kprintf("接收红外信号编码方式: %s",irmp_protocol_names[irmp_data.protocol]); rt_kprintf(" 编码地址: 0x%2X",irmp_data.address); rt_kprintf(" 命令: 0x%2X",irmp_data.command); rt_kprintf(" 标志位: 0x%2X\r\n",irmp_data.flags ); if(1==hot_remote_state) { hot_remote_state=2; irmp_data1=irmp_data; rt_mb_send(&mb,(rt_uint32_t)get_remot1_mp3);//发送邮件 rt_kprintf("红外接收完成第一次\n" ); } else if(2==hot_remote_state) { if(irmp_data1.command==irmp_data.command) { rt_kprintf("红外接收完成第二次,验证通过\n" ); rt_mb_send(&mb,(rt_uint32_t)get_remot2_mp3);//发送邮件 hot_remote_state=0; // TIM_Cmd(TIM2, DISABLE); } else { rt_kprintf("红外接收完成第二次,验证不通过,再次接收红外数据\n" ); rt_mb_send(&mb,(rt_uint32_t)check_fail_mp3);//发送邮件 hot_remote_state=1; } } } if(hot_remote_send) { hot_remote_send=0; // TIM_Cmd(TIM2, ENABLE); /* irmp_data.protocol = IRMP_SAMSUNG32_PROTOCOL; // use NEC protocol irmp_data.address = 0x0e0e; // set address to 0x00FF irmp_data.command = 0xf30c; // set command to 0x0001 irmp_data.flags = 0; // don't repeat frame*/ irsnd_send_data (&irmp_data, TRUE); // send frame, wait for completion // don't repeat frame rt_mb_send(&mb,(rt_uint32_t)sen_remot_mp3); rt_kprintf("发送红外数据完成\n"); rt_kprintf("发射红外信号编码方式: %s",irmp_protocol_names[irmp_data.protocol]); rt_kprintf(" 编码地址: 0x%2X",irmp_data.address); rt_kprintf(" 命令: 0x%2X",irmp_data.command); rt_kprintf(" 标志位: 0x%2X\r\n",irmp_data.flags ); // TIM_Cmd(TIM2, DISABLE); } } }
int main (void) { IRMP_DATA irmp_data; // Setup everything irmp_init(); timer_init(); pwm_init(); // enable interrupts sei(); // Main Loop for(;;) { if (!irmp_get_data(&irmp_data)) continue; //Repeating Commands if (!(irmp_data.flags&&IRMP_FLAG_REPETITION)) { switch (irmp_data.command) { case 0x0B: //flash led.steps=0; if (led.mode == FLASH) { led.mode=FIXED; led.hsv.val=255; led.steps=1; } else { led.mode = FLASH; led.speed = 100; led.steps=1; } break; case 0x0F: //strobe led.steps=0; if (led.mode == STROBE) { led.mode=FIXED; led.hsv.val=255; } else { led.mode = STROBE; led.speed = 20; led.hsv.sat=255; led.hsv.val=255; } break; case 0x13: //fade led.steps=0; if (led.mode == FADE) { led.mode=FIXED; led.hsv.val=255; led.speed=10; led.steps=1; } else { led.mode = FADE; led.speed = 10; led.hsv.sat=255; led.hsv.val=255; led.steps=1; } break; case 0x17: //smooth led.steps=0; if (led.mode == FLASH) { led.mode=FIXED; led.hsv.sat=255; led.hsv.val=255; } else { led.mode = FLASH; led.speed = 0xFF; } break; } } //Non-Repeating Commands switch (irmp_data.command) { //Lightness case 0x00: //lighter if (led.hsv.val <= 245) led.hsv.val+=10; break; case 0x01: //darker if (led.hsv.val > 20) led.hsv.val-=10; break; //Power On/Off Maybe use idle modes?! case 0x02: //off led.hsv.val=0; break; case 0x03: //on led.hsv.val=255; break; //Predefined Colors case 0x04: //R led.mode=FIXED; sethsv(0,255,255); break; case 0x05: //G led.mode=FIXED; sethsv(85,255,255); break; case 0x06: //B led.mode=FIXED; sethsv(170,255,255); break; case 0x07: //W led.mode=FIXED; sethsv(0,0,255); break; case 0x08: led.mode=FIXED; sethsv(42,255,255); break; case 0x09: led.mode=FIXED; sethsv(127,255,255); break; case 0x0A: led.mode=FIXED; sethsv(212,255,255); break; case 0x0C: // Speed+ if (led.speed > 1) --led.speed; break; case 0x0D: led.hsv.hue+=2; break; case 0x0E: if (led.hsv.sat<250) led.hsv.sat+=5; break; case 0x10: // Speed- if (led.speed < 255) ++led.speed; break; case 0x11: //hue- led.hsv.hue-=2; break; case 0x12: if (led.hsv.sat>5) led.hsv.sat-=5; break; case 0x14: break; case 0x15: break; case 0x16: break; } } }
int main (void) { IRMP_DATA irmp_data; char c; InitApp(); PWMoff(); RS232init(); __delay_ms(200); printf("IRMP PIC 12F1840 1.8 ws\r\n"); irmp_init(); // initialize irmp timer1_init(); // initialize timer1 ei(); // enable interrupts TMR1ON=1; // start timer for (;;) { if (kbhit()) { c=getch(); if (c>32 && c<127) putch(c); putch(' '); if (c=='.') { printf("MX115OFF "); RC5(0x15,0x0c,2); // Philips MC115 AUX OFF } else if (c=='n') { printf("NEC "); NEC(0x55,0xaa); } else { putch('?'); continue; } while (irsnd_is_busy ()) ; printf("PR2 %d\r\n",PR2); continue; } if (irmp_get_data (&irmp_data)) { printf("P "); printf("%d a=0x%04x c=0x%04x f=0x%02x (",irmp_data.protocol, irmp_data.address,irmp_data.command,irmp_data.flags); #if IRMP_PROTOCOL_NAMES printf(irmp_protocol_names[irmp_data.protocol]); #else switch(irmp_data.protocol) { case 1: printf("Sony"); break; case 2: printf("NEC"); break; case 7: printf("RC5"); break; case 0x21: printf("Ortek"); break; } #endif printf(")\r\n"); } } }
/** * use TIM15 as timer and TIM17 as PWM generator */ void startIRPage(void) { setZeroAccelerometerGyroValue(); int tXPos = 0; for (unsigned int i = 0; i < NUMBER_OF_IR_BUTTONS; ++i) { TouchButtonsIRSend[i].init(tXPos, 0, BUTTON_WIDTH_4, BUTTON_HEIGHT_5, COLOR_GREEN, IRButtonStrings[i], TEXT_SIZE_11, BUTTON_FLAG_DO_BEEP_ON_TOUCH, i, &doIRButtons); tXPos += BUTTON_WIDTH_4 + BUTTON_DEFAULT_SPACING; } TouchButtonToggleSendReceive.init(BUTTON_WIDTH_3_POS_3, BUTTON_HEIGHT_4_LINE_4, BUTTON_WIDTH_3, BUTTON_HEIGHT_4, COLOR_RED, StringReceive, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, 0, &doToggleSendReceive); TouchButtonToggleLights.init(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_4_LINE_4, BUTTON_WIDTH_3, BUTTON_HEIGHT_4, COLOR_GREEN, StringLights, TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH | BUTTON_FLAG_TYPE_TOGGLE_RED_GREEN, sLightValue, NULL); // Velocity TouchSliderVelocity.init(TEXT_SIZE_11_WIDTH, BUTTON_HEIGHT_5_LINE_2 + 12, SLIDER_DEFAULT_BAR_WIDTH * 2, VELOCITY_SLIDER_SIZE, VELOCITY_SLIDER_SIZE - 10, 0, COLOR_BLUE, COLOR_GREEN, FLAG_SLIDER_SHOW_BORDER, &doVelocitySlider); TouchSliderVelocity.setCaptionProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_LEFT, 4, COLOR_RED, COLOR_BACKGROUND_DEFAULT); TouchSliderVelocity.setCaption(StringVelocity); TouchSliderVelocity.setPrintValueProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_LEFT, 4 + TEXT_SIZE_11, COLOR_BLUE, COLOR_BACKGROUND_DEFAULT); // PITCH - vertical TouchSliderPitch.init(70, BUTTON_HEIGHT_5_LINE_3, SLIDER_DEFAULT_BAR_WIDTH, PITCH_MAX_VALUE, PITCH_ZERO_VALUE, PITCH_ZERO_VALUE, COLOR_BLACK, COLOR_GREEN, FLAG_SLIDER_VALUE_BY_CALLBACK, NULL); TouchSliderPitch.setBarBackgroundColor(COLOR_YELLOW); TouchSliderPitch.setCaptionProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_LEFT, 4, COLOR_RED, COLOR_BACKGROUND_DEFAULT); TouchSliderPitch.setCaption(StringPitch); TouchSliderPitch.setPrintValueProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_LEFT, 4 + TEXT_SIZE_11, COLOR_BLUE, COLOR_BACKGROUND_DEFAULT); // YAW - horizontal TouchSliderYaw.init(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_5_LINE_3, SLIDER_DEFAULT_BAR_WIDTH, YAW_MAX_VALUE - YAW_MIN_VALUE, YAW_ZERO_VALUE, YAW_ZERO_VALUE, COLOR_BLACK, COLOR_GREEN, FLAG_SLIDER_IS_HORIZONTAL | FLAG_SLIDER_VALUE_BY_CALLBACK, NULL); TouchSliderYaw.setBarBackgroundColor(COLOR_YELLOW); TouchSliderYaw.setCaptionProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_MIDDLE, 4, COLOR_RED, COLOR_BACKGROUND_DEFAULT); TouchSliderYaw.setCaption(StringYaw); TouchSliderYaw.setPrintValueProperties(TEXT_SIZE_11, FLAG_SLIDER_CAPTION_ALIGN_LEFT, 4, COLOR_BLUE, COLOR_BACKGROUND_DEFAULT); TouchButtonYaw_Minus.init(BUTTON_WIDTH_3_POS_2, BUTTON_HEIGHT_4_LINE_3 + BUTTON_HEIGHT_4 - BUTTON_HEIGHT_6, BUTTON_WIDTH_10, BUTTON_HEIGHT_6, COLOR_RED, "-", TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, -3, &doSetYawTrim); TouchButtonYaw_Plus.init( BUTTON_WIDTH_3_POS_2 + BUTTON_WIDTH_8 + 2 * BUTTON_DEFAULT_SPACING, BUTTON_HEIGHT_4_LINE_3 + BUTTON_HEIGHT_4 - BUTTON_HEIGHT_6, BUTTON_WIDTH_8, BUTTON_HEIGHT_6, COLOR_RED, "+", TEXT_SIZE_22, BUTTON_FLAG_DO_BEEP_ON_TOUCH, 3, &doSetYawTrim); /* Enable fast mode plus driving capability for selected I2C pin */ // SYSCFG->CFGR1 |= HAL_SYSCFG_FASTMODEPLUS_I2C1; irsnd_init(); irmp_init(); sSend = false; sIRSendData.protocol = IRMP_IHELICOPTER_PROTOCOL; //compute autoreload value for 16 bit timer without prescaler IR_Timer_initialize((HAL_RCC_GetPCLK2Freq() / F_INTERRUPTS) - 1); IR_Timer_Start(); drawIRPage(); registerRedrawCallback(&drawIRPage); }
/*------------------------------------------------------------------------------------------------------------------------------------------- * main function *------------------------------------------------------------------------------------------------------------------------------------------- */ int main () { static uint_fast8_t last_ldr_value = 0xFF; struct tm tm; LISTENER_DATA lis; ESP8266_INFO * esp8266_infop; uint_fast8_t esp8266_is_up = 0; uint_fast8_t code; #if SAVE_RAM == 0 IRMP_DATA irmp_data; uint32_t stop_time; uint_fast8_t cmd; #endif uint_fast8_t status_led_cnt = 0; uint_fast8_t display_flag = DISPLAY_FLAG_UPDATE_ALL; uint_fast8_t show_temperature = 0; uint_fast8_t time_changed = 0; uint_fast8_t power_is_on = 1; uint_fast8_t night_power_is_on = 1; uint_fast8_t ldr_value; uint_fast8_t ap_mode = 0; SystemInit (); SystemCoreClockUpdate(); // needed for Nucleo board #if defined (STM32F103) // disable JTAG to get back PB3, PB4, PA13, PA14, PA15 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // turn on clock for the alternate function register GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // disable the JTAG, enable the SWJ interface #endif log_init (); // initilize logger on uart #if SAVE_RAM == 0 irmp_init (); // initialize IRMP #endif timer2_init (); // initialize timer2 for IRMP, DCF77, EEPROM etc. delay_init (DELAY_RESOLUTION_1_US); // initialize delay functions with granularity of 1 us board_led_init (); // initialize GPIO for green LED on disco or nucleo board button_init (); // initialize GPIO for user button on disco or nucleo board rtc_init (); // initialize I2C RTC eeprom_init (); // initialize I2C EEPROM if (button_pressed ()) // set ESP8266 into flash mode { board_led_on (); esp8266_flash (); } log_msg ("\r\nWelcome to WordClock Logger!"); log_msg ("----------------------------"); log_str ("Version: "); log_msg (VERSION); if (rtc_is_up) { log_msg ("rtc is online"); } else { log_msg ("rtc is offline"); } if (eeprom_is_up) { log_msg ("eeprom is online"); read_version_from_eeprom (); log_printf ("current eeprom version: 0x%08x\r\n", eeprom_version); if ((eeprom_version & 0xFF0000FF) == 0x00000000) { // Upper and Lower Byte must be 0x00 if (eeprom_version >= EEPROM_VERSION_1_5_0) { #if SAVE_RAM == 0 log_msg ("reading ir codes from eeprom"); remote_ir_read_codes_from_eeprom (); #endif log_msg ("reading display configuration from eeprom"); display_read_config_from_eeprom (); log_msg ("reading timeserver data from eeprom"); timeserver_read_data_from_eeprom (); } if (eeprom_version >= EEPROM_VERSION_1_7_0) { log_msg ("reading night timers from eeprom"); night_read_data_from_eeprom (); } } } else { log_msg ("eeprom is offline"); } ldr_init (); // initialize LDR (ADC) display_init (); // initialize display dcf77_init (); // initialize DCF77 night_init (); // initialize night time routines short_isr = 1; temp_init (); // initialize DS18xx short_isr = 0; display_reset_led_states (); display_mode = display_get_display_mode (); animation_mode = display_get_animation_mode (); auto_brightness = display_get_automatic_brightness_control (); if (eeprom_is_up) { if (eeprom_version != EEPROM_VERSION) { log_printf ("updating EEPROM to version 0x%08x\r\n", EEPROM_VERSION); eeprom_version = EEPROM_VERSION; write_version_to_eeprom (); #if SAVE_RAM == 0 remote_ir_write_codes_to_eeprom (); #endif display_write_config_to_eeprom (); timeserver_write_data_to_eeprom (); night_write_data_to_eeprom (); eeprom_version = EEPROM_VERSION; } } ds3231_flag = 1; #if SAVE_RAM == 0 stop_time = uptime + 3; // wait 3 seconds for IR signal... display_set_status_led (1, 1, 1); // show white status LED while (uptime < stop_time) { if (irmp_get_data (&irmp_data)) // got IR signal? { display_set_status_led (1, 0, 0); // yes, show red status LED delay_sec (1); // and wait 1 second (void) irmp_get_data (&irmp_data); // flush input of IRMP now display_set_status_led (0, 0, 0); // and switch status LED off log_msg ("calling IR learn function"); if (remote_ir_learn ()) // learn IR commands { remote_ir_write_codes_to_eeprom (); // if successful, save them in EEPROM } break; // and break the loop } } #endif display_set_status_led (0, 0, 0); // switch off status LED esp8266_init (); esp8266_infop = esp8266_get_info (); while (1) { if (! ap_mode && esp8266_is_up && button_pressed ()) // if user pressed user button, set ESP8266 to AP mode { ap_mode = 1; log_msg ("user button pressed: configuring esp8266 as access point"); esp8266_is_online = 0; esp8266_infop->is_online = 0; esp8266_infop->ipaddress[0] = '\0'; esp8266_accesspoint ("wordclock", "1234567890"); } if (status_led_cnt) { status_led_cnt--; if (! status_led_cnt) { display_set_status_led (0, 0, 0); } } if ((code = listener (&lis)) != 0) { display_set_status_led (1, 0, 0); // got net command, light red status LED status_led_cnt = STATUS_LED_FLASH_TIME; switch (code) { case LISTENER_SET_COLOR_CODE: // set color { display_set_colors (&(lis.rgb)); log_printf ("command: set colors to %d %d %d\r\n", lis.rgb.red, lis.rgb.green, lis.rgb.blue); break; } case LISTENER_POWER_CODE: // power on/off { if (power_is_on != lis.power) { power_is_on = lis.power; display_flag = DISPLAY_FLAG_UPDATE_ALL; log_msg ("command: set power"); } break; } case LISTENER_DISPLAY_MODE_CODE: // set display mode { if (display_mode != lis.mode) { display_mode = display_set_display_mode (lis.mode); display_flag = DISPLAY_FLAG_UPDATE_ALL; log_printf ("command: set display mode to %d\r\n", display_mode); } break; } case LISTENER_ANIMATION_MODE_CODE: // set animation mode { if (animation_mode != lis.mode) { animation_mode = display_set_animation_mode (lis.mode); animation_flag = 0; display_flag = DISPLAY_FLAG_UPDATE_ALL; log_printf ("command: set animation mode to %d\r\n", animation_flag); } break; } case LISTENER_DISPLAY_TEMPERATURE_CODE: // set animation mode { show_temperature = 1; log_msg ("command: show temperature"); break; } case LISTENER_SET_BRIGHTNESS_CODE: // set brightness { if (auto_brightness) { auto_brightness = 0; last_ldr_value = 0xFF; display_set_automatic_brightness_control (auto_brightness); } display_set_brightness (lis.brightness); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; log_printf ("command: set brightness to %d, disable autmomatic brightness control per LDR\r\n", lis.brightness); break; } case LISTENER_SET_AUTOMATIC_BRIHGHTNESS_CODE: // automatic brightness control on/off { if (lis.automatic_brightness_control) { auto_brightness = 1; log_msg ("command: enable automatic brightness control"); } else { auto_brightness = 0; log_msg ("command: disable automatic brightness control"); } last_ldr_value = 0xFF; display_set_automatic_brightness_control (auto_brightness); break; } case LISTENER_TEST_DISPLAY_CODE: // test display { log_msg ("command: start display test"); display_test (); break; } case LISTENER_SET_DATE_TIME_CODE: // set date/time { if (rtc_is_up) { rtc_set_date_time (&(lis.tm)); } if (hour != (uint_fast8_t) lis.tm.tm_hour || minute != (uint_fast8_t) lis.tm.tm_min) { display_flag = DISPLAY_FLAG_UPDATE_ALL; } wday = lis.tm.tm_wday; hour = lis.tm.tm_hour; minute = lis.tm.tm_min; second = lis.tm.tm_sec; log_printf ("command: set time to %s %4d-%02d-%02d %02d:%02d:%02d\r\n", wdays_en[lis.tm.tm_wday], lis.tm.tm_year + 1900, lis.tm.tm_mon + 1, lis.tm.tm_mday, lis.tm.tm_hour, lis.tm.tm_min, lis.tm.tm_sec); break; } case LISTENER_GET_NET_TIME_CODE: // get net time { net_time_flag = 1; log_msg ("command: start net time request"); break; } case LISTENER_IR_LEARN_CODE: // IR learn { #if SAVE_RAM == 0 log_msg ("command: learn IR codes"); if (remote_ir_learn ()) { remote_ir_write_codes_to_eeprom (); } #endif break; } case LISTENER_SAVE_DISPLAY_CONFIGURATION: // save display configuration { display_write_config_to_eeprom (); log_msg ("command: save display settings"); break; } } } if (auto_brightness && ldr_poll_brightness (&ldr_value)) { if (ldr_value + 1 < last_ldr_value || ldr_value > last_ldr_value + 1) // difference greater than 2 { log_printf ("ldr: old brightnes: %d new brightness: %d\r\n", last_ldr_value, ldr_value); last_ldr_value = ldr_value; display_set_brightness (ldr_value); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; } } if (!esp8266_is_up) // esp8266 up yet? { if (esp8266_infop->is_up) { esp8266_is_up = 1; log_msg ("esp8266 now up"); } } else { // esp8266 is up... if (! esp8266_is_online) // but not online yet... { if (esp8266_infop->is_online) // now online? { char buf[32]; esp8266_is_online = 1; log_msg ("esp8266 now online"); sprintf (buf, " IP %s", esp8266_infop->ipaddress); display_banner (buf); display_flag = DISPLAY_FLAG_UPDATE_ALL; net_time_flag = 1; } } } if (dcf77_time(&tm)) { display_set_status_led (1, 1, 0); // got DCF77 time, light yellow = green + red LED status_led_cnt = 50; if (rtc_is_up) { rtc_set_date_time (&tm); } if (hour != (uint_fast8_t) tm.tm_hour || minute != (uint_fast8_t) tm.tm_min) { display_flag = DISPLAY_FLAG_UPDATE_ALL; } wday = tm.tm_wday; hour = tm.tm_hour; minute = tm.tm_min; second = tm.tm_sec; log_printf ("dcf77: %s %4d-%02d-%02d %02d:%02d:%02d\r\n", wdays_en[tm.tm_wday], tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } if (ds3231_flag) { if (rtc_is_up && rtc_get_date_time (&tm)) { if (hour != (uint_fast8_t) tm.tm_hour || minute != (uint_fast8_t) tm.tm_min) { display_flag = DISPLAY_FLAG_UPDATE_ALL; } wday = tm.tm_wday; hour = tm.tm_hour; minute = tm.tm_min; second = tm.tm_sec; log_printf ("read rtc: %s %4d-%02d-%02d %02d:%02d:%02d\r\n", wdays_en[tm.tm_wday], tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } ds3231_flag = 0; } if (auto_brightness && ldr_conversion_flag) { ldr_start_conversion (); ldr_conversion_flag = 0; } if (net_time_flag) { if (esp8266_infop->is_online) { display_set_status_led (0, 0, 1); // light blue status LED status_led_cnt = STATUS_LED_FLASH_TIME; timeserver_start_timeserver_request (); // start a timeserver request, answer follows... } net_time_flag = 0; net_time_countdown = 3800; // next net time after 3800 sec } if (show_time_flag) // set every full minute { #if WCLOCK24H == 1 display_flag = DISPLAY_FLAG_UPDATE_ALL; #else if (minute % 5) { display_flag = DISPLAY_FLAG_UPDATE_MINUTES; // only update minute LEDs } else { display_flag = DISPLAY_FLAG_UPDATE_ALL; } #endif show_time_flag = 0; } if (power_is_on == night_power_is_on && night_check_night_times (power_is_on, wday, hour * 60 + minute)) { power_is_on = ! power_is_on; night_power_is_on = ! night_power_is_on; display_flag = DISPLAY_FLAG_UPDATE_ALL; log_printf ("Found Timer: %s at %02d:%02d\r\n", power_is_on ? "on" : "off", hour, minute); } if (show_temperature) { uint_fast8_t temperature_index; show_temperature = 0; if (ds18xx_is_up) { short_isr = 1; temperature_index = temp_read_temp_index (); short_isr = 0; log_printf ("got temperature from DS18xxx: %d%s\r\n", temperature_index / 2, (temperature_index % 2) ? ".5" : ""); } else if (rtc_is_up) { temperature_index = rtc_get_temperature_index (); log_printf ("got temperature from RTC: %d%s\r\n", temperature_index / 2, (temperature_index % 2) ? ".5" : ""); } else { temperature_index = 0xFF; log_msg ("no temperature available"); } if (temperature_index != 0xFF) { display_temperature (power_is_on, temperature_index); #if WCLOCK24H == 1 // WC24H shows temperature with animation, WC12H rolls itself uint32_t stop_time; stop_time = uptime + 5; while (uptime < stop_time) { if (animation_flag) { animation_flag = 0; display_animation (); } } #endif display_flag = DISPLAY_FLAG_UPDATE_ALL; // force update } } if (display_flag) // refresh display (time/mode changed) { log_msg ("update display"); #if WCLOCK24H == 1 if (display_mode == MODES_COUNT - 1) // temperature { uint_fast8_t temperature_index; if (ds18xx_is_up) { short_isr = 1; temperature_index = temp_read_temp_index (); short_isr = 0; log_printf ("got temperature from DS18xxx: %d%s\r\n", temperature_index / 2, (temperature_index % 2) ? ".5" : ""); } else if (rtc_is_up) { temperature_index = rtc_get_temperature_index (); log_printf ("got temperature from RTC: %d%s\r\n", temperature_index / 2, (temperature_index % 2) ? ".5" : ""); } else { temperature_index = 0x00; log_msg ("no temperature available"); } display_clock (power_is_on, 0, temperature_index - 20, display_flag); // show new time } else { display_clock (power_is_on, hour, minute, display_flag); // show new time } #else display_clock (power_is_on, hour, minute, display_flag); // show new time #endif display_flag = DISPLAY_FLAG_NONE; } if (animation_flag) { animation_flag = 0; display_animation (); } if (dcf77_flag) { dcf77_flag = 0; dcf77_tick (); } #if SAVE_RAM == 0 cmd = remote_ir_get_cmd (); // get IR command if (cmd != REMOTE_IR_CMD_INVALID) // got IR command, light green LED { display_set_status_led (1, 0, 0); status_led_cnt = STATUS_LED_FLASH_TIME; } if (cmd != REMOTE_IR_CMD_INVALID) // if command valid, log command code { switch (cmd) { case REMOTE_IR_CMD_POWER: log_msg ("IRMP: POWER key"); break; case REMOTE_IR_CMD_OK: log_msg ("IRMP: OK key"); break; case REMOTE_IR_CMD_DECREMENT_DISPLAY_MODE: log_msg ("IRMP: decrement display mode"); break; case REMOTE_IR_CMD_INCREMENT_DISPLAY_MODE: log_msg ("IRMP: increment display mode"); break; case REMOTE_IR_CMD_DECREMENT_ANIMATION_MODE: log_msg ("IRMP: decrement animation mode"); break; case REMOTE_IR_CMD_INCREMENT_ANIMATION_MODE: log_msg ("IRMP: increment animation mode"); break; case REMOTE_IR_CMD_DECREMENT_HOUR: log_msg ("IRMP: decrement hour"); break; case REMOTE_IR_CMD_INCREMENT_HOUR: log_msg ("IRMP: increment hour"); break; case REMOTE_IR_CMD_DECREMENT_MINUTE: log_msg ("IRMP: decrement minute"); break; case REMOTE_IR_CMD_INCREMENT_MINUTE: log_msg ("IRMP: increment minute"); break; case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_RED: log_msg ("IRMP: decrement red brightness"); break; case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_RED: log_msg ("IRMP: increment red brightness"); break; case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_GREEN: log_msg ("IRMP: decrement green brightness"); break; case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_GREEN: log_msg ("IRMP: increment green brightness"); break; case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_BLUE: log_msg ("IRMP: decrement blue brightness"); break; case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_BLUE: log_msg ("IRMP: increment blue brightness"); break; case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS: log_msg ("IRMP: decrement brightness"); break; case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS: log_msg ("IRMP: increment brightness"); break; case REMOTE_IR_CMD_GET_TEMPERATURE: log_msg ("IRMP: get temperature"); break; } } switch (cmd) { case REMOTE_IR_CMD_POWER: { power_is_on = ! power_is_on; display_flag = DISPLAY_FLAG_UPDATE_ALL; break; } case REMOTE_IR_CMD_OK: { display_write_config_to_eeprom (); break; } case REMOTE_IR_CMD_DECREMENT_DISPLAY_MODE: // decrement display mode { display_mode = display_decrement_display_mode (); display_flag = DISPLAY_FLAG_UPDATE_ALL; break; } case REMOTE_IR_CMD_INCREMENT_DISPLAY_MODE: // increment display mode { display_mode = display_increment_display_mode (); display_flag = DISPLAY_FLAG_UPDATE_ALL; break; } case REMOTE_IR_CMD_DECREMENT_ANIMATION_MODE: // decrement display mode { animation_mode = display_decrement_animation_mode (); display_flag = DISPLAY_FLAG_UPDATE_ALL; break; } case REMOTE_IR_CMD_INCREMENT_ANIMATION_MODE: // increment display mode { animation_mode = display_increment_animation_mode (); display_flag = DISPLAY_FLAG_UPDATE_ALL; break; } case REMOTE_IR_CMD_DECREMENT_HOUR: // decrement hour { if (hour > 0) { hour--; } else { hour = 23; } second = 0; display_flag = DISPLAY_FLAG_UPDATE_ALL; time_changed = 1; break; } case REMOTE_IR_CMD_INCREMENT_HOUR: // increment hour { if (hour < 23) { hour++; } else { hour = 0; } second = 0; display_flag = DISPLAY_FLAG_UPDATE_ALL; time_changed = 1; break; } case REMOTE_IR_CMD_DECREMENT_MINUTE: // decrement minute { if (minute > 0) { minute--; } else { minute = 59; } second = 0; display_flag = DISPLAY_FLAG_UPDATE_ALL; time_changed = 1; break; } case REMOTE_IR_CMD_INCREMENT_MINUTE: // increment minute { if (minute < 59) { minute++; } else { minute = 0; } second = 0; display_flag = DISPLAY_FLAG_UPDATE_ALL; time_changed = 1; break; } case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_RED: // decrement red brightness { display_decrement_color_red (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_RED: // increment red brightness { display_increment_color_red (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_GREEN: // decrement green brightness { display_decrement_color_green (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_GREEN: // increment green brightness { display_increment_color_green (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS_BLUE: // decrement blue brightness { display_decrement_color_blue (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS_BLUE: // increment blue brightness { display_increment_color_blue (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_AUTO_BRIGHTNESS_CONTROL: // toggle auto brightness { auto_brightness = ! auto_brightness; last_ldr_value = 0xFF; display_set_automatic_brightness_control (auto_brightness); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_DECREMENT_BRIGHTNESS: // decrement brightness { if (auto_brightness) { auto_brightness = 0; last_ldr_value = 0xFF; display_set_automatic_brightness_control (auto_brightness); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; } display_decrement_brightness (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_INCREMENT_BRIGHTNESS: // increment brightness { if (auto_brightness) { auto_brightness = 0; last_ldr_value = 0xFF; display_set_automatic_brightness_control (auto_brightness); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; } display_increment_brightness (); display_flag = DISPLAY_FLAG_UPDATE_NO_ANIMATION; break; } case REMOTE_IR_CMD_GET_TEMPERATURE: // get temperature { show_temperature = 1; break; } default: { break; } } #endif // SAVE_RAM == 0 if (time_changed) { if (rtc_is_up) { tm.tm_hour = hour; tm.tm_min = minute; tm.tm_sec = second; rtc_set_date_time (&tm); } time_changed = 0; } } return 0; }
int main( void ) { wdt_disable(); jtag_disable(); rs232_init( 9600, 0 ); spi_init( SPI_HALFSPEED | SPI_EIGHTHSPEED ); spi_idetrol_slave_init( &player ); irmp_init(); timer1_init(); timer2_init(); stdin = stdout = &rs232inout; sei(); printf_P( PSTR("\nCDTrol "__DATE__"\n") ); if( !ata_init() ) { printf_P( PSTR("ATA Initialization failed\n") ); _delay_ms(1000); return 1; } if( !atapi_init() ) { printf_P( PSTR("ATAPI Initialization failed\n") ); _delay_ms(1000); return 1; } if( !atapiplayer_init( &player ) ) { printf_P( PSTR("ATAPIPlayer Initialization failed\n") ); _delay_ms(1000); return 1; } while( true ) { spi_idetrol_slave_update(); if( updateFlag ) { atapiplayer_update( &player ); updateFlag = 0; } if( irmp_get_data( &irmp_data ) ) { if( ! (irmp_data.flags & IRMP_FLAG_REPETITION) ) { printf_P( PSTR("\nIRMP: protocol \"%S\", address %d, command %d\n"), (PGM_P)pgm_read_word(&(irmp_protocol_strings[irmp_data.protocol])), irmp_data.address, irmp_data.command ); switch( irmp_data.command ) { case 53: printf_P( PSTR("\nPlay\n") ); atapiplayer_play( &player ); break; case 48: printf_P( PSTR("\nPause\n") ); atapiplayer_pause( &player ); break; case 54: printf_P( PSTR("\nStop\n") ); atapiplayer_stop( &player ); break; case 36: printf_P( PSTR("\nPrevious\n") ); atapiplayer_previous( &player ); break; case 30: printf_P( PSTR("\nNext\n") ); atapiplayer_next( &player ); break; case 55: printf_P( PSTR("\nLoad/Eject\n") ); atapiplayer_loadEject( &player ); break; } } switch( irmp_data.command ) { case 52: printf_P( PSTR("\nFastForward\n") ); atapiplayer_forward( &player ); break; case 50: printf_P( PSTR("\nFastRewind\n") ); atapiplayer_rewind( &player ); break; case 59: atapi_printError(); break; } } } return 0; }