レンタルサーバーと連携したsakura.ioの運用例

Dependencies:   mbed SakuraIO MPU9250_SPI BME280 gps AQM0802A

Revision:
1:11957db1faa5
Parent:
0:d2c4ee597498
Child:
2:48e7e85cb169
--- a/main.cpp	Wed Nov 21 08:54:34 2018 +0000
+++ b/main.cpp	Thu Nov 22 08:09:12 2018 +0000
@@ -7,6 +7,7 @@
 #include "sensors.h"
 #include "gps.h"
 
+//LED制御メッセージのタイプ種別の定数
 #define MESG_NORMAL 0
 #define MESG_INIT 1
 
@@ -52,6 +53,9 @@
 // GPS UART buffer
 char uart_buffer[128] = {0};
 int uart_buffer_index = 0;
+
+//LED応対s申告の為のLTE接続した直後を検出するためのフラグ
+// 0:切断、1:接続直後でLED情報送信中、2:LED状態到達確認済み
 int connected_now = 0;
 
 // NMEA Decoder
@@ -176,15 +180,25 @@
         return;    
     }
     else {
+        //ON_LINEだったとき
         if(0 == connected_now){
+            //接続直後(直前までオフラインだった)時
+            
+            //現在のLED状態を申告する送信
             tx_tmp = (MESG_INIT << 8) | (lcd_led & 0xFF);
             sakuraio.enqueueTx(20, tx_tmp);
             sakuraio.send();
+            
+            //接続直後でLED情報送信中
             connected_now = 1;
+            
+            //過去の送信カウント数クリアと、Offlineになってしまった液晶のsend再表示の為
             stat_sw5 = -1;
         }
         if(1 == connected_now){
+            //現在のLED状態を申告に対する応答がプラットフォームから帰ってきてない時
             if((tick_by_200ms % RETRY_INTERVAL_TICKS_PAR_COUNT) == 0){
+                //一定時間経過していたら再度LED状態を申告
                 tx_tmp = (MESG_INIT<<8) | (lcd_led & 0xFF);
                 sakuraio.enqueueTx(20, tx_tmp);
                 sakuraio.send();
@@ -194,7 +208,7 @@
 
             
             
-
+    //スイッチ状態が切り替わった時、もしくは、LTE接続が一旦切れて復帰した時
     if (stat_sw5 != sw_5) {
         stat_sw5 = sw_5;
         led_3 = stat_sw5;   //State: `Send Enable'
@@ -210,6 +224,7 @@
     }
     
     if (stat_sw5 == 1) {
+        //送信スイッチONの時。送信処理開始
         if ((tick_by_200ms % SEND_INTERVAL_TICKS_PAR_COUNT) == 0) {  //Send data intarval is 5 minutes.
             pc.printf("\r\n\r\n--------------------\r\n");
             read_sensor_data();
@@ -249,32 +264,59 @@
         }
     }
     
+    //受信確認処理
     do {
         rx_available = 0;
         if ( CMD_ERROR_NONE == sakuraio.getRxQueueLength(&rx_available, &rx_queued)) {
+            //getRxQueueLengthが成功したとき
             if (0 < rx_queued) {
+                 //sakura.ioモジュールの受信キューにデータが入っているとき
+                 //キューからひとつデータを取り出す
                 if ( CMD_ERROR_NONE == sakuraio.dequeueRx(&rx_ch, &rx_type, rx_value, &rx_offset)) {
+                    //正常に受信キューからデータを取り出せたとき
                     if ( (20 == rx_ch) && (0x49 == rx_type) ) {
+                        //LED状態の要求、もしくは、LED状態申告の回答のとき
+                        
+                        //受信した32bit整数値が、8bit値が4つの配列になって届くので、ひとつの整数値に整形
                         rx_val = ( (int64_t)rx_value[3] << 24) + ( (int64_t)rx_value[2] << 16) + ( (int64_t)rx_value[1] << 8) + ( (int64_t)rx_value[0] << 0);
+                        
+                        //受信した32bit値からbitmapに従ってそれぞれの情報の切り出し
                         ch20_ctrl = rx_val & 0xFF;
                         ch20_mesg = (rx_val>>8) & 0xFF;
                         ch20_id = (rx_val>>16) & 0xFFFF;
+                        
+                        
                         if ( (1 == ch20_ctrl) && (MESG_NORMAL == ch20_mesg)) {
+                            //LED状態の要求だったとき
                             tx_tmp = (ch20_id<<16) | (MESG_NORMAL<<8) | (lcd_led & 0xFF);
                             sakuraio.enqueueTx(20, tx_tmp);
                             sakuraio.send();
                         }
                         if ( (1 == ch20_ctrl) && (MESG_INIT == ch20_mesg)) {
+                            //LED状態申告の回答だったとき
+                            //フラグを進めて、LED状態到達確認済みとし、再送処理を止める
                             connected_now = 2;
                         }
                     }
                     if ( (21 == rx_ch) && (0x49 == rx_type) ) {
+                        //LED設定のとき
+                        
+                        //受信した32bit整数値が、8bit値が4つの配列になって届くので、ひとつの整数値に整形
                         rx_val = ( (int64_t)rx_value[3] << 24) + ( (int64_t)rx_value[2] << 16) + ( (int64_t)rx_value[1] << 8) + ( (int64_t)rx_value[0] << 0);
+                        
+                        //受信した32bit値からbitmapに従ってそれぞれの情報の切り出し
                         ch20_ctrl = rx_val & 0xFF;
                         ch20_mesg = (rx_val>>8) & 0xFF;
                         ch20_id = (rx_val>>16) & 0xFFFF;
+                        
+                        
                         if ( 1 == ch20_ctrl || 0 == ch20_ctrl ) {
+                            //LED制御値が、0(OFF) or 1(ON)だったとき
+                            
+                            //LEDに制御値を設定
                             lcd_led = ch20_ctrl;
+                            
+                            //設定後の値をプラットフォームへ返送
                             tx_tmp = (ch20_id<<16) | (MESG_NORMAL<<8) | (lcd_led & 0xFF);
                             sakuraio.enqueueTx(20, tx_tmp);
                             sakuraio.send();
@@ -283,7 +325,7 @@
                 }
             }
         }
-    }while(0 < rx_queued);
+    }while(0 < rx_queued); //受信キューが空になるまで回す