pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RTC_Handler.cpp Source File

RTC_Handler.cpp

00001 #include "RTC_Handler.h"
00002 
00003 static RTC_Handler *self = NULL;
00004 
00005 RTC_Handler* RTC_Handler::getInstance()
00006 {
00007     return self != NULL ? self : self = new RTC_Handler();
00008 }
00009 
00010 #if defined (TARGET_KL25Z)
00011 
00012 #define RTC8564NB_ADR 0xA2
00013 
00014 #define CONTROL1 0x00
00015 #define CONTROL2 0x01
00016 #define SECONDS 0x02
00017 #define MINUTES 0x03
00018 #define HOURS 0x04
00019 #define DAYS 0x05
00020 #define WEEKDAYS 0x06
00021 #define MONTHS 0x07
00022 #define YEARS 0x08
00023 #define MINUTE_ALARM 0x09
00024 #define HOUR_ALARM 0x0A
00025 #define DAY_ALARM 0x0B
00026 #define WEEKDAY_ALARM 0x0C
00027 #define CLOCKOUT_FREQ 0x0D
00028 #define TIMER_CONTROL 0x0E
00029 #define TIMER 0x0F
00030 #define _READ 0x01
00031 #define JST_TO_UTC_DELTA (9*60*60)
00032 
00033 
00034 RTC_Handler::RTC_Handler() : i2c(PTE0, PTE1)
00035 {
00036 }
00037 
00038 char
00039 RTC_Handler::read(char address)
00040 {
00041     char value;
00042     i2c.start();
00043     i2c.write(RTC8564NB_ADR);
00044     i2c.write(address);
00045     i2c.start();
00046     i2c.write(RTC8564NB_ADR | _READ);
00047     value = i2c.read(0);
00048     i2c.stop();
00049     return value;
00050 }
00051 
00052 void
00053 RTC_Handler::write(char address, char value)
00054 {
00055     i2c.start();
00056     i2c.write(RTC8564NB_ADR);
00057     i2c.write(address);
00058     i2c.write(value);
00059     i2c.stop();
00060 }
00061 
00062 void
00063 RTC_Handler::set(char y[3], char m[3], char d[3], char h[3], char min[3], char s[3])
00064 {
00065     write(CONTROL1, 0x20); //stop
00066     write(CONTROL2, 0x00);
00067     write(YEARS, ((y[0]-0x30)<<4)+(y[1]-0x30)); 
00068     write(MONTHS, ((m[0]-0x30)<<4)+(m[1]-0x30));
00069     write(DAYS, ((d[0]-0x30)<<4)+(d[1]-0x30));
00070     write(HOURS, ((h[0]-0x30)<<4)+(h[1]-0x30));
00071     write(MINUTES, ((min[0]-0x30)<<4)+(min[1]-0x30));
00072     write(SECONDS, ((s[0]-0x30)<<4)+(s[1]-0x30));
00073 //    write(WEEKDAYS, week_val[0] - 0x30); //Sunday = "0", Monday = "1" ...
00074     write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
00075     write(TIMER_CONTROL, 0x00);
00076     write(CONTROL1, 0x00); //start
00077     return;
00078 }
00079 
00080 void
00081 RTC_Handler::setUTC(time_t t)
00082 {
00083     struct tm *date;
00084     char str[32];
00085     memset(str,'\0',sizeof(str));
00086     //timer = time(NULL);
00087     //t -= JST_TO_UTC_DELTA; //make local time UTC
00088     date = localtime(&t);
00089     strftime(str, 255, "%y%m%d%H%M%S", date);
00090     //printf("%s\n", str);
00091     set(&str[0],&str[2],&str[4],&str[6],&str[8],&str[10]);
00092 }
00093 
00094 time_t
00095 RTC_Handler::getUTC()
00096 {
00097     int year = read(YEARS);
00098     int mon = read(MONTHS);
00099     int day = read(DAYS);
00100     int week = read(WEEKDAYS);
00101     int hour = read(HOURS);
00102     int min = read(MINUTES);
00103     int sec = read(SECONDS);
00104     
00105     year = ((year >> 4) & 0x03) * 10 + (year & 0x0F) + 2000;
00106     mon  = ((mon  >> 4) & 0x01) * 10 + (mon  & 0x0F);
00107     day  = ((day  >> 4) & 0x03) * 10 + (day  & 0x0F);
00108     hour = ((hour >> 4) & 0x03) * 10 + (hour & 0x0F);
00109     min  = ((min  >> 4) & 0x07) * 10 + (min  & 0x0F); 
00110     sec  = ((sec  >> 4) & 0x07) * 10 + (sec  & 0x0F);
00111 
00112     struct tm strtim;
00113     time_t ret;
00114     memset(( void * )&strtim , '\0' , sizeof( strtim ));
00115     strtim.tm_year = year-1900; /* 年[1900年から起算] */
00116     strtim.tm_mon = mon-1; /* 月[0-11] */
00117     strtim.tm_mday = day; /* 日[1-31] */
00118     strtim.tm_hour = hour ;/* 時[0-23] */
00119     strtim.tm_min = min ;/* 分[0-59] */
00120     strtim.tm_sec = sec; /* 秒[0-61]閏秒考慮 */
00121 
00122     /* 日付補完 */
00123     ret = mktime( &strtim );
00124     if( ret == -1 ) {
00125         printf( "mmktime error\n" );
00126     }
00127     
00128     return ret;
00129 }
00130 #elif defined (TARGET_TEENSY3_1)
00131 
00132 RTC_Handler::RTC_Handler()
00133 {
00134 }
00135 
00136 void
00137 RTC_Handler::setUTC(time_t t)
00138 {
00139     set_time(t);
00140 }
00141 
00142 time_t
00143 RTC_Handler::getUTC()
00144 {
00145     return time(NULL);
00146 }
00147 
00148 #endif