App to configure a DDS (AD9854) using a K64F. USB an Ethernet were used as interface.

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

Committer:
miguelcordero191
Date:
Thu Sep 05 00:58:57 2019 +0000
Revision:
6:99a56e714791
Parent:
5:6b81db65f419
Rev_2019

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 "SerialDriver.h"
miguelcordero191 3:f84802422619 12 #include "I2CLCD.h"
miguelcordero191 0:c9bdd57867af 13
miguelcordero191 3:f84802422619 14 #include "k64f_EthLink.h"
miguelcordero191 3:f84802422619 15 #include "EthUtils.h"
miguelcordero191 3:f84802422619 16 #include "JroIpdata.h"
miguelcordero191 3:f84802422619 17 #include "JroSIR.h"
miguelcordero191 3:f84802422619 18 #include "AD9854.h"
miguelcordero191 3:f84802422619 19
miguelcordero191 3:f84802422619 20 #define mbed_reset NVIC_SystemReset
miguelcordero191 1:072a0ab47d9c 21
miguelcordero191 0:c9bdd57867af 22 #define BUFFER_SIZE 256
miguelcordero191 0:c9bdd57867af 23 static char rx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 24 static char tx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 25
miguelcordero191 3:f84802422619 26 //THREADS
miguelcordero191 3:f84802422619 27 Thread *ser_thread_ptr;
miguelcordero191 3:f84802422619 28 Thread *eth_thread_ptr;
miguelcordero191 3:f84802422619 29 Thread *lcd_thread_ptr;
miguelcordero191 3:f84802422619 30 Mutex dds_mutex;
miguelcordero191 3:f84802422619 31 Mutex eth_mutex;
miguelcordero191 3:f84802422619 32 Mutex lcd_mutex;
miguelcordero191 3:f84802422619 33
miguelcordero191 0:c9bdd57867af 34 //SERIAL
miguelcordero191 1:072a0ab47d9c 35 #define SERIAL_BAUDRATE 1000000
miguelcordero191 3:f84802422619 36 const char* UART_MSG_OK = "DDS Successful";
miguelcordero191 3:f84802422619 37 const char* UART_MSG_KO = "DDS Unsuccessful";
miguelcordero191 3:f84802422619 38 const char* UART_MSG_NC = "DDS Not connected";
miguelcordero191 3:f84802422619 39
miguelcordero191 3:f84802422619 40 Serial screen(USBTX, USBRX);
miguelcordero191 3:f84802422619 41 SerialDriver uart(D1, D0);
miguelcordero191 3:f84802422619 42
miguelcordero191 1:072a0ab47d9c 43
miguelcordero191 3:f84802422619 44 //LCD
miguelcordero191 3:f84802422619 45 I2C i2c_device(I2C_SDA, I2C_SCL);
miguelcordero191 3:f84802422619 46 I2CLCD lcd(i2c_device, 0x78, LCD20x2);
miguelcordero191 3:f84802422619 47
miguelcordero191 3:f84802422619 48 //const char LCD_WELCOME[] = " JICAMARCA - DDS ";
miguelcordero191 3:f84802422619 49 const char LCD_IP_INI[] = "IP : checking... ";
miguelcordero191 3:f84802422619 50 const char LCD_IP_NC[] = "IP : Not connected ";
miguelcordero191 5:6b81db65f419 51 const char LCD_IP_NI[] = "IP : Not initialized";
miguelcordero191 5:6b81db65f419 52 const char LCD_IP_RST[] = "IP : Connect&Restart";
miguelcordero191 3:f84802422619 53
miguelcordero191 3:f84802422619 54 const char LCD_DAC_INI[] = "DAC: checking... ";
miguelcordero191 5:6b81db65f419 55 const char LCD_DAC_NC[] = "DAC: No detected ";
miguelcordero191 5:6b81db65f419 56 const char LCD_DAC_NO_CLK[] = "DAC: Verify CLK_IN ";
miguelcordero191 3:f84802422619 57 const char LCD_DAC_ENA[] = " RF Enabled ";
miguelcordero191 3:f84802422619 58 const char LCD_DAC_DIS[] = " RF Disabled ";
miguelcordero191 0:c9bdd57867af 59
miguelcordero191 0:c9bdd57867af 60 //ETHERNET
miguelcordero191 1:072a0ab47d9c 61 #define ECHO_SERVER_PORT 2000
miguelcordero191 3:f84802422619 62 const char DEVICE_NAME[] = "jrodds";
miguelcordero191 1:072a0ab47d9c 63
miguelcordero191 0:c9bdd57867af 64 IpData ipData(tx_buffer);
miguelcordero191 3:f84802422619 65
miguelcordero191 3:f84802422619 66 k64fEthLink eth_link;
miguelcordero191 0:c9bdd57867af 67 EthernetInterface eth;
miguelcordero191 0:c9bdd57867af 68 TCPSocketServer server;
miguelcordero191 0:c9bdd57867af 69
miguelcordero191 5:6b81db65f419 70 int ethIni = 0;
miguelcordero191 5:6b81db65f419 71
miguelcordero191 0:c9bdd57867af 72 //DDS
miguelcordero191 0:c9bdd57867af 73 SPI spi_device(D11, D12, D13);
miguelcordero191 0:c9bdd57867af 74
miguelcordero191 0:c9bdd57867af 75 DigitalOut dds_mreset(D4);
miguelcordero191 0:c9bdd57867af 76 DigitalOut dds_outramp(D5);
miguelcordero191 0:c9bdd57867af 77 DigitalOut dds_sp_mode(D6);
miguelcordero191 0:c9bdd57867af 78 DigitalOut dds_cs(D7);
miguelcordero191 0:c9bdd57867af 79 DigitalOut dds_io_reset(D9);
miguelcordero191 0:c9bdd57867af 80 DigitalInOut dds_updclk(D10);
miguelcordero191 0:c9bdd57867af 81
miguelcordero191 0:c9bdd57867af 82 DDS dds_device(&spi_device, &dds_mreset, &dds_outramp, &dds_sp_mode, &dds_cs, &dds_io_reset, &dds_updclk);
miguelcordero191 0:c9bdd57867af 83
miguelcordero191 0:c9bdd57867af 84 //LEDS
miguelcordero191 5:6b81db65f419 85 DigitalOut LedADC(PTB11);
miguelcordero191 5:6b81db65f419 86 DigitalOut LedUART(PTB10);
miguelcordero191 5:6b81db65f419 87 DigitalOut LedIP(PTB3);
miguelcordero191 0:c9bdd57867af 88
miguelcordero191 3:f84802422619 89 DigitalIn IPResetButton(PTB2, PullUp);
miguelcordero191 3:f84802422619 90
miguelcordero191 3:f84802422619 91 int printAddr(char *_ip, char *_mask, char *_gateway){
miguelcordero191 3:f84802422619 92 lcd.printf(_ip, 0, 0);
miguelcordero191 3:f84802422619 93 lcd.printf(_mask, 0, 1);
miguelcordero191 3:f84802422619 94
miguelcordero191 3:f84802422619 95 screen.putc(0x0A);
miguelcordero191 3:f84802422619 96 screen.putc(0x0D);
miguelcordero191 3:f84802422619 97
miguelcordero191 3:f84802422619 98 for (int i=0; i<20; i++){
miguelcordero191 3:f84802422619 99 screen.putc(_ip[i]);
miguelcordero191 3:f84802422619 100 }
miguelcordero191 3:f84802422619 101 screen.putc(0x0A);
miguelcordero191 3:f84802422619 102 screen.putc(0x0D);
miguelcordero191 3:f84802422619 103
miguelcordero191 3:f84802422619 104 for (int i=0; i<20; i++){
miguelcordero191 3:f84802422619 105 screen.putc(_mask[i]);
miguelcordero191 3:f84802422619 106 }
miguelcordero191 3:f84802422619 107
miguelcordero191 3:f84802422619 108 screen.putc(0x0A);
miguelcordero191 3:f84802422619 109 screen.putc(0x0D);
miguelcordero191 3:f84802422619 110
miguelcordero191 3:f84802422619 111 for (int i=0; i<20; i++){
miguelcordero191 3:f84802422619 112 screen.putc(_gateway[i]);
miguelcordero191 3:f84802422619 113 }
miguelcordero191 3:f84802422619 114
miguelcordero191 3:f84802422619 115 screen.putc(0x0A);
miguelcordero191 3:f84802422619 116 screen.putc(0x0D);
miguelcordero191 3:f84802422619 117
miguelcordero191 3:f84802422619 118 return 1;
miguelcordero191 3:f84802422619 119 }
miguelcordero191 3:f84802422619 120
miguelcordero191 3:f84802422619 121 int wasIPResetPressed(){
miguelcordero191 3:f84802422619 122
miguelcordero191 3:f84802422619 123 if (IPResetButton)
miguelcordero191 3:f84802422619 124 return 0;
miguelcordero191 3:f84802422619 125
miguelcordero191 3:f84802422619 126 //Wait until button will be released
miguelcordero191 3:f84802422619 127 while(!IPResetButton){
miguelcordero191 5:6b81db65f419 128 LedADC = 0;
miguelcordero191 5:6b81db65f419 129 LedIP = 0;
miguelcordero191 3:f84802422619 130 Thread::wait(50);
miguelcordero191 3:f84802422619 131 }
miguelcordero191 3:f84802422619 132
miguelcordero191 3:f84802422619 133 return 1;
miguelcordero191 3:f84802422619 134 }
miguelcordero191 3:f84802422619 135
miguelcordero191 3:f84802422619 136
miguelcordero191 0:c9bdd57867af 137 void waitSerialData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 138
miguelcordero191 0:c9bdd57867af 139 int n;
miguelcordero191 1:072a0ab47d9c 140 bool successful;
miguelcordero191 0:c9bdd57867af 141
miguelcordero191 1:072a0ab47d9c 142 //Thread::signal_wait(0x1);
miguelcordero191 1:072a0ab47d9c 143
miguelcordero191 5:6b81db65f419 144 LedUART = 0;
miguelcordero191 0:c9bdd57867af 145
miguelcordero191 2:f9e1bcb3409a 146 uart.baud(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 147
miguelcordero191 0:c9bdd57867af 148 while(1){
miguelcordero191 5:6b81db65f419 149 LedUART = 1;
miguelcordero191 1:072a0ab47d9c 150 successful = false;
miguelcordero191 0:c9bdd57867af 151
miguelcordero191 0:c9bdd57867af 152 if (uart.isRxBufferEmpty()){
miguelcordero191 3:f84802422619 153 Thread::wait(100);
miguelcordero191 0:c9bdd57867af 154 continue;
miguelcordero191 0:c9bdd57867af 155 }
miguelcordero191 0:c9bdd57867af 156
miguelcordero191 2:f9e1bcb3409a 157 Thread::wait(10);
miguelcordero191 1:072a0ab47d9c 158 n = uart.read(rx_buffer, 255, false);
miguelcordero191 2:f9e1bcb3409a 159
miguelcordero191 2:f9e1bcb3409a 160 //******************** BLINK LED *****************************
miguelcordero191 2:f9e1bcb3409a 161 for (int i=0; i<n; i++){
miguelcordero191 5:6b81db65f419 162 LedUART = !LedUART;
miguelcordero191 2:f9e1bcb3409a 163 Thread::wait(10);
miguelcordero191 2:f9e1bcb3409a 164 }
miguelcordero191 3:f84802422619 165 lcd.printf("Serial command received", 0, 1);
miguelcordero191 2:f9e1bcb3409a 166 //******************** DDS NOT INITIALIZED *******************
miguelcordero191 2:f9e1bcb3409a 167 if (!dds_device.wasInitialized()){
miguelcordero191 3:f84802422619 168 for (int i=0; i<strlen(UART_MSG_NC); i++){
miguelcordero191 3:f84802422619 169 uart.putc(UART_MSG_NC[i]);
miguelcordero191 2:f9e1bcb3409a 170 }
miguelcordero191 2:f9e1bcb3409a 171 continue;
miguelcordero191 2:f9e1bcb3409a 172 }
miguelcordero191 3:f84802422619 173 //Lock dds_device before execute any command
miguelcordero191 3:f84802422619 174 dds_mutex.lock();
miguelcordero191 2:f9e1bcb3409a 175
miguelcordero191 2:f9e1bcb3409a 176 //********************* SUCCESSFUL DATA **********************
miguelcordero191 1:072a0ab47d9c 177 if (n == 40)
miguelcordero191 5:6b81db65f419 178 if (dds_device.writeAllDevice(rx_buffer) == 1)
miguelcordero191 1:072a0ab47d9c 179 successful = true;
miguelcordero191 0:c9bdd57867af 180
miguelcordero191 2:f9e1bcb3409a 181 //******************** REPLY UART*****************************
miguelcordero191 3:f84802422619 182 if (successful)
miguelcordero191 3:f84802422619 183 //for (int i=0; i<strlen(UART_MSG_OK); i++)
miguelcordero191 3:f84802422619 184 uart.printf(UART_MSG_OK);
miguelcordero191 3:f84802422619 185
miguelcordero191 3:f84802422619 186 else
miguelcordero191 3:f84802422619 187 uart.printf(UART_MSG_KO);
miguelcordero191 3:f84802422619 188
miguelcordero191 3:f84802422619 189 dds_mutex.unlock();
miguelcordero191 0:c9bdd57867af 190
miguelcordero191 0:c9bdd57867af 191 }
miguelcordero191 0:c9bdd57867af 192
miguelcordero191 0:c9bdd57867af 193 }
miguelcordero191 0:c9bdd57867af 194
miguelcordero191 0:c9bdd57867af 195 void waitEthData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 196
miguelcordero191 1:072a0ab47d9c 197 TCPSocketConnection client;
miguelcordero191 3:f84802422619 198 //int status;
miguelcordero191 1:072a0ab47d9c 199 int n, totalSize=0;
miguelcordero191 3:f84802422619 200 char _ip[MAX_IP_LEN], _mask[MAX_IP_LEN], _gateway[MAX_IP_LEN];
miguelcordero191 0:c9bdd57867af 201
miguelcordero191 3:f84802422619 202 //Lock ethernet resource until initial configuration will be loaded
miguelcordero191 3:f84802422619 203 eth_mutex.lock();
miguelcordero191 3:f84802422619 204
miguelcordero191 3:f84802422619 205 readIpConfig(_ip, _mask, _gateway);
miguelcordero191 5:6b81db65f419 206 ethIni = 0;
miguelcordero191 5:6b81db65f419 207 LedIP = 0;
miguelcordero191 0:c9bdd57867af 208
miguelcordero191 3:f84802422619 209 if (eth.init(_ip, _mask, _gateway) != 0){
miguelcordero191 3:f84802422619 210 //mbed_reset();
miguelcordero191 3:f84802422619 211 }
miguelcordero191 3:f84802422619 212
miguelcordero191 1:072a0ab47d9c 213 eth.setName(DEVICE_NAME);
miguelcordero191 3:f84802422619 214 eth.connect();
miguelcordero191 3:f84802422619 215 Thread::wait(200);
miguelcordero191 3:f84802422619 216 eth_mutex.unlock();
miguelcordero191 3:f84802422619 217
miguelcordero191 3:f84802422619 218 //If ethernet connection fails then try again
miguelcordero191 3:f84802422619 219 while(eth_link.GetELink() != 0){
miguelcordero191 3:f84802422619 220 eth.connect();
miguelcordero191 3:f84802422619 221 Thread::wait(200);
miguelcordero191 3:f84802422619 222 }
miguelcordero191 0:c9bdd57867af 223
miguelcordero191 1:072a0ab47d9c 224 server.bind(ECHO_SERVER_PORT);
miguelcordero191 1:072a0ab47d9c 225 server.listen(1);
miguelcordero191 5:6b81db65f419 226
miguelcordero191 5:6b81db65f419 227 ethIni = 1;
miguelcordero191 0:c9bdd57867af 228
miguelcordero191 1:072a0ab47d9c 229 while(1)
miguelcordero191 1:072a0ab47d9c 230 {
miguelcordero191 5:6b81db65f419 231 LedIP = 1;
miguelcordero191 1:072a0ab47d9c 232 n = 0;
miguelcordero191 1:072a0ab47d9c 233 totalSize = 0;
miguelcordero191 2:f9e1bcb3409a 234
miguelcordero191 1:072a0ab47d9c 235 server.accept(client);
miguelcordero191 1:072a0ab47d9c 236
miguelcordero191 2:f9e1bcb3409a 237 client.set_blocking(false, 500); // Timeout after (0.5)s
miguelcordero191 0:c9bdd57867af 238
miguelcordero191 1:072a0ab47d9c 239 while (true) {
miguelcordero191 5:6b81db65f419 240 LedIP = !LedIP;
miguelcordero191 1:072a0ab47d9c 241 n = client.receive(rx_buffer, sizeof(rx_buffer));
miguelcordero191 1:072a0ab47d9c 242 if (n <= 0) break;
miguelcordero191 1:072a0ab47d9c 243 totalSize += n;
miguelcordero191 2:f9e1bcb3409a 244 Thread::wait(10);
miguelcordero191 2:f9e1bcb3409a 245 }
miguelcordero191 2:f9e1bcb3409a 246
miguelcordero191 5:6b81db65f419 247 LedIP = 1;
miguelcordero191 2:f9e1bcb3409a 248
miguelcordero191 2:f9e1bcb3409a 249 if (totalSize < 1){
miguelcordero191 2:f9e1bcb3409a 250 client.close();
miguelcordero191 2:f9e1bcb3409a 251 continue;
miguelcordero191 1:072a0ab47d9c 252 }
miguelcordero191 1:072a0ab47d9c 253
miguelcordero191 2:f9e1bcb3409a 254 if (ipData.decode(rx_buffer, totalSize) == 0){
miguelcordero191 3:f84802422619 255 client.send(ipData.getKOData(0x00), ipData.getKODataLen());
miguelcordero191 2:f9e1bcb3409a 256 client.close();
miguelcordero191 0:c9bdd57867af 257 continue;
miguelcordero191 2:f9e1bcb3409a 258 }
miguelcordero191 3:f84802422619 259 lcd.printf("Eth command received", 0, 1);
miguelcordero191 2:f9e1bcb3409a 260 //******************** DDS NOT INITIALIZED *******************
miguelcordero191 5:6b81db65f419 261
miguelcordero191 2:f9e1bcb3409a 262 if (!dds_device.wasInitialized()){
miguelcordero191 2:f9e1bcb3409a 263 client.send(ipData.getNIData(ipData.getCmd()), ipData.getNIDataLen());
miguelcordero191 5:6b81db65f419 264 Thread::wait(10);
miguelcordero191 2:f9e1bcb3409a 265 client.close();
miguelcordero191 0:c9bdd57867af 266 continue;
miguelcordero191 2:f9e1bcb3409a 267 }
miguelcordero191 0:c9bdd57867af 268
miguelcordero191 5:6b81db65f419 269
miguelcordero191 2:f9e1bcb3409a 270 //******************** REPLY REQ *****************************
miguelcordero191 3:f84802422619 271
miguelcordero191 5:6b81db65f419 272 //********* ECHO ****
miguelcordero191 5:6b81db65f419 273 if (ipData.getCmd() == CMD_ECHO){
miguelcordero191 5:6b81db65f419 274
miguelcordero191 5:6b81db65f419 275 //Sending data
miguelcordero191 5:6b81db65f419 276 client.send(ipData.getOKData(ipData.getCmd()), ipData.getOKDataLen());
miguelcordero191 5:6b81db65f419 277 Thread::wait(10);
miguelcordero191 5:6b81db65f419 278 client.close();
miguelcordero191 5:6b81db65f419 279
miguelcordero191 5:6b81db65f419 280 continue;
miguelcordero191 5:6b81db65f419 281 }
miguelcordero191 5:6b81db65f419 282
miguelcordero191 3:f84802422619 283 //********* IP CONFIG ****
miguelcordero191 0:c9bdd57867af 284 if (ipData.getCmd() == CMD_CHANGE_IP){
miguelcordero191 3:f84802422619 285
miguelcordero191 3:f84802422619 286 if ( splitIpConf(ipData.getPayload(), _ip, _mask, _gateway) ){
miguelcordero191 3:f84802422619 287 //changing ip and reseting device
miguelcordero191 3:f84802422619 288 client.send(ipData.getOKData(ipData.getCmd()), ipData.getOKDataLen());
miguelcordero191 3:f84802422619 289 Thread::wait(200);
miguelcordero191 3:f84802422619 290 client.close();
miguelcordero191 3:f84802422619 291
miguelcordero191 3:f84802422619 292 saveIpConfig(_ip, _mask, _gateway);
miguelcordero191 3:f84802422619 293 eth.setNewAddr(_ip, _mask, _gateway);
miguelcordero191 3:f84802422619 294 Thread::wait(500);
miguelcordero191 3:f84802422619 295 //mbed_reset();
miguelcordero191 3:f84802422619 296 continue;
miguelcordero191 3:f84802422619 297 }
miguelcordero191 3:f84802422619 298 else{
miguelcordero191 3:f84802422619 299 client.send(ipData.getKOData(ipData.getCmd()), ipData.getKODataLen());
miguelcordero191 3:f84802422619 300 Thread::wait(200);
miguelcordero191 3:f84802422619 301 client.close();
miguelcordero191 3:f84802422619 302 continue;
miguelcordero191 3:f84802422619 303 }
miguelcordero191 0:c9bdd57867af 304 }
miguelcordero191 0:c9bdd57867af 305
miguelcordero191 5:6b81db65f419 306 //Lock dds_device before of execute any other command
miguelcordero191 3:f84802422619 307 dds_mutex.lock();
miguelcordero191 3:f84802422619 308
miguelcordero191 3:f84802422619 309 // ********** OTHER COMMANDS
miguelcordero191 0:c9bdd57867af 310 dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen());
miguelcordero191 0:c9bdd57867af 311 ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen());
miguelcordero191 0:c9bdd57867af 312
miguelcordero191 1:072a0ab47d9c 313 client.send(ipData.getTxData(), ipData.getTxDataLen());
miguelcordero191 3:f84802422619 314 Thread::wait(10);
miguelcordero191 1:072a0ab47d9c 315 client.close();
miguelcordero191 0:c9bdd57867af 316
miguelcordero191 3:f84802422619 317 dds_mutex.unlock();
miguelcordero191 0:c9bdd57867af 318 }
miguelcordero191 5:6b81db65f419 319
miguelcordero191 0:c9bdd57867af 320 }
miguelcordero191 0:c9bdd57867af 321
miguelcordero191 3:f84802422619 322 void lcdView_thread(void const *args){
miguelcordero191 3:f84802422619 323
miguelcordero191 3:f84802422619 324 char c=0;
miguelcordero191 3:f84802422619 325 char lcd_status[2]="\xF7";
miguelcordero191 3:f84802422619 326
miguelcordero191 3:f84802422619 327 lcd.printf(LCD_DAC_INI, 0, 0);
miguelcordero191 3:f84802422619 328 lcd.printf(LCD_IP_INI, 0, 1);
miguelcordero191 3:f84802422619 329 Thread::wait(2000);
miguelcordero191 3:f84802422619 330
miguelcordero191 3:f84802422619 331 while(1){
miguelcordero191 3:f84802422619 332 /*
miguelcordero191 3:f84802422619 333 if (lcd_mutex.trylock()==false){
miguelcordero191 3:f84802422619 334 Thread::wait(1000);
miguelcordero191 3:f84802422619 335 continue;
miguelcordero191 3:f84802422619 336 }
miguelcordero191 3:f84802422619 337 */
miguelcordero191 3:f84802422619 338
miguelcordero191 3:f84802422619 339 if (dds_device.wasInitialized()){
miguelcordero191 3:f84802422619 340
miguelcordero191 3:f84802422619 341 //RF ENABLED OR DISABLED
miguelcordero191 3:f84802422619 342 if (c==1){
miguelcordero191 3:f84802422619 343 if(dds_device.isRFEnabled()){
miguelcordero191 3:f84802422619 344 lcd.printf(LCD_DAC_ENA, 0, 0);
miguelcordero191 3:f84802422619 345 }
miguelcordero191 3:f84802422619 346 else{
miguelcordero191 3:f84802422619 347 lcd.printf(LCD_DAC_DIS, 0, 0);
miguelcordero191 3:f84802422619 348 }
miguelcordero191 3:f84802422619 349 lcd_status[0] = 0x01;
miguelcordero191 3:f84802422619 350 lcd.printf(lcd_status, 19, 0);
miguelcordero191 3:f84802422619 351
miguelcordero191 3:f84802422619 352 }
miguelcordero191 3:f84802422619 353 //FREQUENCY
miguelcordero191 3:f84802422619 354 if (c==3){
miguelcordero191 3:f84802422619 355 char tmp[21];
miguelcordero191 3:f84802422619 356 sprintf(tmp, "Fout = %7.5f*Clk", dds_device.getFreqFactor1());
miguelcordero191 3:f84802422619 357 lcd.printf(tmp, 0, 0);
miguelcordero191 3:f84802422619 358 }
miguelcordero191 3:f84802422619 359 if (c==5){
miguelcordero191 3:f84802422619 360 char tmp[21];
miguelcordero191 3:f84802422619 361 sprintf(tmp, "Modulation = %s", dds_device.getModeStr() );
miguelcordero191 3:f84802422619 362 lcd.printf(tmp, 0, 0);
miguelcordero191 3:f84802422619 363 }
miguelcordero191 3:f84802422619 364 }
miguelcordero191 3:f84802422619 365 else{
miguelcordero191 5:6b81db65f419 366 if (c==0){
miguelcordero191 5:6b81db65f419 367 lcd.printf(LCD_DAC_NC, 0, 0);
miguelcordero191 5:6b81db65f419 368 }
miguelcordero191 5:6b81db65f419 369 if (c==3){
miguelcordero191 5:6b81db65f419 370 lcd.printf(LCD_DAC_NO_CLK, 0, 0);
miguelcordero191 5:6b81db65f419 371 }
miguelcordero191 3:f84802422619 372 lcd_status[0] = lcd_status[0] ^ 0xFF;
miguelcordero191 3:f84802422619 373 lcd.printf(lcd_status, 19, 0);
miguelcordero191 3:f84802422619 374 }
miguelcordero191 3:f84802422619 375
miguelcordero191 5:6b81db65f419 376 //Verifying if ethernet resource is free
miguelcordero191 3:f84802422619 377 if (eth_mutex.trylock()){
miguelcordero191 3:f84802422619 378 if (eth_link.GetELink() == 0){
miguelcordero191 5:6b81db65f419 379 //Eth connected
miguelcordero191 5:6b81db65f419 380 LedIP = 1;
miguelcordero191 5:6b81db65f419 381
miguelcordero191 3:f84802422619 382 if (c==0){
miguelcordero191 3:f84802422619 383 lcd.printf("IP : ", 0, 1);
miguelcordero191 3:f84802422619 384 lcd.printf(eth.getIPAddress(), 5, 1);
miguelcordero191 3:f84802422619 385 }
miguelcordero191 3:f84802422619 386 if (c==2){
miguelcordero191 3:f84802422619 387 lcd.printf("MSK: ", 0, 1);
miguelcordero191 3:f84802422619 388 lcd.printf(eth.getNetworkMask(), 5, 1);
miguelcordero191 3:f84802422619 389 }
miguelcordero191 3:f84802422619 390 if (c==4){
miguelcordero191 3:f84802422619 391 lcd.printf("GW : ", 0, 1);
miguelcordero191 3:f84802422619 392 lcd.printf(eth.getGateway(), 5, 1);
miguelcordero191 3:f84802422619 393 }
miguelcordero191 3:f84802422619 394 }
miguelcordero191 3:f84802422619 395 else{
miguelcordero191 5:6b81db65f419 396
miguelcordero191 5:6b81db65f419 397 LedIP = 0;
miguelcordero191 5:6b81db65f419 398
miguelcordero191 5:6b81db65f419 399 if (ethIni==0){
miguelcordero191 5:6b81db65f419 400 //IP not initialized
miguelcordero191 5:6b81db65f419 401 if (c==0){
miguelcordero191 5:6b81db65f419 402 lcd.printf(LCD_IP_NI, 0, 1);
miguelcordero191 5:6b81db65f419 403 }
miguelcordero191 5:6b81db65f419 404 if (c==3){
miguelcordero191 5:6b81db65f419 405 lcd.printf(LCD_IP_RST, 0, 1);
miguelcordero191 5:6b81db65f419 406 }
miguelcordero191 5:6b81db65f419 407 }
miguelcordero191 5:6b81db65f419 408 else{
miguelcordero191 5:6b81db65f419 409 //IP initialized but unconnected
miguelcordero191 5:6b81db65f419 410 lcd.printf(LCD_IP_NC, 0, 1);
miguelcordero191 5:6b81db65f419 411 }
miguelcordero191 5:6b81db65f419 412
miguelcordero191 3:f84802422619 413 }
miguelcordero191 3:f84802422619 414 eth_mutex.unlock();
miguelcordero191 3:f84802422619 415 }
miguelcordero191 3:f84802422619 416 else{
miguelcordero191 3:f84802422619 417 lcd.printf(LCD_IP_INI, 0, 1);
miguelcordero191 3:f84802422619 418 }
miguelcordero191 3:f84802422619 419 c++;
miguelcordero191 3:f84802422619 420 if (c>5) c=0;
miguelcordero191 3:f84802422619 421 //lcd_mutex.unlock();
miguelcordero191 3:f84802422619 422 Thread::wait(1000);
miguelcordero191 3:f84802422619 423 }
miguelcordero191 3:f84802422619 424
miguelcordero191 3:f84802422619 425 }
miguelcordero191 3:f84802422619 426
miguelcordero191 0:c9bdd57867af 427 int main()
miguelcordero191 3:f84802422619 428 {
miguelcordero191 5:6b81db65f419 429 LedADC = 0;
miguelcordero191 5:6b81db65f419 430
miguelcordero191 0:c9bdd57867af 431 screen.baud(9600);
miguelcordero191 1:072a0ab47d9c 432
miguelcordero191 0:c9bdd57867af 433 screen.putc(0x0A);
miguelcordero191 0:c9bdd57867af 434 screen.putc(0x0D);
miguelcordero191 0:c9bdd57867af 435 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 436 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 437
miguelcordero191 1:072a0ab47d9c 438 ser_thread_ptr = new Thread(&waitSerialData_thread);
miguelcordero191 0:c9bdd57867af 439 eth_thread_ptr = new Thread(&waitEthData_thread);
miguelcordero191 3:f84802422619 440 lcd_thread_ptr = new Thread(&lcdView_thread);
miguelcordero191 0:c9bdd57867af 441
miguelcordero191 0:c9bdd57867af 442 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 443 screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 444
miguelcordero191 0:c9bdd57867af 445 while(true){
miguelcordero191 0:c9bdd57867af 446 if (dds_device.init())
miguelcordero191 0:c9bdd57867af 447 break;
miguelcordero191 3:f84802422619 448
miguelcordero191 5:6b81db65f419 449 LedADC = !LedADC;
miguelcordero191 0:c9bdd57867af 450 Thread::wait(250);
miguelcordero191 3:f84802422619 451
miguelcordero191 3:f84802422619 452 if (wasIPResetPressed()){
miguelcordero191 3:f84802422619 453 eraseIpConfig();
miguelcordero191 3:f84802422619 454 mbed_reset();
miguelcordero191 3:f84802422619 455 }
miguelcordero191 0:c9bdd57867af 456 }
miguelcordero191 0:c9bdd57867af 457
miguelcordero191 3:f84802422619 458 /*
miguelcordero191 0:c9bdd57867af 459 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 460 screen.putc(0x31);
miguelcordero191 3:f84802422619 461 */
miguelcordero191 2:f9e1bcb3409a 462
miguelcordero191 1:072a0ab47d9c 463 dds_device.defaultSettings();
miguelcordero191 3:f84802422619 464 /*
miguelcordero191 0:c9bdd57867af 465 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 466 screen.putc(0x30);
miguelcordero191 3:f84802422619 467 */
miguelcordero191 3:f84802422619 468 Thread::wait(1000);
miguelcordero191 2:f9e1bcb3409a 469
miguelcordero191 1:072a0ab47d9c 470 //int c=0;
miguelcordero191 1:072a0ab47d9c 471 while(true){
miguelcordero191 3:f84802422619 472
miguelcordero191 3:f84802422619 473 if (dds_device.isRFEnabled()){
miguelcordero191 5:6b81db65f419 474 LedADC = 1;
miguelcordero191 3:f84802422619 475 }
miguelcordero191 3:f84802422619 476 else{
miguelcordero191 5:6b81db65f419 477 LedADC = 0;
miguelcordero191 3:f84802422619 478 }
miguelcordero191 3:f84802422619 479
miguelcordero191 3:f84802422619 480 if (wasIPResetPressed()){
miguelcordero191 3:f84802422619 481 eraseIpConfig();
miguelcordero191 3:f84802422619 482 mbed_reset();
miguelcordero191 3:f84802422619 483 }
miguelcordero191 3:f84802422619 484
miguelcordero191 3:f84802422619 485 Thread::wait(200);
miguelcordero191 0:c9bdd57867af 486 }
miguelcordero191 3:f84802422619 487
miguelcordero191 0:c9bdd57867af 488 }
miguelcordero191 0:c9bdd57867af 489
miguelcordero191 0:c9bdd57867af 490 #endif