Koyo Takenoshita / Mbed 2 deprecated ina-hack-2nd

Dependencies:   ADXL345_I2C Chainable_RGB_LED EEAB-P1 MMA8652FC Sht31 TinyGPS mbed

Fork of ina-hack-test by dondoko don

Files at this revision

API Documentation at this revision

Comitter:
koyo_take
Date:
Sat Jun 24 03:45:00 2017 +0000
Child:
1:195da8230785
Commit message:
initial commit

Changed in this revision

EEAB-P1/Eeabp1.cpp Show annotated file Show diff for this revision Revisions of this file
EEAB-P1/Eeabp1.h Show annotated file Show diff for this revision Revisions of this file
TinyGPS.lib 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/EEAB-P1/Eeabp1.cpp	Sat Jun 24 03:45:00 2017 +0000
@@ -0,0 +1,259 @@
+#include "Eeabp1.h"
+//#include "rtos.h"
+
+//Thread thread;
+static const int lora_msg_max_len = 11;
+
+Eeabp1::Eeabp1() : pwr_en(P0_0), led(P0_23), lora_reset(P0_22), lora_power(P0_5), grove_power(P0_6)
+{
+    this->led_state = LED_OFF;
+    this->led = 0;
+    this->serial = new RawSerial(P0_9, P0_11);
+    this->serial->baud(9600); /* use for LoRa */
+    this->pwr_en = 1; // メイン電源投入
+    this->lora_power = 0;
+    this->lora_reset = 0;
+    this->grove_power = 0;
+    this->lora_enabled = false;
+    this->grove_enabled = false;
+}
+
+int Eeabp1::setLedState(EeabLedState state)
+{
+    this->led_state = state;
+
+    if (this->led_state == LED_OFF) {
+        this->led = 0;
+    } else {
+        this->led = 1;
+    }
+
+    return 0;
+}
+
+void Eeabp1::loop(void)
+{
+    switch (this->led_state) {
+        case LED_OFF:
+            /* fall through */
+        case LED_ON:
+            break;
+        case LED_BLINK_FAST:
+        case LED_BLINK_MID:
+        case LED_BLINK_SLOW:
+            this->led = !this->led;
+            break;
+    }
+}
+
+int Eeabp1::debug(const char * format, ...)
+{
+    char tmp[80];
+    int ret;
+
+    std::va_list arg;
+    va_start(arg, format);
+    vsnprintf(tmp, sizeof(tmp), format, arg);
+    va_end(arg);
+
+    delete this->serial;
+    this->serial = new RawSerial(P0_8, P0_10);
+    ret = this->serial->puts(tmp);
+    delete this->serial;
+    this->serial = new RawSerial(P0_9, P0_11);
+
+    return ret;
+}
+
+int Eeabp1::setLoRaPower(bool on)
+{
+    int ret;
+
+    if (on) {
+        if (lora_enabled)
+            return 0;  /* power is already on, do nothing */
+
+        this->lora_power= 1;
+        this->lora_reset = 1;
+        wait_us(500000);
+        serial->printf("mod set_echo off\r\n"); // ローカルエコー:無効
+        wait(1);
+        flushSerial();
+        serial->printf("lorawan join otaa\r\n"); // Gatewayに接続(OTAA)
+        ret = chkSerialCharRes('a'); // 成功 ">> accepted" 失敗 ">> unsuccess"
+        if (ret != 0)
+            return ret;
+        serial->printf("lorawan set_dr 2\r\n"); // データレートの設定(11byte)
+        ret = chkSerialCharOk();
+        if (ret != 0)
+            return ret;
+
+        this->lora_enabled = true;
+    } else { /* off */
+        if (!lora_enabled)
+            return 0;  /* power is already off, do nothing */
+
+        lora_power= 0;
+        lora_enabled = false;
+    }
+
+    return 0;
+}
+
+int Eeabp1::sendLoRaString(const char * format, ...)
+{
+    char str[lora_msg_max_len+1] = {0x00, };
+    char msg[64];
+    char *p = msg;
+
+    std::va_list arg;
+    va_start(arg, format);
+    vsnprintf(str, sizeof(str), format, arg);
+    va_end(arg);
+
+    p += sprintf(msg, "lorawan tx ucnf 16 ");
+    for (unsigned int i = 0; i < strlen(str); i++) {
+        p += sprintf(p, "%02x", str[i]);
+    }
+    sprintf(p, "\r\n");
+
+    flushSerial();
+    serial->puts(msg);
+    //serial->printf("lorawan tx ucnf 16 74657374\r\n");
+
+    return 0;
+}
+
+void Eeabp1::setGrovePower(bool on)
+{
+    if (on) {
+        if (grove_enabled)
+            return; /* power is already on, do nothing */
+
+        grove_power = 1;
+    } else {
+        if (!grove_enabled)
+            return; /* power is already off, do nothing */
+        
+        grove_power = 0;
+    }
+}
+
+/* private functions */
+void Eeabp1::flushSerial()
+{
+    while(serial->readable() == true) {
+        serial->getc();
+        wait_us(1000);
+    }
+}
+
+int Eeabp1::chkSerialChar(const char ch,uint16_t timeout_ms)
+{
+    uint32_t timeoutCount = 0;
+
+    while(serial->readable() == false) {
+        wait_us(50);
+        timeoutCount++;
+        if((timeoutCount  / 20) >= timeout_ms)
+            return -2;
+    }
+
+    return (serial->getc() == ch) ? 0 : -1;
+}
+
+int Eeabp1::waitSerialChar(const char ch,uint16_t timeout_ms)
+{
+    uint32_t timeoutCount = 0;
+
+    do {
+        while(serial->readable() == false) {
+            wait_us(50);
+            timeoutCount++;
+            if((timeoutCount  / 20) >= timeout_ms)
+                return -2;
+        }
+    } while(serial->getc() != ch);
+
+    return 0;
+}
+
+int Eeabp1::chkSerialCharOk()
+{
+    int ret;
+    ret = waitSerialChar('>',4000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('>',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar(' ',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('O',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('k',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = waitSerialChar('>',4000);
+    if (ret != 0)
+        return __LINE__;
+
+    wait_us(1000);
+
+    return 0;
+}
+
+int Eeabp1::chkSerialCharRes(char chkchr)
+{
+    int ret;
+    ret = waitSerialChar('>', 10000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('>',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar(' ',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('O',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('k',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = waitSerialChar('>',16000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar('>',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar(' ',2000);
+    if (ret != 0)
+        return __LINE__;
+
+    ret = chkSerialChar(chkchr,2000);
+    if (ret != 0)
+        return ret * __LINE__;
+
+    ret = waitSerialChar('>',4000);
+    if (ret != 0)
+        return __LINE__;
+
+    wait_us(1000);
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEAB-P1/Eeabp1.h	Sat Jun 24 03:45:00 2017 +0000
@@ -0,0 +1,46 @@
+#if !defined(EEAPP1_H)
+#define EEAPP1_H
+#include "mbed.h"
+#include "types.h"
+
+enum EeabLedState {
+    LED_OFF,
+    LED_ON,
+    LED_BLINK_FAST,
+    LED_BLINK_MID,
+    LED_BLINK_SLOW,
+};
+
+class Eeabp1
+{
+public:
+    Eeabp1();
+    int setLedState(EeabLedState state);
+    void loop(void);
+    int debug(const char * format, ...);
+    int setLoRaPower(bool on);
+    int sendLoRaString(const char * format, ...);
+    void setGrovePower(bool on);
+
+private:
+    DigitalOut pwr_en;
+    /* state LED */
+    DigitalOut led;
+    EeabLedState led_state;
+    /* LoRa */
+    RawSerial *serial;
+    DigitalOut lora_power;
+    DigitalOut lora_reset;
+    bool lora_enabled;
+    /* Grove */
+    DigitalOut grove_power;
+    bool grove_enabled;
+
+    void flushSerial();
+    int chkSerialChar(const char,uint16_t);
+    int waitSerialChar(const char,uint16_t);
+    int chkSerialCharOk();
+    int chkSerialCharRes(char);
+};
+
+#endif /* !defined(EEAPP1_H) */
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TinyGPS.lib	Sat Jun 24 03:45:00 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/sonson/code/TinyGPS/#af534d51739f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jun 24 03:45:00 2017 +0000
@@ -0,0 +1,26 @@
+#include "mbed.h"
+#include "TinyGPS.h"
+#include "Eeabp1.h"
+
+int main(void)
+{
+    Eeabp1 board;
+    int ret = 0;
+
+    board.setLedState(LED_BLINK_FAST);
+    board.debug("Hello ina-hack!\r\n");
+
+    board.setGrovePower(true);
+    ret = board.setLoRaPower(true);
+    if (ret != 0) {
+//        board.setLedState(LED_OFF);
+        board.debug("error %d\r\n", ret);
+    }
+
+    int i = 0;
+    do {
+        wait(10);
+        board.loop();
+        board.sendLoRaString("hello %d", i++);
+    } while(true);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Jun 24 03:45:00 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/4eea097334d6
\ No newline at end of file