Dependencies: EthernetNetIf NTPClient_NetServices mbed
Diff: tokei.c
- Revision:
- 0:f49394bec833
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tokei.c Sun Dec 11 00:24:18 2011 +0000 @@ -0,0 +1,769 @@ +/***********************************************************************/ +/* */ +/* tokei.c */ +/* */ +/***********************************************************************/ +#define _TOKEI_C + +#include "mbed.h" +#include "math.h" + +#include "tokei.h" +#include "display.h" +#include "dotmatrix.h" +#include "NTPClient.h" +#include "NTP.h" + +//#define DBG + +/*****************************Macro definition********************************/ + +/*****************************Global variable*********************************/ + +/******************************Function declaration***************************/ +static void tokei_jikokuKeiji(_JIKOKU *j); +static void tokei_byoHyoji(_JIKOKU j); +static void tokei_funHyoji(_JIKOKU j); +static void tokei_jiHyoji(_JIKOKU j); +static void tokei_amPmHyoji(_JIKOKU j); +static _DISPLAYPOSITION tokei_byoIti(uint8_t sec); +static _DISPLAYPOSITION tokei_jiIti(uint8_t ji, uint8_t min); +static void tokei_mojibanByo(void); +static void tokei_mojibanJi(void); + + +/****************************************************************************** +Name : jikoku keiji +Parameters : none +Returns : nothing +Description: 100ms call +******************************************************************************/ + +void tokei_main(void) +{ + + tokei_jikokuKeiji(&D_genzaiJikoku); + + // genzai jikoku hyoji + tokei_funHyoji(D_genzaiJikoku); + tokei_byoHyoji(D_genzaiJikoku); // fun no dot wo henko suru no de tokei_funHyoji()no ato ni jittko + tokei_jiHyoji(D_genzaiJikoku); + + // mojiban hyoji + tokei_amPmHyoji(D_genzaiJikoku); + tokei_mojibanByo(); + tokei_mojibanJi(); + + // TLC5940 heno kakikae wo siteinaitoki ni hyoji data kosin + if(F_kakikae == 0){ + // hyoji data kakikae OK + for(uint8_t x = 0; x < 16; x++){ + for(uint8_t y = 0; y < 16; y++){ + B_display[Z_green][x][y] = D_display[Z_green][x][y]; + B_display[Z_red][x][y] = D_display[Z_red][x][y]; + } + } + } +} + +/****************************************************************************** +Name : jikoku keiji (debug) +Parameters : none +Returns : nothing +Description: 10ms call +******************************************************************************/ +#ifndef DBG +static void tokei_jikokuKeiji(_JIKOKU *j) +{ + static uint8_t secBuffer = 0; + time_t ctTime; + struct tm *jst_time; + + _JIKOKU wk = *j; + + + ctTime = time(NULL); + ctTime += 32400; + jst_time = localtime(&ctTime); + + + wk.sec = jst_time->tm_sec; + wk.min = jst_time->tm_min; + wk.hour = jst_time->tm_hour; + + // dammy ms data setup + if(wk.msec < 99){wk.msec++;} + if(secBuffer != wk.sec){ + wk.msec = 0; + secBuffer = wk.sec; + } + + *j = wk; + +/* NTP wo tukawanai toki no code + _JIKOKU wk = *j; + + wk.msec++; + if(wk.msec > 99){ + wk.msec = 0; + wk.sec++; + if(wk.sec > 59){ + wk.sec = 0; + wk.min++; + if(wk.min > 59){ + wk.min = 0; + wk.hour++; + if(wk.hour > 23){ + wk.hour = 0; + } + } + } + } + *j = wk; +*/ +} +#else // DBG +static void tokei_jikokuKeiji(_JIKOKU *j) +{ + _JIKOKU wk = *j; + + wk.msec++; + if(wk.msec > 99){ + wk.msec = 0; + wk.sec++; + if(wk.sec > 59){ + wk.sec = 0; + wk.min++; + if(wk.min > 59){ + wk.min = 0; + wk.hour++; + if(wk.hour > 23){ + wk.hour = 0; + } + } + } + } + *j = wk; +} +#endif // DBG + +/****************************************************************************** +Name : byo hyoji +Parameters : none +Returns : nothing +Description: 10ms ika no syuki de call +******************************************************************************/ +static void tokei_byoHyoji(_JIKOKU j) +{ + uint8_t c = j.sec; + uint8_t i; + int8_t red; + + _DISPLAYPOSITION iti; + _DISPLAYCOLOR color; + + // kako no tento kasyo wo 1s goto ni 1dankai zutu syoto + for(i = 0; i < 60; i++){ + + iti = tokei_byoIti(i); + if((j.msec % 10) == 0){ + if(D_display[Z_green][iti.x][iti.y] > 0){ + D_display[Z_green][iti.x][iti.y] -=1; + } + } + + uint8_t j1 = j.min + 1; + if(j1 > 60){j1 = 0;} + if((D_display[Z_green][iti.x][iti.y] > 0) && ((j.min != i) && ((j1 != i )))){ + // red to green ga kasanaru tokoto ha red wo genko suru + // (genzai ji to 59s kara 0s deno senko hyoji no red ha genko kara jogai) + red = D_display[Z_red][iti.x][iti.y] - D_display[Z_green][iti.x][iti.y]; + if(red < 0){ + red = 0; + } + D_display[Z_red][iti.x][iti.y] = (uint8_t)red; + } + } + + // genzai no byo iti wo 100ms goto ni 1dankai zutu tento + iti = tokei_byoIti(c); + + color.r = Z_colorNull; + color.g = ((uint16_t)j.msec * Z_colorMax) / 99; + display_pset(color, iti); + +} + +/****************************************************************************** +Name : fun hyoji(byo to onaji iti ni hyoji) +Parameters : none +Returns : nothing +Description: 10msec ika no syuki de call +******************************************************************************/ +static void tokei_funHyoji(_JIKOKU j) +{ + static uint8_t clearflag = 0; // 59min to 0min clear flag + uint8_t c = j.min; + +// static _JIKOKU zenkaiJikoku = {0, 0, 1, 0}; + + _DISPLAYPOSITION iti; + _DISPLAYCOLOR color; + + // 0min no toki no clear yo + _DISPLAYPOSITION p0; + _DISPLAYPOSITION p1; + + + // 1jikan keika go no fun dot clear + switch(clearflag){ + case 0: + if(c == 59){clearflag = 1;} + break; + case 1: + if(c == 0){ + color.g = Z_colorNull; + if(j.sec == 0){ + color.r = Z_colorMax - ((uint16_t)j.msec * Z_colorMax) / 99; + } + else{ + color.r = 0; + clearflag = 0; + } + p0.x = 0; + p0.y = 0; + p1.x = 15; + p1.y = 0; + display_line(color, p0, p1); + p0.x = 15; + p0.y = 0; + p1.x = 15; + p1.y = 15; + display_line(color, p0, p1); + p0.x = 15; + p0.y = 15; + p1.x = 0; + p1.y = 15; + display_line(color, p0, p1); + p0.x = 0; + p0.y = 15; + p1.x = 0; + p1.y = 0; + display_line(color, p0, p1); + } + default: + // nothing + break; + } + + // fun dot no reflesh + for(uint8_t i = 0; i < c; i++){ + iti = tokei_byoIti(i); + color.r = Z_colorMax; + color.g = Z_colorNull; + display_pset(color, iti); + } + + // genzai no byo iti wo 1s goto ni 1dankai zutu tento + iti = tokei_byoIti(c); + + if((j.sec & 0x01) == 0){ + // genzai fun no tenmetu hyoji + color.r = Z_colorMax - ((uint16_t)j.msec * Z_colorMax) / 99; + } + else{ + color.r = ((uint16_t)j.msec * Z_colorMax) / 99; + } + + color.g = Z_colorNull; + display_pset(color, iti); + + // 59s to 0s deno tugi no fun dot senko hyoji + if(j.sec == 59){ + uint8_t ctugi = c + 1; + if(ctugi > 59){ + ctugi = 0; + } + iti = tokei_byoIti(ctugi); + color.r = ((uint16_t)j.msec * Z_colorMax) / 99; + + color.g = Z_colorNull; + display_pset(color, iti); + } +} + +/****************************************************************************** +Name : ji hyoji(chusin yori 5syume de hyoji) 3dot 1jikan +Parameters : none +Returns : nothing +Description: 1jikan ika no syuki de call +******************************************************************************/ +static void tokei_jiHyoji(_JIKOKU j) +{ + static uint8_t clearflag = 0; + + uint8_t ji; + uint8_t jiIti; + _DISPLAYPOSITION iti; + _DISPLAYCOLOR color; + + // 0ji no clear yo + _DISPLAYCOLOR c = {0, 0}; + _DISPLAYPOSITION p0; + _DISPLAYPOSITION p1; + + // 24hour to 12hour + ji = j.hour; + if(ji > 11){ji -= 12;} + + + // ji dot clear syori (59min to 0min clear) + switch(clearflag){ + case 0: + if(ji == 11){clearflag = 1;} + break; + case 1: + if(ji == 0){ + if(j.sec == 0){ + color.r = Z_colorMax - ((uint16_t)j.msec * Z_colorMax) / 99; + color.g = color.r; + } + else{ + color.r = 0; + color.g = 0; + clearflag = 0; + } + + p0.x = 3; + p0.y = 3; + p1.x = 12; + p1.y = 3; + display_line(color, p0, p1); + p0.x = 12; + p0.y = 3; + p1.x = 12; + p1.y = 12; + display_line(color, p0, p1); + p0.x = 12; + p0.y = 12; + p1.x = 3; + p1.y = 12; + display_line(color, p0, p1); + p0.x = 3; + p0.y = 12; + p1.x = 3; + p1.y = 3; + display_line(color, p0, p1); + } + default: + // nothing + break; + } + + // kako no ji dot wo tento + color.r = Z_colorMax; + color.g = color.r; + for(uint8_t jiKako = 0; jiKako < ji; jiKako++){ + for(uint8_t minKako = 0; minKako < 60; minKako += 20){ + iti = tokei_jiIti(jiKako, minKako); + display_pset(color, iti); + } + } + for(uint8_t minKako = 0; minKako < j.min; minKako += 20){ + iti = tokei_jiIti(ji, minKako); + display_pset(color, iti); + } + + //************************* + // genzai ji no dot tenmetu + //************************* + iti = tokei_jiIti(ji, j.min); + if((j.sec & 0x01) == 0){ + // genzai ji no tenmetu hyoji + color.r = Z_colorMax - ((uint16_t)j.msec * Z_colorMax) / 99; + color.g = color.r; + } + else{ + color.r = ((uint16_t)j.msec * Z_colorMax) / 99; + color.g = color.r; + } + + display_pset(color, iti); + + //********************************** + // 20fun goto no ji dot senko hyoji + //********************************** + if(j.sec == 59){ + if((j.min == 19) || (j.min == 39) || (j.min == 59)){ + uint8_t tugiFun = j.min + 1; + uint8_t tugiJi = ji; + if(tugiFun > 59){ + tugiFun = 0; + tugiJi++; + if(tugiJi > 11){tugiJi = 0;}; + } + + iti = tokei_jiIti(tugiJi, tugiFun); + color.r = ((uint16_t)j.msec * Z_colorMax) / 99; + color.g = color.r; + + display_pset(color, iti); + } + } +} + + +/****************************************************************************** +Name : AM/PM hyoji +Parameters : none +Returns : nothing +Description: 1jikan ika no syuki de call +******************************************************************************/ +static void tokei_amPmHyoji(_JIKOKU j) +{ + uint8_t ji = j.hour; + uint8_t ji12; + _DISPLAYPOSITION iti; + _DISPLAYCOLOR color; + + if(ji < 12){ji12 = ji;} + else{ji12 = ji - 12;} + + // AM/PM no hyoji + if(ji < 12){ + color.g = ji12 * 5 + 39; + color.r = Z_colorMin; + } + else{ + color.g = Z_colorMin; + color.r = ji12 * 5 + 39; + } + + iti.x = 7; + iti.y = 7; + display_pset(color, iti); + iti.x = 8; + iti.y = 7; + display_pset(color, iti); + iti.x = 7; + iti.y = 8; + display_pset(color, iti); + iti.x = 8; + iti.y = 8; + display_pset(color, iti); + + +} + +/****************************************************************************** +Name : moji ban (byo bubun) +Parameters : none +Returns : nothing +Description: +******************************************************************************/ +static void tokei_mojibanByo(void) +{ + _DISPLAYPOSITION iti,iti2; + _DISPLAYCOLOR color; + + // base line + color.r = Z_colorMin; + color.g = 50; + + iti.x = 1; + iti.y = 1; + iti2.x = 14; + iti2.y = 1; + display_line(color, iti, iti2); + + iti.x = 14; + iti.y = 1; + iti2.x = 14; + iti2.y = 14; + display_line(color, iti, iti2); + + iti.x = 14; + iti.y = 14; + iti2.x = 1; + iti2.y = 14; + display_line(color, iti, iti2); + + iti.x = 1; + iti.y = 14; + iti2.x = 1; + iti2.y = 1; + display_line(color, iti, iti2); + + + // 0fun + iti.x = 1; + iti.y = 1; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 5fun + iti.x = 5; + iti.y = 1; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 10fun + iti.x = 10; + iti.y = 1; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 15fun + iti.x = 14; + iti.y = 1; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 20fun + iti.x = 14; + iti.y = 5; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 25fun + iti.x = 14; + iti.y = 10; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 30fun + iti.x = 14; + iti.y = 14; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 35fun + iti.x = 10; + iti.y = 14; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 40fun + iti.x = 5; + iti.y = 14; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 45fun + iti.x = 1; + iti.y = 14; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 50fun + iti.x = 1; + iti.y = 10; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 55fun + iti.x = 1; + iti.y = 5; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); +} + +/****************************************************************************** +Name : moji ban (ji bubun) +Parameters : none +Returns : nothing +Description: +******************************************************************************/ +static void tokei_mojibanJi(void) +{ + _DISPLAYPOSITION iti,iti2; + _DISPLAYCOLOR color; + + // base line + color.r = Z_colorMin; + color.g = 50; + + iti.x = 4; + iti.y = 4; + iti2.x = 11; + iti2.y = 4; + display_line(color, iti, iti2); + + iti.x = 11; + iti.y = 4; + iti2.x = 11; + iti2.y = 11; + display_line(color, iti, iti2); + + iti.x = 11; + iti.y = 11; + iti2.x = 4; + iti2.y = 11; + display_line(color, iti, iti2); + + iti.x = 4; + iti.y = 11; + iti2.x = 4; + iti2.y = 4; + display_line(color, iti, iti2); + + // 0ji + iti.x = 4; + iti.y = 4; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 1ji + iti.x = 6; + iti.y = 4; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 2ji + iti.x = 9; + iti.y = 4; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 3ji + iti.x = 11; + iti.y = 4; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 4ji + iti.x = 11; + iti.y = 6; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 5ji + iti.x = 11; + iti.y = 9; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 6ji + iti.x = 11; + iti.y = 11; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 7ji + iti.x = 9; + iti.y = 11; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 8ji + iti.x = 6; + iti.y = 11; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 9ji + iti.x = 4; + iti.y = 11; + color.r = Z_colorMax; + color.g = Z_colorMin; + display_pset(color, iti); + + // 10ji + iti.x = 4; + iti.y = 9; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + + // 12ji + iti.x = 4; + iti.y = 6; + color.r = Z_colorMax; + color.g = Z_colorMax; + display_pset(color, iti); + +} + +/****************************************************************************** +Name : byo iti zahyo no sansyutu +Parameters : none +Returns : nothing +Description: +******************************************************************************/ +static _DISPLAYPOSITION tokei_byoIti(uint8_t sec) +{ + _DISPLAYPOSITION iti; + + // genzai no byo iti wo 100ms goto ni 1dankai zutu tento + if(sec <= 14){ + iti.x = sec; + iti.y = 0; + } + else if(sec <= 29){ + iti.x = 15; + iti.y = sec % 15; + } + else if(sec <= 44){ + iti.x = 15 - (sec % 15); + iti.y = 15; + } + else{ + iti.x = 0; + iti.y = 15 - (sec % 15); + } + return iti; +} + +/****************************************************************************** +Name : ji iti zahyo no sansyutu +Parameters : ji : 0 - 11, min : 0 - 59 +Returns : nothing +Description: +******************************************************************************/ +static _DISPLAYPOSITION tokei_jiIti(uint8_t ji, uint8_t min) +{ + uint8_t jiIti; + _DISPLAYPOSITION iti; + // genzai no ji iti wo tento + jiIti = (ji * 3) + (min / 20); + if(jiIti <= 8){ + iti.x = jiIti + 3; + iti.y = 3; + } + else if(jiIti <= 17){ + iti.x = 12; + iti.y = (jiIti % 9) + 3; + } + else if(jiIti <= 26){ + iti.x = 12 - (jiIti % 9) ; + iti.y = 12; + } + else{ + iti.x = 3; + iti.y = 12 - (jiIti % 9); + } + + return iti; + +} \ No newline at end of file