sakura.io Evalution Board's sample program of power management.
Dependencies: AQM0802A SakuraIO mbed
main.cpp
- Committer:
- okuhara
- Date:
- 2018-05-15
- Revision:
- 0:4387b9fc4c58
- Child:
- 1:c92bbea0eec1
File content as of revision 0:4387b9fc4c58:
#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