Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Audio EthernetInterface mbed-rtos mbed
Fork of FRDM_TCP_v4_copy by
Revision 11:9280da8e40bd, committed 2018-08-10
- Comitter:
- irsanjul
- Date:
- Fri Aug 10 09:12:27 2018 +0000
- Parent:
- 10:0468b439a484
- Commit message:
- asdasdas
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Audio.lib Fri Aug 10 09:12:27 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/irsanjul/code/Audio/#899519c9dfe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommChannel.cpp Fri Aug 10 09:12:27 2018 +0000
@@ -0,0 +1,99 @@
+//#include "mbed.h"
+#include "EthernetInterface.h"
+#include "CommChannel.h"
+#include "const_defines.h"
+
+extern Serial dbg;
+
+//-----------------------------------------------------------------
+extern std::vector<int> RCV_BUFF; // temporary buffer receiving progress
+std::vector<int> RCVD; // buffer completed receiving
+
+//-----------------------------------------------------------------
+// Mechanism for receive timeout
+//
+extern int timerRxTOutCnt;
+
+//-----------------------------------------------------------------
+// TCP definition
+//
+extern TCPSocketConnection socket;
+
+//-----------------------------------------------------------------
+// Wrapper class
+//
+CommChannel::CommChannel()
+{
+// dbg.printf("<CommChannel>");
+}
+
+CommChannel::~CommChannel()
+{
+
+}
+
+void CommChannel::connect(const std::string &host)
+{
+ // Connect to Server
+ int timeout = 0;
+ while (socket.connect(host.c_str(), 5002) < 0) {
+ dbg.printf(RED"Unable to connect to (%s) on port (%d)\r\n"DEF, host.c_str(), 5002);
+ timeout++;
+ if(timeout > 60)break;
+ wait(1);
+ }
+}
+
+int CommChannel::dataAvailable()
+{
+ return RCVD.size();
+}
+
+std::vector<int> CommChannel::read()
+{
+ std::vector<int> result;
+
+ for(int i=0; i<RCVD.size(); i++)
+ result.push_back(RCVD[i]);
+
+ RCVD.clear();
+ return result;
+}
+
+void CommChannel::write(const std::vector<int> &s)
+{
+ char sData[s.size()];
+
+ for(int i=0; i<s.size(); i++)
+ {
+ sData[i] = s[i] & 0x0ff;
+ }
+
+ socket.send_all(sData, sizeof(sData));
+}
+
+void CommChannel::write(char *s, int sz)
+{
+ socket.send_all(s, sz);
+}
+
+void CommChannel::Tick10ms()
+{
+ timerRxTOutCnt++;
+ if(timerRxTOutCnt >= 10)
+ {
+ timerRxTOutCnt = 0;
+
+ if(RCV_BUFF.size() > 0)
+ {
+ for(int i=0; i<RCV_BUFF.size(); i++)
+ {
+ RCVD.push_back(RCV_BUFF[i]);
+// dbg.printf("[%02X]", RCV_BUFF[i] & 0x0FF);
+ }
+ RCV_BUFF.clear();
+ }
+ }
+}
+
+//-----------------------------------------------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommChannel.h Fri Aug 10 09:12:27 2018 +0000
@@ -0,0 +1,27 @@
+#ifndef COMMCHANNEL_H
+#define COMMCHANNEL_H
+
+#include <vector>
+#include <string>
+
+class CommChannel
+{
+public:
+ CommChannel();
+ ~CommChannel();
+
+ void connect(const std::string &host);
+
+ int dataAvailable();
+ std::vector<int> read();
+
+ void write(const std::vector<int> &s);
+ void write(char *s, int sz);
+
+ void Tick10ms();
+
+private:
+
+};
+
+#endif // COMMCHANNEL_H
--- a/EthernetInterface.lib Tue Feb 14 16:37:18 2017 +0000 +++ b/EthernetInterface.lib Fri Aug 10 09:12:27 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a +https://os.mbed.com/users/irsanjul/code/EthernetInterface/#de1462e95bdb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LokerFraming.cpp Fri Aug 10 09:12:27 2018 +0000
@@ -0,0 +1,40 @@
+#include "mbed.h"
+#include "LokerFraming.h"
+
+extern Serial dbg;
+
+LokerFraming::LokerFraming()
+{
+
+}
+
+LokerFraming::~LokerFraming()
+{
+
+}
+
+void LokerFraming::ProcessFromHost(const std::vector<int> &stream)
+{
+ LokerFrm f;
+
+ f.stx = stream[0];
+ f.status = stream[1];
+ f.Data.push_back(stream[2]);
+ f.Data.push_back(stream[3]);
+ f.etx = stream[4];
+ RCV_QUE.push(f);
+}
+
+std::vector<int> LokerFraming::CreateFrame(const LokerFrm &f)
+{
+ std::vector<int> result;
+
+ result.push_back(f.stx);
+ result.push_back(f.status);
+ for(int i=0; i<f.Data.size(); i++)
+ {
+ result.push_back(f.Data[i] & 0x0FF);
+ }
+ result.push_back(f.etx);
+ return result;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LokerFraming.h Fri Aug 10 09:12:27 2018 +0000
@@ -0,0 +1,52 @@
+#ifndef LOKERFRAME_H
+#define LOKERFRAME_H
+
+#include <vector>
+#include <queue>
+
+class LokerFrm;
+
+//----------------------------------------------------------------
+class LokerFraming
+{
+public:
+ LokerFraming();
+ ~LokerFraming();
+
+ void ProcessFromHost(const std::vector<int> &stream);
+
+ static std::vector<int> CreateFrame(const LokerFrm &f);
+
+ std::queue<LokerFrm> RCV_QUE;
+
+private:
+
+};
+
+//----------------------------------------------------------------
+class LokerFrm
+{
+public:
+
+ int stx;
+ int status;
+// int zData;
+ std::vector<int> Data;
+ int ceksum;
+ int etx;
+};
+
+//----------------------------------------------------------------
+class TxFrm : public LokerFrm
+{
+public:
+ TxFrm(std::vector<int> &Data_, int status_)
+ {
+ stx = 0x32;
+ status = status_;
+ Data = Data_;
+ ceksum = -1;
+ etx = 0x33;
+ }
+};
+#endif //LOKERFRAME_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/const_defines.h Fri Aug 10 09:12:27 2018 +0000
@@ -0,0 +1,37 @@
+#ifndef CONST_DEFINES_H
+#define CONST_DEFINES_H
+
+// rows of lockers
+#define rowA 0x01
+#define rowB 0x02
+#define rowC 0x04
+#define rowD 0x08
+#define rowF 0x20
+#define rowG 0x40
+#define rowH 0x80
+
+// status
+#define idle 0x30
+#define expect 0x31
+#define release 0x32
+
+// max colum of lockers
+#define MAX_COL 0x08
+#define MAX_ROW 0x08
+
+#if 1 // colored terminal output using ANSI escape sequences
+ #define COL(c) "\033[" c
+ #else
+ #define COL(c)
+ #endif
+#define DEF COL("39m")
+#define BLA COL("30m")
+#define RED COL("31m")
+#define GRE COL("32m")
+#define YEL COL("33m")
+#define BLU COL("34m")
+#define MAG COL("35m")
+#define CYA COL("36m")
+#define WHY COL("37m")
+
+#endif // CONST_DEFINES_H
--- a/main.cpp Tue Feb 14 16:37:18 2017 +0000
+++ b/main.cpp Fri Aug 10 09:12:27 2018 +0000
@@ -1,37 +1,200 @@
#include "mbed.h"
+#include "rtos.h"
#include "EthernetInterface.h"
+#include "CommChannel.h"
+#include "LokerFraming.h"
+#include "const_defines.h"
+#include <vector>
+
+/*******************************************************************************
+PRIVATE PinOut
+*******************************************************************************/
+Serial dbg(USBTX, USBRX);
+DigitalOut led(LED_BLUE);
+
+
+/*******************************************************************************
+PRIVATE VARIABLE
+*******************************************************************************/
+int device_status;
+int kirim_status;
+int COL_SCAN, ROW_SCAN;
+const char* SERVER_ADDRESS = "192.168.0.34";
+const char* IP = "192.168.0.111";
+const char* SM = "255.255.255.0";
+const char* GW = "192.168.0.1";
+
+TCPSocketConnection socket;
+CommChannel COM;
+bool comStat;
+
+std::vector<int> RCV_BUFF;
+int timerRxTOutCnt;
+bool tmr10msTick;
+Ticker timer10ms;
+void timer10msTick();
-const char* ECHO_SERVER_ADDRESS = "192.168.2.2";
-const int ECHO_SERVER_PORT = 7;
+bool tmr10sTick;
+Ticker timer10s;
+void timer10stick();
-int main() {
+void rxRoutine(void const *args)
+{
+ while(true)
+ {
+ int n=0;
+ char buf[256];
+ n = socket.receive(buf, 256);
+ if(n > 0)
+ {
+ buf[n] = '\0';
+// dbg.printf("Received message from server: '%s'\n\r", buf);
+ for(int i=0; i<n; i++)
+ {
+ RCV_BUFF.push_back((int)buf[i]);
+ }
+ timerRxTOutCnt = 0;
+ }
+ Thread::wait(100);
+ }
+}
+
+//const int ECHO_SERVER_PORT = 5002;
+
+Ticker run;
+void runled();
+
+int main()
+{
+ tmr10msTick = false;
+ tmr10sTick = false;
+ kirim_status = false;
+
EthernetInterface eth;
- eth.init(); //Use DHCP
- eth.connect();
- printf("\nClient IP Address is %s\n", eth.getIPAddress());
+ eth.init(IP, SM, GW); //Use DHCP
+ int n = eth.connect();
+ if(n)dbg.printf(GRE"Connected with IP : %s\r\n"DEF, IP);
+ else dbg.printf(RED"Not Connected with IP : %s\r\n"DEF, IP);
+
+ comStat = false;
+ COM.connect(SERVER_ADDRESS);
+ dbg.printf(GRE"Connected to Server at %s\r\n"DEF, SERVER_ADDRESS);
+
+ timer10ms.attach_us(&timer10msTick, 10000);
+
+ set_time(1483228800);
+ run.attach(&runled, 1.0f);
+ Thread thread1(rxRoutine);
+
+ int Loop = 0;
- // Connect to Server
- TCPSocketConnection socket;
- while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
- printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
- wait(1);
+ while(true)
+ {
+ char timeBuf[32];
+ time_t seconds = time(NULL);
+ strftime(timeBuf, 32, "%Y-%m-%d+%H:%M:%S", localtime(&seconds));
+
+ comStat = socket.is_connected();
+ if(!comStat)
+ {
+ socket.close();
+ COM.connect(SERVER_ADDRESS);
+ dbg.printf(GRE"Connected to Server at %s\r\n"DEF, SERVER_ADDRESS);
+ }
+
+ if(tmr10msTick)
+ {
+ tmr10msTick = false;
+ COM.Tick10ms();
+ }
+
+ // Receive message from server
+ if(COM.dataAvailable() > 0)
+ {
+ dbg.printf(YEL"%s <<\t", timeBuf);
+ std::vector<int> r = COM.read();
+ for(int i=0; i<r.size(); i++)
+ dbg.printf("0x%02X ", r[i]);
+ dbg.printf("\r\n"DEF);
+
+ LokerFraming frm;
+ frm.ProcessFromHost(r);
+ size_t sz = frm.RCV_QUE.size();
+ if(sz > 0)
+ {
+ LokerFrm lf = frm.RCV_QUE.front();
+ frm.RCV_QUE.pop();
+
+ switch(lf.status)
+ {
+ case '0' :
+ device_status = idle;
+ break;
+ case '1' :
+ case '2' :
+ ROW_SCAN = lf.Data[0];
+ COL_SCAN = lf.Data[1];
+ dbg.printf(YEL"++ Scanning : %c %c\r\n\r\n"DEF, ROW_SCAN, COL_SCAN);
+ device_status = lf.status;
+ break;
+ case '3' : // for send status of
+ kirim_status = true;
+ break;
+ case '4' : // for setting the rtc
+ break;
+ default : break;
+ }
+ }
+ }
+
+ // Send message to server
+ if(kirim_status)
+ {
+ dbg.printf(YEL"%s >>\t", timeBuf);
+ if(comStat)
+ {
+ srand(seconds);
+ std::vector<int>kirim;
+ for(int i=0; i<8; i++)kirim.push_back(rand() % 0xFF);
+ TxFrm tData(kirim, device_status);
+
+ std::vector<int>tMsg = LokerFraming::CreateFrame(tData);
+ for(int i=0; i<tMsg.size(); i++)
+ dbg.printf("0x%02X ", tMsg[i]);
+ dbg.printf("\r\n\r\n"DEF);
+
+ COM.write(tMsg);
+ kirim_status = false;
+ Loop++;
+ if(Loop > 4)
+ {
+ Loop = 0;
+ device_status = idle;
+ }
+ }
+ else
+ {
+ socket.close();
+ COM.connect(SERVER_ADDRESS);
+ }
+ }
}
- printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS);
-
- // Send message to server
- char hello[] = "Hello World";
- printf("Sending message to Server : '%s' \n",hello);
- socket.send_all(hello, sizeof(hello) - 1);
-
- // Receive message from server
- char buf[256];
- int n = socket.receive(buf, 256);
- buf[n] = '\0';
- printf("Received message from server: '%s'\n", buf);
-
- // Clean up
- socket.close();
- eth.disconnect();
-
- while(true) {}
+}
+
+/*******************************************************************************
+PRIVATE FUNCTION
+*******************************************************************************/
+void runled()
+{
+ led = !led;
}
+
+void timer10stick()
+{
+ tmr10sTick = true;
+}
+
+void timer10msTick()
+{
+ tmr10msTick = true;
+}
