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: NTPClient W5500Interface Watchdog device_configuration eeprom_flash mbed-rpc-nucleo mbed-rtos mbed
Fork of F103-Serial-to-Ethernet by
Revision 16:84a5bf7285d0, committed 2014-10-02
- Comitter:
- olympux
- Date:
- Thu Oct 02 19:41:38 2014 +0000
- Parent:
- 15:edeb0aed160d
- Child:
- 17:88ef7a078095
- Commit message:
- Added DBG.; Checked auto transmit flag.
Changed in this revision
--- a/main.cpp Tue Sep 30 21:18:05 2014 +0000
+++ b/main.cpp Thu Oct 02 19:41:38 2014 +0000
@@ -12,6 +12,23 @@
#include "my_eeprom_funcs.h"
+//Debug is disabled by default
+#if 1
+//Enable debug
+#include <cstdio>
+#define DBG(x, ...) std::printf("[main : DBG]"x"\r\n", ##__VA_ARGS__);
+#define WARN(x, ...) std::printf("[main : WARN]"x"\r\n", ##__VA_ARGS__);
+#define ERR(x, ...) std::printf("[main : ERR]"x"\r\n", ##__VA_ARGS__);
+
+#else
+//Disable debug
+#define DBG(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+
+#endif
+
+
/*
* Hardware defines
*/
@@ -65,13 +82,18 @@
0x3212, 0x3313, 0x3414, 0x3515, // IP_Gateway
0x4212, // TCP server port, not used
0x5212, // UDP server port, not used
- 0x8888, // 1st run?
+ 0x8888, // 1st run? 0xA5A5 = configured
0x6212, 0x6313, 0x6414, // MAC
// this section is for the TCP server that this device connects to in TCP client mode
- 0x7212, 0x7313, // auto transmit status, time period
+ 0x7212, 0x7313, // 0xA5 = auto transmit status, time period
0x8212, 0x8313,0x8414, 0x8515, // TCP server IP address
- 0x9212 // TCP server port
+ 0x9212, // TCP server port
+
+ // this section is for selecting protocol
+ 0xA212, // 0xA5A5 = enable TCP server
+ 0xA313, // 0xA5A5 = eanble TCP client
+ 0xA414 // 0xA5A5 = enable UDP client
};
/*
@@ -193,8 +215,8 @@
if (evt.status == osEventMessage) {
p_message = (message_t*)evt.value.p;
uart_mutex.lock(); // mutex for stdio is not neccessary
- //uart.printf("len=%d\n", p_message->len);
- uart.printf("%s\n", p_message->msg);
+ //DBG("len=%d\n", p_message->len);
+ DBG("%s\n", p_message->msg);
uart_mutex.unlock();
}
}
@@ -218,21 +240,21 @@
* Ethernet init
*/
int ethernet_init(void) {
- printf("Start initialising ethernet\n");
+ DBG("Start initialising ethernet\n");
int ret = eth.init(u8mac, str_ip_addr, str_ip_subnet, str_ip_gateway); // static
if (!ret) {
- printf("Initialized, MAC: %s\n", eth.getMACAddress());
+ DBG("Initialized, MAC: %s\n", eth.getMACAddress());
} else {
- printf("Error eth.init() - ret = %d\n", ret);
+ ERR("Error eth.init() - ret = %d\n", ret);
return -1;
}
ret = eth.connect();
if (!ret) {
- printf("IP: %s, MASK: %s, GW: %s\n", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+ DBG("IP: %s, MASK: %s, GW: %s\n", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
} else {
- printf("Error eth.connect() - ret = %d\n", ret);
+ ERR("Error eth.connect() - ret = %d\n", ret);
return -1;
}
@@ -254,7 +276,7 @@
* Configure
*/
uart.baud(115200);
- printf("\r\nStarting...\r\n");
+ DBG("\r\nStarting...\r\n");
/*
* UI threads
@@ -280,7 +302,7 @@
*/
ret = ethernet_init();
if (ret) {
- printf("Ethernet initialisation failed. App halted\r\n");
+ ERR("Ethernet initialisation failed. App halted\r\n");
while (true) {};
}
@@ -291,7 +313,7 @@
#ifdef TCP_SERVER
tcp_server.bind(tcp_server_local_port);
tcp_server.listen();
- printf("TCP server started...\r\n");
+ DBG("TCP server started...\r\n");
tcp_server.set_blocking(false, TCP_SERVER_WAIT_CLIENT_TIMEOUT);
#endif
@@ -301,7 +323,7 @@
#ifdef UDP_SERVER
ret = udp_server.bind(udp_server_local_port);
- printf("UDP started (sock.bind = %d)\r\n", ret);
+ DBG("UDP started (sock.bind = %d)\r\n", ret);
udp_server.set_blocking(false, UDP_SERVER_RECEIVE_TIMEOUT);
#endif
@@ -310,28 +332,30 @@
* Network processor
*/
while (true) {
-// FOR AUTO TRANSMIT DEVICE STATUS
#ifdef TCP_CLIENT
- // connect to TCP server if required
- if (!tcp_sock.is_connected()) {
- ret = tcp_sock.connect(str_server_ip_addr, u16tcp_server_port);
- if (ret > -1) {
- printf("Successfully connected to %s on port %d\r\n", str_server_ip_addr, u16tcp_server_port);
- }
- else {
- printf("Unable to connect to %s on port %d\r\n", str_server_ip_addr, u16tcp_server_port);
+ // FOR AUTO TRANSMIT DEVICE STATUS
+ if (auto_transmit_flag == 0xA5A5) {
+ // connect to TCP server if required
+ if (!tcp_sock.is_connected()) {
+ ret = tcp_sock.connect(str_server_ip_addr, u16tcp_server_port);
+ if (ret > -1) {
+ DBG("Successfully connected to %s on port %d\r\n", str_server_ip_addr, u16tcp_server_port);
+ }
+ else {
+ ERR("Unable to connect to %s on port %d\r\n", str_server_ip_addr, u16tcp_server_port);
+ }
}
- }
-
- // transmit data if connected
- if (tcp_sock.is_connected()) {
- osEvent evt = auto_update_queue.get(1); // timeout after 1ms
- if (evt.status == osEventMessage) {
- printf("Updating...\r\n");
- update_sending_frame(tcp_client_buffer);
- tcp_sock.send_all(tcp_client_buffer, SENDING_PROTOCOL_LENGTH);
+
+ // transmit data if connected
+ if (tcp_sock.is_connected()) {
+ osEvent evt = auto_update_queue.get(1); // timeout after 1ms
+ if (evt.status == osEventMessage) {
+ DBG("Updating...\r\n");
+ update_sending_frame(tcp_client_buffer);
+ tcp_sock.send_all(tcp_client_buffer, SENDING_PROTOCOL_LENGTH);
+ }
}
- }
+ } // auto transmit
#endif
@@ -345,7 +369,7 @@
// tcp client connected
if (ret > -1) {
- printf("Connection from: %s\r\n", tcp_client.get_address());
+ DBG("Connection from: %s\r\n", tcp_client.get_address());
// loop waiting and receiving data within timeout
tcp_client.set_blocking(false, TCP_SERVER_RECEIVE_TIMEOUT); // Timeout after x seconds
@@ -354,24 +378,24 @@
if (n <= 0) break;
// got some data, test it
- printf("TCP server received: %s\r\n", tcp_server_buffer);
+ DBG("TCP server received: %s\r\n", tcp_server_buffer);
// process received data
switch (n) {
// length 58-bytes, Receiving protocol
case RECEIVING_PROTOCOL_LENGTH: {
- printf("Checking device ID...");
+ DBG("Checking device ID...");
// check device id
char* id = strstr(tcp_server_buffer, DEVICE_ID);
if (id == NULL)
break;
else if ((id - tcp_server_buffer) > 0)
break;
- printf("Correct.\r\n");
+ DBG("Correct.\r\n");
// firstly, update outputs if required
// digital outputs
if (tcp_server_buffer[RECEIVING_PROTOCOL_EN_DO_POS] == RECEIVING_PROTOCOL_ENABLE_OUTPUT) {
- printf("Update digital outputs\r\n");
+ DBG("Update digital outputs\r\n");
char str_dout[9];
memcpy(str_dout, &tcp_server_buffer[RECEIVING_PROTOCOL_DO_POS], 8);
str_dout[8] = '\0';
@@ -379,15 +403,15 @@
}
// analog output 0
if (tcp_server_buffer[RECEIVING_PROTOCOL_EN_A0O_POS] == RECEIVING_PROTOCOL_ENABLE_OUTPUT) {
- printf("Update analog output 0\r\n");
+ DBG("Update analog output 0\r\n");
}
// analog output 1
if (tcp_server_buffer[RECEIVING_PROTOCOL_EN_A1O_POS] == RECEIVING_PROTOCOL_ENABLE_OUTPUT) {
- printf("Update analog output 1\r\n");
+ DBG("Update analog output 1\r\n");
}
// UART
if (tcp_server_buffer[RECEIVING_PROTOCOL_EN_UART_POS] == RECEIVING_PROTOCOL_ENABLE_OUTPUT) {
- printf("UART data: ");
+ DBG("UART data: ");
char str_uart[33];
memcpy(str_uart, &tcp_server_buffer[RECEIVING_PROTOCOL_UART_POS], 32);
str_uart[32] = '\0';
@@ -396,7 +420,7 @@
// then, check query status command and sending protocol if required
if (tcp_server_buffer[RECEIVING_PROTOCOL_COMMAND_POS] == QUERY_STATUS_COMMAND) {
- printf("Sent device status through TCP\r\n");
+ DBG("Sent device status through TCP\r\n");
// sending protocol
update_sending_frame(tcp_server_buffer);
tcp_client.send_all(tcp_server_buffer, SENDING_PROTOCOL_LENGTH);
@@ -422,7 +446,7 @@
if (n <= 0) continue;
// got some data, test it
- printf("UDP received: %s\r\n", udp_server_buffer);
+ DBG("UDP received: %s\r\n", udp_server_buffer);
// process received data
switch (n) {
// length = 6, a CONFIGURATION command (discovery command, TCP port, or UDP port)
@@ -448,23 +472,23 @@
#ifdef NTP
char str_time[50];
- printf("Trying to update time...\r\n");
+ DBG("Trying to update time...\r\n");
if (ntp.setTime("0.pool.ntp.org") == 0) {
- printf("Set time successfully\r\n");
+ DBG("Set time successfully\r\n");
time_t ctTime;
ctTime = time(NULL);
- printf("Time is set to (UTC): %s\r\n", ctime(&ctTime));
+ DBG("Time is set to (UTC): %s\r\n", ctime(&ctTime));
sprintf(str_time, "%s", ctime(&ctTime));
udp_server.sendTo(ep_udp_client, str_time, strlen(str_time));
}
else {
- printf("Error\r\n");
+ WARN("Error\r\n");
sprintf(str_time, "ERR");
udp_server.sendTo(ep_udp_client, str_time, strlen(str_time));
}
#elif
- printf("NTP disabled\r\n");
+ WARN("NTP disabled\r\n");
sprintf(str_time, "DIS");
udp_server.sendTo(ep_udp_client, str_time, strlen(str_time));
#endif
@@ -482,7 +506,7 @@
else if ((id - udp_server_buffer) > 0)
break;
- printf("Received user configuration\r\n");
+ DBG("Received user configuration\r\n");
write_eeprom_network(&udp_server_buffer[strlen(DEVICE_ID)]); // parameters from 5th char, 15-bytes
break;
}
@@ -497,7 +521,7 @@
else if ((id - udp_server_buffer) > 0)
break;
- printf("Received TCP server configuration\r\n");
+ DBG("Received TCP server configuration\r\n");
write_eeprom_tcpserver(&udp_server_buffer[strlen(DEVICE_ID)]); // parameters from 5th char
break;
}
@@ -512,7 +536,7 @@
* Update digital outputs following receiving frame from TCP client
*/
void update_digital_outputs(char* buf) {
- printf("Digital outputs: %s\n", buf);
+ DBG("Digital outputs: %s\n", buf);
dout0 = (buf[0] == DIGITAL_HIGH)? 1 : 0;
dout1 = (buf[1] == DIGITAL_HIGH)? 1 : 0;
--- a/my_eeprom_funcs.lib Tue Sep 30 21:18:05 2014 +0000 +++ b/my_eeprom_funcs.lib Thu Oct 02 19:41:38 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/olympux/code/my_eeprom_funcs/#57d40eaa1b1b +http://mbed.org/users/olympux/code/my_eeprom_funcs/#69e1c4ed69e1
--- a/readme.txt Tue Sep 30 21:18:05 2014 +0000
+++ b/readme.txt Thu Oct 02 19:41:38 2014 +0000
@@ -27,7 +27,7 @@
6. Set TCP server info (only when the device is as a TCP client)
+ Send: 12 bytes in total, NNIO + 8 bytes
NNIO 1-byte auto flag 1-byte time period (s) 4-byte IP 2-byte port (LSB MSB)
- 4E 4E 49 4F A5 or others 05 (5s) C0 A8 00 09 E0 2E (0x2EE0 = 12000)
+ 4E 4E 49 4F 'Y' or others 05 (5s) C0 A8 00 09 E0 2E (0x2EE0 = 12000)
INTERFACING SECTION (TCP)
