This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vipinranka 12:9a20164dcc47 1 /* mbed Microcontroller Library
vipinranka 12:9a20164dcc47 2 * Copyright (c) 2006-2013 ARM Limited
vipinranka 12:9a20164dcc47 3 *
vipinranka 12:9a20164dcc47 4 * Licensed under the Apache License, Version 2.0 (the "License");
vipinranka 12:9a20164dcc47 5 * you may not use this file except in compliance with the License.
vipinranka 12:9a20164dcc47 6 * You may obtain a copy of the License at
vipinranka 12:9a20164dcc47 7 *
vipinranka 12:9a20164dcc47 8 * http://www.apache.org/licenses/LICENSE-2.0
vipinranka 12:9a20164dcc47 9 *
vipinranka 12:9a20164dcc47 10 * Unless required by applicable law or agreed to in writing, software
vipinranka 12:9a20164dcc47 11 * distributed under the License is distributed on an "AS IS" BASIS,
vipinranka 12:9a20164dcc47 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vipinranka 12:9a20164dcc47 13 * See the License for the specific language governing permissions and
vipinranka 12:9a20164dcc47 14 * limitations under the License.
vipinranka 12:9a20164dcc47 15 */
vipinranka 12:9a20164dcc47 16 #include "hal/rtc_api.h"
vipinranka 12:9a20164dcc47 17
vipinranka 12:9a20164dcc47 18 #include <time.h>
vipinranka 12:9a20164dcc47 19 #include "platform/critical.h"
vipinranka 12:9a20164dcc47 20 #include "platform/rtc_time.h"
vipinranka 12:9a20164dcc47 21 #include "hal/us_ticker_api.h"
vipinranka 12:9a20164dcc47 22 #include "platform/SingletonPtr.h"
vipinranka 12:9a20164dcc47 23 #include "platform/PlatformMutex.h"
vipinranka 12:9a20164dcc47 24
vipinranka 12:9a20164dcc47 25 static SingletonPtr<PlatformMutex> _mutex;
vipinranka 12:9a20164dcc47 26
vipinranka 12:9a20164dcc47 27 #if DEVICE_RTC
vipinranka 12:9a20164dcc47 28 static void (*_rtc_init)(void) = rtc_init;
vipinranka 12:9a20164dcc47 29 static int (*_rtc_isenabled)(void) = rtc_isenabled;
vipinranka 12:9a20164dcc47 30 static time_t (*_rtc_read)(void) = rtc_read;
vipinranka 12:9a20164dcc47 31 static void (*_rtc_write)(time_t t) = rtc_write;
vipinranka 12:9a20164dcc47 32 #else
vipinranka 12:9a20164dcc47 33 static void (*_rtc_init)(void) = NULL;
vipinranka 12:9a20164dcc47 34 static int (*_rtc_isenabled)(void) = NULL;
vipinranka 12:9a20164dcc47 35 static time_t (*_rtc_read)(void) = NULL;
vipinranka 12:9a20164dcc47 36 static void (*_rtc_write)(time_t t) = NULL;
vipinranka 12:9a20164dcc47 37 #endif
vipinranka 12:9a20164dcc47 38
vipinranka 12:9a20164dcc47 39 #ifdef __cplusplus
vipinranka 12:9a20164dcc47 40 extern "C" {
vipinranka 12:9a20164dcc47 41 #endif
vipinranka 12:9a20164dcc47 42 #if defined (__ICCARM__)
vipinranka 12:9a20164dcc47 43 time_t __time32(time_t *timer)
vipinranka 12:9a20164dcc47 44 #else
vipinranka 12:9a20164dcc47 45 time_t time(time_t *timer)
vipinranka 12:9a20164dcc47 46 #endif
vipinranka 12:9a20164dcc47 47
vipinranka 12:9a20164dcc47 48 {
vipinranka 12:9a20164dcc47 49 _mutex->lock();
vipinranka 12:9a20164dcc47 50 if (_rtc_isenabled != NULL) {
vipinranka 12:9a20164dcc47 51 if (!(_rtc_isenabled())) {
vipinranka 12:9a20164dcc47 52 set_time(0);
vipinranka 12:9a20164dcc47 53 }
vipinranka 12:9a20164dcc47 54 }
vipinranka 12:9a20164dcc47 55
vipinranka 12:9a20164dcc47 56 time_t t = 0;
vipinranka 12:9a20164dcc47 57 if (_rtc_read != NULL) {
vipinranka 12:9a20164dcc47 58 t = _rtc_read();
vipinranka 12:9a20164dcc47 59 }
vipinranka 12:9a20164dcc47 60
vipinranka 12:9a20164dcc47 61 if (timer != NULL) {
vipinranka 12:9a20164dcc47 62 *timer = t;
vipinranka 12:9a20164dcc47 63 }
vipinranka 12:9a20164dcc47 64 _mutex->unlock();
vipinranka 12:9a20164dcc47 65 return t;
vipinranka 12:9a20164dcc47 66 }
vipinranka 12:9a20164dcc47 67
vipinranka 12:9a20164dcc47 68 void set_time(time_t t) {
vipinranka 12:9a20164dcc47 69 _mutex->lock();
vipinranka 12:9a20164dcc47 70 if (_rtc_init != NULL) {
vipinranka 12:9a20164dcc47 71 _rtc_init();
vipinranka 12:9a20164dcc47 72 }
vipinranka 12:9a20164dcc47 73 if (_rtc_write != NULL) {
vipinranka 12:9a20164dcc47 74 _rtc_write(t);
vipinranka 12:9a20164dcc47 75 }
vipinranka 12:9a20164dcc47 76 _mutex->unlock();
vipinranka 12:9a20164dcc47 77 }
vipinranka 12:9a20164dcc47 78
vipinranka 12:9a20164dcc47 79 clock_t clock() {
vipinranka 12:9a20164dcc47 80 _mutex->lock();
vipinranka 12:9a20164dcc47 81 clock_t t = us_ticker_read();
vipinranka 12:9a20164dcc47 82 t /= 1000000 / CLOCKS_PER_SEC; // convert to processor time
vipinranka 12:9a20164dcc47 83 _mutex->unlock();
vipinranka 12:9a20164dcc47 84 return t;
vipinranka 12:9a20164dcc47 85 }
vipinranka 12:9a20164dcc47 86
vipinranka 12:9a20164dcc47 87 void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)) {
vipinranka 12:9a20164dcc47 88 _mutex->lock();
vipinranka 12:9a20164dcc47 89 _rtc_read = read_rtc;
vipinranka 12:9a20164dcc47 90 _rtc_write = write_rtc;
vipinranka 12:9a20164dcc47 91 _rtc_init = init_rtc;
vipinranka 12:9a20164dcc47 92 _rtc_isenabled = isenabled_rtc;
vipinranka 12:9a20164dcc47 93 _mutex->unlock();
vipinranka 12:9a20164dcc47 94 }
vipinranka 12:9a20164dcc47 95
vipinranka 12:9a20164dcc47 96
vipinranka 12:9a20164dcc47 97
vipinranka 12:9a20164dcc47 98 #ifdef __cplusplus
vipinranka 12:9a20164dcc47 99 }
vipinranka 12:9a20164dcc47 100 #endif