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: WebSocketClient WiflyInterface mbed messages
Fork of IoT_Ex by
Diff: source/iQ_globals.cpp
- Revision:
- 0:c5607b31fb07
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/source/iQ_globals.cpp Tue Oct 04 11:34:47 2016 +0000
@@ -0,0 +1,167 @@
+// ******************
+// * iQ_globals.cpp *
+// ******************
+//
+// Created: 2015/03/19
+// By: Damien Frost
+
+#include "mbed.h"
+#include "iQ_globals.h"
+
+//#define DEBUG
+#define INFOMESSAGES
+#define WARNMESSAGES
+#define ERRMESSAGES
+#define FUNCNAME "GBL"
+#include "messages.h"
+
+char* wifissid = "SC";
+char* wifipassword = "smartcellshield";
+
+Serial pc(USBTX, USBRX);
+InterruptIn UIBut1(USER_BUTTON);
+Timer DisplayTimer;
+
+WiflyInterface eth(D8, D2, D6, LED1, wifissid, wifipassword, WPA2);
+
+int ReconnectAttempts = 0;
+int SendCounter = 0;
+extern int IoT_ID = 0;
+
+Websocket ws;
+
+
+int SetupNetwork(int Tries){
+ // Initialize the interface.
+ // If no param is passed to init() then DHCP will be used on connect()
+ int s = eth.init();
+ int attempts = 1;
+
+ wait(1);
+ if (s != NULL) {
+ ERR("Could not initialise. Halting!");
+ exit(0);
+ }
+
+ INFO("Connecting to: %s", wifissid);
+ DBG("Getting IP address...");
+
+ while (1) {
+ // Connect to network:
+ s = eth.connect();
+ // If connection fails, retry for 5 attempts:
+ if (s == false || s < 0) {
+ INFO("Could not connect to network. Retrying!");
+ attempts++;
+ wait(1);
+ } else {
+
+ break;
+ }
+ if(attempts > Tries){
+ ERR("Network connection failed after %d attempts", Tries);
+ return 0;
+ }
+ }
+ INFO("Connected to: %s", wifissid);
+ INFO("Got IP address: %s", eth.getIPAddress());
+ IotStatus.SetFlag(SF_WIRELESSCONNECTED);
+ return 1;
+
+}
+
+void SendNetworkData(void){
+ char msg_buffer[CHARMSGBUFF];
+ int intresult;
+
+ if(IotStatus.CheckFlag(SF_SERVERCONNECTED)){
+ sprintf(msg_buffer, "%d,%d", IoT_ID, SendCounter);
+ INFO("Sending: %s", msg_buffer); // When this line is commented out, the mbed never tries to reconnect to the server after one try. SUPER. Keeping this here also uses precious CPU time
+ intresult = ws.send(msg_buffer);
+ }else{
+ intresult = -1;
+ }
+ DBG("intresult: %d", intresult);
+
+ if(intresult < 0){
+ // Clear a status flag:
+ IotStatus.ClearFlag(SF_SERVERCONNECTED);
+ // Check to see if the wireless is still connected:
+ DBG("Checking network status...");
+ if(eth.checkNetworkStatus() != 3){
+ IotStatus.ClearFlag(SF_WIRELESSCONNECTED);
+ // Connect to the wireless network:
+ if(IotStatus.CheckFlag(SF_AUTOCONNECT)){
+ INFO("Reconnecting to Network...");
+ if(SetupNetwork(1)>0){
+ IotStatus.SetFlag(SF_WIRELESSCONNECTED);
+ INFO("Connected to Network.");
+ }else{
+ WARN("Could not re-connect to the wireless network.");
+ }
+ }
+ }else{
+ DBG("Network connected.");
+ }
+
+ if(IotStatus.CheckFlag(SF_AUTOCONNECT) && IotStatus.CheckFlag(SF_WIRELESSCONNECTED)){
+ // Server connection was closed, try to reconnect:
+ INFO("Reconnecting to Websocket Server on ws://%s:%d/ws...", SERVER_IP, WS_PORT);
+ if(!ws.connect()){
+ WARN("Could not connect to the server again...");
+ IotStatus.ClearFlag(SF_SERVERCONNECTED);
+ ReconnectAttempts++;
+ if(ReconnectAttempts > 4){
+ INFO("Failed after %d reconnect attempts. Resetting the Wifi Shield...", ReconnectAttempts);
+ SetupNetwork(1);
+ ReconnectAttempts = 0;
+ }
+ }else{
+ INFO("Connected to ws://%s:%d/ws", SERVER_IP, WS_PORT);
+ // Set a status flag:
+ IotStatus.SetFlag(SF_SERVERCONNECTED);
+ }
+ }
+ }
+
+ return;
+}
+
+void ReceiveNetworkData(unsigned int * wifi_cmd, unsigned int * var, float * value){
+ char msg_buffer[CHARMSGBUFF];
+ char msg_buffer2[CHARMSGBUFF];
+ // Check for data on the websocket:
+ if(ws.readmsg(msg_buffer)){
+ INFO("Received: %s", msg_buffer);
+ sscanf(msg_buffer, "%d,%s", wifi_cmd, msg_buffer2);
+ if(*wifi_cmd == CHANGEVAR_WIFI_CMD){
+ // Get two more values:
+ sscanf(msg_buffer2, "%d,%f", var, value);
+ }else{
+ // Get one:
+ sscanf(msg_buffer2, "%f", value);
+ }
+ }else{
+ //DBG("Did not receive anything :(\n\r");
+ *wifi_cmd = NO_WIFI_CMD;
+ *var = 0;
+ *value = 0.0f;
+ }
+ return;
+}
+
+void ModifyVariable(unsigned int wifi_var, float wifi_data){
+ // modifies something in the SCS Controller:
+ switch(wifi_var){
+ case CV_LED:
+
+ break;
+
+ default:
+ break;
+ }
+ return;
+}
+
+
+
\ No newline at end of file
