/* * RTC関連 * * Copyright (c) 2016 Wakayama.rb Ruby Board developers * * This software is released under the MIT License. * https://github.com/wakayamarb/wrbb-v2lib-firm/blob/master/MITL * */ #include /*#include */ #include #include #include #include "../llbruby.h" #include "sKernel.h" /******************************************************/ /* RTCの時計を取得します: Rtc.getTime*/ /* Rtc.getTime()*/ /**/ /* 戻り値は以下の値が配列で返ります*/ /* year: 年(2000-2099)*/ /* mon: 月(1-12)*/ /* day: 日(1-31)*/ /* hour: 時(0-23)*/ /* min: 分(0-59)*/ /* second: 秒(0-59)*/ /* weekday: 曜日(0-6)0:日,1:月,2:火,3:水,4:木,5:金,6:土*/ /******************************************************/ mrb_value mrb_rtc_getTime(mrb_state *mrb, mrb_value self) { mrb_value arv[6]; time_t rtc = rtc_read(); struct tm *time = localtime(&rtc); arv[0] = mrb_fixnum_value(time->tm_year + 1900); arv[1] = mrb_fixnum_value(time->tm_mon + 1); arv[2] = mrb_fixnum_value(time->tm_mday); arv[3] = mrb_fixnum_value(time->tm_hour); arv[4] = mrb_fixnum_value(time->tm_min); arv[5] = mrb_fixnum_value(time->tm_sec); return mrb_ary_new_from_values(mrb, 6, arv); } /******************************************************/ /* RTCの時計をセットします: Rtc.setTime*/ /* Rtc.setTime( array )*/ /* array: 年(0000-9999),月(1-12),日(1-31),時(0-23),分(0-59),秒(0-59)の配列*/ /**/ /* 戻り値は以下のとおり*/ /* 0: 失敗*/ /* 1: 成功*/ /******************************************************/ mrb_value mrb_rtc_setTime(mrb_state *mrb, mrb_value self) { struct tm time; int ret = 0; mrb_get_args(mrb, "iiiiii", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min, &time.tm_sec); time.tm_year -= 1900; time.tm_mon -= 1; rtc_write(mktime(&time)); ret = 1; return mrb_fixnum_value(ret); } /******************************************************/ /* RTCを停止します: Rtc.deinit*/ /* Rtc.deinit()*/ /**/ /* 戻り値は以下のとおり*/ /* 0: 失敗*/ /* 1: 成功*/ /******************************************************/ mrb_value mrb_rtc_deinit(mrb_state *mrb, mrb_value self) { rtc_free(); return mrb_fixnum_value(1); } /******************************************************/ /* RTCを起動します: Rtc.init*/ /* Rtc.init()*/ /**/ /* 戻り値は以下のとおり*/ /* 0: 起動失敗*/ /* 1: 起動成功*/ /* 2: RTCは既に起動していた(成功)*/ /******************************************************/ mrb_value mrb_rtc_init(mrb_state *mrb, mrb_value self) { if (rtc_isenabled()) return mrb_fixnum_value(2); rtc_init(); return mrb_fixnum_value(rtc_isenabled()); } /******************************************************/ /* ライブラリを定義します*/ /******************************************************/ void rtc_Init(mrb_state *mrb) { struct RClass *rtcModule = mrb_define_module(mrb, "Rtc"); mrb_define_module_function(mrb, rtcModule, "init", mrb_rtc_init, MRB_ARGS_NONE()); mrb_define_module_function(mrb, rtcModule, "begin", mrb_rtc_init, MRB_ARGS_NONE()); mrb_define_module_function(mrb, rtcModule, "deinit", mrb_rtc_deinit, MRB_ARGS_NONE()); mrb_define_module_function(mrb, rtcModule, "setTime", mrb_rtc_setTime, MRB_ARGS_REQ(6)); mrb_define_module_function(mrb, rtcModule, "getTime", mrb_rtc_getTime, MRB_ARGS_NONE()); } /*rtc_attach_alarm_handler*/ /*概要 アラーム発生時に処理する関数を登録します。*/ /*文法 rtc_attach_alarm_handler(void(*)(void) function)*/ /*パラメータ function: 処理する関数*/ /*戻り値 なし*/ /**/ /*rtc_set_alarm_time*/ /*概要 アラーム時間を設定します。*/ /*文法 int rtc_set_alarm_time (int hour, int min, int week_flag)*/ /*パラメータ hour: 時*/ /*min: 分*/ /*week_flag: 曜日(複数指定の場合は論理和で指定)*/ /*戻り値 0:失敗、1:成功*/ /**/ /*rtc_alarm_on*/ /*概要 アラームをONにします。*/ /*文法 rtc_alarm_on()*/ /*パラメータ なし*/ /*戻り値 なし*/ /**/ /*rtc_alarm_off*/ /*概要 アラームをOFFにします。*/ /*文法 rtc_alarm_off()*/ /*パラメータ なし*/ /*戻り値 なし*/ /**/