sakura.io Evalution Board's sample program of power management.

Dependencies:   AQM0802A SakuraIO mbed

Files at this revision

API Documentation at this revision

Comitter:
okuhara
Date:
Tue May 15 02:30:39 2018 +0000
Child:
1:c92bbea0eec1
Commit message:
initial commit.

Changed in this revision

AQM0802A.lib Show annotated file Show diff for this revision Revisions of this file
SakuraIO.lib Show annotated file Show diff for this revision Revisions of this file
SakuraPinNames.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AQM0802A.lib	Tue May 15 02:30:39 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/tetsuya256/code/AQM0802A/#5cc8d4df601d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SakuraIO.lib	Tue May 15 02:30:39 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/SAKURA-Internet/code/SakuraIO/#a9dbb86be232
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SakuraPinNames.h	Tue May 15 02:30:39 2018 +0000
@@ -0,0 +1,63 @@
+#ifndef __SAKURA_PIN_NAMES_H__
+#define __SAKURA_PIN_NAMES_H__
+
+#define DAP_UART_TX PB_6
+#define DAP_UART_RX PB_7
+
+// GPIO
+#define SW1 PC_14
+#define SW2 PH_0
+#define SW3 PC_0
+#define SW4 PC_1
+#define SW5 PC_2
+#define SW6 PC_3
+#undef LED1
+#undef LED2 
+#undef LED3
+#undef LED4
+#define LED1 PC_13
+#define LED2 PC_15
+#define LED3 PH_1
+#define LED4 PC_4
+
+// LCD
+#define LED_LCD PC_5
+
+// MPU-9250
+#define MPU9250_INT PB_2
+
+// GPS
+#define GPS_EN PA_11
+#define GPS_INT PB_5
+#define GPS_1PPS PB_4
+#define GPS_WAKEUP PD_2
+#define GPS_TX PC_6
+#define GPS_RX PC_7
+
+// sakura.io
+#define SCM_WAKE_IN  PC_8
+#define SCM_WAKE_OUT PA_9
+
+/* Bus */
+
+// I2C (LCD, BME280)
+#define I2C_INTERNAL_SCL PB_8
+#define I2C_INTERNAL_SDA PB_9
+
+// I2C (sakura.io)
+#undef I2C_SCL
+#undef I2C_SDA
+#define I2C_SCL PA_8
+#define I2C_SDA PC_9
+
+// I2C (External)
+#define I2C_EXTERNAL_SCL PB_10
+#define I2C_EXTERNAL_SDA PB_3
+
+// SPI (MPU-9250)
+#define SPI_MPU_MISO PA_12
+#define SPI_MPU_MOSI PA_10
+#define SPI_MPU_SCK PB_0
+#define SPI_MPU_CS PB_1
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 15 02:30:39 2018 +0000
@@ -0,0 +1,147 @@
+#include <string.h>
+#include <mbed.h>
+#include <AQM0802A.h>
+#include <SakuraIO.h>
+#include "SakuraPinNames.h"
+
+// Serial over CMSIS_DAP
+Serial pc(DAP_UART_TX, DAP_UART_RX, 9600);
+
+// sakura.io
+DigitalOut wake_in(SCM_WAKE_IN);
+DigitalIn  wake_out(SCM_WAKE_OUT);
+
+// LED
+DigitalOut led_1(LED1);
+DigitalOut led_2(LED2);
+DigitalOut led_3(LED3);
+DigitalOut led_4(LED4);
+
+DigitalOut leds[] = {led_1, led_2, led_3};
+
+// LCD backlight
+DigitalOut lcd_led(LED_LCD);
+
+// Switch
+DigitalIn sw_1(SW1);
+DigitalIn sw_2(SW2);
+DigitalIn sw_3(SW3);
+DigitalIn sw_4(SW4);
+DigitalIn sw_5(SW5);
+DigitalIn sw_6(SW6);
+
+DigitalIn sws[] = {sw_1, sw_2, sw_3};
+
+// Internal I2C
+I2C internal_i2c(I2C_INTERNAL_SDA, I2C_INTERNAL_SCL);
+AQM0802A lcd(internal_i2c);
+
+// sakura.io
+//SakuraIO_I2C sakuraio(I2C_SDA, I2C_SCL);
+SPI sakuraio_spi(PB_15, PB_14, PB_13);
+DigitalOut sakuraio_cs(PB_12);
+SakuraIO_SPI sakuraio(sakuraio_spi, sakuraio_cs);
+
+static void setup()
+{
+    char uid[32];
+    
+    wake_in = 1;
+
+    pc.printf("Hello World !\r\n");
+    lcd.cls();
+    lcd.printf("Hello");
+    
+    while (sw_6 == 0) {
+        wait(0.1);
+    } 
+
+    lcd_led = 1;
+
+    memset(uid, 0, sizeof(uid));
+    sakuraio.getUniqueID(uid);
+    lcd.cls();
+    pc.printf("UniqueID: %s\r\n", uid);
+    
+    lcd.printf("........");
+    led_4 = 1;
+}
+
+static void loop()
+{
+    uint8_t mode = 0xff;
+    static uint8_t prev_sw[3] = {1, 1, 1};
+    uint8_t send_sw;
+    static uint8_t prev_send_sw = 1;
+    uint8_t cnstat;
+    static uint8_t prev_cnstat = 0xff;
+
+    // 動作中LEDを点滅させる
+    led_4 = !led_4;
+    
+    // 省電力モードをSW1-SW3で選択する。
+    for (int i = 0; i < 3; i++) {
+        if ((prev_sw[i] == 1) && (sws[i] == 0)) {
+            mode = i;
+        }
+        prev_sw[i] = sws[i];
+    }
+    if (mode < 3) {
+        pc.printf("Selected PowerSaveMode: %d\r\n", mode);
+        uint8_t ret = sakuraio.setPowerSaveMode(mode);
+        pc.printf("setPowerSaveMode(): %d\r\n", ret);
+    }
+    
+    // 選択されている省電力モードを取得
+    uint8_t stat = sakuraio.getPowerSaveMode();
+    led_1 = (stat == 0) ? 1 : 0;
+    led_2 = (stat == 1) ? 1 : 0;
+    led_3 = (stat == 2) ? 1 : 0;
+    
+    // 接続状態を表示
+    cnstat = sakuraio.getConnectionStatus();
+    if (prev_cnstat != cnstat) {
+        lcd.cls();
+        if ((cnstat & 0x80) == 0x80 ) {
+            lcd.printf("Online");
+        } else {
+            lcd.printf("Offline");
+        }
+    }
+    prev_cnstat = cnstat;
+    
+    // 選択されている省電力モードをsakura.ioで送信
+    send_sw = sw_4;
+    if ((cnstat & 0x80) == 0x80) {
+        if ((prev_send_sw == 1) && (send_sw == 0)) {
+            sakuraio.enqueueTx(0, (int32_t)stat);
+            sakuraio.send();
+        }
+    }
+    prev_send_sw = send_sw;
+    
+    // WAKE_INを設定
+    wake_in = sw_5;
+    
+    uint8_t available, queued;
+    if (sakuraio.getRxQueueLength(&available, &queued) == CMD_ERROR_NONE) {
+        for (int i = 0; i < queued; i++) {
+            uint8_t ch, typ, val[8];
+            int64_t offset;
+            if (sakuraio.dequeueRx(&ch, &typ, val, &offset) == CMD_ERROR_NONE) {
+                if (ch == 0) {
+                    lcd_led = val[0];
+                }
+            }
+        }
+    }
+    wait(0.2);
+}
+
+int main()
+{
+    setup();
+    while(1) {
+        loop();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue May 15 02:30:39 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/aa5281ff4a02
\ No newline at end of file