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
main.cpp@0:c9bdd57867af, 2015-02-05 (annotated)
- Committer:
- miguelcordero191
- Date:
- Thu Feb 05 19:04:48 2015 +0000
- Revision:
- 0:c9bdd57867af
- Child:
- 1:072a0ab47d9c
Serial and ethernet are working as threads.; Serial baudrate to 1000000; DHCP is working well but static ip is not
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:c9bdd57867af | 10 | #include "JroDDS.h" |
miguelcordero191 | 0:c9bdd57867af | 11 | #include "JroIpdata.h" |
miguelcordero191 | 0:c9bdd57867af | 12 | #include "JroEthernet.h" |
miguelcordero191 | 0:c9bdd57867af | 13 | #include "SerialDriver.h" |
miguelcordero191 | 0:c9bdd57867af | 14 | |
miguelcordero191 | 0:c9bdd57867af | 15 | #define BUFFER_SIZE 256 |
miguelcordero191 | 0:c9bdd57867af | 16 | |
miguelcordero191 | 0:c9bdd57867af | 17 | //ETHERNET |
miguelcordero191 | 0:c9bdd57867af | 18 | #define ECHO_SERVER_PORT 2000 |
miguelcordero191 | 0:c9bdd57867af | 19 | //SERIAL |
miguelcordero191 | 0:c9bdd57867af | 20 | #define SERIAL_BAUDRATE 1000000 |
miguelcordero191 | 0:c9bdd57867af | 21 | |
miguelcordero191 | 0:c9bdd57867af | 22 | |
miguelcordero191 | 0:c9bdd57867af | 23 | char* ip = "10.10.20.65"; // ip |
miguelcordero191 | 0:c9bdd57867af | 24 | char* mask = "255.255.255.0"; // mask |
miguelcordero191 | 0:c9bdd57867af | 25 | char* gateway = "10.10.20.1"; // gateway |
miguelcordero191 | 0:c9bdd57867af | 26 | |
miguelcordero191 | 0:c9bdd57867af | 27 | char* ip2 = "10.10.20.64"; |
miguelcordero191 | 0:c9bdd57867af | 28 | |
miguelcordero191 | 0:c9bdd57867af | 29 | static char rx_buffer[BUFFER_SIZE]; |
miguelcordero191 | 0:c9bdd57867af | 30 | static char tx_buffer[BUFFER_SIZE]; |
miguelcordero191 | 0:c9bdd57867af | 31 | |
miguelcordero191 | 0:c9bdd57867af | 32 | //SERIAL |
miguelcordero191 | 0:c9bdd57867af | 33 | SerialDriver screen(USBTX, USBRX); |
miguelcordero191 | 0:c9bdd57867af | 34 | SerialDriver uart(D1, D0); |
miguelcordero191 | 0:c9bdd57867af | 35 | //JroSerial jroUart(D1,D0, &screen); |
miguelcordero191 | 0:c9bdd57867af | 36 | Thread *ser_thread_ptr; |
miguelcordero191 | 0:c9bdd57867af | 37 | |
miguelcordero191 | 0:c9bdd57867af | 38 | //ETHERNET |
miguelcordero191 | 0:c9bdd57867af | 39 | IpData ipData(tx_buffer); |
miguelcordero191 | 0:c9bdd57867af | 40 | EthernetInterface eth; |
miguelcordero191 | 0:c9bdd57867af | 41 | TCPSocketServer server; |
miguelcordero191 | 0:c9bdd57867af | 42 | JroEthernet jroEth(ð); |
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 | //PWM |
miguelcordero191 | 0:c9bdd57867af | 64 | //PwmOut LedR(LED1); |
miguelcordero191 | 0:c9bdd57867af | 65 | |
miguelcordero191 | 0:c9bdd57867af | 66 | // This thread forwards from uart to pc |
miguelcordero191 | 0:c9bdd57867af | 67 | void forwardUart(void const * argument) |
miguelcordero191 | 0:c9bdd57867af | 68 | { |
miguelcordero191 | 0:c9bdd57867af | 69 | // Sometimes You're the Nail |
miguelcordero191 | 0:c9bdd57867af | 70 | while(1) |
miguelcordero191 | 0:c9bdd57867af | 71 | { |
miguelcordero191 | 0:c9bdd57867af | 72 | screen.putc(uart.getc()); |
miguelcordero191 | 0:c9bdd57867af | 73 | LedG= !LedG; |
miguelcordero191 | 0:c9bdd57867af | 74 | } |
miguelcordero191 | 0:c9bdd57867af | 75 | } |
miguelcordero191 | 0:c9bdd57867af | 76 | |
miguelcordero191 | 0:c9bdd57867af | 77 | |
miguelcordero191 | 0:c9bdd57867af | 78 | void waitSerialData_thread(void const *args){ |
miguelcordero191 | 0:c9bdd57867af | 79 | |
miguelcordero191 | 0:c9bdd57867af | 80 | int n; |
miguelcordero191 | 0:c9bdd57867af | 81 | |
miguelcordero191 | 0:c9bdd57867af | 82 | Thread::signal_wait(0x1); |
miguelcordero191 | 0:c9bdd57867af | 83 | |
miguelcordero191 | 0:c9bdd57867af | 84 | screen.putc(0x34); |
miguelcordero191 | 0:c9bdd57867af | 85 | screen.putc(0x30); |
miguelcordero191 | 0:c9bdd57867af | 86 | |
miguelcordero191 | 0:c9bdd57867af | 87 | //uart.baud(SERIAL_BAUDRATE); |
miguelcordero191 | 0:c9bdd57867af | 88 | |
miguelcordero191 | 0:c9bdd57867af | 89 | //jroUart.Init(SERIAL_BAUDRATE); |
miguelcordero191 | 0:c9bdd57867af | 90 | |
miguelcordero191 | 0:c9bdd57867af | 91 | while(1){ |
miguelcordero191 | 0:c9bdd57867af | 92 | //__screen.printf("\r\nWaiting serial data...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 93 | |
miguelcordero191 | 0:c9bdd57867af | 94 | if (uart.isRxBufferEmpty()){ |
miguelcordero191 | 0:c9bdd57867af | 95 | Thread::wait(10); |
miguelcordero191 | 0:c9bdd57867af | 96 | continue; |
miguelcordero191 | 0:c9bdd57867af | 97 | } |
miguelcordero191 | 0:c9bdd57867af | 98 | |
miguelcordero191 | 0:c9bdd57867af | 99 | Thread::wait(100); |
miguelcordero191 | 0:c9bdd57867af | 100 | n = uart.read(rx_buffer, 40, false); |
miguelcordero191 | 0:c9bdd57867af | 101 | |
miguelcordero191 | 0:c9bdd57867af | 102 | screen.putc(0x6E); |
miguelcordero191 | 0:c9bdd57867af | 103 | screen.putc(0x3D); |
miguelcordero191 | 0:c9bdd57867af | 104 | screen.putc(n); |
miguelcordero191 | 0:c9bdd57867af | 105 | |
miguelcordero191 | 0:c9bdd57867af | 106 | //for (int i=0; i<n; i++) |
miguelcordero191 | 0:c9bdd57867af | 107 | // screen.putc(rx_buffer[i]); |
miguelcordero191 | 0:c9bdd57867af | 108 | |
miguelcordero191 | 0:c9bdd57867af | 109 | if (n != 40) |
miguelcordero191 | 0:c9bdd57867af | 110 | { //Data is not complete |
miguelcordero191 | 0:c9bdd57867af | 111 | continue; |
miguelcordero191 | 0:c9bdd57867af | 112 | } |
miguelcordero191 | 0:c9bdd57867af | 113 | |
miguelcordero191 | 0:c9bdd57867af | 114 | if (dds_device.setAllDevice(rx_buffer, &screen) == 1){ |
miguelcordero191 | 0:c9bdd57867af | 115 | screen.putc(0x34); |
miguelcordero191 | 0:c9bdd57867af | 116 | screen.putc(0x34); |
miguelcordero191 | 0:c9bdd57867af | 117 | //jroSerial.writeData("Done"); |
miguelcordero191 | 0:c9bdd57867af | 118 | } |
miguelcordero191 | 0:c9bdd57867af | 119 | else |
miguelcordero191 | 0:c9bdd57867af | 120 | { |
miguelcordero191 | 0:c9bdd57867af | 121 | //jroSerial.writeData("Error"); |
miguelcordero191 | 0:c9bdd57867af | 122 | screen.putc(0x34); |
miguelcordero191 | 0:c9bdd57867af | 123 | screen.putc(0x35); |
miguelcordero191 | 0:c9bdd57867af | 124 | } |
miguelcordero191 | 0:c9bdd57867af | 125 | |
miguelcordero191 | 0:c9bdd57867af | 126 | } |
miguelcordero191 | 0:c9bdd57867af | 127 | |
miguelcordero191 | 0:c9bdd57867af | 128 | } |
miguelcordero191 | 0:c9bdd57867af | 129 | |
miguelcordero191 | 0:c9bdd57867af | 130 | void waitEthData_thread(void const *args){ |
miguelcordero191 | 0:c9bdd57867af | 131 | |
miguelcordero191 | 0:c9bdd57867af | 132 | int n; |
miguelcordero191 | 0:c9bdd57867af | 133 | |
miguelcordero191 | 0:c9bdd57867af | 134 | Thread::signal_wait(0x1); |
miguelcordero191 | 0:c9bdd57867af | 135 | |
miguelcordero191 | 0:c9bdd57867af | 136 | LedR = 0; |
miguelcordero191 | 0:c9bdd57867af | 137 | |
miguelcordero191 | 0:c9bdd57867af | 138 | screen.putc(0x35); |
miguelcordero191 | 0:c9bdd57867af | 139 | screen.putc(0x30); |
miguelcordero191 | 0:c9bdd57867af | 140 | |
miguelcordero191 | 0:c9bdd57867af | 141 | jroEth.init(ip, mask, gateway); |
miguelcordero191 | 0:c9bdd57867af | 142 | jroEth.openTCPServer(&server, ECHO_SERVER_PORT); |
miguelcordero191 | 0:c9bdd57867af | 143 | |
miguelcordero191 | 0:c9bdd57867af | 144 | LedR = 1; |
miguelcordero191 | 0:c9bdd57867af | 145 | |
miguelcordero191 | 0:c9bdd57867af | 146 | screen.putc(0x35); |
miguelcordero191 | 0:c9bdd57867af | 147 | screen.putc(0x31); |
miguelcordero191 | 0:c9bdd57867af | 148 | |
miguelcordero191 | 0:c9bdd57867af | 149 | |
miguelcordero191 | 0:c9bdd57867af | 150 | //__screen.printf("\r\nEth thread initialized...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 151 | |
miguelcordero191 | 0:c9bdd57867af | 152 | while(1) { |
miguelcordero191 | 0:c9bdd57867af | 153 | LedB = 0; |
miguelcordero191 | 0:c9bdd57867af | 154 | //screen.printf("\r\n ********************** \r\n"); |
miguelcordero191 | 0:c9bdd57867af | 155 | //__screen.printf("\r\nWait for new connection...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 156 | n = jroEth.read(rx_buffer); |
miguelcordero191 | 0:c9bdd57867af | 157 | |
miguelcordero191 | 0:c9bdd57867af | 158 | screen.putc(0x35); |
miguelcordero191 | 0:c9bdd57867af | 159 | screen.putc(0x32); |
miguelcordero191 | 0:c9bdd57867af | 160 | |
miguelcordero191 | 0:c9bdd57867af | 161 | if (n < 1) |
miguelcordero191 | 0:c9bdd57867af | 162 | continue; |
miguelcordero191 | 0:c9bdd57867af | 163 | |
miguelcordero191 | 0:c9bdd57867af | 164 | if (ipData.decode(rx_buffer, n) == 0) |
miguelcordero191 | 0:c9bdd57867af | 165 | continue; |
miguelcordero191 | 0:c9bdd57867af | 166 | |
miguelcordero191 | 0:c9bdd57867af | 167 | if (ipData.getCmd() == CMD_CHANGE_IP){ |
miguelcordero191 | 0:c9bdd57867af | 168 | //changing ip and reseting device |
miguelcordero191 | 0:c9bdd57867af | 169 | } |
miguelcordero191 | 0:c9bdd57867af | 170 | |
miguelcordero191 | 0:c9bdd57867af | 171 | dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen()); |
miguelcordero191 | 0:c9bdd57867af | 172 | ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen()); |
miguelcordero191 | 0:c9bdd57867af | 173 | |
miguelcordero191 | 0:c9bdd57867af | 174 | jroEth.sendResponse(ipData.getTxData(), ipData.getTxDataLen()); |
miguelcordero191 | 0:c9bdd57867af | 175 | jroEth.closeClient(); |
miguelcordero191 | 0:c9bdd57867af | 176 | |
miguelcordero191 | 0:c9bdd57867af | 177 | } |
miguelcordero191 | 0:c9bdd57867af | 178 | } |
miguelcordero191 | 0:c9bdd57867af | 179 | |
miguelcordero191 | 0:c9bdd57867af | 180 | int main() |
miguelcordero191 | 0:c9bdd57867af | 181 | { |
miguelcordero191 | 0:c9bdd57867af | 182 | screen.baud(9600); |
miguelcordero191 | 0:c9bdd57867af | 183 | uart.baud(SERIAL_BAUDRATE); |
miguelcordero191 | 0:c9bdd57867af | 184 | screen.putc(0x0A); |
miguelcordero191 | 0:c9bdd57867af | 185 | screen.putc(0x0D); |
miguelcordero191 | 0:c9bdd57867af | 186 | screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 187 | screen.putc(0x30); |
miguelcordero191 | 0:c9bdd57867af | 188 | |
miguelcordero191 | 0:c9bdd57867af | 189 | //ser_thread_ptr = new Thread(&forwardUart); |
miguelcordero191 | 0:c9bdd57867af | 190 | |
miguelcordero191 | 0:c9bdd57867af | 191 | //ser_thread_ptr = new Thread(&waitSerialData_thread); |
miguelcordero191 | 0:c9bdd57867af | 192 | eth_thread_ptr = new Thread(&waitEthData_thread); |
miguelcordero191 | 0:c9bdd57867af | 193 | |
miguelcordero191 | 0:c9bdd57867af | 194 | //__screen.printf("\r\n ******************************************* \r\n"); |
miguelcordero191 | 0:c9bdd57867af | 195 | //__screen.printf("\r\n ******************************************* \r\n"); |
miguelcordero191 | 0:c9bdd57867af | 196 | |
miguelcordero191 | 0:c9bdd57867af | 197 | //__screen.printf("\nInitializing program...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 198 | //screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 199 | //screen.putc(0x30); |
miguelcordero191 | 0:c9bdd57867af | 200 | |
miguelcordero191 | 0:c9bdd57867af | 201 | //LedR.period_ms(100); |
miguelcordero191 | 0:c9bdd57867af | 202 | |
miguelcordero191 | 0:c9bdd57867af | 203 | LedG = 0; |
miguelcordero191 | 0:c9bdd57867af | 204 | |
miguelcordero191 | 0:c9bdd57867af | 205 | //__screen.printf("\r\nHabilitando threads...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 206 | //ser_thread_ptr->signal_set(0x1); |
miguelcordero191 | 0:c9bdd57867af | 207 | //Thread::wait(300); |
miguelcordero191 | 0:c9bdd57867af | 208 | eth_thread_ptr->signal_set(0x1); |
miguelcordero191 | 0:c9bdd57867af | 209 | Thread::wait(1500); |
miguelcordero191 | 0:c9bdd57867af | 210 | |
miguelcordero191 | 0:c9bdd57867af | 211 | screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 212 | screen.putc(0x31); |
miguelcordero191 | 0:c9bdd57867af | 213 | //__screen.printf("\r\nInitializing DDS...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 214 | |
miguelcordero191 | 0:c9bdd57867af | 215 | while(true){ |
miguelcordero191 | 0:c9bdd57867af | 216 | if (dds_device.init()) |
miguelcordero191 | 0:c9bdd57867af | 217 | break; |
miguelcordero191 | 0:c9bdd57867af | 218 | |
miguelcordero191 | 0:c9bdd57867af | 219 | Thread::wait(250); |
miguelcordero191 | 0:c9bdd57867af | 220 | } |
miguelcordero191 | 0:c9bdd57867af | 221 | |
miguelcordero191 | 0:c9bdd57867af | 222 | LedG = 1; |
miguelcordero191 | 0:c9bdd57867af | 223 | |
miguelcordero191 | 0:c9bdd57867af | 224 | screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 225 | screen.putc(0x32); |
miguelcordero191 | 0:c9bdd57867af | 226 | |
miguelcordero191 | 0:c9bdd57867af | 227 | LedB = 0; |
miguelcordero191 | 0:c9bdd57867af | 228 | |
miguelcordero191 | 0:c9bdd57867af | 229 | //__screen.printf("\r\nSetting defaults values to DDS...\r\n"); |
miguelcordero191 | 0:c9bdd57867af | 230 | dds_device.defaultSettings(&screen); |
miguelcordero191 | 0:c9bdd57867af | 231 | LedB = 1; |
miguelcordero191 | 0:c9bdd57867af | 232 | |
miguelcordero191 | 0:c9bdd57867af | 233 | screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 234 | screen.putc(0x33); |
miguelcordero191 | 0:c9bdd57867af | 235 | |
miguelcordero191 | 0:c9bdd57867af | 236 | while(1) { |
miguelcordero191 | 0:c9bdd57867af | 237 | Thread::wait(250); |
miguelcordero191 | 0:c9bdd57867af | 238 | |
miguelcordero191 | 0:c9bdd57867af | 239 | } |
miguelcordero191 | 0:c9bdd57867af | 240 | |
miguelcordero191 | 0:c9bdd57867af | 241 | } |
miguelcordero191 | 0:c9bdd57867af | 242 | |
miguelcordero191 | 0:c9bdd57867af | 243 | #endif |