Firmware for the controller of the JRO Radar Controller.

Dependencies:   CR2 EthernetInterface FreescaleIAP I2CLCD SerialDriver jro k64f_EthLink mbed-rtos mbed

Fork of JRO_DDSv2 by Miguel Urco

Committer:
miguelcordero191
Date:
Thu Feb 05 21:32:22 2015 +0000
Revision:
1:072a0ab47d9c
Parent:
0:c9bdd57867af
Child:
2:f9e1bcb3409a
Serial and Ethernet are working very well.; Screen object was deleted.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelcordero191 0:c9bdd57867af 1 /*
miguelcordero191 0:c9bdd57867af 2 * Author: MIGUEL URCO
miguelcordero191 0:c9bdd57867af 3 * Date: 10/11/2014
miguelcordero191 0:c9bdd57867af 4 * Notes: Checks the Ethernet cable connection
miguelcordero191 0:c9bdd57867af 5 */
miguelcordero191 0:c9bdd57867af 6 #if 1
miguelcordero191 0:c9bdd57867af 7
miguelcordero191 0:c9bdd57867af 8 #include "mbed.h"
miguelcordero191 0:c9bdd57867af 9 #include "rtos.h"
miguelcordero191 1:072a0ab47d9c 10 #include "EthernetInterface.h"
miguelcordero191 0:c9bdd57867af 11 #include "JroDDS.h"
miguelcordero191 0:c9bdd57867af 12 #include "JroIpdata.h"
miguelcordero191 0:c9bdd57867af 13 #include "SerialDriver.h"
miguelcordero191 0:c9bdd57867af 14
miguelcordero191 1:072a0ab47d9c 15 //Device commands
miguelcordero191 1:072a0ab47d9c 16 #define CMD_RESET 0X01
miguelcordero191 1:072a0ab47d9c 17 #define CMD_ENABLE 0x02
miguelcordero191 1:072a0ab47d9c 18 #define CMD_CHANGE_IP 0x03
miguelcordero191 1:072a0ab47d9c 19
miguelcordero191 0:c9bdd57867af 20 #define BUFFER_SIZE 256
miguelcordero191 0:c9bdd57867af 21 static char rx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 22 static char tx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 23
miguelcordero191 0:c9bdd57867af 24 //SERIAL
miguelcordero191 1:072a0ab47d9c 25 #define SERIAL_BAUDRATE 1000000
miguelcordero191 1:072a0ab47d9c 26 const char* OK_MSG = "DDSv2: Successful";
miguelcordero191 1:072a0ab47d9c 27 const char* KO_MSG = "DDSv2: Unsuccessful";
miguelcordero191 1:072a0ab47d9c 28
miguelcordero191 0:c9bdd57867af 29 SerialDriver screen(USBTX, USBRX);
miguelcordero191 0:c9bdd57867af 30 SerialDriver uart(D1, D0);
miguelcordero191 0:c9bdd57867af 31 Thread *ser_thread_ptr;
miguelcordero191 0:c9bdd57867af 32
miguelcordero191 0:c9bdd57867af 33 //ETHERNET
miguelcordero191 1:072a0ab47d9c 34 #define ECHO_SERVER_PORT 2000
miguelcordero191 1:072a0ab47d9c 35 const char* DEVICE_NAME = "DDSv2015";
miguelcordero191 1:072a0ab47d9c 36 const char* IP = "10.10.20.63"; // IP
miguelcordero191 1:072a0ab47d9c 37 const char* MASK = "255.255.255.0"; // MASK
miguelcordero191 1:072a0ab47d9c 38 const char* GATEWAY = "10.10.20.1"; // GATEWAY
miguelcordero191 1:072a0ab47d9c 39
miguelcordero191 0:c9bdd57867af 40 IpData ipData(tx_buffer);
miguelcordero191 0:c9bdd57867af 41 EthernetInterface eth;
miguelcordero191 0:c9bdd57867af 42 TCPSocketServer server;
miguelcordero191 0:c9bdd57867af 43
miguelcordero191 0:c9bdd57867af 44 Thread *eth_thread_ptr;
miguelcordero191 0:c9bdd57867af 45
miguelcordero191 0:c9bdd57867af 46 //DDS
miguelcordero191 0:c9bdd57867af 47 SPI spi_device(D11, D12, D13);
miguelcordero191 0:c9bdd57867af 48
miguelcordero191 0:c9bdd57867af 49 DigitalOut dds_mreset(D4);
miguelcordero191 0:c9bdd57867af 50 DigitalOut dds_outramp(D5);
miguelcordero191 0:c9bdd57867af 51 DigitalOut dds_sp_mode(D6);
miguelcordero191 0:c9bdd57867af 52 DigitalOut dds_cs(D7);
miguelcordero191 0:c9bdd57867af 53 DigitalOut dds_io_reset(D9);
miguelcordero191 0:c9bdd57867af 54 DigitalInOut dds_updclk(D10);
miguelcordero191 0:c9bdd57867af 55
miguelcordero191 0:c9bdd57867af 56 DDS dds_device(&spi_device, &dds_mreset, &dds_outramp, &dds_sp_mode, &dds_cs, &dds_io_reset, &dds_updclk);
miguelcordero191 0:c9bdd57867af 57
miguelcordero191 0:c9bdd57867af 58 //LEDS
miguelcordero191 0:c9bdd57867af 59 DigitalOut LedR(LED1);
miguelcordero191 0:c9bdd57867af 60 DigitalOut LedG(LED2);
miguelcordero191 0:c9bdd57867af 61 DigitalOut LedB(LED3);
miguelcordero191 0:c9bdd57867af 62
miguelcordero191 0:c9bdd57867af 63 void waitSerialData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 64
miguelcordero191 0:c9bdd57867af 65 int n;
miguelcordero191 1:072a0ab47d9c 66 bool successful;
miguelcordero191 0:c9bdd57867af 67
miguelcordero191 1:072a0ab47d9c 68 //Thread::signal_wait(0x1);
miguelcordero191 1:072a0ab47d9c 69
miguelcordero191 1:072a0ab47d9c 70 //screen.putc(0x34);
miguelcordero191 1:072a0ab47d9c 71 //screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 72
miguelcordero191 0:c9bdd57867af 73 //uart.baud(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 74
miguelcordero191 0:c9bdd57867af 75 //jroUart.Init(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 76
miguelcordero191 0:c9bdd57867af 77 while(1){
miguelcordero191 0:c9bdd57867af 78 //__screen.printf("\r\nWaiting serial data...\r\n");
miguelcordero191 1:072a0ab47d9c 79 successful = false;
miguelcordero191 0:c9bdd57867af 80
miguelcordero191 0:c9bdd57867af 81 if (uart.isRxBufferEmpty()){
miguelcordero191 0:c9bdd57867af 82 Thread::wait(10);
miguelcordero191 0:c9bdd57867af 83 continue;
miguelcordero191 0:c9bdd57867af 84 }
miguelcordero191 0:c9bdd57867af 85
miguelcordero191 0:c9bdd57867af 86 Thread::wait(100);
miguelcordero191 1:072a0ab47d9c 87 n = uart.read(rx_buffer, 255, false);
miguelcordero191 1:072a0ab47d9c 88 /*
miguelcordero191 0:c9bdd57867af 89 screen.putc(0x6E);
miguelcordero191 0:c9bdd57867af 90 screen.putc(0x3D);
miguelcordero191 0:c9bdd57867af 91 screen.putc(n);
miguelcordero191 1:072a0ab47d9c 92 */
miguelcordero191 0:c9bdd57867af 93 //for (int i=0; i<n; i++)
miguelcordero191 0:c9bdd57867af 94 // screen.putc(rx_buffer[i]);
miguelcordero191 0:c9bdd57867af 95
miguelcordero191 1:072a0ab47d9c 96 if (n == 40)
miguelcordero191 1:072a0ab47d9c 97 if (dds_device.setAllDevice(rx_buffer) == 1)
miguelcordero191 1:072a0ab47d9c 98 successful = true;
miguelcordero191 0:c9bdd57867af 99
miguelcordero191 1:072a0ab47d9c 100 if (successful){
miguelcordero191 1:072a0ab47d9c 101 for (int i=0; i<strlen(OK_MSG); i++){
miguelcordero191 1:072a0ab47d9c 102 uart.putc(OK_MSG[i]);
miguelcordero191 1:072a0ab47d9c 103 }
miguelcordero191 0:c9bdd57867af 104 }
miguelcordero191 1:072a0ab47d9c 105 else{
miguelcordero191 1:072a0ab47d9c 106 for (int i=0; i<strlen(KO_MSG); i++){
miguelcordero191 1:072a0ab47d9c 107 uart.putc(KO_MSG[i]);
miguelcordero191 1:072a0ab47d9c 108 }
miguelcordero191 0:c9bdd57867af 109 }
miguelcordero191 0:c9bdd57867af 110
miguelcordero191 0:c9bdd57867af 111 }
miguelcordero191 0:c9bdd57867af 112
miguelcordero191 0:c9bdd57867af 113 }
miguelcordero191 0:c9bdd57867af 114
miguelcordero191 0:c9bdd57867af 115 void waitEthData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 116
miguelcordero191 1:072a0ab47d9c 117 TCPSocketConnection client;
miguelcordero191 1:072a0ab47d9c 118 int status;
miguelcordero191 1:072a0ab47d9c 119 int n, totalSize=0;
miguelcordero191 0:c9bdd57867af 120
miguelcordero191 1:072a0ab47d9c 121 //Thread::signal_wait(0x1);
miguelcordero191 0:c9bdd57867af 122
miguelcordero191 0:c9bdd57867af 123 LedR = 0;
miguelcordero191 0:c9bdd57867af 124
miguelcordero191 1:072a0ab47d9c 125 //screen.putc(0x35);
miguelcordero191 1:072a0ab47d9c 126 //screen.putc(0x30);
miguelcordero191 1:072a0ab47d9c 127 eth.setName(DEVICE_NAME);
miguelcordero191 1:072a0ab47d9c 128 status = eth.init(IP, MASK, GATEWAY);
miguelcordero191 1:072a0ab47d9c 129 status = eth.connect();
miguelcordero191 0:c9bdd57867af 130
miguelcordero191 1:072a0ab47d9c 131 server.bind(ECHO_SERVER_PORT);
miguelcordero191 1:072a0ab47d9c 132 server.listen(1);
miguelcordero191 0:c9bdd57867af 133
miguelcordero191 0:c9bdd57867af 134 LedR = 1;
miguelcordero191 0:c9bdd57867af 135
miguelcordero191 1:072a0ab47d9c 136 //screen.putc(0x35);
miguelcordero191 1:072a0ab47d9c 137 //screen.putc(0x31);
miguelcordero191 0:c9bdd57867af 138
miguelcordero191 0:c9bdd57867af 139 //__screen.printf("\r\nEth thread initialized...\r\n");
miguelcordero191 0:c9bdd57867af 140
miguelcordero191 1:072a0ab47d9c 141 while(1)
miguelcordero191 1:072a0ab47d9c 142 {
miguelcordero191 0:c9bdd57867af 143 LedB = 0;
miguelcordero191 1:072a0ab47d9c 144 n = 0;
miguelcordero191 1:072a0ab47d9c 145 totalSize = 0;
miguelcordero191 0:c9bdd57867af 146 //screen.printf("\r\n ********************** \r\n");
miguelcordero191 0:c9bdd57867af 147 //__screen.printf("\r\nWait for new connection...\r\n");
miguelcordero191 1:072a0ab47d9c 148 server.accept(client);
miguelcordero191 1:072a0ab47d9c 149
miguelcordero191 1:072a0ab47d9c 150 client.set_blocking(false, 500); // Timeout after (1.5)s
miguelcordero191 1:072a0ab47d9c 151
miguelcordero191 1:072a0ab47d9c 152 //__screen.printf("Connection from: %s\r\n", client.get_address());
miguelcordero191 0:c9bdd57867af 153
miguelcordero191 1:072a0ab47d9c 154 while (true) {
miguelcordero191 1:072a0ab47d9c 155 n = client.receive(rx_buffer, sizeof(rx_buffer));
miguelcordero191 1:072a0ab47d9c 156 if (n <= 0) break;
miguelcordero191 1:072a0ab47d9c 157 totalSize += n;
miguelcordero191 1:072a0ab47d9c 158 Thread::wait(100);
miguelcordero191 1:072a0ab47d9c 159 }
miguelcordero191 1:072a0ab47d9c 160
miguelcordero191 1:072a0ab47d9c 161 //screen.putc(0x35);
miguelcordero191 1:072a0ab47d9c 162 //screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 163
miguelcordero191 1:072a0ab47d9c 164 if (totalSize < 1)
miguelcordero191 0:c9bdd57867af 165 continue;
miguelcordero191 0:c9bdd57867af 166
miguelcordero191 1:072a0ab47d9c 167 if (ipData.decode(rx_buffer, totalSize) == 0)
miguelcordero191 0:c9bdd57867af 168 continue;
miguelcordero191 0:c9bdd57867af 169
miguelcordero191 0:c9bdd57867af 170 if (ipData.getCmd() == CMD_CHANGE_IP){
miguelcordero191 0:c9bdd57867af 171 //changing ip and reseting device
miguelcordero191 0:c9bdd57867af 172 }
miguelcordero191 0:c9bdd57867af 173
miguelcordero191 0:c9bdd57867af 174 dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen());
miguelcordero191 0:c9bdd57867af 175 ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen());
miguelcordero191 0:c9bdd57867af 176
miguelcordero191 1:072a0ab47d9c 177 client.send(ipData.getTxData(), ipData.getTxDataLen());
miguelcordero191 1:072a0ab47d9c 178 client.close();
miguelcordero191 1:072a0ab47d9c 179
miguelcordero191 1:072a0ab47d9c 180 //screen.putc(0x35);
miguelcordero191 1:072a0ab47d9c 181 //screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 182
miguelcordero191 0:c9bdd57867af 183 }
miguelcordero191 0:c9bdd57867af 184 }
miguelcordero191 0:c9bdd57867af 185
miguelcordero191 0:c9bdd57867af 186 int main()
miguelcordero191 0:c9bdd57867af 187 {
miguelcordero191 0:c9bdd57867af 188 screen.baud(9600);
miguelcordero191 0:c9bdd57867af 189 uart.baud(SERIAL_BAUDRATE);
miguelcordero191 1:072a0ab47d9c 190
miguelcordero191 0:c9bdd57867af 191 screen.putc(0x0A);
miguelcordero191 0:c9bdd57867af 192 screen.putc(0x0D);
miguelcordero191 0:c9bdd57867af 193 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 194 screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 195
miguelcordero191 1:072a0ab47d9c 196
miguelcordero191 0:c9bdd57867af 197 //ser_thread_ptr = new Thread(&forwardUart);
miguelcordero191 0:c9bdd57867af 198
miguelcordero191 1:072a0ab47d9c 199 ser_thread_ptr = new Thread(&waitSerialData_thread);
miguelcordero191 0:c9bdd57867af 200 eth_thread_ptr = new Thread(&waitEthData_thread);
miguelcordero191 0:c9bdd57867af 201
miguelcordero191 0:c9bdd57867af 202 //__screen.printf("\r\n ******************************************* \r\n");
miguelcordero191 0:c9bdd57867af 203 //__screen.printf("\r\n ******************************************* \r\n");
miguelcordero191 0:c9bdd57867af 204
miguelcordero191 0:c9bdd57867af 205 //__screen.printf("\nInitializing program...\r\n");
miguelcordero191 0:c9bdd57867af 206 //screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 207 //screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 208
miguelcordero191 0:c9bdd57867af 209 //LedR.period_ms(100);
miguelcordero191 0:c9bdd57867af 210
miguelcordero191 0:c9bdd57867af 211 LedG = 0;
miguelcordero191 0:c9bdd57867af 212
miguelcordero191 0:c9bdd57867af 213 //__screen.printf("\r\nHabilitando threads...\r\n");
miguelcordero191 0:c9bdd57867af 214 //ser_thread_ptr->signal_set(0x1);
miguelcordero191 0:c9bdd57867af 215 //Thread::wait(300);
miguelcordero191 1:072a0ab47d9c 216 //eth_thread_ptr->signal_set(0x1);
miguelcordero191 1:072a0ab47d9c 217 //Thread::wait(1500);
miguelcordero191 0:c9bdd57867af 218
miguelcordero191 0:c9bdd57867af 219 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 220 screen.putc(0x31);
miguelcordero191 0:c9bdd57867af 221 //__screen.printf("\r\nInitializing DDS...\r\n");
miguelcordero191 0:c9bdd57867af 222
miguelcordero191 0:c9bdd57867af 223 while(true){
miguelcordero191 0:c9bdd57867af 224 if (dds_device.init())
miguelcordero191 0:c9bdd57867af 225 break;
miguelcordero191 0:c9bdd57867af 226
miguelcordero191 0:c9bdd57867af 227 Thread::wait(250);
miguelcordero191 0:c9bdd57867af 228 }
miguelcordero191 0:c9bdd57867af 229
miguelcordero191 0:c9bdd57867af 230 LedG = 1;
miguelcordero191 0:c9bdd57867af 231
miguelcordero191 0:c9bdd57867af 232 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 233 screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 234
miguelcordero191 0:c9bdd57867af 235 LedB = 0;
miguelcordero191 0:c9bdd57867af 236
miguelcordero191 0:c9bdd57867af 237 //__screen.printf("\r\nSetting defaults values to DDS...\r\n");
miguelcordero191 1:072a0ab47d9c 238 dds_device.defaultSettings();
miguelcordero191 0:c9bdd57867af 239 LedB = 1;
miguelcordero191 0:c9bdd57867af 240
miguelcordero191 0:c9bdd57867af 241 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 242 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 243
miguelcordero191 1:072a0ab47d9c 244 Thread::wait(5000);
miguelcordero191 1:072a0ab47d9c 245 //int c=0;
miguelcordero191 1:072a0ab47d9c 246 while(true){
miguelcordero191 1:072a0ab47d9c 247 Thread::wait(1000);
miguelcordero191 1:072a0ab47d9c 248 //screen.putc(0x2D + c);
miguelcordero191 1:072a0ab47d9c 249 //c = (c+1) % 3;
miguelcordero191 0:c9bdd57867af 250 }
miguelcordero191 0:c9bdd57867af 251
miguelcordero191 0:c9bdd57867af 252 }
miguelcordero191 0:c9bdd57867af 253
miguelcordero191 0:c9bdd57867af 254 #endif