This application shows an example of how to control the RGB LED over RPC. The app also contains an HTTP server and uses other components such as the LCD and Temperature Sensor to display additional information.

Dependencies:   C12832_lcd EthernetInterface HTTPServer LM75B MutexLocker mbed-rpc mbed-rtos mbed

Committer:
cabledev
Date:
Thu May 15 16:13:13 2014 +0000
Revision:
0:452a42421de4
Child:
1:784afed9dbfe
- added Smart Light demo application

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cabledev 0:452a42421de4 1 /**
cabledev 0:452a42421de4 2 * Notice:
cabledev 0:452a42421de4 3 *
cabledev 0:452a42421de4 4 * Neither CableLabs nor any member company is responsible to any party for any liability of any nature whatsoever
cabledev 0:452a42421de4 5 * resulting from or arising out of use or reliance upon this software. This software is furnished on an "AS IS" basis
cabledev 0:452a42421de4 6 * and neither CableLabs nor its members provides any representation or warranty, express or implied, regarding the
cabledev 0:452a42421de4 7 * accuracy, completeness, or fitness for a particular purpose of this software.
cabledev 0:452a42421de4 8 *
cabledev 0:452a42421de4 9 * (C)Copyright 2014 Cable Television Laboratories, Inc. All rights reserved.
cabledev 0:452a42421de4 10 * -----------------------------------------------------------------------------
cabledev 0:452a42421de4 11 *
cabledev 0:452a42421de4 12 * File: main.cpp
cabledev 0:452a42421de4 13 *
cabledev 0:452a42421de4 14 */
cabledev 0:452a42421de4 15
cabledev 0:452a42421de4 16 #include "mbed.h"
cabledev 0:452a42421de4 17
cabledev 0:452a42421de4 18 // LCD
cabledev 0:452a42421de4 19 #include "C12832_lcd.h"
cabledev 0:452a42421de4 20 #include "Small_7.h"
cabledev 0:452a42421de4 21
cabledev 0:452a42421de4 22 // HTTPServer
cabledev 0:452a42421de4 23 #include "HTTPServer.h"
cabledev 0:452a42421de4 24 #include "FsHandler.h"
cabledev 0:452a42421de4 25 #include "LocalFileSystem.h"
cabledev 0:452a42421de4 26 #include "RpcHandler.h"
cabledev 0:452a42421de4 27 #include "mbed_rpc.h"
cabledev 0:452a42421de4 28
cabledev 0:452a42421de4 29 // Temperature sensor
cabledev 0:452a42421de4 30 #include "mutexlocker.h"
cabledev 0:452a42421de4 31 #include "LM75B.h"
cabledev 0:452a42421de4 32
cabledev 0:452a42421de4 33 #define ON 1
cabledev 0:452a42421de4 34 #define OFF 0
cabledev 0:452a42421de4 35 #define DIM 0.3
cabledev 0:452a42421de4 36 #define SERIAL_BAUD 115200 // 9600
cabledev 0:452a42421de4 37 #define HTTP_LISTEN_PORT 80
cabledev 0:452a42421de4 38
cabledev 0:452a42421de4 39 // blinks LED1 when the HTTP server is listening for connections
cabledev 0:452a42421de4 40 //#define LISTENING_LED
cabledev 0:452a42421de4 41
cabledev 0:452a42421de4 42 // for some reason, getting the return code causes the HTTP server to be unresponsive
cabledev 0:452a42421de4 43 #define ETH_CONNECTION_STATUS
cabledev 0:452a42421de4 44
cabledev 0:452a42421de4 45 // uncomment the following line for static IP address
cabledev 0:452a42421de4 46 //#define STATIC_IP
cabledev 0:452a42421de4 47 #define STATIC_IP_ADDRESS "192.168.1.177"
cabledev 0:452a42421de4 48 #define STATIC_IP_NETMASK "255.255.255.0"
cabledev 0:452a42421de4 49 #define STATIC_IP_GATEWAY "192.168.1.1"
cabledev 0:452a42421de4 50
cabledev 0:452a42421de4 51 #define TEMPERATURE_ACTIVE
cabledev 0:452a42421de4 52
cabledev 0:452a42421de4 53 // LCD
cabledev 0:452a42421de4 54 // LCD object
cabledev 0:452a42421de4 55 C12832_LCD lcd;
cabledev 0:452a42421de4 56
cabledev 0:452a42421de4 57 // the led's are connected to vcc, so a PwmOut of 100% will shut off the led and 0% will let it shine!
cabledev 0:452a42421de4 58 PwmOut r(p23);
cabledev 0:452a42421de4 59 PwmOut g(p24);
cabledev 0:452a42421de4 60 PwmOut b(p25);
cabledev 0:452a42421de4 61 RpcPwmOut rpc_r(p23,"r");
cabledev 0:452a42421de4 62 RpcPwmOut rpc_g(p24,"g");
cabledev 0:452a42421de4 63 RpcPwmOut rpc_b(p25,"b");
cabledev 0:452a42421de4 64 // used to restore the rgb value after turning LED off and back on
cabledev 0:452a42421de4 65 bool powerOn = true;
cabledev 0:452a42421de4 66 float lastH = 0.0;
cabledev 0:452a42421de4 67 float lastS = 0.0;
cabledev 0:452a42421de4 68 float lastV = -1.0;
cabledev 0:452a42421de4 69
cabledev 0:452a42421de4 70 AnalogIn Pot1(p19);
cabledev 0:452a42421de4 71 AnalogIn Pot2(p20);
cabledev 0:452a42421de4 72
cabledev 0:452a42421de4 73 // Ethernet
cabledev 0:452a42421de4 74 EthernetInterface eth;
cabledev 0:452a42421de4 75 bool ethConnected;
cabledev 0:452a42421de4 76
cabledev 0:452a42421de4 77 // HTTPServer
cabledev 0:452a42421de4 78 #ifdef LISTENING_LED
cabledev 0:452a42421de4 79 // Use LED1 to indicate that the main loop is still executing
cabledev 0:452a42421de4 80 DigitalOut listeningLed(LED1);
cabledev 0:452a42421de4 81 #endif
cabledev 0:452a42421de4 82 // Use the serial connection 'pc' to dump debug information
cabledev 0:452a42421de4 83 Serial pc(USBTX, USBRX, "pc");
cabledev 0:452a42421de4 84 // Instantiate a HTTPServer to handle incoming requests
cabledev 0:452a42421de4 85 HTTPServer svr;
cabledev 0:452a42421de4 86 // Instantiate a local file system handler named 'local' which will be used later to access files on the mbed.
cabledev 0:452a42421de4 87 LocalFileSystem local("local");
cabledev 0:452a42421de4 88
cabledev 0:452a42421de4 89 // Temperature sensor
cabledev 0:452a42421de4 90 Mutex mutex;
cabledev 0:452a42421de4 91 LM75B temperatureSensor(p28,p27);
cabledev 0:452a42421de4 92
cabledev 0:452a42421de4 93 // RPC Variables
cabledev 0:452a42421de4 94 /*
cabledev 0:452a42421de4 95 //First create the variables you wish to use
cabledev 0:452a42421de4 96 float f;
cabledev 0:452a42421de4 97 int i;
cabledev 0:452a42421de4 98 char c;
cabledev 0:452a42421de4 99 //Then attach them to an RPCVariable Object
cabledev 0:452a42421de4 100 RPCVariable<float> rpc_f(&f, "f");
cabledev 0:452a42421de4 101 RPCVariable<int> rpc_i(&i, "i");
cabledev 0:452a42421de4 102 RPCVariable<char> rpc_c(&c, "c");
cabledev 0:452a42421de4 103 */
cabledev 0:452a42421de4 104
cabledev 0:452a42421de4 105 // RPC Functions
cabledev 0:452a42421de4 106 void setLight(Arguments* input, Reply* output);
cabledev 0:452a42421de4 107
cabledev 0:452a42421de4 108 // invoke with "http://<eth_ip>/RPC/setLightColor/run <H> <S> <V> <brightness> <powerOn>",
cabledev 0:452a42421de4 109 // where 0 <= H <= 360, 0 <= S <= 1, 0 <= V <= 1
cabledev 0:452a42421de4 110 RPCFunction rpc_setLight(&setLight, "setLight");
cabledev 0:452a42421de4 111
cabledev 0:452a42421de4 112 // function to convert hue , saturation and value to RGB
cabledev 0:452a42421de4 113 // see http://en.wikipedia.org/wiki/HSL_and_HSV
cabledev 0:452a42421de4 114 void hsv2rgb(float H,float S, float V)
cabledev 0:452a42421de4 115 {
cabledev 0:452a42421de4 116 float f,h,p,q,t;
cabledev 0:452a42421de4 117 int i;
cabledev 0:452a42421de4 118 if( S == 0.0) {
cabledev 0:452a42421de4 119 r = 1.0 - V; // invert pwm !
cabledev 0:452a42421de4 120 g = 1.0 - V;
cabledev 0:452a42421de4 121 b = 1.0 - V;
cabledev 0:452a42421de4 122 return;
cabledev 0:452a42421de4 123 }
cabledev 0:452a42421de4 124 if(H > 360.0) H = 0.0; // check values
cabledev 0:452a42421de4 125 if(S > 1.0) S = 1.0;
cabledev 0:452a42421de4 126 if(S < 0.0) S = 0.0;
cabledev 0:452a42421de4 127 if(V > 1.0) V = 1.0;
cabledev 0:452a42421de4 128 if(V < 0.0) V = 0.0;
cabledev 0:452a42421de4 129 h = H / 60.0;
cabledev 0:452a42421de4 130 i = (int) h;
cabledev 0:452a42421de4 131 f = h - i;
cabledev 0:452a42421de4 132 p = V * (1.0 - S);
cabledev 0:452a42421de4 133 q = V * (1.0 - (S * f));
cabledev 0:452a42421de4 134 t = V * (1.0 - (S * (1.0 - f)));
cabledev 0:452a42421de4 135
cabledev 0:452a42421de4 136 switch(i) {
cabledev 0:452a42421de4 137 case 0:
cabledev 0:452a42421de4 138 r = 1.0 - V; // invert pwm !
cabledev 0:452a42421de4 139 g = 1.0 - t;
cabledev 0:452a42421de4 140 b = 1.0 - p;
cabledev 0:452a42421de4 141 break;
cabledev 0:452a42421de4 142 case 1:
cabledev 0:452a42421de4 143 r = 1.0 - q;
cabledev 0:452a42421de4 144 g = 1.0 - V;
cabledev 0:452a42421de4 145 b = 1.0 - p;
cabledev 0:452a42421de4 146 break;
cabledev 0:452a42421de4 147 case 2:
cabledev 0:452a42421de4 148 r = 1.0 - p;
cabledev 0:452a42421de4 149 g = 1.0 - V;
cabledev 0:452a42421de4 150 b = 1.0 - t;
cabledev 0:452a42421de4 151 break;
cabledev 0:452a42421de4 152 case 3:
cabledev 0:452a42421de4 153 r = 1.0 - p;
cabledev 0:452a42421de4 154 g = 1.0 - q;
cabledev 0:452a42421de4 155 b = 1.0 - V;
cabledev 0:452a42421de4 156 break;
cabledev 0:452a42421de4 157 case 4:
cabledev 0:452a42421de4 158 r = 1.0 - t;
cabledev 0:452a42421de4 159 g = 1.0 - p;
cabledev 0:452a42421de4 160 b = 1.0 - V;
cabledev 0:452a42421de4 161 break;
cabledev 0:452a42421de4 162 case 5:
cabledev 0:452a42421de4 163 default:
cabledev 0:452a42421de4 164 r = 1.0 - V;
cabledev 0:452a42421de4 165 g = 1.0 - p;
cabledev 0:452a42421de4 166 b = 1.0 - q;
cabledev 0:452a42421de4 167 break;
cabledev 0:452a42421de4 168 }
cabledev 0:452a42421de4 169 }
cabledev 0:452a42421de4 170
cabledev 0:452a42421de4 171 void setLight(Arguments* input, Reply* output)
cabledev 0:452a42421de4 172 {
cabledev 0:452a42421de4 173 // Arguments are already parsed into argv array of char*
cabledev 0:452a42421de4 174 printf("Object name = %s\n\r",input->obj_name);
cabledev 0:452a42421de4 175 printf("Method name = %s\n\r",input->method_name);
cabledev 0:452a42421de4 176 for (int i=0; i < input->argc; i++)
cabledev 0:452a42421de4 177 {
cabledev 0:452a42421de4 178 printf("argv[%1d] = %s \n\r",i,input->argv[i]);
cabledev 0:452a42421de4 179 }
cabledev 0:452a42421de4 180
cabledev 0:452a42421de4 181 if (input->argc > 4)
cabledev 0:452a42421de4 182 {
cabledev 0:452a42421de4 183 char* strH = input->argv[0];
cabledev 0:452a42421de4 184 char* strS = input->argv[1];
cabledev 0:452a42421de4 185 char* strV = input->argv[2];
cabledev 0:452a42421de4 186 char* strBrightness = input->argv[3];
cabledev 0:452a42421de4 187 char* strPower = input->argv[4];
cabledev 0:452a42421de4 188
cabledev 0:452a42421de4 189 float h;
cabledev 0:452a42421de4 190 float s;
cabledev 0:452a42421de4 191 float v;
cabledev 0:452a42421de4 192 float brightness;
cabledev 0:452a42421de4 193 int power;
cabledev 0:452a42421de4 194
cabledev 0:452a42421de4 195 if ((strH != NULL) && (strlen(strH) > 0) && (strcmp(strH, "null") != 0))
cabledev 0:452a42421de4 196 {
cabledev 0:452a42421de4 197 // assume that if we got an H, we also got an S & V
cabledev 0:452a42421de4 198 sscanf(strH, "%f", &h);
cabledev 0:452a42421de4 199 sscanf(strS, "%f", &s);
cabledev 0:452a42421de4 200 sscanf(strV, "%f", &v);
cabledev 0:452a42421de4 201
cabledev 0:452a42421de4 202 lastH = h;
cabledev 0:452a42421de4 203 lastS = s;
cabledev 0:452a42421de4 204 lastV = v;
cabledev 0:452a42421de4 205 printf("*** set lastV from color to %f\n\r", lastV);
cabledev 0:452a42421de4 206 }
cabledev 0:452a42421de4 207
cabledev 0:452a42421de4 208 if ((strBrightness != NULL) && (strlen(strBrightness) > 0) && (strcmp(strBrightness, "null") != 0))
cabledev 0:452a42421de4 209 {
cabledev 0:452a42421de4 210 sscanf(strBrightness, "%f", &brightness);
cabledev 0:452a42421de4 211 brightness = brightness / 100.0;
cabledev 0:452a42421de4 212 brightness = brightness*brightness; // normalization, because in general, the LED is too bright
cabledev 0:452a42421de4 213 lastV = brightness;
cabledev 0:452a42421de4 214 printf("*** set lastV from brightness to %f\n\r", lastV);
cabledev 0:452a42421de4 215 }
cabledev 0:452a42421de4 216
cabledev 0:452a42421de4 217 if ((strPower != NULL) && (strlen(strPower) > 0) && (strcmp(strPower, "null") != 0))
cabledev 0:452a42421de4 218 {
cabledev 0:452a42421de4 219 sscanf(strPower, "%i", &power);
cabledev 0:452a42421de4 220
cabledev 0:452a42421de4 221 powerOn = (power == ON);
cabledev 0:452a42421de4 222 }
cabledev 0:452a42421de4 223
cabledev 0:452a42421de4 224 printf("setLight: HSV = '(%s, %s, %s)', Brightness = '%s', Power = '%s'\n\r", strH, strS, strV, strBrightness, strPower);
cabledev 0:452a42421de4 225
cabledev 0:452a42421de4 226 // recall that the power is inverted, so (0.0 == on) and (1.0 == off)
cabledev 0:452a42421de4 227 if (powerOn)
cabledev 0:452a42421de4 228 {
cabledev 0:452a42421de4 229 hsv2rgb(lastH, lastS, lastV);
cabledev 0:452a42421de4 230 }
cabledev 0:452a42421de4 231 else
cabledev 0:452a42421de4 232 {
cabledev 0:452a42421de4 233 r = 1.0;
cabledev 0:452a42421de4 234 g = 1.0;
cabledev 0:452a42421de4 235 b = 1.0;
cabledev 0:452a42421de4 236 }
cabledev 0:452a42421de4 237 }
cabledev 0:452a42421de4 238 }
cabledev 0:452a42421de4 239
cabledev 0:452a42421de4 240 void startHttpServer(void const* arg)
cabledev 0:452a42421de4 241 {
cabledev 0:452a42421de4 242 // Ethernet
cabledev 0:452a42421de4 243 #ifdef STATIC_IP
cabledev 0:452a42421de4 244 pc.printf("Configuring Ethernet with Static IP Address.\n\r");
cabledev 0:452a42421de4 245 //eth.init("192.168.1.177", "255.255.255.0", "192.168.1.1");
cabledev 0:452a42421de4 246 eth.init(STATIC_IP_ADDRESS, STATIC_IP_NETMASK, STATIC_IP_GATEWAY);
cabledev 0:452a42421de4 247 #else
cabledev 0:452a42421de4 248 pc.printf("Configuring Ethernet with DHCP IP Address.\n\r");
cabledev 0:452a42421de4 249 eth.init(); //Use DHCP
cabledev 0:452a42421de4 250 #endif
cabledev 0:452a42421de4 251
cabledev 0:452a42421de4 252 #ifdef ETH_CONNECTION_STATUS
cabledev 0:452a42421de4 253 //pc.printf("*** eth.connect()!\n\r");
cabledev 0:452a42421de4 254 int connected = eth.connect(); // success == 0
cabledev 0:452a42421de4 255 //pc.printf("*** Eth.connect returned %i\n\r", connected);
cabledev 0:452a42421de4 256 if (connected != 0)
cabledev 0:452a42421de4 257 {
cabledev 0:452a42421de4 258 lcd.printf("Ethernet not connected");
cabledev 0:452a42421de4 259 }
cabledev 0:452a42421de4 260 else
cabledev 0:452a42421de4 261 {
cabledev 0:452a42421de4 262 #else
cabledev 0:452a42421de4 263 //pc.printf("*** eth.connect()!\n\r");
cabledev 0:452a42421de4 264 eth.connect();
cabledev 0:452a42421de4 265 #endif
cabledev 0:452a42421de4 266 char* ipAddr = eth.getIPAddress();
cabledev 0:452a42421de4 267 //pc.printf("*** ipAddr: %s\n\r", ipAddr);
cabledev 0:452a42421de4 268 ethConnected = ((ipAddr != NULL) && (strlen(ipAddr) > 0));
cabledev 0:452a42421de4 269
cabledev 0:452a42421de4 270 if (ethConnected)
cabledev 0:452a42421de4 271 {
cabledev 0:452a42421de4 272 mutex.lock();
cabledev 0:452a42421de4 273 lcd.locate(10,0);
cabledev 0:452a42421de4 274 lcd.printf("IP Address: %s", eth.getIPAddress());
cabledev 0:452a42421de4 275 mutex.unlock();
cabledev 0:452a42421de4 276
cabledev 0:452a42421de4 277 #ifndef TEMPERATURE_ACTIVE
cabledev 0:452a42421de4 278 mutex.lock();
cabledev 0:452a42421de4 279 lcd.locate(10,10);
cabledev 0:452a42421de4 280 lcd.printf("WebServer started");
cabledev 0:452a42421de4 281 mutex.unlock();
cabledev 0:452a42421de4 282 #endif
cabledev 0:452a42421de4 283 }
cabledev 0:452a42421de4 284 else
cabledev 0:452a42421de4 285 {
cabledev 0:452a42421de4 286 lcd.printf("No IP Address");
cabledev 0:452a42421de4 287 }
cabledev 0:452a42421de4 288 #ifdef ETH_CONNECTION_STATUS
cabledev 0:452a42421de4 289 }
cabledev 0:452a42421de4 290 #endif
cabledev 0:452a42421de4 291
cabledev 0:452a42421de4 292 svr.addHandler<HTTPFsRequestHandler>("/");
cabledev 0:452a42421de4 293 svr.addHandler<HTTPRpcRequestHandler>("/RPC");
cabledev 0:452a42421de4 294
cabledev 0:452a42421de4 295 svr.setPort(HTTP_LISTEN_PORT);
cabledev 0:452a42421de4 296 svr.setEthernetInterface(&eth);
cabledev 0:452a42421de4 297 svr.start();
cabledev 0:452a42421de4 298 }
cabledev 0:452a42421de4 299
cabledev 0:452a42421de4 300 void startTemperatureMonitor(void const* arg)
cabledev 0:452a42421de4 301 {
cabledev 0:452a42421de4 302 float tempC = 0;
cabledev 0:452a42421de4 303 float tempF = 0;
cabledev 0:452a42421de4 304 while(true)
cabledev 0:452a42421de4 305 {
cabledev 0:452a42421de4 306 tempC = temperatureSensor.read();
cabledev 0:452a42421de4 307 tempF = (tempC * 1.8f) + 32.0f;
cabledev 0:452a42421de4 308
cabledev 0:452a42421de4 309 mutex.lock();
cabledev 0:452a42421de4 310 lcd.locate(10,10);
cabledev 0:452a42421de4 311 lcd.printf("Temp: %.3f F\n", tempF);
cabledev 0:452a42421de4 312 mutex.unlock();
cabledev 0:452a42421de4 313 wait(1.0);
cabledev 0:452a42421de4 314 }
cabledev 0:452a42421de4 315 }
cabledev 0:452a42421de4 316
cabledev 0:452a42421de4 317 int main()
cabledev 0:452a42421de4 318 {
cabledev 0:452a42421de4 319 // LED
cabledev 0:452a42421de4 320 float h; // hue
cabledev 0:452a42421de4 321 float s,v; // saturation and value;
cabledev 0:452a42421de4 322 unsigned short temp;
cabledev 0:452a42421de4 323
cabledev 0:452a42421de4 324 lcd.cls();
cabledev 0:452a42421de4 325 lcd.set_font((unsigned char*) Small_7);
cabledev 0:452a42421de4 326
cabledev 0:452a42421de4 327 r.period(0.001); // set pwm period
cabledev 0:452a42421de4 328 s = 1.0;
cabledev 0:452a42421de4 329
cabledev 0:452a42421de4 330 // initialize the LED from the Pots
cabledev 0:452a42421de4 331 // get Poti 1 for color
cabledev 0:452a42421de4 332 temp = Pot1.read_u16();
cabledev 0:452a42421de4 333 temp = temp >> 6; // truncate to 10 Bit
cabledev 0:452a42421de4 334 h = temp * 0.3515625; // scale to 0 - 360;
cabledev 0:452a42421de4 335 //lcd.locate(0,13);
cabledev 0:452a42421de4 336 //lcd.printf("Colour = %3.2f degree",h);
cabledev 0:452a42421de4 337 // get Poti 2 fo value
cabledev 0:452a42421de4 338 temp = Pot2.read_u16();
cabledev 0:452a42421de4 339 temp = temp >> 6;
cabledev 0:452a42421de4 340 v = temp * 0.0009765624; // scale to 0 - 1;
cabledev 0:452a42421de4 341 //lcd.locate(0,23);
cabledev 0:452a42421de4 342 //lcd.printf("Val = %01.3f ",v);
cabledev 0:452a42421de4 343 hsv2rgb(h,s,v);
cabledev 0:452a42421de4 344
cabledev 0:452a42421de4 345 lastH = h;
cabledev 0:452a42421de4 346 lastS = s;
cabledev 0:452a42421de4 347 lastV = v;
cabledev 0:452a42421de4 348
cabledev 0:452a42421de4 349 //HTTPServer
cabledev 0:452a42421de4 350 pc.baud(SERIAL_BAUD);
cabledev 0:452a42421de4 351
cabledev 0:452a42421de4 352 // add the interfaces that can be created dynamically
cabledev 0:452a42421de4 353 RPC::add_rpc_class<RpcDigitalOut>();
cabledev 0:452a42421de4 354 RPC::add_rpc_class<RpcPwmOut>();
cabledev 0:452a42421de4 355
cabledev 0:452a42421de4 356 HTTPFsRequestHandler::mount("/local/", "/");
cabledev 0:452a42421de4 357
cabledev 0:452a42421de4 358 ethConnected = false;
cabledev 0:452a42421de4 359 Thread httpsvr( &startHttpServer );
cabledev 0:452a42421de4 360
cabledev 0:452a42421de4 361 #ifdef TEMPERATURE_ACTIVE
cabledev 0:452a42421de4 362 Thread tempMonitor(&startTemperatureMonitor );
cabledev 0:452a42421de4 363 #endif
cabledev 0:452a42421de4 364
cabledev 0:452a42421de4 365 while (true)
cabledev 0:452a42421de4 366 {
cabledev 0:452a42421de4 367 #ifdef LISTENING_LED
cabledev 0:452a42421de4 368 if (ethConnected)
cabledev 0:452a42421de4 369 {
cabledev 0:452a42421de4 370 listeningLed = ON;
cabledev 0:452a42421de4 371 wait(0.2);
cabledev 0:452a42421de4 372 listeningLed = OFF;
cabledev 0:452a42421de4 373 wait(0.2);
cabledev 0:452a42421de4 374 }
cabledev 0:452a42421de4 375 #endif
cabledev 0:452a42421de4 376 }
cabledev 0:452a42421de4 377 }