source: EcnlProtoTool/trunk/mrbgems/mruby-arduino/src/sRtc.c@ 321

Last change on this file since 321 was 321, checked in by coas-nagasima, 7 years ago

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 4.2 KB
Line 
1/*
2 * RTC関連
3 *
4 * Copyright (c) 2016 Wakayama.rb Ruby Board developers
5 *
6 * This software is released under the MIT License.
7 * https://github.com/wakayamarb/wrbb-v2lib-firm/blob/master/MITL
8 *
9 */
10#include <arduino.h>
11/*#include <RTC.h>*/
12
13#include <mruby.h>
14#include <mruby/array.h>
15#include <mruby/hash.h>
16
17#include "../llbruby.h"
18#include "sKernel.h"
19
20/******************************************************/
21/* RTCの時計を取得します: Rtc.getTime*/
22/* Rtc.getTime()*/
23/**/
24/* 戻り値は以下の値が配列で返ります*/
25/* year: 年(2000-2099)*/
26/* mon: 月(1-12)*/
27/* day: 日(1-31)*/
28/* hour: 時(0-23)*/
29/* min: 分(0-59)*/
30/* second: 秒(0-59)*/
31/* weekday: 曜日(0-6)0:日,1:月,2:火,3:水,4:木,5:金,6:土*/
32/******************************************************/
33mrb_value mrb_rtc_getTime(mrb_state *mrb, mrb_value self)
34{
35 mrb_value arv[6];
36 time_t rtc = rtc_read();
37 struct tm *time = localtime(&rtc);
38
39 arv[0] = mrb_fixnum_value(time->tm_year + 1900);
40 arv[1] = mrb_fixnum_value(time->tm_mon + 1);
41 arv[2] = mrb_fixnum_value(time->tm_mday);
42 arv[3] = mrb_fixnum_value(time->tm_hour);
43 arv[4] = mrb_fixnum_value(time->tm_min);
44 arv[5] = mrb_fixnum_value(time->tm_sec);
45
46 return mrb_ary_new_from_values(mrb, 6, arv);
47}
48
49/******************************************************/
50/* RTCの時計をセットします: Rtc.setTime*/
51/* Rtc.setTime( array )*/
52/* array: 年(0000-9999),月(1-12),日(1-31),時(0-23),分(0-59),秒(0-59)の配列*/
53/**/
54/* 戻り値は以下のとおり*/
55/* 0: 失敗*/
56/* 1: 成功*/
57/******************************************************/
58mrb_value mrb_rtc_setTime(mrb_state *mrb, mrb_value self)
59{
60 struct tm time;
61 int ret = 0;
62
63 mrb_get_args(mrb, "iiiiii", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min, &time.tm_sec);
64
65 time.tm_year -= 1900;
66 time.tm_mon -= 1;
67
68 rtc_write(mktime(&time));
69 ret = 1;
70
71 return mrb_fixnum_value(ret);
72}
73
74/******************************************************/
75/* RTCを停止します: Rtc.deinit*/
76/* Rtc.deinit()*/
77/**/
78/* 戻り値は以下のとおり*/
79/* 0: 失敗*/
80/* 1: 成功*/
81/******************************************************/
82mrb_value mrb_rtc_deinit(mrb_state *mrb, mrb_value self)
83{
84 rtc_free();
85 return mrb_fixnum_value(1);
86}
87
88/******************************************************/
89/* RTCを起動します: Rtc.init*/
90/* Rtc.init()*/
91/**/
92/* 戻り値は以下のとおり*/
93/* 0: 起動失敗*/
94/* 1: 起動成功*/
95/* 2: RTCは既に起動していた(成功)*/
96/******************************************************/
97mrb_value mrb_rtc_init(mrb_state *mrb, mrb_value self)
98{
99 if (rtc_isenabled())
100 return mrb_fixnum_value(2);
101
102 rtc_init();
103
104 return mrb_fixnum_value(rtc_isenabled());
105}
106
107/******************************************************/
108/* ライブラリを定義します*/
109/******************************************************/
110void rtc_Init(mrb_state *mrb)
111{
112 struct RClass *rtcModule = mrb_define_module(mrb, "Rtc");
113
114 mrb_define_module_function(mrb, rtcModule, "init", mrb_rtc_init, MRB_ARGS_NONE());
115 mrb_define_module_function(mrb, rtcModule, "begin", mrb_rtc_init, MRB_ARGS_NONE());
116 mrb_define_module_function(mrb, rtcModule, "deinit", mrb_rtc_deinit, MRB_ARGS_NONE());
117 mrb_define_module_function(mrb, rtcModule, "setTime", mrb_rtc_setTime, MRB_ARGS_REQ(6));
118 mrb_define_module_function(mrb, rtcModule, "getTime", mrb_rtc_getTime, MRB_ARGS_NONE());
119
120}
121
122/*rtc_attach_alarm_handler*/
123/*概要 アラーム発生時に処理する関数を登録します。*/
124/*文法 rtc_attach_alarm_handler(void(*)(void) function)*/
125/*パラメータ function: 処理する関数*/
126/*戻り値 なし*/
127/**/
128/*rtc_set_alarm_time*/
129/*概要 アラーム時間を設定します。*/
130/*文法 int rtc_set_alarm_time (int hour, int min, int week_flag)*/
131/*パラメータ hour: 時*/
132/*min: 分*/
133/*week_flag: 曜日(複数指定の場合は論理和で指定)*/
134/*戻り値 0:失敗、1:成功*/
135/**/
136/*rtc_alarm_on*/
137/*概要 アラームをONにします。*/
138/*文法 rtc_alarm_on()*/
139/*パラメータ なし*/
140/*戻り値 なし*/
141/**/
142/*rtc_alarm_off*/
143/*概要 アラームをOFFにします。*/
144/*文法 rtc_alarm_off()*/
145/*パラメータ なし*/
146/*戻り値 なし*/
147/**/
Note: See TracBrowser for help on using the repository browser.