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: mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos
Fork of app4Coordo by
Revision 7:891d50fe1ee5, committed 2014-02-25
- Comitter:
- passelin
- Date:
- Tue Feb 25 18:11:05 2014 +0000
- Parent:
- 6:2ab1318e2b02
- Commit message:
- Comments added
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Feb 25 15:15:11 2014 +0000
+++ b/main.cpp Tue Feb 25 18:11:05 2014 +0000
@@ -1,3 +1,16 @@
+/*******************************************************************************************
+* FILE: Coordonator
+* File name: main.cpp
+* Authors: Pierluc Asselin & Marc-Antoine Dupuis
+* Object: S5 Info - APP5
+* Original Date: 22/02/2014
+* Last Modified: 25/02/2014
+********************************************************************************************/
+
+
+/*******************
+ INCLUDES
+*******************/
#include "mbed.h"
#include <string>
#include <sstream>
@@ -5,32 +18,54 @@
#include "EthernetInterface.h"
#include "Websocket.h"
-// Pins
+
+/*******************
+ PINS
+*******************/
DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut reset(p8);
-// Serial COMs
+
+/*******************
+ SERIAL
+*******************/
Serial pc(USBTX, USBRX);
Serial xbee(p13, p14);
-// Variables
+
+/*******************
+ VARIABLES
+*******************/
char url_s[BUFSIZ];
char dataBuf[20];
int dataBuf_i;
bool trame_ready;
string panID;
-// Ethernet interface
+
+/*******************
+ ETHERNET
+*******************/
EthernetInterface eth;
-// Configuration file
+
+/*******************
+ CONFIG FILE
+*******************/
LocalFileSystem local("local");
ConfigFile cfg;
-// State machine ENUM
+/*******************
+ STATE MACHINE ENUM
+*******************/
enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK};
+
+/*******************
+configInit
+This function get the information from the configuration init file.
+*******************/
void configInit()
{
char *key1 = "PANID";
@@ -48,42 +83,59 @@
*/
if (cfg.getValue(key1, &value[0], sizeof(value)))
{
+ // Get PanID
std::stringstream panID_s(value);
panID_s >> panID;
- pc.printf("'%s'='%s'\n\r", key1, value);
}
if (cfg.getValue(key2, &value[0], sizeof(value)))
{
+ // Get URL of web socket
memcpy(url_s,value,BUFSIZ);
}
}
-
+/*******************
+eth_ws_init
+This function initialize the ethernet port and the web socket connection
+*******************/
void eth_ws_init(Websocket* ws)
{
+ // Init and connect to ethernet port
eth.init();
eth.connect();
+ // Get IP adress
pc.printf("IP Address is %s\n\r", eth.getIPAddress());
+ // Wait 2 seconds since we just connected to the network
wait(2);
+ // Connect to the web socket
if(!ws->connect())
{
error("Failure establish connection to the WebSocket.\n\r");
}
}
-
+/*******************
+xbee_init
+This function initialize the xbee module and set his panID
+*******************/
void xbee_init()
{
+ // Reset the xbee
reset = 0;
wait_ms(400);
reset = 1;
+
+ // Wait for the xbee to be ready to receive data
wait(4);
+
+ // Build trame and send the PanID to the xbee
int panID_size;
int panID_array[8];
int i;
long int panID_d;
+
panID_size = panID.length(); //vérifie si le panID est pair ou impair
if(panID_size%2 != 0)
{
@@ -115,14 +167,12 @@
checkSum = checkSum + 0x09 + 0x47 + 0x49 + 0x44;
while(i>=0)
{
- pc.printf(" \n\r valeur = %d",panID_array[i]);
xbee.putc(panID_array[i]);
checkSum += panID_array[i];
i--;
}
checkSum = 0xff - checkSum;
xbee.putc(checkSum); // checksum
- pc.printf("\n\r %d %x", checkSum,checkSum);
xbee.putc(0x7E); // start delimeter
xbee.putc(0x00); // length
@@ -144,11 +194,16 @@
xbee.putc(0x28); //checksum
}
-
+/*******************
+xbee_receive
+This function receive and decode the information from the xbee communication
+*******************/
void xbee_receive()
{
+ // Initialize step-machine
static int state = STEP_START;
+ // Get the next caracter from xbee
char data = xbee.getc();
static int length_i;
@@ -156,9 +211,10 @@
static int mac_i;
static int net_i;
+ // Step-Machine
switch(state)
{
- case STEP_START: if(data == 0x7E)
+ case STEP_START: if(data == 0x7E) // Verifie if Start byte is OK.
{
state = STEP_LENGTH;
length_i = 0;
@@ -167,7 +223,7 @@
}
break;
- case STEP_LENGTH: length += data;
+ case STEP_LENGTH: length += data; //Read the length in the next 2 bytes.
length_i++;
if(length_i == 2)
{
@@ -176,7 +232,7 @@
}
break;
- case STEP_TYPE: if(data == 0x90) //Receive packet
+ case STEP_TYPE: if(data == 0x90) // Verifie if Type byte is OK.
{
state = STEP_MAC;
mac_i = 0;
@@ -187,7 +243,7 @@
}
break;
- case STEP_MAC: mac_i++;
+ case STEP_MAC: mac_i++; // Skip the next 8 bytes. We do not need the 64bits MAC adresse since we already receive the data. xbee already accepted it
if(mac_i == 8)
{
state = STEP_NET;
@@ -195,14 +251,14 @@
}
break;
- case STEP_NET: net_i++;
+ case STEP_NET: net_i++; // Skip the next 2 bytes. We do not need the 16bits adresse since we already receive the data. xbee already accepted it
if(net_i == 2)
{
state = STEP_OPT;
}
break;
- case STEP_OPT: if(data == 0x01)
+ case STEP_OPT: if(data == 0x01) // Verifie that the option bytes is OK
{
state = STEP_DATA;
}
@@ -212,7 +268,7 @@
}
break;
- case STEP_DATA: length--;
+ case STEP_DATA: length--; // Get the data. The number of bytes to read is given by the length previously detected.
dataBuf[dataBuf_i] = data;
dataBuf_i++;
if(length == 0)
@@ -223,47 +279,52 @@
}
break;
- case STEP_CHECK: //check CS
+ case STEP_CHECK: //check ChecksumS
state = STEP_START;
break;
}
}
-
+/*******************
+main
+This is the main function of the coordinator program
+*******************/
int main()
{
-
+ // Get the data from config init file
configInit();
+ // Create the web socket with the specified URl from the cofig init file
Websocket ws(url_s);
+
+ // Initialize the ethernet port and the web socket
eth_ws_init(&ws);
+ // initialize the xbee communication and the PAN
xbee_init();
-
+ // Light on SENDING led and RECEIVING led (led1, led2)
myled = 1;
myled2 = 1;
+ // initialise the confimation received flag
trame_ready = false;
+ //Main loop
while(1)
{
+ // If data is received from the xbee, toggle RECEIVING led and analyse the data
if(xbee.readable())
{
xbee_receive();
myled2 = ! myled2;
}
-
+
+ // if received trame is complete, send it to the web socket and reset the confirmation flag.
if(trame_ready == true)
{
- ws.send(dataBuf);
-
- //pc.printf(dataBuf);
- //pc.printf("\n\r");
+ ws.send(dataBuf);
trame_ready = false;
}
}
-
- //ws.close();
- // eth.disconnect();
}
