test publish

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Branch:
KS3
Revision:
31:b5e19d153db4
Child:
33:d7b53d548c33
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exio.h	Thu Jul 28 07:46:56 2016 +0000
@@ -0,0 +1,152 @@
+/*------------------------------------------------------------
+exio.h
+拡張内容
+・スイッチ長押し/通常押しの区別
+・秒をHH:MM表示する。
+・HH:MMをLED表示する。
+-------------------------------------------------------------*/
+#ifndef __EXIO_H__
+#define __EXIO_H__
+ 
+#include "mbed.h"
+#include "io.h"
+#include "app_util.h"
+#include <time.h>
+#include "ble_date_time.h"
+#include "common.h"
+
+class exio : public io
+{
+protected:
+/*単位の表示*/
+    virtual void display_unit(void)
+    {
+        // [row6] D56-D49
+        // [row7] D64-D57
+        //
+        //     D53 D54 D55    *  *  *
+        //     D56 D57 D58       *
+        //     D59 D60 D61       *
+        //     D62 D63 D64       *
+        //
+        if(_mode == M_SCALE){ // (SCALE) G
+            _row_out[6] |= 0xf0;
+            _row_out[7] |= 0xf4;
+            _cnt = 0;
+        } else if(_mode == M_WATCHTIMER && _state == S_WATCH){ // (WATCH) .(period)
+            if(_cnt < 5){
+L001:
+                _row_out[6] |= 0x00; // 単位表示
+                _row_out[7] |= 0x20;
+            } else if(_cnt < 10){
+                _row_out[6] &= 0x0f; // 単位消去
+                _row_out[7] &= 0x00;
+            } else {
+                _cnt = 0;
+                goto L001;
+            }
+        } else if(_mode == M_WATCHTIMER && _state == S_TIMER){ // (TIME) T
+            _row_out[6] |= (0x10 + 0x20 + 0x40);
+            _row_out[7] |= (0x01 + 0x08 + 0x40);
+            _cnt = 0;
+        }
+    }
+/*100msec処理*/
+    virtual void TickerCallback(void)
+    {
+        _cnt++;
+        // スイッチ状態を定期的に見る
+        uint8_t sw = _sw->read();
+        if(sw == 1 && !_swFlag){// スイッチ押されたとき
+            _counter = 0;
+            _swState = None;
+            _swFlag = true;
+
+        } else if(sw == 0 && _swFlag){// スイッチ離されたとき
+            _swFlag = false;
+            if(_swState == None){ // スイッチ状態未決定の場合
+                if(_counter >= 10){ /*1sec*/
+                    _swState = LongPressed;
+                    //printf("LongPressed\r\n");
+                } else {
+                    _swState = Pressed;
+                    //printf("Pressed\r\n");
+                }
+            }
+        } else {
+            _counter++;
+        }
+        _lastSW = sw;
+#ifdef UART_DEBUG
+        //pc.printf("*");
+#endif
+    }
+    
+public:
+/*コンストラクタ*/
+    exio() : io(P0_15, P0_13)
+    {
+        _cnt = 0;
+        _swFlag = false;
+        _swState = None;
+        _ticker.attach(this, &exio::TickerCallback, 0.1);
+    }
+    
+/*スイッチ状態*/
+    typedef enum {
+        None = 0,
+        Pressed,
+        LongPressed,
+    } Switch_t;
+    
+/*スイッチ状態の取得 ==> スーパークラスのものを上書き*/
+    virtual uint8_t get_switch() 
+    {
+        return _swState;
+    }
+    
+/*スイッチ状態のリセット*/
+    void switch_reset(void)
+    { 
+        _swState = None; 
+        _lastSW = 0;
+    }
+    
+/*秒をHH:MM表示する*/
+    void displaySeconds(int value)
+    {
+        // 4-digit convert
+        // 40s->0040   100s->0140 
+        int a = value / 60;
+        int b = value % 60;
+        value = 100 * a + b;
+        display_value = value;
+#ifdef UART_DEBUG
+        pc.printf("[%04d]\r\n", value);
+#endif
+    }
+    
+/*HH:MMをLED表示する*/
+    void displayHHMM(ble_date_time_t &dt)
+    {
+        // 4-digit convert
+        // 10:50->1050  23:59->2359  
+        int value = dt.hours * 100 + dt.minutes;
+        display_value = value;
+#ifdef UART_DEBUG
+        pc.printf("[%04d][%d/%d/%d %02d:%02d:%02d]\r\n", 
+            value, dt.year, dt.month, dt.day, dt.hours, dt.minutes, dt.seconds);
+#endif
+    }
+    
+private:
+    bool _swFlag;
+    Switch_t _swState;
+    uint8_t _lastSW;
+    Ticker _ticker;
+    int _counter;
+    int _cnt;
+    
+};
+
+#endif /*__EXIO_H__*/