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: EthernetInterface NetworkAPI mbed-rtos mbed
Fork of MalletFirmware by
Diff: main.cpp
- Revision:
- 21:1fb5023b72af
- Parent:
- 20:f533b3c9296f
- Child:
- 22:523e316cbe70
--- a/main.cpp Tue Nov 18 01:31:55 2014 +0000
+++ b/main.cpp Wed Dec 03 03:28:54 2014 +0000
@@ -1,5 +1,4 @@
// Server code
-
#include "mbed.h"
#include "EthernetInterface.h"
@@ -8,29 +7,75 @@
#include "NetworkAPI/ip/address.hpp"
#include "NetworkAPI/tcp/socket.hpp"
-#define STATIC 1
-#ifdef STATIC
-#define IP "127.0.0.5" // "192.168.1.5"
-#define MASK "255.255.255.0"
-#define GATEWAY "127.0.0.1"//"192.168.1.1"
-#define MAC "00:02:f7:f0:00:00"
+// some macro variables to set before compiling
+#define MALLET 6 // set mallet to a value between 1-7
+#define STATIC 1 // set STATIC to 1 for static ip, set STATIC to 0 for dynamic
+#define PORT 22 // set to a random port number. All the mallets can use the same port number.
+#define MAX_CLIENTS 2 // set the max number of clients to at least 2 (first client is MATLAB, second is the distance unit)
+
+
+
+#if MALLET == 1
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x01; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet1\n\r"
+
+#elif MALLET == 2
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x02; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet2\n\r"
+
+#elif MALLET == 3
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x03; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet3\n\r"
+
+#elif MALLET == 4
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x04; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet4\n\r"
+
+#elif MALLET == 5
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x05; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet5\n\r"
+
+#elif MALLET == 6
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x06; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet6\n\r"
+
+#elif MALLET == 7
+extern "C" void mbed_mac_address(char *mac) { mac[0]=0x00; mac[1]=0x02; mac[2]=0xf7; mac[3]=0xf0; mac[4]=0x00; mac[5]=0x07; } // overwrites the MAC address because mbed gave them duplicate address (this is fine for a closed network)
+char mac[16];
+#define NAME "Mallet7\n\r"
+
#endif
-#define PORT 23
+
+
+#if STATIC == 1
+#define IP "169.254.225.206"//"127.0.0.5" // "192.168.1.5"
+#define GATEWAY "169.254.225.1"//"127.0.0.1"//"192.168.1.1"
+#define MASK "255.255.0.0"
+#endif
+
+
Serial pc(USBTX, USBRX);
DigitalOut led_red(LED_RED);
DigitalOut led_green(LED_GREEN);
DigitalOut led_blue(LED_BLUE);
-uint32_t sample_array[30000];
+#define SAMPLES 5000
+uint32_t sample_array[SAMPLES];
using namespace network;
-#define MAX_CLIENTS 5
-
int main() {
- for(int i = 0; i < 30000; i++) sample_array[i] = 0x3132;
+ for(int i = 0; i < SAMPLES; i++) sample_array[i] = i;
+ sample_array[0] = 0x12345678;
+ sample_array[SAMPLES-1] = 0xDEADBEEF;
led_red = 1;
led_green = 1;
led_blue = 1;
@@ -38,18 +83,20 @@
pc.printf("Starting Server\r\n");
EthernetInterface interface;
- #ifdef STATIC
+
+ #if STATIC == 1
interface.init(IP, MASK, GATEWAY);
#else
interface.init();
#endif
+
interface.connect();
+ pc.printf(NAME);
pc.printf("IP Address is: %s\n\r", interface.getIPAddress());
pc.printf("Network Mask is: %s\n\r", interface.getNetworkMask());
pc.printf("MAC address is: %s\n\r", interface.getMACAddress());
pc.printf("Gateway is: %s\n\r", interface.getGateway());
-
-
+ pc.printf("Port is: %i\n\r", PORT);
Select select;
tcp::Socket server;
@@ -59,10 +106,10 @@
int result = 0;
int index = 0;
- network::Buffer buffer(256);
- std::string message("Hello world!");
+ network::Buffer buffer(4*SAMPLES);
+ std::string message(NAME);
- // Configure the server socket (assume everty thing works)
+ // Configure the server socket (assume every thing works)
server.open();
server.bind(PORT);
server.listen(MAX_CLIENTS);
@@ -97,6 +144,7 @@
// Maximum connections reached
if (index == MAX_CLIENTS) {
pc.printf("Maximum connections reached\n\r");
+ wait(1);
continue;
}
@@ -106,7 +154,7 @@
client[index].getRemoteEndpoint().getAddress().toString().c_str(),
client[index].getRemoteEndpoint().getPort());
- // Send a nice message to the client
+ // Send a nice message to the client (tell MATLAB your name
client[index].write((void *)message.data(), message.size());
// read some registers for some info.
@@ -140,24 +188,69 @@
socket->getRemoteEndpoint().getAddress().toString().c_str(),
socket->getRemoteEndpoint().getPort());
- //pc.printf("%s\n\r", (char *)buffer.data());
+ pc.printf("%s\n\r", (char *)buffer.data());
+
+ // read first character for command
+ char command[2];
+ buffer.read(command,2,0);
+ if(command[1] == ':') {
+ switch(command[0])
+ {
+ case 'b':
+ led_blue = !led_blue;
+ client[index].write((void *)"Blue LED\n",9);
+ break;
+ case 'r':
+ led_red = !led_red;
+ client[index].write((void *)"Red LED\n",8);
+ break;
+ case 'p':
+ led_green = !led_green;
+ client[index].write((void *)"Data\n",5);
+ client[index].write((void *)&sample_array,4*SAMPLES);
+ }
+ }
+ else {
+
+ }
+
+
//***************** print a message back to the client
- Timer timeStamp;
- timeStamp.stop();
- timeStamp.reset();
- timeStamp.start();
- client[index].write((void *)&sample_array,30000);
- int timeStampVar = timeStamp.read_us();
- timeStamp.stop();
- wait(1);
- pc.printf("*******\r\nTime taken to send data: %i\r\n", timeStampVar);
+
+ //client[index].write((void *)&sample_array,SAMPLES);
+
+
+
- char premessage[40];
- sprintf(premessage, "Time taken to send data: %i\r\n", timeStampVar);
- std::string response1 = premessage;
- client[index].write((void *)response1.data(), response1.size());
-
+ /*for(int i = 1; i <= SAMPLES+1;)
+ {
+ for(int j = 0; j < 20; j++)
+ {
+ Timer timeStamp;
+ timeStamp.stop();
+ timeStamp.reset();
+ timeStamp.start();
+
+ client[index].write((void *)&sample_array,i);
+ int timeStampVar = timeStamp.read_us();
+ timeStamp.stop();
+
+ pc.printf("*******\r\n%i\r\nTime taken to send data: %i\r\n", i,timeStampVar);
+
+ char premessage[40];
+ sprintf(premessage, "******\r\n%i\r\nTime taken to send data: %i\r\n", i, timeStampVar);
+ std::string response1 = premessage;
+ client[index].write((void *)response1.data(), response1.size());
+ wait_us(5000);
+ }
+ if(i == 10000) i = SAMPLES;
+ else if(i == SAMPLES) i = i*10;
+ else i = i*10;
+ }
+ std::string endMessage("end");
+ client[index].write((void *)endMessage.data(), endMessage.size());
+ */
break;
}
}
