mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/
Dependencies: ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD
Diff: display.cpp
- Revision:
- 0:bdb53686c194
- Child:
- 1:6c7141895545
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/display.cpp Mon Jul 04 15:16:45 2011 +0000 @@ -0,0 +1,89 @@ +#include "mbed.h" +#include "weather.h" +#ifdef USE_DISPLAY +#include "I2CLEDDisp.h" +#include "I2CLCD.h" + +static I2CLEDDisp *leddisp; +static I2CLCD *lcd; +static volatile int lcd_flg = 0, leddisp_flg = 0; +static volatile int leddisp_freq = 0, leddisp_pos = -4; +static char leddisp_buf[150]; +#endif + +void update_display () { +#ifdef USE_DISPLAY + char buf[128], tmp[128]; + + if (leddisp_flg && cfg.getValue("LEDDISP_MESG", tmp, sizeof(tmp))) { + format_str(tmp, leddisp_buf, sizeof(leddisp_buf)); + } + + if (lcd_flg && cfg.getValue("LCD_MESG", tmp, sizeof(tmp))) { + format_str(tmp, buf, sizeof(buf)); + lcd->cls(); + lcd->puts(buf); + } +#endif +} + +void pool_display () { +#ifdef USE_DISPLAY + int i, addr, len; + + // LED Display scroll + if (leddisp_flg) { + leddisp_freq ++; + if (leddisp_freq > LED_FREQ) { + + len = strlen(leddisp_buf); + leddisp->locate(0, 0); + for (i = 0; i < 4; i ++) { + addr = leddisp_pos + i; + if (addr >= 0 && addr < len) { + leddisp->putc(leddisp_buf[addr]); + } else { + leddisp->putc(' '); + } + } + + leddisp_pos ++; + if (leddisp_pos >= len + 4) { + leddisp_pos = -4; + } + + leddisp_freq = 0; + } + } +#endif +} + +int init_display () { +#ifdef USE_DISPLAY + char buf[128]; + enum I2CLCDType lcdtype = LCD16x2; + enum I2CLCDConfig lcdconf = LCDCFG_3V; + + if (cfg.getValue("LCD_MESG", buf, sizeof(buf))) { + if (cfg.getValue("LCD_TYPE", buf, sizeof(buf))) { + lcdtype = (enum I2CLCDType)atoi(buf); + } + if (cfg.getValue("LCD_CONF", buf, sizeof(buf))) { + lcdconf = (enum I2CLCDConfig)atoi(buf); + } + lcd = new I2CLCD(i2c, I2CLCD_ADDR, lcdtype, lcdconf); + if (lcd == NULL) return -1; + lcd_flg = 1; + + strncpy(leddisp_buf, VERSION, sizeof(leddisp_buf)); + } + + if (cfg.getValue("LEDDISP_MESG", buf, sizeof(buf))) { + leddisp = new I2CLEDDisp(i2c); + if (leddisp == NULL) return -1; + leddisp_flg = 1; + } + +#endif + return 0; +}