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: jro mbed AD9854 mbed-rtos I2CLCD k64f_EthLink SerialDriver FreescaleIAP EthernetInterface
Revision 1:072a0ab47d9c, committed 2015-02-05
- Comitter:
- miguelcordero191
- Date:
- Thu Feb 05 21:32:22 2015 +0000
- Parent:
- 0:c9bdd57867af
- Child:
- 2:f9e1bcb3409a
- Commit message:
- Serial and Ethernet are working very well.; Screen object was deleted.
Changed in this revision
| jro.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/jro.lib Thu Feb 05 19:04:48 2015 +0000 +++ b/jro.lib Thu Feb 05 21:32:22 2015 +0000 @@ -1,1 +1,1 @@ -jro#3d8d52e9751c +jro#f0e6c145b075
--- a/main.cpp Thu Feb 05 19:04:48 2015 +0000
+++ b/main.cpp Thu Feb 05 21:32:22 2015 +0000
@@ -7,39 +7,39 @@
#include "mbed.h"
#include "rtos.h"
+#include "EthernetInterface.h"
#include "JroDDS.h"
#include "JroIpdata.h"
-#include "JroEthernet.h"
#include "SerialDriver.h"
+//Device commands
+#define CMD_RESET 0X01
+#define CMD_ENABLE 0x02
+#define CMD_CHANGE_IP 0x03
+
#define BUFFER_SIZE 256
-
-//ETHERNET
-#define ECHO_SERVER_PORT 2000
-//SERIAL
-#define SERIAL_BAUDRATE 1000000
-
-
-char* ip = "10.10.20.65"; // ip
-char* mask = "255.255.255.0"; // mask
-char* gateway = "10.10.20.1"; // gateway
-
-char* ip2 = "10.10.20.64";
-
static char rx_buffer[BUFFER_SIZE];
static char tx_buffer[BUFFER_SIZE];
//SERIAL
+#define SERIAL_BAUDRATE 1000000
+const char* OK_MSG = "DDSv2: Successful";
+const char* KO_MSG = "DDSv2: Unsuccessful";
+
SerialDriver screen(USBTX, USBRX);
SerialDriver uart(D1, D0);
-//JroSerial jroUart(D1,D0, &screen);
Thread *ser_thread_ptr;
//ETHERNET
+#define ECHO_SERVER_PORT 2000
+const char* DEVICE_NAME = "DDSv2015";
+const char* IP = "10.10.20.63"; // IP
+const char* MASK = "255.255.255.0"; // MASK
+const char* GATEWAY = "10.10.20.1"; // GATEWAY
+
IpData ipData(tx_buffer);
EthernetInterface eth;
TCPSocketServer server;
-JroEthernet jroEth(ð);
Thread *eth_thread_ptr;
@@ -60,29 +60,15 @@
DigitalOut LedG(LED2);
DigitalOut LedB(LED3);
-//PWM
-//PwmOut LedR(LED1);
-
-// This thread forwards from uart to pc
-void forwardUart(void const * argument)
-{
- // Sometimes You're the Nail
- while(1)
- {
- screen.putc(uart.getc());
- LedG= !LedG;
- }
-}
-
-
void waitSerialData_thread(void const *args){
int n;
-
- Thread::signal_wait(0x1);
+ bool successful;
- screen.putc(0x34);
- screen.putc(0x30);
+ //Thread::signal_wait(0x1);
+
+ //screen.putc(0x34);
+ //screen.putc(0x30);
//uart.baud(SERIAL_BAUDRATE);
@@ -90,6 +76,7 @@
while(1){
//__screen.printf("\r\nWaiting serial data...\r\n");
+ successful = false;
if (uart.isRxBufferEmpty()){
Thread::wait(10);
@@ -97,30 +84,28 @@
}
Thread::wait(100);
- n = uart.read(rx_buffer, 40, false);
-
+ n = uart.read(rx_buffer, 255, false);
+ /*
screen.putc(0x6E);
screen.putc(0x3D);
screen.putc(n);
-
+ */
//for (int i=0; i<n; i++)
// screen.putc(rx_buffer[i]);
- if (n != 40)
- { //Data is not complete
- continue;
- }
+ if (n == 40)
+ if (dds_device.setAllDevice(rx_buffer) == 1)
+ successful = true;
- if (dds_device.setAllDevice(rx_buffer, &screen) == 1){
- screen.putc(0x34);
- screen.putc(0x34);
- //jroSerial.writeData("Done");
+ if (successful){
+ for (int i=0; i<strlen(OK_MSG); i++){
+ uart.putc(OK_MSG[i]);
+ }
}
- else
- {
- //jroSerial.writeData("Error");
- screen.putc(0x34);
- screen.putc(0x35);
+ else{
+ for (int i=0; i<strlen(KO_MSG); i++){
+ uart.putc(KO_MSG[i]);
+ }
}
}
@@ -129,39 +114,57 @@
void waitEthData_thread(void const *args){
- int n;
+ TCPSocketConnection client;
+ int status;
+ int n, totalSize=0;
- Thread::signal_wait(0x1);
+ //Thread::signal_wait(0x1);
LedR = 0;
- screen.putc(0x35);
- screen.putc(0x30);
+ //screen.putc(0x35);
+ //screen.putc(0x30);
+ eth.setName(DEVICE_NAME);
+ status = eth.init(IP, MASK, GATEWAY);
+ status = eth.connect();
- jroEth.init(ip, mask, gateway);
- jroEth.openTCPServer(&server, ECHO_SERVER_PORT);
+ server.bind(ECHO_SERVER_PORT);
+ server.listen(1);
LedR = 1;
- screen.putc(0x35);
- screen.putc(0x31);
-
+ //screen.putc(0x35);
+ //screen.putc(0x31);
//__screen.printf("\r\nEth thread initialized...\r\n");
- while(1) {
+ while(1)
+ {
LedB = 0;
+ n = 0;
+ totalSize = 0;
//screen.printf("\r\n ********************** \r\n");
//__screen.printf("\r\nWait for new connection...\r\n");
- n = jroEth.read(rx_buffer);
+ server.accept(client);
+
+ client.set_blocking(false, 500); // Timeout after (1.5)s
+
+ //__screen.printf("Connection from: %s\r\n", client.get_address());
- screen.putc(0x35);
- screen.putc(0x32);
+ while (true) {
+ n = client.receive(rx_buffer, sizeof(rx_buffer));
+ if (n <= 0) break;
+ totalSize += n;
+ Thread::wait(100);
+ }
+
+ //screen.putc(0x35);
+ //screen.putc(0x32);
- if (n < 1)
+ if (totalSize < 1)
continue;
- if (ipData.decode(rx_buffer, n) == 0)
+ if (ipData.decode(rx_buffer, totalSize) == 0)
continue;
if (ipData.getCmd() == CMD_CHANGE_IP){
@@ -171,8 +174,11 @@
dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen());
ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen());
- jroEth.sendResponse(ipData.getTxData(), ipData.getTxDataLen());
- jroEth.closeClient();
+ client.send(ipData.getTxData(), ipData.getTxDataLen());
+ client.close();
+
+ //screen.putc(0x35);
+ //screen.putc(0x32);
}
}
@@ -181,14 +187,16 @@
{
screen.baud(9600);
uart.baud(SERIAL_BAUDRATE);
+
screen.putc(0x0A);
screen.putc(0x0D);
screen.putc(0x33);
screen.putc(0x30);
+
//ser_thread_ptr = new Thread(&forwardUart);
- //ser_thread_ptr = new Thread(&waitSerialData_thread);
+ ser_thread_ptr = new Thread(&waitSerialData_thread);
eth_thread_ptr = new Thread(&waitEthData_thread);
//__screen.printf("\r\n ******************************************* \r\n");
@@ -205,8 +213,8 @@
//__screen.printf("\r\nHabilitando threads...\r\n");
//ser_thread_ptr->signal_set(0x1);
//Thread::wait(300);
- eth_thread_ptr->signal_set(0x1);
- Thread::wait(1500);
+ //eth_thread_ptr->signal_set(0x1);
+ //Thread::wait(1500);
screen.putc(0x33);
screen.putc(0x31);
@@ -227,15 +235,18 @@
LedB = 0;
//__screen.printf("\r\nSetting defaults values to DDS...\r\n");
- dds_device.defaultSettings(&screen);
+ dds_device.defaultSettings();
LedB = 1;
screen.putc(0x33);
screen.putc(0x33);
- while(1) {
- Thread::wait(250);
-
+ Thread::wait(5000);
+ //int c=0;
+ while(true){
+ Thread::wait(1000);
+ //screen.putc(0x2D + c);
+ //c = (c+1) % 3;
}
}