test

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Committer:
masaaki_makabe
Date:
Fri Aug 12 04:07:00 2016 +0000
Branch:
KS3
Revision:
36:3cca74c30551
Parent:
33:d7b53d548c33
???????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masaaki_makabe 31:b5e19d153db4 1 /*------------------------------------------------------------
masaaki_makabe 31:b5e19d153db4 2 exio.h
masaaki_makabe 31:b5e19d153db4 3 拡張内容
masaaki_makabe 31:b5e19d153db4 4 ・スイッチ長押し/通常押しの区別
masaaki_makabe 31:b5e19d153db4 5 ・秒をHH:MM表示する。
masaaki_makabe 31:b5e19d153db4 6 ・HH:MMをLED表示する。
masaaki_makabe 31:b5e19d153db4 7 -------------------------------------------------------------*/
masaaki_makabe 31:b5e19d153db4 8 #ifndef __EXIO_H__
masaaki_makabe 31:b5e19d153db4 9 #define __EXIO_H__
masaaki_makabe 31:b5e19d153db4 10
masaaki_makabe 31:b5e19d153db4 11 #include "mbed.h"
masaaki_makabe 31:b5e19d153db4 12 #include "io.h"
masaaki_makabe 31:b5e19d153db4 13 #include "app_util.h"
masaaki_makabe 31:b5e19d153db4 14 #include <time.h>
masaaki_makabe 31:b5e19d153db4 15 #include "ble_date_time.h"
masaaki_makabe 31:b5e19d153db4 16 #include "common.h"
masaaki_makabe 31:b5e19d153db4 17
masaaki_makabe 31:b5e19d153db4 18 class exio : public io
masaaki_makabe 31:b5e19d153db4 19 {
masaaki_makabe 31:b5e19d153db4 20 protected:
masaaki_makabe 31:b5e19d153db4 21 /*単位の表示*/
masaaki_makabe 31:b5e19d153db4 22 virtual void display_unit(void)
masaaki_makabe 31:b5e19d153db4 23 {
masaaki_makabe 31:b5e19d153db4 24 // [row6] D56-D49
masaaki_makabe 31:b5e19d153db4 25 // [row7] D64-D57
masaaki_makabe 31:b5e19d153db4 26 //
masaaki_makabe 31:b5e19d153db4 27 // D53 D54 D55 * * *
masaaki_makabe 31:b5e19d153db4 28 // D56 D57 D58 *
masaaki_makabe 31:b5e19d153db4 29 // D59 D60 D61 *
masaaki_makabe 31:b5e19d153db4 30 // D62 D63 D64 *
masaaki_makabe 31:b5e19d153db4 31 //
masaaki_makabe 31:b5e19d153db4 32 if(_mode == M_SCALE){ // (SCALE) G
masaaki_makabe 31:b5e19d153db4 33 _row_out[6] |= 0xf0;
masaaki_makabe 31:b5e19d153db4 34 _row_out[7] |= 0xf4;
masaaki_makabe 31:b5e19d153db4 35 _cnt = 0;
masaaki_makabe 31:b5e19d153db4 36 } else if(_mode == M_WATCHTIMER && _state == S_WATCH){ // (WATCH) .(period)
masaaki_makabe 31:b5e19d153db4 37 if(_cnt < 5){
masaaki_makabe 31:b5e19d153db4 38 L001:
masaaki_makabe 31:b5e19d153db4 39 _row_out[6] |= 0x00; // 単位表示
masaaki_makabe 31:b5e19d153db4 40 _row_out[7] |= 0x20;
masaaki_makabe 31:b5e19d153db4 41 } else if(_cnt < 10){
masaaki_makabe 31:b5e19d153db4 42 _row_out[6] &= 0x0f; // 単位消去
masaaki_makabe 31:b5e19d153db4 43 _row_out[7] &= 0x00;
masaaki_makabe 31:b5e19d153db4 44 } else {
masaaki_makabe 31:b5e19d153db4 45 _cnt = 0;
masaaki_makabe 31:b5e19d153db4 46 goto L001;
masaaki_makabe 31:b5e19d153db4 47 }
masaaki_makabe 31:b5e19d153db4 48 } else if(_mode == M_WATCHTIMER && _state == S_TIMER){ // (TIME) T
masaaki_makabe 31:b5e19d153db4 49 _row_out[6] |= (0x10 + 0x20 + 0x40);
masaaki_makabe 31:b5e19d153db4 50 _row_out[7] |= (0x01 + 0x08 + 0x40);
masaaki_makabe 31:b5e19d153db4 51 _cnt = 0;
masaaki_makabe 31:b5e19d153db4 52 }
masaaki_makabe 31:b5e19d153db4 53 }
masaaki_makabe 33:d7b53d548c33 54 /*void display_unitT(void)
masaaki_makabe 33:d7b53d548c33 55 {
masaaki_makabe 33:d7b53d548c33 56 // 単位T表示
masaaki_makabe 33:d7b53d548c33 57 _row_out[6] |= (0x10 + 0x20 + 0x40);
masaaki_makabe 33:d7b53d548c33 58 _row_out[7] |= (0x01 + 0x08 + 0x40);
masaaki_makabe 33:d7b53d548c33 59 _cnt = 0;
masaaki_makabe 33:d7b53d548c33 60 }*/
masaaki_makabe 33:d7b53d548c33 61 protected:
masaaki_makabe 31:b5e19d153db4 62 /*100msec処理*/
masaaki_makabe 31:b5e19d153db4 63 virtual void TickerCallback(void)
masaaki_makabe 31:b5e19d153db4 64 {
masaaki_makabe 31:b5e19d153db4 65 _cnt++;
masaaki_makabe 31:b5e19d153db4 66 // スイッチ状態を定期的に見る
masaaki_makabe 31:b5e19d153db4 67 uint8_t sw = _sw->read();
masaaki_makabe 31:b5e19d153db4 68 if(sw == 1 && !_swFlag){// スイッチ押されたとき
masaaki_makabe 31:b5e19d153db4 69 _counter = 0;
masaaki_makabe 31:b5e19d153db4 70 _swState = None;
masaaki_makabe 31:b5e19d153db4 71 _swFlag = true;
masaaki_makabe 31:b5e19d153db4 72
masaaki_makabe 31:b5e19d153db4 73 } else if(sw == 0 && _swFlag){// スイッチ離されたとき
masaaki_makabe 31:b5e19d153db4 74 _swFlag = false;
masaaki_makabe 31:b5e19d153db4 75 if(_swState == None){ // スイッチ状態未決定の場合
masaaki_makabe 31:b5e19d153db4 76 if(_counter >= 10){ /*1sec*/
masaaki_makabe 31:b5e19d153db4 77 _swState = LongPressed;
masaaki_makabe 31:b5e19d153db4 78 //printf("LongPressed\r\n");
masaaki_makabe 33:d7b53d548c33 79 } else {
masaaki_makabe 31:b5e19d153db4 80 _swState = Pressed;
masaaki_makabe 31:b5e19d153db4 81 //printf("Pressed\r\n");
masaaki_makabe 31:b5e19d153db4 82 }
masaaki_makabe 31:b5e19d153db4 83 }
masaaki_makabe 31:b5e19d153db4 84 } else {
masaaki_makabe 31:b5e19d153db4 85 _counter++;
masaaki_makabe 33:d7b53d548c33 86 // スイッチ押された状態で1sec経過したらコールバック
masaaki_makabe 33:d7b53d548c33 87 if(_swFlag && _counter >= 10 && !_callFlag){
masaaki_makabe 33:d7b53d548c33 88 _callback.call();
masaaki_makabe 33:d7b53d548c33 89 _callFlag = true; // 1回コールすれば用済み
masaaki_makabe 33:d7b53d548c33 90 }
masaaki_makabe 31:b5e19d153db4 91 }
masaaki_makabe 31:b5e19d153db4 92 _lastSW = sw;
masaaki_makabe 31:b5e19d153db4 93 #ifdef UART_DEBUG
masaaki_makabe 33:d7b53d548c33 94 //pc.printf("%d", sw);
masaaki_makabe 31:b5e19d153db4 95 #endif
masaaki_makabe 31:b5e19d153db4 96 }
masaaki_makabe 31:b5e19d153db4 97
masaaki_makabe 31:b5e19d153db4 98 public:
masaaki_makabe 31:b5e19d153db4 99 /*コンストラクタ*/
masaaki_makabe 31:b5e19d153db4 100 exio() : io(P0_15, P0_13)
masaaki_makabe 31:b5e19d153db4 101 {
masaaki_makabe 33:d7b53d548c33 102 _callFlag = false;
masaaki_makabe 31:b5e19d153db4 103 _cnt = 0;
masaaki_makabe 31:b5e19d153db4 104 _swFlag = false;
masaaki_makabe 31:b5e19d153db4 105 _swState = None;
masaaki_makabe 31:b5e19d153db4 106 _ticker.attach(this, &exio::TickerCallback, 0.1);
masaaki_makabe 31:b5e19d153db4 107 }
masaaki_makabe 31:b5e19d153db4 108
masaaki_makabe 31:b5e19d153db4 109 /*スイッチ状態*/
masaaki_makabe 31:b5e19d153db4 110 typedef enum {
masaaki_makabe 31:b5e19d153db4 111 None = 0,
masaaki_makabe 31:b5e19d153db4 112 Pressed,
masaaki_makabe 31:b5e19d153db4 113 LongPressed,
masaaki_makabe 31:b5e19d153db4 114 } Switch_t;
masaaki_makabe 31:b5e19d153db4 115
masaaki_makabe 31:b5e19d153db4 116 /*スイッチ状態の取得 ==> スーパークラスのものを上書き*/
masaaki_makabe 31:b5e19d153db4 117 virtual uint8_t get_switch()
masaaki_makabe 31:b5e19d153db4 118 {
masaaki_makabe 31:b5e19d153db4 119 return _swState;
masaaki_makabe 31:b5e19d153db4 120 }
masaaki_makabe 31:b5e19d153db4 121
masaaki_makabe 31:b5e19d153db4 122 /*スイッチ状態のリセット*/
masaaki_makabe 31:b5e19d153db4 123 void switch_reset(void)
masaaki_makabe 31:b5e19d153db4 124 {
masaaki_makabe 31:b5e19d153db4 125 _swState = None;
masaaki_makabe 31:b5e19d153db4 126 _lastSW = 0;
masaaki_makabe 31:b5e19d153db4 127 }
masaaki_makabe 31:b5e19d153db4 128
masaaki_makabe 31:b5e19d153db4 129 /*秒をHH:MM表示する*/
masaaki_makabe 31:b5e19d153db4 130 void displaySeconds(int value)
masaaki_makabe 31:b5e19d153db4 131 {
masaaki_makabe 31:b5e19d153db4 132 // 4-digit convert
masaaki_makabe 31:b5e19d153db4 133 // 40s->0040 100s->0140
masaaki_makabe 31:b5e19d153db4 134 int a = value / 60;
masaaki_makabe 31:b5e19d153db4 135 int b = value % 60;
masaaki_makabe 31:b5e19d153db4 136 value = 100 * a + b;
masaaki_makabe 31:b5e19d153db4 137 display_value = value;
masaaki_makabe 31:b5e19d153db4 138 #ifdef UART_DEBUG
masaaki_makabe 31:b5e19d153db4 139 pc.printf("[%04d]\r\n", value);
masaaki_makabe 31:b5e19d153db4 140 #endif
masaaki_makabe 31:b5e19d153db4 141 }
masaaki_makabe 31:b5e19d153db4 142
masaaki_makabe 31:b5e19d153db4 143 /*HH:MMをLED表示する*/
masaaki_makabe 31:b5e19d153db4 144 void displayHHMM(ble_date_time_t &dt)
masaaki_makabe 31:b5e19d153db4 145 {
masaaki_makabe 31:b5e19d153db4 146 // 4-digit convert
masaaki_makabe 31:b5e19d153db4 147 // 10:50->1050 23:59->2359
masaaki_makabe 31:b5e19d153db4 148 int value = dt.hours * 100 + dt.minutes;
masaaki_makabe 31:b5e19d153db4 149 display_value = value;
masaaki_makabe 31:b5e19d153db4 150 #ifdef UART_DEBUG
masaaki_makabe 31:b5e19d153db4 151 pc.printf("[%04d][%d/%d/%d %02d:%02d:%02d]\r\n",
masaaki_makabe 31:b5e19d153db4 152 value, dt.year, dt.month, dt.day, dt.hours, dt.minutes, dt.seconds);
masaaki_makabe 31:b5e19d153db4 153 #endif
masaaki_makabe 31:b5e19d153db4 154 }
masaaki_makabe 31:b5e19d153db4 155
masaaki_makabe 33:d7b53d548c33 156 void attach(void (*func)(void))
masaaki_makabe 33:d7b53d548c33 157 {
masaaki_makabe 33:d7b53d548c33 158 _callback.attach(func);
masaaki_makabe 33:d7b53d548c33 159 }
masaaki_makabe 33:d7b53d548c33 160 /*template<typename T>
masaaki_makabe 33:d7b53d548c33 161 void attach(T *obj, void (T::*member)(void))
masaaki_makabe 33:d7b53d548c33 162 {
masaaki_makabe 33:d7b53d548c33 163 _callback.attach(obj, member);
masaaki_makabe 33:d7b53d548c33 164 }*/
masaaki_makabe 33:d7b53d548c33 165 void CallFlagClear()
masaaki_makabe 33:d7b53d548c33 166 {
masaaki_makabe 33:d7b53d548c33 167 _callFlag = false;
masaaki_makabe 33:d7b53d548c33 168 }
masaaki_makabe 33:d7b53d548c33 169
masaaki_makabe 31:b5e19d153db4 170 private:
masaaki_makabe 31:b5e19d153db4 171 bool _swFlag;
masaaki_makabe 31:b5e19d153db4 172 Switch_t _swState;
masaaki_makabe 31:b5e19d153db4 173 uint8_t _lastSW;
masaaki_makabe 31:b5e19d153db4 174 Ticker _ticker;
masaaki_makabe 31:b5e19d153db4 175 int _counter;
masaaki_makabe 31:b5e19d153db4 176 int _cnt;
masaaki_makabe 33:d7b53d548c33 177 FunctionPointer _callback;
masaaki_makabe 33:d7b53d548c33 178 bool _callFlag;
masaaki_makabe 31:b5e19d153db4 179
masaaki_makabe 31:b5e19d153db4 180 };
masaaki_makabe 31:b5e19d153db4 181
masaaki_makabe 31:b5e19d153db4 182 #endif /*__EXIO_H__*/