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

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

mruby版ECNLプロトタイピング・ツールを追加

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