This demonstrates the process of communicating through ethernet to a SEL-2431 Voltage Regulator Control Panel using SEL Fast Message. Basic device commands and data cna be requested and displayed over a connected serial port. This is a basic version and full testing and documentation has yet to be completed.

Dependencies:   BufferedSerial analogAverager voltageRegulator netStatReg analogMinMax CounterMinMax

Committer:
masterkookus
Date:
Mon Sep 23 12:29:52 2019 +0000
Revision:
7:be13a9037d41
Parent:
6:9f97716eae76
Child:
8:fa2a2c3a16ce
Defines for operation in header, basic functionality complete

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masterkookus 0:03ab7f7596e2 1 #if !FEATURE_LWIP
masterkookus 0:03ab7f7596e2 2 #error [NOT_SUPPORTED] LWIP not supported for this target
masterkookus 0:03ab7f7596e2 3 #endif
masterkookus 0:03ab7f7596e2 4
masterkookus 0:03ab7f7596e2 5 #include "mbed.h"
masterkookus 0:03ab7f7596e2 6 #include "EthernetInterface.h"
masterkookus 0:03ab7f7596e2 7 #include "TCPServer.h"
masterkookus 0:03ab7f7596e2 8 #include "TCPSocket.h"
masterkookus 0:03ab7f7596e2 9 #include "BufferedSerial.h"
masterkookus 3:ac1f2af8bd0f 10 #include "nettime.h"
masterkookus 3:ac1f2af8bd0f 11 #include "netdevices.h"
masterkookus 7:be13a9037d41 12 #include "mydevices.h"
masterkookus 5:c656fd08007b 13 #include "platform/CircularBuffer.h"
masterkookus 0:03ab7f7596e2 14
masterkookus 7:be13a9037d41 15 Ticker nettimer;
masterkookus 0:03ab7f7596e2 16
masterkookus 6:9f97716eae76 17 struct netsys net1;
masterkookus 1:a57cbebba3fd 18
masterkookus 1:a57cbebba3fd 19 bool polltick;
masterkookus 0:03ab7f7596e2 20
masterkookus 7:be13a9037d41 21 BufferedSerial sport0(sport0tx, sport0rx, sport0buff, sport0mult); // UART2
masterkookus 0:03ab7f7596e2 22
masterkookus 7:be13a9037d41 23 CircularBuffer<char, 1024> receiveBuffer;
masterkookus 7:be13a9037d41 24 CircularBuffer<char, 64> sendLength;
masterkookus 7:be13a9037d41 25 CircularBuffer<char, 1024> sendBuffer;
masterkookus 5:c656fd08007b 26
masterkookus 0:03ab7f7596e2 27 Thread conchkthread[2];
masterkookus 4:98cdccfb17d6 28 Thread rxtxdatathread[5];
masterkookus 4:98cdccfb17d6 29
masterkookus 4:98cdccfb17d6 30 unsigned int currenttime=0;
masterkookus 0:03ab7f7596e2 31
masterkookus 5:c656fd08007b 32 nsapi_error_t ret;
masterkookus 5:c656fd08007b 33
masterkookus 2:ec972966689e 34 //Provides the deivce poll timing
masterkookus 1:a57cbebba3fd 35 void heartbeat()
masterkookus 1:a57cbebba3fd 36 {
masterkookus 3:ac1f2af8bd0f 37 //polltick=true;
masterkookus 3:ac1f2af8bd0f 38 setTick(true);
masterkookus 1:a57cbebba3fd 39 }
masterkookus 1:a57cbebba3fd 40
masterkookus 4:98cdccfb17d6 41 void confignetdevices(EthernetInterface *eth)
masterkookus 4:98cdccfb17d6 42 {
masterkookus 7:be13a9037d41 43 net1.cltPort=setclientport;
masterkookus 7:be13a9037d41 44 net1.srv_addr=setclientaddress;
masterkookus 6:9f97716eae76 45 net1.cltIsActive=false;
masterkookus 6:9f97716eae76 46 net1.cltCloseConnection=false;
masterkookus 7:be13a9037d41 47 net1.pollTimeout=setpolltimeout;
masterkookus 6:9f97716eae76 48 net1.pollTime=0;
masterkookus 7:be13a9037d41 49 net1.pollInterval=setpollinterval;
masterkookus 7:be13a9037d41 50 net1.pollRequestSent=false;
masterkookus 7:be13a9037d41 51 net1.pollResponseReceived=false;
masterkookus 6:9f97716eae76 52 net1.srv_sock.set_blocking(false);
masterkookus 7:be13a9037d41 53 net1.aliveTimeout=setservertimeout;
masterkookus 5:c656fd08007b 54 net1.srv.set_blocking(false);
masterkookus 7:be13a9037d41 55 net1.pollEnabled=setpollenabled;
masterkookus 7:be13a9037d41 56 net1.pollTimeoutCount=0;
masterkookus 4:98cdccfb17d6 57
masterkookus 4:98cdccfb17d6 58 /* Open the server on ethernet stack */
masterkookus 4:98cdccfb17d6 59 net1.srv.open(eth);
masterkookus 6:9f97716eae76 60 net1.srvIsActive=false;
masterkookus 6:9f97716eae76 61 net1.srvCloseConnection=false;
masterkookus 4:98cdccfb17d6 62
masterkookus 4:98cdccfb17d6 63 /* Bind port 23 to the server */
masterkookus 7:be13a9037d41 64 net1.srvPort=setserverport;
masterkookus 6:9f97716eae76 65 net1.srv.bind(net1.srvPort);
masterkookus 4:98cdccfb17d6 66
masterkookus 4:98cdccfb17d6 67 /* Can handle 5 simultaneous connections */
masterkookus 4:98cdccfb17d6 68 net1.srv.listen(5);
masterkookus 7:be13a9037d41 69 sport0.baud(sport0baud);
masterkookus 4:98cdccfb17d6 70 }
masterkookus 4:98cdccfb17d6 71
masterkookus 7:be13a9037d41 72 void dataprocess(netsys *net2)
masterkookus 0:03ab7f7596e2 73 {
masterkookus 7:be13a9037d41 74 char* tstcmd = "Tock\r\n";
masterkookus 7:be13a9037d41 75 char tstlen;
masterkookus 7:be13a9037d41 76 int txc;
masterkookus 5:c656fd08007b 77 char cchar;
masterkookus 5:c656fd08007b 78 char cbuf[256];
masterkookus 5:c656fd08007b 79 unsigned int clen=0;
masterkookus 5:c656fd08007b 80 unsigned int cbc;
masterkookus 5:c656fd08007b 81 union packer4byte
masterkookus 5:c656fd08007b 82 {
masterkookus 5:c656fd08007b 83 unsigned int cmdint;
masterkookus 5:c656fd08007b 84 char bytes[4];
masterkookus 5:c656fd08007b 85 };
masterkookus 5:c656fd08007b 86 packer4byte cmdpack;
masterkookus 5:c656fd08007b 87
masterkookus 4:98cdccfb17d6 88 while(1)
masterkookus 0:03ab7f7596e2 89 {
masterkookus 7:be13a9037d41 90 while (!receiveBuffer.empty())
masterkookus 5:c656fd08007b 91 {
masterkookus 7:be13a9037d41 92 receiveBuffer.pop(cchar);
masterkookus 5:c656fd08007b 93 clen++;
masterkookus 5:c656fd08007b 94 cbuf[clen]=cchar;
masterkookus 5:c656fd08007b 95 }
masterkookus 7:be13a9037d41 96 if (net2->pollRequestSent)
masterkookus 7:be13a9037d41 97 {
masterkookus 7:be13a9037d41 98 if (clen>0)
masterkookus 7:be13a9037d41 99 {
masterkookus 7:be13a9037d41 100 net2->pollResponseReceived=true;
masterkookus 7:be13a9037d41 101 }
masterkookus 7:be13a9037d41 102 }
masterkookus 5:c656fd08007b 103 if (clen>3)
masterkookus 5:c656fd08007b 104 {
masterkookus 7:be13a9037d41 105 for (cbc=0;cbc<clen-3;cbc++)
masterkookus 5:c656fd08007b 106 {
masterkookus 7:be13a9037d41 107 printf("Length: %d\r\n",clen);
masterkookus 7:be13a9037d41 108 printf("%c%c%c%c\r\n",cbuf[cbc],cbuf[cbc+1],cbuf[cbc+2],cbuf[cbc+3]);
masterkookus 5:c656fd08007b 109 cmdpack.bytes[3]=cbuf[cbc];
masterkookus 5:c656fd08007b 110 cmdpack.bytes[2]=cbuf[cbc+1];
masterkookus 5:c656fd08007b 111 cmdpack.bytes[1]=cbuf[cbc+2];
masterkookus 5:c656fd08007b 112 cmdpack.bytes[0]=cbuf[cbc+3];
masterkookus 5:c656fd08007b 113 if (cmdpack.cmdint==0x5469636b)
masterkookus 5:c656fd08007b 114 {
masterkookus 7:be13a9037d41 115 tstlen=strlen(tstcmd);
masterkookus 7:be13a9037d41 116 sendLength.push(tstlen);
masterkookus 7:be13a9037d41 117 for (txc=0;txc<6;txc++)
masterkookus 7:be13a9037d41 118 {
masterkookus 7:be13a9037d41 119 sendBuffer.push(tstcmd[txc]);
masterkookus 7:be13a9037d41 120 }
masterkookus 7:be13a9037d41 121 if (net2->sendState==0)
masterkookus 7:be13a9037d41 122 {
masterkookus 7:be13a9037d41 123 net2->sendState=1;
masterkookus 7:be13a9037d41 124 }
masterkookus 5:c656fd08007b 125 clen=0;
masterkookus 5:c656fd08007b 126 break;
masterkookus 5:c656fd08007b 127 }
masterkookus 5:c656fd08007b 128 }
masterkookus 7:be13a9037d41 129 if (clen>0)
masterkookus 7:be13a9037d41 130 {
masterkookus 7:be13a9037d41 131 printf("Command not Received\r\n");
masterkookus 7:be13a9037d41 132 clen=0;
masterkookus 7:be13a9037d41 133 }
masterkookus 7:be13a9037d41 134 }
masterkookus 7:be13a9037d41 135 }
masterkookus 7:be13a9037d41 136 }
masterkookus 7:be13a9037d41 137
masterkookus 7:be13a9037d41 138 //Ethernet to Ethernet Send Data
masterkookus 7:be13a9037d41 139 void datantx(netsys *net2)
masterkookus 7:be13a9037d41 140 {
masterkookus 7:be13a9037d41 141 while(1)
masterkookus 7:be13a9037d41 142 {
masterkookus 6:9f97716eae76 143 if (net2->cltIsActive)
masterkookus 0:03ab7f7596e2 144 {
masterkookus 7:be13a9037d41 145 while (net2->sendState==3)
masterkookus 5:c656fd08007b 146 {
masterkookus 5:c656fd08007b 147 if (net2->connectRetry == true)
masterkookus 5:c656fd08007b 148 {
masterkookus 5:c656fd08007b 149 wait_ms(100);
masterkookus 5:c656fd08007b 150 }
masterkookus 6:9f97716eae76 151 ret = net2->srv_sock.connect(net2->srv_addr,net2->cltPort);
masterkookus 5:c656fd08007b 152 if (ret==0)
masterkookus 5:c656fd08007b 153 {
masterkookus 5:c656fd08007b 154 net2->connectRetry = false;
masterkookus 5:c656fd08007b 155 printf("Connected %d\r\n",ret);
masterkookus 6:9f97716eae76 156 net2->cltCloseConnection=true;
masterkookus 7:be13a9037d41 157 net2->sendState=4;
masterkookus 5:c656fd08007b 158 }
masterkookus 5:c656fd08007b 159 else
masterkookus 5:c656fd08007b 160 {
masterkookus 5:c656fd08007b 161 net2->connectRetry = true;
masterkookus 7:be13a9037d41 162 net2->sendRetryCount++;
masterkookus 5:c656fd08007b 163 printf("Connect Attempt Failed, Code: %d\r\n",ret);
masterkookus 7:be13a9037d41 164 if (net2->sendRetryCount>3)
masterkookus 5:c656fd08007b 165 {
masterkookus 5:c656fd08007b 166 printf("Communication Failed, Closing\r\n");
masterkookus 5:c656fd08007b 167 net2->connectRetry = false;
masterkookus 7:be13a9037d41 168 net2->sendRetryCount = 0;
masterkookus 5:c656fd08007b 169 net2->messageFailCount++;
masterkookus 6:9f97716eae76 170 net2->cltCloseConnection=true;
masterkookus 7:be13a9037d41 171 net2->sendState=0;
masterkookus 7:be13a9037d41 172 net2->sendTime=0;
masterkookus 5:c656fd08007b 173 }
masterkookus 5:c656fd08007b 174 }
masterkookus 5:c656fd08007b 175 }
masterkookus 7:be13a9037d41 176 while (net2->sendState==4)
masterkookus 5:c656fd08007b 177 {
masterkookus 5:c656fd08007b 178 if (net2->sendRetry == true)
masterkookus 5:c656fd08007b 179 {
masterkookus 5:c656fd08007b 180 wait_ms(100);
masterkookus 5:c656fd08007b 181 }
masterkookus 7:be13a9037d41 182 ret = net2->srv_sock.send(net2->sendString,net2->sendLen);
masterkookus 5:c656fd08007b 183 if (ret>=0)
masterkookus 5:c656fd08007b 184 {
masterkookus 5:c656fd08007b 185 printf("Send Result %d\r\n",ret);
masterkookus 5:c656fd08007b 186 net2->sendRetry = false;
masterkookus 5:c656fd08007b 187 net2->txMessageCount++;
masterkookus 6:9f97716eae76 188 net2->cltCloseConnection=true;
masterkookus 7:be13a9037d41 189 net2->sendState=0;
masterkookus 7:be13a9037d41 190 net2->sendTime=0;
masterkookus 5:c656fd08007b 191 }
masterkookus 5:c656fd08007b 192 else
masterkookus 5:c656fd08007b 193 {
masterkookus 5:c656fd08007b 194 net2->sendRetry = true;
masterkookus 7:be13a9037d41 195 net2->sendRetryCount++;
masterkookus 5:c656fd08007b 196 printf("Send Attempt Failed, Code: %d\r\n",ret);
masterkookus 7:be13a9037d41 197 if (net2->sendRetryCount>3)
masterkookus 5:c656fd08007b 198 {
masterkookus 5:c656fd08007b 199 printf("Communication Failed, Closing\r\n");
masterkookus 5:c656fd08007b 200 net2->sendRetry = false;
masterkookus 7:be13a9037d41 201 net2->sendRetryCount = 0;
masterkookus 5:c656fd08007b 202 net2->messageFailCount++;
masterkookus 6:9f97716eae76 203 net2->cltCloseConnection=true;
masterkookus 7:be13a9037d41 204 net2->sendState=0;
masterkookus 7:be13a9037d41 205 net2->sendTime=0;
masterkookus 5:c656fd08007b 206 }
masterkookus 5:c656fd08007b 207 }
masterkookus 5:c656fd08007b 208 }
masterkookus 6:9f97716eae76 209 if (net2->cltCloseConnection==true)
masterkookus 5:c656fd08007b 210 {
masterkookus 6:9f97716eae76 211 net2->srv_sock.close();
masterkookus 6:9f97716eae76 212 net2->cltIsActive=false;
masterkookus 5:c656fd08007b 213 }
masterkookus 0:03ab7f7596e2 214 }
masterkookus 0:03ab7f7596e2 215 }
masterkookus 0:03ab7f7596e2 216 }
masterkookus 0:03ab7f7596e2 217
masterkookus 7:be13a9037d41 218 //Ethernet receive data and send to aux devices (serial, etc...)
masterkookus 0:03ab7f7596e2 219 void datanrx(netsys *net2)
masterkookus 0:03ab7f7596e2 220 {
masterkookus 0:03ab7f7596e2 221 char rxbuf[256];
masterkookus 0:03ab7f7596e2 222 int rxlen=0;
masterkookus 5:c656fd08007b 223 int rxc;
masterkookus 0:03ab7f7596e2 224 while (1)
masterkookus 0:03ab7f7596e2 225 {
masterkookus 6:9f97716eae76 226 while (net2->srvIsActive)
masterkookus 0:03ab7f7596e2 227 {
masterkookus 0:03ab7f7596e2 228 rxlen=net2->clt_sock.recv(rxbuf, sizeof(rxbuf));
masterkookus 4:98cdccfb17d6 229 if (rxlen>0)
masterkookus 4:98cdccfb17d6 230 {
masterkookus 4:98cdccfb17d6 231 net2->aliveTime=0;
masterkookus 4:98cdccfb17d6 232 sport0.write(rxbuf,rxlen);
masterkookus 5:c656fd08007b 233 for (rxc = 0;rxc<rxlen;rxc++)
masterkookus 5:c656fd08007b 234 {
masterkookus 7:be13a9037d41 235 receiveBuffer.push(rxbuf[rxc]);
masterkookus 5:c656fd08007b 236 }
masterkookus 5:c656fd08007b 237 net2->rxMessageCount++;
masterkookus 4:98cdccfb17d6 238 }
masterkookus 0:03ab7f7596e2 239 }
masterkookus 0:03ab7f7596e2 240 }
masterkookus 0:03ab7f7596e2 241 }
masterkookus 0:03ab7f7596e2 242
masterkookus 7:be13a9037d41 243 //Serial device to server connected client
masterkookus 0:03ab7f7596e2 244 void datasrx(netsys *net2)
masterkookus 0:03ab7f7596e2 245 {
masterkookus 0:03ab7f7596e2 246 char rxbuf[256];
masterkookus 0:03ab7f7596e2 247 int rxlen=0;
masterkookus 0:03ab7f7596e2 248 int rxc;
masterkookus 0:03ab7f7596e2 249 while (1)
masterkookus 0:03ab7f7596e2 250 {
masterkookus 6:9f97716eae76 251 while (net2->srvIsActive)
masterkookus 0:03ab7f7596e2 252 {
masterkookus 0:03ab7f7596e2 253 rxlen=sport0.readable();
masterkookus 0:03ab7f7596e2 254 if (rxlen>0)
masterkookus 0:03ab7f7596e2 255 {
masterkookus 0:03ab7f7596e2 256 for (rxc = 0;rxc<rxlen;rxc++)
masterkookus 0:03ab7f7596e2 257 {
masterkookus 0:03ab7f7596e2 258 rxbuf[rxc] = sport0.getc();
masterkookus 0:03ab7f7596e2 259 }
masterkookus 4:98cdccfb17d6 260 net2->aliveTime=0;
masterkookus 0:03ab7f7596e2 261 net2->clt_sock.send(rxbuf, rxlen);
masterkookus 6:9f97716eae76 262 net2->txMessageCount++;
masterkookus 0:03ab7f7596e2 263 }
masterkookus 0:03ab7f7596e2 264 }
masterkookus 0:03ab7f7596e2 265 }
masterkookus 0:03ab7f7596e2 266 }
masterkookus 0:03ab7f7596e2 267
masterkookus 2:ec972966689e 268 //Checks for a Ethernet to Serial connection
masterkookus 0:03ab7f7596e2 269 void conchk(netsys *net2)
masterkookus 0:03ab7f7596e2 270 {
masterkookus 0:03ab7f7596e2 271 TCPServer *server=&(net2->srv);
masterkookus 0:03ab7f7596e2 272 TCPSocket *client_socket=&(net2->clt_sock);
masterkookus 0:03ab7f7596e2 273 SocketAddress *client_address=&(net2->clt_addr);
masterkookus 0:03ab7f7596e2 274
masterkookus 0:03ab7f7596e2 275 while(1)
masterkookus 0:03ab7f7596e2 276 {
masterkookus 5:c656fd08007b 277 while (server->accept(client_socket, client_address) < 0)
masterkookus 0:03ab7f7596e2 278 {
masterkookus 5:c656fd08007b 279 //printf("Connection Failed.\r\n");
masterkookus 0:03ab7f7596e2 280 }
masterkookus 6:9f97716eae76 281 printf("Server Port %d\r\n", net2->srvPort);
masterkookus 5:c656fd08007b 282 printf("accept %s:%d\r\n", client_address->get_ip_address(), client_address->get_port());
masterkookus 5:c656fd08007b 283 net2->aliveTime=0;
masterkookus 6:9f97716eae76 284 net2->srvIsActive=true;
masterkookus 0:03ab7f7596e2 285 }
masterkookus 0:03ab7f7596e2 286 }
masterkookus 0:03ab7f7596e2 287
masterkookus 0:03ab7f7596e2 288 int main()
masterkookus 0:03ab7f7596e2 289 {
masterkookus 0:03ab7f7596e2 290 EthernetInterface eth;
masterkookus 7:be13a9037d41 291 eth.set_network(setseveraddress,setsevermask,setsevergateway); //Use these parameters for static IP
masterkookus 0:03ab7f7596e2 292 eth.connect();
masterkookus 0:03ab7f7596e2 293
masterkookus 0:03ab7f7596e2 294 printf("The target IP address is '%s'\r\n", eth.get_ip_address());
masterkookus 4:98cdccfb17d6 295 confignetdevices(&eth);
masterkookus 2:ec972966689e 296 /* Setup Ethernet to Serial Connection Thread */
masterkookus 0:03ab7f7596e2 297 conchkthread[0].start(callback(conchk,&net1));
masterkookus 2:ec972966689e 298 /* Setup polltick Ticker */
masterkookus 7:be13a9037d41 299 nettimer.attach_us(heartbeat,10000);
masterkookus 2:ec972966689e 300 /* Setup Ethernet to Serial transmit data Thread */
masterkookus 0:03ab7f7596e2 301 rxtxdatathread[0].start(callback(datanrx,&net1));
masterkookus 2:ec972966689e 302 /* Setup Ethernet to Serial receive data Thread */
masterkookus 0:03ab7f7596e2 303 rxtxdatathread[1].start(callback(datasrx,&net1));
masterkookus 7:be13a9037d41 304 rxtxdatathread[2].start(callback(datantx,&net1));
masterkookus 7:be13a9037d41 305 rxtxdatathread[3].start(callback(dataprocess,&net1));
masterkookus 7:be13a9037d41 306
masterkookus 7:be13a9037d41 307 char* tstcmd = "Tick\r\n";
masterkookus 7:be13a9037d41 308 char tstlen;
masterkookus 7:be13a9037d41 309 unsigned int txc;
masterkookus 7:be13a9037d41 310 unsigned int sxc;
masterkookus 3:ac1f2af8bd0f 311
masterkookus 0:03ab7f7596e2 312 while (true) {
masterkookus 3:ac1f2af8bd0f 313
masterkookus 3:ac1f2af8bd0f 314 polltick=getTick();
masterkookus 3:ac1f2af8bd0f 315
masterkookus 3:ac1f2af8bd0f 316 if (polltick)
masterkookus 3:ac1f2af8bd0f 317 {
masterkookus 3:ac1f2af8bd0f 318 setTick(false);
masterkookus 3:ac1f2af8bd0f 319 incTime();
masterkookus 3:ac1f2af8bd0f 320 currenttime=getTime();
masterkookus 6:9f97716eae76 321 net1.pollTime++;
masterkookus 7:be13a9037d41 322 net1.sendTime++;
masterkookus 6:9f97716eae76 323 if (net1.srvIsActive)
masterkookus 0:03ab7f7596e2 324 {
masterkookus 4:98cdccfb17d6 325 net1.aliveTime++;
masterkookus 6:9f97716eae76 326 if (net1.aliveTime>net1.aliveTimeout)
masterkookus 4:98cdccfb17d6 327 {
masterkookus 4:98cdccfb17d6 328 printf("Closed\r\n");
masterkookus 4:98cdccfb17d6 329 net1.clt_sock.close();
masterkookus 6:9f97716eae76 330 net1.srvIsActive=false;
masterkookus 6:9f97716eae76 331 net1.srvCloseConnection=false;
masterkookus 4:98cdccfb17d6 332 }
masterkookus 4:98cdccfb17d6 333
masterkookus 0:03ab7f7596e2 334 }
masterkookus 7:be13a9037d41 335 if (net1.pollEnabled)
masterkookus 4:98cdccfb17d6 336 {
masterkookus 7:be13a9037d41 337 if (net1.pollTime >= net1.pollInterval)
masterkookus 7:be13a9037d41 338 {
masterkookus 7:be13a9037d41 339 tstlen=strlen(tstcmd);
masterkookus 7:be13a9037d41 340 sendLength.push(tstlen);
masterkookus 7:be13a9037d41 341 for (txc=0;txc<tstlen;txc++)
masterkookus 7:be13a9037d41 342 {
masterkookus 7:be13a9037d41 343 sendBuffer.push(tstcmd[txc]);
masterkookus 7:be13a9037d41 344 }
masterkookus 7:be13a9037d41 345 if (net1.sendState==0)
masterkookus 7:be13a9037d41 346 {
masterkookus 7:be13a9037d41 347 net1.sendState=1;
masterkookus 7:be13a9037d41 348 net1.pollRequestSent=true;
masterkookus 7:be13a9037d41 349 }
masterkookus 7:be13a9037d41 350 net1.pollTime=0;
masterkookus 7:be13a9037d41 351 }
masterkookus 7:be13a9037d41 352 if (net1.pollTime >= net1.pollTimeout)
masterkookus 7:be13a9037d41 353 {
masterkookus 7:be13a9037d41 354 if (net1.pollRequestSent)
masterkookus 7:be13a9037d41 355 {
masterkookus 7:be13a9037d41 356 if (net1.pollResponseReceived==false)
masterkookus 7:be13a9037d41 357 {
masterkookus 7:be13a9037d41 358 net1.pollTimeoutCount++;
masterkookus 7:be13a9037d41 359 net1.pollRequestSent=false;
masterkookus 7:be13a9037d41 360 }
masterkookus 7:be13a9037d41 361 }
masterkookus 7:be13a9037d41 362 }
masterkookus 7:be13a9037d41 363 }
masterkookus 7:be13a9037d41 364 if (net1.sendTime == 10)
masterkookus 7:be13a9037d41 365 {
masterkookus 7:be13a9037d41 366 switch (net1.sendState)
masterkookus 5:c656fd08007b 367 {
masterkookus 5:c656fd08007b 368 case 1:
masterkookus 7:be13a9037d41 369 if (!sendLength.empty())
masterkookus 7:be13a9037d41 370 {
masterkookus 7:be13a9037d41 371 sendLength.pop(net1.sendLen);
masterkookus 7:be13a9037d41 372 for (sxc=0;sxc<net1.sendLen;sxc++)
masterkookus 7:be13a9037d41 373 {
masterkookus 7:be13a9037d41 374 sendBuffer.pop(net1.sendString[sxc]);
masterkookus 7:be13a9037d41 375 }
masterkookus 7:be13a9037d41 376 }
masterkookus 7:be13a9037d41 377 else
masterkookus 7:be13a9037d41 378 {
masterkookus 7:be13a9037d41 379 net1.sendState=0;
masterkookus 7:be13a9037d41 380 }
masterkookus 6:9f97716eae76 381 ret=net1.srv_sock.open(&eth);
masterkookus 5:c656fd08007b 382 printf("Socket%d\r\n",ret);
masterkookus 5:c656fd08007b 383 if (ret < 0)
masterkookus 5:c656fd08007b 384 {
masterkookus 7:be13a9037d41 385 net1.attachRetry = true;
masterkookus 7:be13a9037d41 386 net1.sendRetryCount=0;
masterkookus 7:be13a9037d41 387 net1.sendState=2;
masterkookus 7:be13a9037d41 388 net1.sendTime=0;
masterkookus 5:c656fd08007b 389 break;
masterkookus 5:c656fd08007b 390 }
masterkookus 7:be13a9037d41 391 net1.sendState=3;
masterkookus 7:be13a9037d41 392 net1.sendTime=11;
masterkookus 6:9f97716eae76 393 net1.cltIsActive=true;
masterkookus 5:c656fd08007b 394 break;
masterkookus 5:c656fd08007b 395 case 2:
masterkookus 6:9f97716eae76 396 ret=net1.srv_sock.open(&eth);
masterkookus 5:c656fd08007b 397 printf("Socket%d\r\n",ret);
masterkookus 5:c656fd08007b 398 if (ret < 0)
masterkookus 5:c656fd08007b 399 {
masterkookus 7:be13a9037d41 400 net1.attachRetry = true;
masterkookus 7:be13a9037d41 401 net1.sendRetryCount++;
masterkookus 7:be13a9037d41 402 net1.sendTime=0;
masterkookus 5:c656fd08007b 403 printf("Attach Attempt Failed, Code: %d\r\n",ret);
masterkookus 7:be13a9037d41 404 if (net1.sendRetryCount>3)
masterkookus 5:c656fd08007b 405 {
masterkookus 5:c656fd08007b 406 printf("Communication Failed, Closing\r\n");
masterkookus 7:be13a9037d41 407 net1.attachRetry = false;
masterkookus 7:be13a9037d41 408 net1.sendRetryCount = 0;
masterkookus 6:9f97716eae76 409 net1.messageFailCount++;
masterkookus 7:be13a9037d41 410 net1.sendState=0;
masterkookus 7:be13a9037d41 411 net1.sendTime=0;
masterkookus 5:c656fd08007b 412 }
masterkookus 5:c656fd08007b 413 break;
masterkookus 5:c656fd08007b 414 }
masterkookus 7:be13a9037d41 415 net1.sendState=0;
masterkookus 7:be13a9037d41 416 net1.attachRetry = false;
masterkookus 7:be13a9037d41 417 net1.sendTime=11;
masterkookus 6:9f97716eae76 418 net1.cltIsActive=true;
masterkookus 5:c656fd08007b 419 break;
masterkookus 5:c656fd08007b 420 default:
masterkookus 7:be13a9037d41 421 net1.sendTime=0;
masterkookus 7:be13a9037d41 422 if (!sendLength.empty())
masterkookus 7:be13a9037d41 423 {
masterkookus 7:be13a9037d41 424 net1.sendState=1;
masterkookus 7:be13a9037d41 425 }
masterkookus 5:c656fd08007b 426 break;
masterkookus 5:c656fd08007b 427 }
masterkookus 4:98cdccfb17d6 428 }
masterkookus 1:a57cbebba3fd 429 }
masterkookus 0:03ab7f7596e2 430 }
masterkookus 0:03ab7f7596e2 431 }