Depot Pertamina / Mbed 2 deprecated Gate_FRDM

Dependencies:   EthernetInterface MbedJSONValue SDFileSystem mbed-rtos mbed

Fork of Gate_Aidik_FRDM_v2 by Depot Pertamina

Files at this revision

API Documentation at this revision

Comitter:
irsanjul
Date:
Thu Oct 20 03:42:29 2016 +0000
Parent:
0:fbb75122015f
Commit message:
new gate aidik program

Changed in this revision

MbedJSONValue.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MbedJSONValue.lib	Thu Oct 20 03:42:29 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/Tigaresi/code/MbedJSONValue/#4d8ba9af46f5
--- a/main.cpp	Mon Aug 22 09:27:26 2016 +0000
+++ b/main.cpp	Thu Oct 20 03:42:29 2016 +0000
@@ -1,7 +1,10 @@
 #include "mbed.h"
 #include "EthernetInterface.h"
 #include "SDFileSystem.h"
-#include <string>
+#include "MbedJSONValue.h"
+#include <sstream>
+#include <iostream>
+#include <fstream>
 
 #define IP_CONF_PORT 50004
 
@@ -20,17 +23,15 @@
 Serial dbg(USBTX, USBRX);
 Serial pc(PTC17, PTC16);
 
-char IP[16], SUBNET[16], GATEWAY[16], MCAST[16];
-char PortListen[6], PortSend[6], PortHeartB[6];
-char IDX[4];
-char Baud[6];
+char IP[16], SUBNET[16], GATEWAY[16], MCAST[16], IDX[5];
+int PortListen, PortSend, PortHeartB;
 int BAUD = 19200;
 
 int width, TICK = 0;
 unsigned char ID[8], idx, idy, id_addr = 0x33, ix, er_tmp1 = 0, er_tmp2 = 0,
         sprmt = 0; // state = 1,
 char text[26], ch, rx_buff[6], tx_buff[7],  //86
-        hex[17] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
+        _hex[17] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
                 'C', 'D', 'E', 'F' };  //,
 
 /*Contoh format data
@@ -52,7 +53,7 @@
  1, idle
  2, stdby/ idle
  3, merah/sopir
- 4, bitu/ MT
+ 4, biru/ MT
  5, buka gate
 
  format ipconfig
@@ -149,78 +150,90 @@
         break;
     }
 }
-void mbed_config_init() {
-    char chr[256];
-    int ilx = 0;
-    unsigned char n = 0, x = 0;
-    FILE *fp = fopen("/sd/IPCONF.TXT", "r");
-    if (fp == NULL)
-        dbg.printf("Error opening file");
-    else {
-        //dbg.printf("File Exist!\r\n");
-        do {
-            ilx++;
-            chr[ilx] = fgetc(fp);
-            //dbg.printf("%c",chr[ilx]);
-        } while (chr[ilx] != '$');
-        fclose(fp);
+
+string open_file(const char *location)
+{
+    string rtn = "\0";
+    
+//    dbg.printf("OPEN FILE %s\r\n", location);
+    ifstream stream(location, std::ifstream::binary);
+    
+    if ( !stream.is_open() ) {
+        dbg.printf("File Opening Error\n\r");
+        stream.close();
+    }
+    else
+    {
+        stream.seekg(0,stream.end);
+        int len = stream.tellg();
+        stream.seekg(0,stream.beg);
+        
+        char *_stream = new char [len];
+        
+        stream.read(_stream,len);
+        _stream[len] = '\0';
+        
+        rtn += _stream;
+        stream.close();
+        delete [] _stream;
     }
-    ilx = 1;
-    do {
-        if (chr[ilx] == '#') {
-            ilx = ilx + 1;
-            n = 1;
-            dbg.printf("Start file\r\n");
-        } else if (chr[ilx] == ',') {
-            n++;
-            x = 0;
-            ilx = ilx + 2;
+    
+    return rtn;
+}
+
+bool mbed_config_init()
+{
+    dbg.printf("Masuk mbed config init\r\n");
+    
+    MbedJSONValue config_json;
+    string dataSet = open_file("/sd/IPCONF.TXT");
+    dbg.printf("isi file :\r\n%s\r\n", dataSet.c_str());
+    
+    if(dataSet.size() > 1)
+    {
+        string err;
+        parse(config_json, dataSet.c_str(), dataSet.c_str() + strlen(dataSet.c_str()), &err);
+        if(err.size() > 0)
+        {
+            dbg.printf("res error? %s\r\n", err.c_str());
+            return false;
+        }   
+        else
+        {
+            const char *ip_temp      = config_json["IP"].get<string>().c_str();
+            const char *sub_temp     = config_json["SUBNET"].get<string>().c_str();
+            const char *gate_temp    = config_json["GATEWAY"].get<string>().c_str();
+            const char *mcast_temp   = config_json["MCAST"].get<string>().c_str();
+            const char *idx_temp     = config_json["IDX"].get<string>().c_str();
+            PortListen  = config_json["PortListen"].get<int>();
+            PortSend    = config_json["PortSend"].get<int>();
+            PortHeartB   = config_json["PortHeartBit"].get<int>();
+            BAUD        = config_json["BAUD"].get<int>();
+            
+            sprintf(IP,"%s", ip_temp);
+            sprintf(SUBNET, "%s", sub_temp);
+            sprintf(GATEWAY, "%s", gate_temp);
+            sprintf(MCAST, "%s", mcast_temp);
+            sprintf(IDX, "%s", idx_temp);
+            
+            dbg.printf("IP Device         = %s\r\n", IP);
+            dbg.printf("Subnet            = %s\r\n", SUBNET);
+            dbg.printf("Gateway           = %s\r\n", GATEWAY);
+            dbg.printf("Multicast IP      = %s\r\n", MCAST);
+            dbg.printf("Server to mBed    = %d\r\n", PortListen);
+            dbg.printf("mBed to Multicast = %d\r\n", PortSend);
+            dbg.printf("HeartBeat Port    = %d\r\n", PortHeartB);
+            dbg.printf("device IDX        = %s\r\n", IDX);
+            dbg.printf("Serial Baudrate   = %d\r\n", BAUD);
+            
+            return true;
         }
-        switch (n) {
-        case 0:
-            break;
-        case 1:
-            IP[x] = chr[ilx];
-            break;
-        case 2:
-            SUBNET[x] = chr[ilx];
-            break;
-        case 3:
-            GATEWAY[x] = chr[ilx];
-            break;
-        case 4:
-            MCAST[x] = chr[ilx];
-            break;
-        case 5:
-            PortListen[x] = chr[ilx];
-            break;
-        case 6:
-            PortSend[x] = chr[ilx];
-            break;
-        case 7:
-            PortHeartB[x] = chr[ilx];
-            break;
-        case 8:
-            IDX[x] = chr[ilx];
-            break;
-        case 9:
-            Baud[x] = chr[ilx];
-            break;
-        }
-        x++;
-        ilx++;
-    } while (chr[ilx] != '$');
-
-    dbg.printf("IP Device         = %s\r\n", IP);
-    dbg.printf("Subnet            = %s\r\n", SUBNET);
-    dbg.printf("Gateway           = %s\r\n", GATEWAY);
-    dbg.printf("Multicast IP      = %s\r\n", MCAST);
-    dbg.printf("Server to mBed    = %s\r\n", PortListen);
-    dbg.printf("mBed to Multicast = %s\r\n", PortSend);
-    dbg.printf("HeartBeat Port    = %s\r\n", PortHeartB);
-    dbg.printf("device IDX        = %s\r\n", IDX);
-    dbg.printf("Serial Baudrate   = %s\r\n", Baud);
-    BAUD = atoi(Baud);
+    }
+    else
+    {
+        dbg.printf("Config is not found\r\n");
+        return false;
+    }
 }
 
 unsigned char reset(void) {
@@ -288,11 +301,11 @@
     }
 
     for (idx = 0; idx < 8; idx++) {
-        text[((7 - idx) * 2) + 7] = hex[ID[idx] & 0x0f];
-        text[((7 - idx) * 2) + 6] = hex[(ID[idx] >> 4) & 0x0f];
+        text[((7 - idx) * 2) + 7] = _hex[ID[idx] & 0x0f];
+        text[((7 - idx) * 2) + 6] = _hex[(ID[idx] >> 4) & 0x0f];
     }
-    std::string str;
-    std::size_t found1;
+    string str;
+    size_t found1;
     str += text;
         
     found1 = str.find("FFFFFFFFFF");
@@ -326,7 +339,7 @@
     hb_buff[2] = IDX[2];
     hb_buff[3] = IDX[3];
 
-    multi.set_address(MCAST, atoi(PortHeartB));
+    multi.set_address(MCAST, PortHeartB);
     hb++;
 
     switch (std) {
@@ -396,14 +409,14 @@
             tx_buff[4] = 'P';
             tx_buff[5] = '0';
             tx_buff[6] = '0';
-            multi.set_address(MCAST, atoi(PortSend));
+            multi.set_address(MCAST, PortSend);
             sock.sendTo(multi, tx_buff, sizeof(tx_buff));
         } else if (rx_buff[1] == 'R') {
             tx_buff[4] = 'P';
             tx_buff[5] = '0';
             tx_buff[6] = '0';
             sprmt = 0;
-            multi.set_address(MCAST, atoi(PortSend));
+            multi.set_address(MCAST, PortSend);
             sock.sendTo(multi, tx_buff, sizeof(tx_buff));
             eMTy(0, 0);
             Sopir(0, 0);
@@ -415,19 +428,14 @@
     return 0;
 }
 
-void write_config(char buff[90]){
-    FILE *fp = fopen("/sd/IPCONF.TXT", "w");
-    fprintf(fp, buff);
-    fclose(fp);
-}
-
 int set_IP() {
     char ptr_data;
     //server.set_address(SERVER,ER_SEND_PORT);
     //char print_rx_buff[128];
-    char conf_buff[1024] = { 0 }, print_init[20] = { 0x1b, 0x40, 0x1b, 0x54,
-            0x1b/*,0x57*/, 0x00, 0x1b, 0x77, 0x00, 0x12, 0x1b, 0x43, 0x00, 0x06,
-            0x1b, 0x6c, 0x01, 0x12 };
+//    char conf_buff[1024] = { 0 }, print_init[20] = { 0x1b, 0x40, 0x1b, 0x54,
+//            0x1b/*,0x57*/, 0x00, 0x1b, 0x77, 0x00, 0x12, 0x1b, 0x43, 0x00, 0x06,
+//            0x1b, 0x6c, 0x01, 0x12 };
+    char conf_buff[1024] = { 0 };
     int n = ip_conf.receiveFrom(server, conf_buff, sizeof(conf_buff));
     if (n >= 0) {
         //printf("Packet from \"%s\": %s\n", server.get_address(), conf_buff);
@@ -476,19 +484,17 @@
                 //sock.close(true);
             } else if (conf_buff[1] == 'W') {
                 Sleep = 0;
-                //sock.bind(atoi(PortListen));
+                //sock.bind(PortListen);
             }
-        } else if (conf_buff[0] == '#') {
-            write_config(conf_buff);
         } else if (conf_buff[0] == 0x0f) {
-            dbg.printf("%s", print_init);
+            //dbg.printf("%s", print_init);
             pc.printf("%s", conf_buff);
             ptr_data = *strchr(conf_buff, 0x1d);
             if (ptr_data != NULL) {
                 tx_buff[4] = 'D';
                 tx_buff[5] = '0';
                 tx_buff[6] = '1';
-                multi.set_address(MCAST, atoi(PortSend));
+                multi.set_address(MCAST, PortSend);
                 sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                 dbg.printf("Printer Done\r\n");
             }
@@ -517,15 +523,15 @@
 
 void Set_IP_Manual()
 {
-    sprintf(IP,"192.168.0.14");
+    sprintf(IP,"192.168.0.101");
     sprintf(SUBNET, "255.255.255.0");
     sprintf(GATEWAY, "192.168.0.1");
     sprintf(MCAST, "224.1.1.8");
-    sprintf(PortListen, "50007");
-    sprintf(PortSend, "50001");
-    sprintf(PortHeartB, "50003");
-    sprintf(IDX, "GI01");
-    BAUD = 19200;
+    PortListen = 50007;
+    PortSend = 50001;
+    PortHeartB = 50003;
+    sprintf(IDX, "GO01");
+    BAUD = 38400;
     
     dbg.printf("IP Device         = %s\r\n", IP);
     dbg.printf("Subnet            = %s\r\n", SUBNET);
@@ -540,12 +546,16 @@
 int main(void) {
     mkdir("/sd/", 0777);
     
-    mbed_config_init(); // Digunakan jika setting ip melalui micro sd
-    Set_IP_Manual(); // Digunakan jika setting ip secara manual
+    bool card_ready = mbed_config_init(); // Digunakan jika setting ip melalui micro sd
+    if(!card_ready)
+    {
+        dbg.printf("Set Config via hard code\r\n");
+        Set_IP_Manual(); // Digunakan jika setting ip secara manual
+    }
     
-    dbg.printf("\r\nPrinter Baud = %d\r\n",BAUD);
+    dbg.printf("Printer Baud = %d\r\n",BAUD);
     pc.baud(BAUD);
-    dbg.baud(BAUD);
+    dbg.baud(9600);
     dbg.printf("System Start \r\n");
 
     EthernetInterface eth;
@@ -560,7 +570,7 @@
     ip_conf.set_blocking(false, 0);
     server.set_address(MCAST, 50002);
 
-    sock.bind(atoi(PortListen));
+    sock.bind(PortListen);
 
     sock.set_blocking(false, 0);
 
@@ -584,7 +594,7 @@
     tx_buff[4] = 'R';
     tx_buff[5] = '0';
     
-    multi.set_address(MCAST, atoi(PortSend));
+    multi.set_address(MCAST, PortSend);
     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
     
     eMTy(ijo, 0);
@@ -625,7 +635,7 @@
                         text[5] = 'M';
                     }
                     if (cmpstr(text, "F") < 10) {
-                        multi.set_address(MCAST, atoi(PortSend));
+                        multi.set_address(MCAST, PortSend);
                         sock.sendTo(multi, text, sizeof(text));
                         sndrcv = 1;
                     }
@@ -645,7 +655,7 @@
             break;
         }
         case 1: {
-            sock.bind(atoi(PortListen));
+            sock.bind(PortListen);
             
             int n = sock.receiveFrom(server, rx_buff, sizeof(rx_buff));
             if (n != 0) {
@@ -658,7 +668,7 @@
                     tx_buff[4] = 'O';
                     tx_buff[5] = 'K';
                     tx_buff[6] = '!';
-                    multi.set_address(MCAST, atoi(PortSend));
+                    multi.set_address(MCAST, PortSend);
                     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                     dbg.printf("Data S Valid..\r\n");
                 } else if ((rx_buff[1] == 'A') && (rx_buff[3] == '3')) {
@@ -671,7 +681,7 @@
                     tx_buff[4] = 'O';
                     tx_buff[5] = 'K';
                     tx_buff[6] = '!';
-                    multi.set_address(MCAST, atoi(PortSend));
+                    multi.set_address(MCAST, PortSend);
                     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                     dbg.printf("Data S Not Valid, but M valid, reset!!!!\r\n");
                 } else if ((rx_buff[1] == 'V') && (rx_buff[3] == '4')) {
@@ -686,7 +696,7 @@
                     tx_buff[4] = 'O';
                     tx_buff[5] = 'K';
                     tx_buff[6] = '!';
-                    multi.set_address(MCAST, atoi(PortSend));
+                    multi.set_address(MCAST, PortSend);
                     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                     dbg.printf("Data M Valid..\r\n");
                 } else if ((rx_buff[1] == 'A') && (rx_buff[3] == '4')) {
@@ -700,7 +710,7 @@
                     tx_buff[4] = 'O';
                     tx_buff[5] = 'K';
                     tx_buff[6] = '!';
-                    multi.set_address(MCAST, atoi(PortSend));
+                    multi.set_address(MCAST, PortSend);
                     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                     dbg.printf("Data M Not Valid, refresh!!!!\r\n");
                 } else if (rx_buff[1] == 'R') {
@@ -711,7 +721,7 @@
                     tx_buff[4] = 'O';
                     tx_buff[5] = 'K';
                     tx_buff[6] = '!';
-                    multi.set_address(MCAST, atoi(PortSend));
+                    multi.set_address(MCAST, PortSend);
                     sock.sendTo(multi, tx_buff, sizeof(tx_buff));
                     dbg.printf("All Data Not Valid, reset!!!!\r\n");
                 }
@@ -738,7 +748,7 @@
                 tx_buff[4] = 'X';
                 tx_buff[5] = '0';
                 tx_buff[6] = '1';
-                multi.set_address(MCAST, atoi(PortSend));
+                multi.set_address(MCAST, PortSend);
                 dbg.printf("Printer Error\r\n");
                 sock.sendTo(multi, tx_buff, sizeof(tx_buff));
             } else
@@ -751,7 +761,7 @@
                 tx_buff[5] = '0';
                 tx_buff[6] = '1';
                 dbg.printf("Printer Fixed\r\n");
-                multi.set_address(MCAST, atoi(PortSend));
+                multi.set_address(MCAST, PortSend);
                 sock.sendTo(multi, tx_buff, sizeof(tx_buff));
             } else
                 er_tmp2 = 5;