sakura.io Evalution Board's sample program of power management.
Dependencies: AQM0802A SakuraIO mbed
Diff: main.cpp
- Revision:
- 0:4387b9fc4c58
- Child:
- 1:c92bbea0eec1
--- /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();
+ }
+}
SAKURA Internet