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 Oct 07 19:40:36 2019 +0000
Revision:
14:3d437acb92e3
Parent:
13:4d533751f951
Child:
15:9ad261a27883
Added Report Timer and cleaned up some code

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 12:4bb088c27838 5 #define netmsgdebug
masterkookus 11:d40adc7de05f 6
masterkookus 0:03ab7f7596e2 7 #include "mbed.h"
masterkookus 0:03ab7f7596e2 8 #include "EthernetInterface.h"
masterkookus 0:03ab7f7596e2 9 #include "TCPServer.h"
masterkookus 0:03ab7f7596e2 10 #include "TCPSocket.h"
masterkookus 0:03ab7f7596e2 11 #include "BufferedSerial.h"
masterkookus 3:ac1f2af8bd0f 12 #include "nettime.h"
masterkookus 3:ac1f2af8bd0f 13 #include "netdevices.h"
masterkookus 7:be13a9037d41 14 #include "mydevices.h"
masterkookus 5:c656fd08007b 15 #include "platform/CircularBuffer.h"
masterkookus 8:fa2a2c3a16ce 16 #include "netDataTypes.h"
masterkookus 8:fa2a2c3a16ce 17 #include "selMsg.h"
masterkookus 8:fa2a2c3a16ce 18 #include "string.h"
masterkookus 11:d40adc7de05f 19 #include "analogAverager.h"
masterkookus 11:d40adc7de05f 20 #include "analogMinMax.h"
masterkookus 11:d40adc7de05f 21 #include "counterMinMax.h"
masterkookus 12:4bb088c27838 22 #include "netStatusReg.h"
masterkookus 0:03ab7f7596e2 23
masterkookus 7:be13a9037d41 24 Ticker nettimer;
masterkookus 14:3d437acb92e3 25 Timer netDevTimers[7];
masterkookus 0:03ab7f7596e2 26
masterkookus 6:9f97716eae76 27 struct netsys net1;
masterkookus 13:4d533751f951 28 netDevStatus netStat(0,0,0,0,0);
masterkookus 13:4d533751f951 29
masterkookus 8:fa2a2c3a16ce 30 struct vRegData vReg1;
masterkookus 1:a57cbebba3fd 31
masterkookus 12:4bb088c27838 32 analogAverager voltageAvg(120,true,true,0.9,true,true,1.1);
masterkookus 12:4bb088c27838 33 analogMinMax voltageMinMax(120,true,true,0.9,true,true,1.1);
masterkookus 11:d40adc7de05f 34 counterMinMax tapMinMax(0,true,-16,true,16);
masterkookus 11:d40adc7de05f 35
masterkookus 1:a57cbebba3fd 36 bool polltick;
masterkookus 12:4bb088c27838 37 bool sendtick;
masterkookus 0:03ab7f7596e2 38
masterkookus 7:be13a9037d41 39 BufferedSerial sport0(sport0tx, sport0rx, sport0buff, sport0mult); // UART2
masterkookus 0:03ab7f7596e2 40
masterkookus 12:4bb088c27838 41 CircularBuffer<char, 256> receiveBuffer;
masterkookus 7:be13a9037d41 42 CircularBuffer<char, 64> sendLength;
masterkookus 12:4bb088c27838 43 CircularBuffer<char, 256> sendBuffer;
masterkookus 5:c656fd08007b 44
masterkookus 0:03ab7f7596e2 45 Thread conchkthread[2];
masterkookus 4:98cdccfb17d6 46 Thread rxtxdatathread[5];
masterkookus 4:98cdccfb17d6 47
masterkookus 4:98cdccfb17d6 48 unsigned int currenttime=0;
masterkookus 0:03ab7f7596e2 49
masterkookus 5:c656fd08007b 50 nsapi_error_t ret;
masterkookus 5:c656fd08007b 51
masterkookus 2:ec972966689e 52 //Provides the deivce poll timing
masterkookus 1:a57cbebba3fd 53 void heartbeat()
masterkookus 1:a57cbebba3fd 54 {
masterkookus 12:4bb088c27838 55 setPollTick(true);
masterkookus 12:4bb088c27838 56
masterkookus 12:4bb088c27838 57 //Provide Sender Task Tick
masterkookus 12:4bb088c27838 58 if (netDevTimers[0].read_ms()>=100)
masterkookus 12:4bb088c27838 59 {
masterkookus 12:4bb088c27838 60 netDevTimers[0].reset();
masterkookus 12:4bb088c27838 61 setSendTick(true);
masterkookus 12:4bb088c27838 62 }
masterkookus 12:4bb088c27838 63 //Server Unsolicited Message Timeout
masterkookus 13:4d533751f951 64 if (netStat.bit_isset(srvIsActive))
masterkookus 12:4bb088c27838 65 {
masterkookus 12:4bb088c27838 66 if (netDevTimers[1].read_ms()>=setservertimeout)
masterkookus 12:4bb088c27838 67 {
masterkookus 13:4d533751f951 68 //netDevTimers[1].reset();
masterkookus 12:4bb088c27838 69 netDevTimers[1].stop();
masterkookus 13:4d533751f951 70 netStat.bit_toset(srvCloseConnection);
masterkookus 12:4bb088c27838 71 }
masterkookus 12:4bb088c27838 72 }
masterkookus 13:4d533751f951 73 if (netStat.bit_isset(devOnline))
masterkookus 12:4bb088c27838 74 {
masterkookus 14:3d437acb92e3 75 #ifdef fastDemandEnabled
masterkookus 12:4bb088c27838 76 //Fast Demand Poll Tick
masterkookus 13:4d533751f951 77 if (netStat.bit_isset(fmdEnabled))
masterkookus 12:4bb088c27838 78 {
masterkookus 12:4bb088c27838 79 if (netDevTimers[2].read_ms()>=setfmdemandpollinterval)
masterkookus 12:4bb088c27838 80 {
masterkookus 12:4bb088c27838 81 netDevTimers[2].reset();
masterkookus 13:4d533751f951 82 netStat.bit_toset(fmdPollReq);
masterkookus 12:4bb088c27838 83 }
masterkookus 12:4bb088c27838 84 }
masterkookus 12:4bb088c27838 85 else
masterkookus 12:4bb088c27838 86 {
masterkookus 12:4bb088c27838 87 if (netDevTimers[2].read_ms()>=8000)
masterkookus 12:4bb088c27838 88 {
masterkookus 12:4bb088c27838 89 netDevTimers[2].reset();
masterkookus 13:4d533751f951 90 netStat.bit_toset(fmdPollReq);
masterkookus 12:4bb088c27838 91 }
masterkookus 12:4bb088c27838 92 }
masterkookus 14:3d437acb92e3 93 #endif
masterkookus 14:3d437acb92e3 94 #ifdef fastMeterEnabled
masterkookus 12:4bb088c27838 95 //Fast Meter Poll Tick
masterkookus 13:4d533751f951 96 if (netStat.bit_isset(fmEnabled))
masterkookus 12:4bb088c27838 97 {
masterkookus 12:4bb088c27838 98 if (netDevTimers[3].read_ms()>=setfmpollinterval)
masterkookus 12:4bb088c27838 99 {
masterkookus 12:4bb088c27838 100 netDevTimers[3].reset();
masterkookus 13:4d533751f951 101 netStat.bit_toset(fmPollReq);
masterkookus 12:4bb088c27838 102 }
masterkookus 12:4bb088c27838 103 }
masterkookus 12:4bb088c27838 104 else
masterkookus 12:4bb088c27838 105 {
masterkookus 12:4bb088c27838 106 if (netDevTimers[3].read_ms()>=8000)
masterkookus 12:4bb088c27838 107 {
masterkookus 12:4bb088c27838 108 netDevTimers[3].reset();
masterkookus 13:4d533751f951 109 netStat.bit_toset(fmPollReq);
masterkookus 12:4bb088c27838 110 }
masterkookus 12:4bb088c27838 111 }
masterkookus 14:3d437acb92e3 112 #endif
masterkookus 12:4bb088c27838 113 }
masterkookus 12:4bb088c27838 114 else
masterkookus 12:4bb088c27838 115 {
masterkookus 12:4bb088c27838 116 if (netDevTimers[3].read_ms()>=8000)
masterkookus 12:4bb088c27838 117 {
masterkookus 12:4bb088c27838 118 netDevTimers[3].reset();
masterkookus 13:4d533751f951 119 netStat.bit_toset(fmCfgReq);
masterkookus 12:4bb088c27838 120 }
masterkookus 12:4bb088c27838 121 }
masterkookus 12:4bb088c27838 122 //Fast Message Timeout
masterkookus 13:4d533751f951 123 if ((netStat.bit_isset(fmPollInProg)) || (netStat.bit_isset(fmdPollInProg)))
masterkookus 12:4bb088c27838 124 {
masterkookus 12:4bb088c27838 125 if (netDevTimers[4].read_ms()>=2000)
masterkookus 12:4bb088c27838 126 {
masterkookus 13:4d533751f951 127 //netDevTimers[4].reset();
masterkookus 12:4bb088c27838 128 netDevTimers[4].stop();
masterkookus 13:4d533751f951 129 netStat.bit_toset(fmCloseConnection);
masterkookus 13:4d533751f951 130 netStat.bit_toset(fmTimeout);
masterkookus 12:4bb088c27838 131 }
masterkookus 12:4bb088c27838 132 }
masterkookus 12:4bb088c27838 133 //Serial Message Timeout
masterkookus 13:4d533751f951 134 if (netStat.bit_isset(serPollInProg))
masterkookus 12:4bb088c27838 135 {
masterkookus 12:4bb088c27838 136 if (netDevTimers[5].read_ms()>=net1.serMsgTimeout)
masterkookus 12:4bb088c27838 137 {
masterkookus 13:4d533751f951 138 //netDevTimers[5].reset();
masterkookus 12:4bb088c27838 139 netDevTimers[5].stop();
masterkookus 13:4d533751f951 140 netStat.bit_toset(serCloseConnection);
masterkookus 13:4d533751f951 141 netStat.bit_toset(serTimeout);
masterkookus 12:4bb088c27838 142 }
masterkookus 12:4bb088c27838 143 }
masterkookus 14:3d437acb92e3 144 if (netDevTimers[6].read_ms()>=setDataRecInterval)
masterkookus 14:3d437acb92e3 145 {
masterkookus 14:3d437acb92e3 146 netStat.bit_toset(recDataFile);
masterkookus 14:3d437acb92e3 147 //netDevTimers[6].reset();
masterkookus 14:3d437acb92e3 148 netDevTimers[6].stop();
masterkookus 14:3d437acb92e3 149 }
masterkookus 1:a57cbebba3fd 150 }
masterkookus 1:a57cbebba3fd 151
masterkookus 13:4d533751f951 152 void sendCmd(char cmdNum)
masterkookus 13:4d533751f951 153 {
masterkookus 13:4d533751f951 154 sendLength.push(2);
masterkookus 13:4d533751f951 155 for (char txc=0;txc<2;txc++)
masterkookus 13:4d533751f951 156 {
masterkookus 13:4d533751f951 157 sendBuffer.push(fmCmd[cmdNum][txc]);
masterkookus 13:4d533751f951 158 }
masterkookus 13:4d533751f951 159 }
masterkookus 13:4d533751f951 160
masterkookus 13:4d533751f951 161 void sendSerCmd(char cmdNum, char cmdCnt)
masterkookus 13:4d533751f951 162 {
masterkookus 13:4d533751f951 163 sendLength.push(cmdCnt);
masterkookus 13:4d533751f951 164 for (char txc=0;txc<cmdCnt;txc++)
masterkookus 13:4d533751f951 165 {
masterkookus 13:4d533751f951 166 sendBuffer.push(serCmd[cmdNum][txc]);
masterkookus 13:4d533751f951 167 }
masterkookus 13:4d533751f951 168 }
masterkookus 13:4d533751f951 169
masterkookus 4:98cdccfb17d6 170 void confignetdevices(EthernetInterface *eth)
masterkookus 4:98cdccfb17d6 171 {
masterkookus 13:4d533751f951 172 #ifdef sportEnabled
masterkookus 13:4d533751f951 173 netStat.bit_toset(serEnabled);
masterkookus 13:4d533751f951 174 #endif
masterkookus 13:4d533751f951 175
masterkookus 13:4d533751f951 176 #ifdef setPollEnabled
masterkookus 13:4d533751f951 177 netStat.bit_toset(pollEnabled);
masterkookus 13:4d533751f951 178 #endif
masterkookus 13:4d533751f951 179
masterkookus 7:be13a9037d41 180 net1.cltPort=setclientport;
masterkookus 7:be13a9037d41 181 net1.srv_addr=setclientaddress;
masterkookus 8:fa2a2c3a16ce 182 net1.srv_sock.set_blocking(true);
masterkookus 8:fa2a2c3a16ce 183 net1.srv_sock.set_timeout(100);
masterkookus 8:fa2a2c3a16ce 184 net1.srv.set_blocking(true);
masterkookus 8:fa2a2c3a16ce 185 net1.srv.set_timeout(100);
masterkookus 8:fa2a2c3a16ce 186 net1.sendRetryCount=0;
masterkookus 8:fa2a2c3a16ce 187 net1.messageFailCount=0;
masterkookus 13:4d533751f951 188 net1.serMsgTimeout=2000;
masterkookus 4:98cdccfb17d6 189
masterkookus 4:98cdccfb17d6 190 /* Open the server on ethernet stack */
masterkookus 4:98cdccfb17d6 191 net1.srv.open(eth);
masterkookus 4:98cdccfb17d6 192
masterkookus 4:98cdccfb17d6 193 /* Bind port 23 to the server */
masterkookus 7:be13a9037d41 194 net1.srvPort=setserverport;
masterkookus 6:9f97716eae76 195 net1.srv.bind(net1.srvPort);
masterkookus 4:98cdccfb17d6 196
masterkookus 4:98cdccfb17d6 197 /* Can handle 5 simultaneous connections */
masterkookus 4:98cdccfb17d6 198 net1.srv.listen(5);
masterkookus 7:be13a9037d41 199 sport0.baud(sport0baud);
masterkookus 4:98cdccfb17d6 200 }
masterkookus 4:98cdccfb17d6 201
masterkookus 7:be13a9037d41 202 void dataprocess(netsys *net2)
masterkookus 0:03ab7f7596e2 203 {
masterkookus 7:be13a9037d41 204 int txc;
masterkookus 5:c656fd08007b 205 char cchar;
masterkookus 5:c656fd08007b 206 char cbuf[256];
masterkookus 5:c656fd08007b 207 unsigned int clen=0;
masterkookus 5:c656fd08007b 208 unsigned int cbc;
masterkookus 8:fa2a2c3a16ce 209 float4byte valpack;
masterkookus 8:fa2a2c3a16ce 210 short2byte timepack;
masterkookus 5:c656fd08007b 211
masterkookus 4:98cdccfb17d6 212 while(1)
masterkookus 0:03ab7f7596e2 213 {
masterkookus 10:9da863a6da3e 214 //Check to see if the Receive Buffer has anything
masterkookus 7:be13a9037d41 215 while (!receiveBuffer.empty())
masterkookus 5:c656fd08007b 216 {
masterkookus 7:be13a9037d41 217 receiveBuffer.pop(cchar);
masterkookus 8:fa2a2c3a16ce 218 cbuf[clen]=cchar;
masterkookus 5:c656fd08007b 219 clen++;
masterkookus 5:c656fd08007b 220 }
masterkookus 10:9da863a6da3e 221 //If a Poll Request has been made and data has been received set flag
masterkookus 13:4d533751f951 222 netStat.bit_sis(serPollInProg,serRespRx);
masterkookus 13:4d533751f951 223 netStat.bit_sis(fmPollInProg,fmRespRx);
masterkookus 13:4d533751f951 224 netStat.bit_sis(fmdPollInProg,fmdRespRx);
masterkookus 12:4bb088c27838 225
masterkookus 10:9da863a6da3e 226 //Check to see if bulk data and reports being sent from device due to serial command
masterkookus 13:4d533751f951 227 if (netStat.bit_isset(serMsgRx))
masterkookus 9:d6e7981dfc89 228 {
masterkookus 13:4d533751f951 229 if (clen>0)
masterkookus 13:4d533751f951 230 {
masterkookus 13:4d533751f951 231 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 232 netDevTimers[5].reset();
masterkookus 13:4d533751f951 233 clen=0;
masterkookus 13:4d533751f951 234 }
masterkookus 9:d6e7981dfc89 235 }
masterkookus 10:9da863a6da3e 236 //Check to see if at least 4 characters have been received
masterkookus 9:d6e7981dfc89 237 else if (clen>3)
masterkookus 5:c656fd08007b 238 {
masterkookus 10:9da863a6da3e 239 //Cycle through received data to search for a command
masterkookus 7:be13a9037d41 240 for (cbc=0;cbc<clen-3;cbc++)
masterkookus 5:c656fd08007b 241 {
masterkookus 12:4bb088c27838 242 //Check fast message configuration
masterkookus 12:4bb088c27838 243 if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xC0))
masterkookus 12:4bb088c27838 244 {
masterkookus 12:4bb088c27838 245 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 246 netStat.bit_toclear(fmCfgInProg);
masterkookus 13:4d533751f951 247 netStat.bit_toset(devOnline);
masterkookus 12:4bb088c27838 248 clen=0;
masterkookus 12:4bb088c27838 249 break;
masterkookus 12:4bb088c27838 250 }
masterkookus 10:9da863a6da3e 251 //Check to see if serial commands are currently being received
masterkookus 13:4d533751f951 252 if (netStat.bit_isset(serPollInProg))
masterkookus 8:fa2a2c3a16ce 253 {
masterkookus 10:9da863a6da3e 254 //If relay acknowledges max metering command set bulk receive flag
masterkookus 9:d6e7981dfc89 255 if ((cbuf[cbc]==0x4d) && (cbuf[cbc+1]==0x45) && (cbuf[cbc+2]==0x54))
masterkookus 8:fa2a2c3a16ce 256 {
masterkookus 9:d6e7981dfc89 257 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 258 netStat.bit_toset(serMsgRx);
masterkookus 13:4d533751f951 259 netDevTimers[5].reset();
masterkookus 13:4d533751f951 260 netStat.setDevMsgReq(0);
masterkookus 9:d6e7981dfc89 261 clen=0;
masterkookus 9:d6e7981dfc89 262 break;
masterkookus 8:fa2a2c3a16ce 263 }
masterkookus 10:9da863a6da3e 264 //If relay acknowledges tap report command set bulk receive flag
masterkookus 9:d6e7981dfc89 265 if ((cbuf[cbc]==0x54) && (cbuf[cbc+1]==0x41) && (cbuf[cbc+2]==0x50))
masterkookus 9:d6e7981dfc89 266 {
masterkookus 9:d6e7981dfc89 267 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 268 netStat.bit_toset(serMsgRx);
masterkookus 13:4d533751f951 269 netDevTimers[5].reset();
masterkookus 13:4d533751f951 270 netStat.setDevMsgReq(0);
masterkookus 9:d6e7981dfc89 271 clen=0;
masterkookus 9:d6e7981dfc89 272 break;
masterkookus 9:d6e7981dfc89 273 }
masterkookus 10:9da863a6da3e 274 //If relay acknowledges level 1 login attempt increment command pointer to password
masterkookus 9:d6e7981dfc89 275 if ((cbuf[cbc]==0x41) && (cbuf[cbc+1]==0x43) && (cbuf[cbc+2]==0x43))
masterkookus 7:be13a9037d41 276 {
masterkookus 8:fa2a2c3a16ce 277 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 278 netStat.setDevMsgPos(1);
masterkookus 13:4d533751f951 279 sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]);
masterkookus 13:4d533751f951 280 netDevTimers[5].reset();
masterkookus 9:d6e7981dfc89 281 clen=0;
masterkookus 9:d6e7981dfc89 282 break;
masterkookus 9:d6e7981dfc89 283 }
masterkookus 10:9da863a6da3e 284 //If relay sends mask character increment command pointer to send \r\n
masterkookus 9:d6e7981dfc89 285 if (cbuf[cbc]==0x2a)
masterkookus 9:d6e7981dfc89 286 {
masterkookus 9:d6e7981dfc89 287 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 288 netStat.setDevMsgPos(2);
masterkookus 13:4d533751f951 289 sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]);
masterkookus 13:4d533751f951 290 netDevTimers[5].reset();
masterkookus 9:d6e7981dfc89 291 clen=0;
masterkookus 9:d6e7981dfc89 292 break;
masterkookus 9:d6e7981dfc89 293 }
masterkookus 10:9da863a6da3e 294 //If relay is in access level 1 or higher increment command pointer to desired command
masterkookus 9:d6e7981dfc89 295 if ((cbuf[cbc]==0x3d) && (cbuf[cbc+1]==0x3e))
masterkookus 9:d6e7981dfc89 296 {
masterkookus 9:d6e7981dfc89 297 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 298 netStat.setDevMsgPos(4);
masterkookus 13:4d533751f951 299 sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]);
masterkookus 13:4d533751f951 300 netDevTimers[5].reset();
masterkookus 9:d6e7981dfc89 301 clen=0;
masterkookus 9:d6e7981dfc89 302 break;
masterkookus 9:d6e7981dfc89 303 }
masterkookus 10:9da863a6da3e 304 //If relay in level 0 increment command pointer to access command
masterkookus 9:d6e7981dfc89 305 if ((cbuf[cbc]==0x3d))
masterkookus 9:d6e7981dfc89 306 {
masterkookus 9:d6e7981dfc89 307 sport0.write(cbuf,clen);
masterkookus 13:4d533751f951 308 netStat.setDevMsgPos(0);
masterkookus 13:4d533751f951 309 sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]);
masterkookus 13:4d533751f951 310 netDevTimers[5].reset();
masterkookus 8:fa2a2c3a16ce 311 clen=0;
masterkookus 8:fa2a2c3a16ce 312 break;
masterkookus 7:be13a9037d41 313 }
masterkookus 9:d6e7981dfc89 314 }
masterkookus 12:4bb088c27838 315 //if (bit_isset(net2->statusReg,fmPollInProg))
masterkookus 13:4d533751f951 316 if (netStat.bit_isset(fmPollInProg))
masterkookus 9:d6e7981dfc89 317 {
masterkookus 12:4bb088c27838 318 //Check fast meter configuration
masterkookus 12:4bb088c27838 319 if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xC1))
masterkookus 7:be13a9037d41 320 {
masterkookus 12:4bb088c27838 321 sport0.write(cbuf,clen);
masterkookus 12:4bb088c27838 322 //Ensure Analog channl count is correct
masterkookus 12:4bb088c27838 323 if (vReg1.numAnalog!=cbuf[6])
masterkookus 12:4bb088c27838 324 {
masterkookus 12:4bb088c27838 325 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 326 printf("\r\nFast Meter Analog Channel Count Off\r\n");
masterkookus 12:4bb088c27838 327 #endif
masterkookus 12:4bb088c27838 328 clen=0;
masterkookus 12:4bb088c27838 329 break;
masterkookus 12:4bb088c27838 330 }
masterkookus 12:4bb088c27838 331 //Ensure Digital register count is correct
masterkookus 12:4bb088c27838 332 if (vReg1.numDigital!=cbuf[8])
masterkookus 12:4bb088c27838 333 {
masterkookus 12:4bb088c27838 334 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 335 printf("\r\nFast Meter Digital Channel Count Off\r\n");
masterkookus 12:4bb088c27838 336 #endif
masterkookus 12:4bb088c27838 337 clen=0;
masterkookus 12:4bb088c27838 338 break;
masterkookus 12:4bb088c27838 339 }
masterkookus 12:4bb088c27838 340 char anum=16;
masterkookus 12:4bb088c27838 341 char nxc;
masterkookus 12:4bb088c27838 342 //Verify Analog names are correct
masterkookus 12:4bb088c27838 343 for (txc=0;txc<vReg1.numAnalog;txc++)
masterkookus 12:4bb088c27838 344 {
masterkookus 12:4bb088c27838 345 for (nxc=0;nxc<6;nxc++)
masterkookus 12:4bb088c27838 346 {
masterkookus 12:4bb088c27838 347 if(vReg1.analogs[txc].analogName[nxc]!=cbuf[anum+nxc])
masterkookus 12:4bb088c27838 348 {
masterkookus 12:4bb088c27838 349 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 350 printf("\r\nPoint %d Failed\r\n",txc);
masterkookus 12:4bb088c27838 351 #endif
masterkookus 12:4bb088c27838 352 break;
masterkookus 12:4bb088c27838 353 }
masterkookus 12:4bb088c27838 354 }
masterkookus 12:4bb088c27838 355 anum = anum + 11;
masterkookus 12:4bb088c27838 356 }
masterkookus 12:4bb088c27838 357 //bit_toset(net2->statusReg,fmEnabled);
masterkookus 13:4d533751f951 358 netStat.bit_toset(fmEnabled);
masterkookus 8:fa2a2c3a16ce 359 clen=0;
masterkookus 8:fa2a2c3a16ce 360 break;
masterkookus 7:be13a9037d41 361 }
masterkookus 12:4bb088c27838 362 //Receive data
masterkookus 12:4bb088c27838 363 if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xD1))
masterkookus 9:d6e7981dfc89 364 {
masterkookus 12:4bb088c27838 365 char anum=cbc+4;
masterkookus 12:4bb088c27838 366 for (txc=0;txc<vReg1.numAnalog;txc++)
masterkookus 12:4bb088c27838 367 {
masterkookus 12:4bb088c27838 368 valpack.bytes[3]=cbuf[anum];
masterkookus 12:4bb088c27838 369 valpack.bytes[2]=cbuf[anum+1];
masterkookus 12:4bb088c27838 370 valpack.bytes[1]=cbuf[anum+2];
masterkookus 12:4bb088c27838 371 valpack.bytes[0]=cbuf[anum+3];
masterkookus 12:4bb088c27838 372 vReg1.analogs[txc].analog1Value = valpack.cmdflt;
masterkookus 12:4bb088c27838 373 anum = anum + 4;
masterkookus 12:4bb088c27838 374 printf("%.2f\r\n",vReg1.analogs[txc].analog1Value);
masterkookus 12:4bb088c27838 375 }
masterkookus 12:4bb088c27838 376 vReg1.timeStamp.month=cbuf[anum];
masterkookus 12:4bb088c27838 377 vReg1.timeStamp.day=cbuf[anum+1];
masterkookus 12:4bb088c27838 378 vReg1.timeStamp.year=cbuf[anum+2];
masterkookus 12:4bb088c27838 379 vReg1.timeStamp.hour=cbuf[anum+3];
masterkookus 12:4bb088c27838 380 vReg1.timeStamp.min=cbuf[anum+4];
masterkookus 12:4bb088c27838 381 vReg1.timeStamp.sec=cbuf[anum+5];
masterkookus 12:4bb088c27838 382 timepack.bytes[1]=cbuf[anum+6];
masterkookus 12:4bb088c27838 383 timepack.bytes[0]=cbuf[anum+7];
masterkookus 12:4bb088c27838 384 vReg1.timeStamp.msec=timepack.cmdshort;
masterkookus 12:4bb088c27838 385 printf("%d/%d/%d %d:%d:%d.%d\r\n",vReg1.timeStamp.month,vReg1.timeStamp.day,vReg1.timeStamp.year,vReg1.timeStamp.hour,vReg1.timeStamp.min,vReg1.timeStamp.sec,vReg1.timeStamp.msec);
masterkookus 12:4bb088c27838 386 anum=anum+8;
masterkookus 12:4bb088c27838 387 for (txc=0;txc<vReg1.numDigital;txc++)
masterkookus 12:4bb088c27838 388 {
masterkookus 12:4bb088c27838 389 vReg1.digitalTargets[txc]=cbuf[anum+txc];
masterkookus 12:4bb088c27838 390 }
masterkookus 12:4bb088c27838 391 clen=0;
masterkookus 12:4bb088c27838 392 tapMinMax.putVal(vReg1.analogs[7].analog1Value);
masterkookus 12:4bb088c27838 393 voltageMinMax.putVal(vReg1.analogs[9].analog1Value);
masterkookus 12:4bb088c27838 394 voltageAvg.putVal(vReg1.analogs[9].analog1Value);
masterkookus 12:4bb088c27838 395 break;
masterkookus 9:d6e7981dfc89 396 }
masterkookus 12:4bb088c27838 397 }
masterkookus 13:4d533751f951 398 if (netStat.bit_isset(fmdPollInProg))
masterkookus 12:4bb088c27838 399 {
masterkookus 12:4bb088c27838 400 //Check fast demand meter configuration
masterkookus 12:4bb088c27838 401 if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xC2))
masterkookus 9:d6e7981dfc89 402 {
masterkookus 12:4bb088c27838 403 sport0.write(cbuf,clen);
masterkookus 12:4bb088c27838 404 //Ensure Analog channl count is correct
masterkookus 12:4bb088c27838 405 if (vReg1.numDemAnalog!=cbuf[6])
masterkookus 12:4bb088c27838 406 {
masterkookus 12:4bb088c27838 407 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 408 printf("\r\nDemand Analog Channel Count Off\r\n");
masterkookus 12:4bb088c27838 409 #endif
masterkookus 12:4bb088c27838 410 clen=0;
masterkookus 12:4bb088c27838 411 break;
masterkookus 12:4bb088c27838 412 }
masterkookus 12:4bb088c27838 413 char anum=18;
masterkookus 12:4bb088c27838 414 char nxc;
masterkookus 12:4bb088c27838 415 //Verify Analog names are correct
masterkookus 12:4bb088c27838 416 for (txc=0;txc<vReg1.numDemAnalog;txc++)
masterkookus 12:4bb088c27838 417 {
masterkookus 12:4bb088c27838 418 for (nxc=0;nxc<6;nxc++)
masterkookus 12:4bb088c27838 419 {
masterkookus 12:4bb088c27838 420 if(vReg1.analogs[txc+vReg1.numAnalog].analogName[nxc]!=cbuf[anum+nxc])
masterkookus 12:4bb088c27838 421 {
masterkookus 12:4bb088c27838 422 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 423 printf("\r\nPoint %d Failed\r\n",txc);
masterkookus 12:4bb088c27838 424 #endif
masterkookus 12:4bb088c27838 425 break;
masterkookus 12:4bb088c27838 426 }
masterkookus 12:4bb088c27838 427 }
masterkookus 12:4bb088c27838 428 anum = anum + 11;
masterkookus 12:4bb088c27838 429 }
masterkookus 13:4d533751f951 430 netStat.bit_toset(fmdEnabled);
masterkookus 10:9da863a6da3e 431 clen=0;
masterkookus 10:9da863a6da3e 432 break;
masterkookus 10:9da863a6da3e 433 }
masterkookus 12:4bb088c27838 434 //Receive demand data
masterkookus 12:4bb088c27838 435 if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xD2))
masterkookus 10:9da863a6da3e 436 {
masterkookus 12:4bb088c27838 437 char anum=cbc+4;
masterkookus 12:4bb088c27838 438 for (txc=0;txc<vReg1.numDemAnalog;txc++)
masterkookus 12:4bb088c27838 439 {
masterkookus 12:4bb088c27838 440 valpack.bytes[3]=cbuf[anum];
masterkookus 12:4bb088c27838 441 valpack.bytes[2]=cbuf[anum+1];
masterkookus 12:4bb088c27838 442 valpack.bytes[1]=cbuf[anum+2];
masterkookus 12:4bb088c27838 443 valpack.bytes[0]=cbuf[anum+3];
masterkookus 12:4bb088c27838 444 vReg1.analogs[txc].analog1Value = valpack.cmdflt;
masterkookus 12:4bb088c27838 445 anum = anum + 4;
masterkookus 12:4bb088c27838 446 //printf("%.2f\r\n",vReg1.analogs[txc].analog1Value);
masterkookus 12:4bb088c27838 447 }
masterkookus 12:4bb088c27838 448 vReg1.demTimeStamp.month=cbuf[anum];
masterkookus 12:4bb088c27838 449 vReg1.demTimeStamp.day=cbuf[anum+1];
masterkookus 12:4bb088c27838 450 vReg1.demTimeStamp.year=cbuf[anum+2];
masterkookus 12:4bb088c27838 451 vReg1.demTimeStamp.hour=cbuf[anum+3];
masterkookus 12:4bb088c27838 452 vReg1.demTimeStamp.min=cbuf[anum+4];
masterkookus 12:4bb088c27838 453 vReg1.demTimeStamp.sec=cbuf[anum+5];
masterkookus 12:4bb088c27838 454 timepack.bytes[1]=cbuf[anum+6];
masterkookus 12:4bb088c27838 455 timepack.bytes[0]=cbuf[anum+7];
masterkookus 12:4bb088c27838 456 vReg1.demTimeStamp.msec=timepack.cmdshort;
masterkookus 12:4bb088c27838 457 sport0.printf("%d/%d/%d %d:%d:%d.%d\r\n",vReg1.demTimeStamp.month,vReg1.demTimeStamp.day,vReg1.demTimeStamp.year,vReg1.demTimeStamp.hour,vReg1.demTimeStamp.min,vReg1.demTimeStamp.sec,vReg1.demTimeStamp.msec);
masterkookus 14:3d437acb92e3 458 /*vReg1.calculated[0].analog1Value=voltageMinMax.getMin();
masterkookus 12:4bb088c27838 459 vReg1.calculated[1].analog1Value=voltageAvg.getAvg();
masterkookus 12:4bb088c27838 460 vReg1.calculated[2].analog1Value=voltageMinMax.getMax();
masterkookus 12:4bb088c27838 461 vReg1.calculated[3].analog1Value=tapMinMax.getMin();
masterkookus 12:4bb088c27838 462 vReg1.calculated[4].analog1Value=tapMinMax.getMax();
masterkookus 12:4bb088c27838 463 sport0.printf("%.2f\r\n",vReg1.calculated[0].analog1Value);
masterkookus 12:4bb088c27838 464 sport0.printf("%.2f\r\n",vReg1.calculated[1].analog1Value);
masterkookus 12:4bb088c27838 465 sport0.printf("%.2f\r\n",vReg1.calculated[2].analog1Value);
masterkookus 12:4bb088c27838 466 sport0.printf("%.2f\r\n",vReg1.calculated[3].analog1Value);
masterkookus 12:4bb088c27838 467 sport0.printf("%.2f\r\n",vReg1.calculated[4].analog1Value);
masterkookus 13:4d533751f951 468
masterkookus 13:4d533751f951 469 voltageAvg.resetNum();
masterkookus 13:4d533751f951 470 voltageMinMax.resetNum();
masterkookus 14:3d437acb92e3 471 tapMinMax.resetNum();*/
masterkookus 12:4bb088c27838 472 break;
masterkookus 10:9da863a6da3e 473 }
masterkookus 10:9da863a6da3e 474 }
masterkookus 5:c656fd08007b 475 }
masterkookus 7:be13a9037d41 476 if (clen>0)
masterkookus 7:be13a9037d41 477 {
masterkookus 11:d40adc7de05f 478 #ifdef netmsgdebug
masterkookus 7:be13a9037d41 479 printf("Command not Received\r\n");
masterkookus 11:d40adc7de05f 480 #endif
masterkookus 7:be13a9037d41 481 clen=0;
masterkookus 7:be13a9037d41 482 }
masterkookus 7:be13a9037d41 483 }
masterkookus 7:be13a9037d41 484 }
masterkookus 7:be13a9037d41 485 }
masterkookus 7:be13a9037d41 486
masterkookus 7:be13a9037d41 487 //Ethernet to Ethernet Send Data
masterkookus 7:be13a9037d41 488 void datantx(netsys *net2)
masterkookus 7:be13a9037d41 489 {
masterkookus 7:be13a9037d41 490 while(1)
masterkookus 7:be13a9037d41 491 {
masterkookus 13:4d533751f951 492 if (netStat.bit_isset(cltIsActive))
masterkookus 0:03ab7f7596e2 493 {
masterkookus 10:9da863a6da3e 494 //Attempt to connect to server
masterkookus 7:be13a9037d41 495 while (net2->sendState==3)
masterkookus 5:c656fd08007b 496 {
masterkookus 10:9da863a6da3e 497 //delay connect attempt if previous attempt unsuccessful
masterkookus 13:4d533751f951 498 if (netStat.bit_isset(connectRetry))
masterkookus 5:c656fd08007b 499 {
masterkookus 5:c656fd08007b 500 wait_ms(100);
masterkookus 5:c656fd08007b 501 }
masterkookus 12:4bb088c27838 502 //Attempt to connect
masterkookus 6:9f97716eae76 503 ret = net2->srv_sock.connect(net2->srv_addr,net2->cltPort);
masterkookus 10:9da863a6da3e 504 //If connect successful proceed to send data
masterkookus 5:c656fd08007b 505 if (ret==0)
masterkookus 5:c656fd08007b 506 {
masterkookus 13:4d533751f951 507 netStat.bit_toclear(connectRetry);
masterkookus 11:d40adc7de05f 508 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 509 printf("Connected %d\r\n",ret);
masterkookus 11:d40adc7de05f 510 #endif
masterkookus 8:fa2a2c3a16ce 511 net2->sendState=4;
masterkookus 8:fa2a2c3a16ce 512 }
masterkookus 10:9da863a6da3e 513 //If connect attempt failed check to see if may already be connected
masterkookus 8:fa2a2c3a16ce 514 else if (ret==-3015)
masterkookus 8:fa2a2c3a16ce 515 {
masterkookus 11:d40adc7de05f 516 #ifdef netmsgdebug
masterkookus 8:fa2a2c3a16ce 517 printf("May already be connected, attempting send.\r\n");
masterkookus 11:d40adc7de05f 518 #endif
masterkookus 13:4d533751f951 519 netStat.bit_toclear(connectRetry);
masterkookus 7:be13a9037d41 520 net2->sendState=4;
masterkookus 5:c656fd08007b 521 }
masterkookus 10:9da863a6da3e 522 //If connect attempt failed on other error attempt reconnect
masterkookus 5:c656fd08007b 523 else
masterkookus 5:c656fd08007b 524 {
masterkookus 13:4d533751f951 525 netStat.bit_toset(connectRetry);
masterkookus 7:be13a9037d41 526 net2->sendRetryCount++;
masterkookus 11:d40adc7de05f 527 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 528 printf("Connect Attempt Failed, Code: %d\r\n",ret);
masterkookus 11:d40adc7de05f 529 #endif
masterkookus 10:9da863a6da3e 530 //If connect attempt failed exceeds 3 then end attempt
masterkookus 7:be13a9037d41 531 if (net2->sendRetryCount>3)
masterkookus 5:c656fd08007b 532 {
masterkookus 11:d40adc7de05f 533 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 534 printf("Communication Failed, Closing\r\n");
masterkookus 11:d40adc7de05f 535 #endif
masterkookus 13:4d533751f951 536 netStat.bit_toclear(connectRetry);
masterkookus 7:be13a9037d41 537 net2->sendRetryCount = 0;
masterkookus 5:c656fd08007b 538 net2->messageFailCount++;
masterkookus 13:4d533751f951 539 netStat.bit_toset(cltCloseConnection);
masterkookus 7:be13a9037d41 540 net2->sendState=0;
masterkookus 5:c656fd08007b 541 }
masterkookus 5:c656fd08007b 542 }
masterkookus 5:c656fd08007b 543 }
masterkookus 10:9da863a6da3e 544 //Attempt to send data
masterkookus 7:be13a9037d41 545 while (net2->sendState==4)
masterkookus 5:c656fd08007b 546 {
masterkookus 10:9da863a6da3e 547 //Delay send data attempt if previous attempt failed
masterkookus 13:4d533751f951 548 if (netStat.bit_isset(sendRetry))
masterkookus 5:c656fd08007b 549 {
masterkookus 5:c656fd08007b 550 wait_ms(100);
masterkookus 5:c656fd08007b 551 }
masterkookus 10:9da863a6da3e 552 //Attempt to send data
masterkookus 7:be13a9037d41 553 ret = net2->srv_sock.send(net2->sendString,net2->sendLen);
masterkookus 10:9da863a6da3e 554 //If data send successful proceed to wait for response
masterkookus 5:c656fd08007b 555 if (ret>=0)
masterkookus 5:c656fd08007b 556 {
masterkookus 11:d40adc7de05f 557 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 558 printf("Send Result %d\r\n",ret);
masterkookus 11:d40adc7de05f 559 #endif
masterkookus 13:4d533751f951 560 netStat.bit_toclear(sendRetry);
masterkookus 13:4d533751f951 561 //net2->txMessageCount++;
masterkookus 13:4d533751f951 562 netStat.incCount(1);
masterkookus 8:fa2a2c3a16ce 563 net2->sendState=5;
masterkookus 5:c656fd08007b 564 }
masterkookus 10:9da863a6da3e 565 //If send attempt failed attempt to re-send data
masterkookus 5:c656fd08007b 566 else
masterkookus 5:c656fd08007b 567 {
masterkookus 13:4d533751f951 568 netStat.bit_toset(sendRetry);
masterkookus 7:be13a9037d41 569 net2->sendRetryCount++;
masterkookus 11:d40adc7de05f 570 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 571 printf("Send Attempt Failed, Code: %d\r\n",ret);
masterkookus 11:d40adc7de05f 572 #endif
masterkookus 10:9da863a6da3e 573 //If send attempt failed exceeds 3 then end attempt
masterkookus 7:be13a9037d41 574 if (net2->sendRetryCount>3)
masterkookus 5:c656fd08007b 575 {
masterkookus 11:d40adc7de05f 576 #ifdef netmsgdebug
masterkookus 5:c656fd08007b 577 printf("Communication Failed, Closing\r\n");
masterkookus 11:d40adc7de05f 578 #endif
masterkookus 13:4d533751f951 579 netStat.bit_toclear(sendRetry);
masterkookus 7:be13a9037d41 580 net2->sendRetryCount = 0;
masterkookus 5:c656fd08007b 581 net2->messageFailCount++;
masterkookus 13:4d533751f951 582 netStat.bit_toset(cltCloseConnection);
masterkookus 7:be13a9037d41 583 net2->sendState=0;
masterkookus 5:c656fd08007b 584 }
masterkookus 5:c656fd08007b 585 }
masterkookus 5:c656fd08007b 586 }
masterkookus 8:fa2a2c3a16ce 587 }
masterkookus 8:fa2a2c3a16ce 588 }
masterkookus 8:fa2a2c3a16ce 589 }
masterkookus 8:fa2a2c3a16ce 590
masterkookus 8:fa2a2c3a16ce 591 //Ethernet receive data and send to aux devices (serial, etc...)
masterkookus 8:fa2a2c3a16ce 592 void datancrx(netsys *net2)
masterkookus 8:fa2a2c3a16ce 593 {
masterkookus 8:fa2a2c3a16ce 594 char rxbuf[256];
masterkookus 8:fa2a2c3a16ce 595 int rxlen=0;
masterkookus 8:fa2a2c3a16ce 596 int rxc;
masterkookus 8:fa2a2c3a16ce 597 while (1)
masterkookus 8:fa2a2c3a16ce 598 {
masterkookus 10:9da863a6da3e 599 //If the client is active check to see if data has been received
masterkookus 13:4d533751f951 600 while (netStat.bit_isset(cltIsActive))
masterkookus 8:fa2a2c3a16ce 601 {
masterkookus 10:9da863a6da3e 602 //Store the length of the received data
masterkookus 8:fa2a2c3a16ce 603 rxlen=net2->srv_sock.recv(rxbuf, sizeof(rxbuf));
masterkookus 10:9da863a6da3e 604 //if there is data then push data into received buffer
masterkookus 8:fa2a2c3a16ce 605 if (rxlen>0)
masterkookus 5:c656fd08007b 606 {
masterkookus 8:fa2a2c3a16ce 607 for (rxc = 0;rxc<rxlen;rxc++)
masterkookus 8:fa2a2c3a16ce 608 {
masterkookus 8:fa2a2c3a16ce 609 receiveBuffer.push(rxbuf[rxc]);
masterkookus 8:fa2a2c3a16ce 610 }
masterkookus 11:d40adc7de05f 611 #ifdef netmsgdebug
masterkookus 8:fa2a2c3a16ce 612 printf("Client Received Data\r\n");
masterkookus 11:d40adc7de05f 613 #endif
masterkookus 10:9da863a6da3e 614 //Increment received message counter
masterkookus 13:4d533751f951 615 netStat.incCount(2);
masterkookus 5:c656fd08007b 616 }
masterkookus 0:03ab7f7596e2 617 }
masterkookus 0:03ab7f7596e2 618 }
masterkookus 0:03ab7f7596e2 619 }
masterkookus 0:03ab7f7596e2 620
masterkookus 7:be13a9037d41 621 //Ethernet receive data and send to aux devices (serial, etc...)
masterkookus 8:fa2a2c3a16ce 622 void datansrx(netsys *net2)
masterkookus 0:03ab7f7596e2 623 {
masterkookus 0:03ab7f7596e2 624 char rxbuf[256];
masterkookus 0:03ab7f7596e2 625 int rxlen=0;
masterkookus 5:c656fd08007b 626 int rxc;
masterkookus 0:03ab7f7596e2 627 while (1)
masterkookus 0:03ab7f7596e2 628 {
masterkookus 10:9da863a6da3e 629 //If the server is active check to see if data has been received
masterkookus 13:4d533751f951 630 while (netStat.bit_isset(srvIsActive))
masterkookus 0:03ab7f7596e2 631 {
masterkookus 10:9da863a6da3e 632 //Store the length of the received data
masterkookus 0:03ab7f7596e2 633 rxlen=net2->clt_sock.recv(rxbuf, sizeof(rxbuf));
masterkookus 10:9da863a6da3e 634 //if there is data then push data into received buffer
masterkookus 4:98cdccfb17d6 635 if (rxlen>0)
masterkookus 4:98cdccfb17d6 636 {
masterkookus 5:c656fd08007b 637 for (rxc = 0;rxc<rxlen;rxc++)
masterkookus 5:c656fd08007b 638 {
masterkookus 7:be13a9037d41 639 receiveBuffer.push(rxbuf[rxc]);
masterkookus 5:c656fd08007b 640 }
masterkookus 11:d40adc7de05f 641 #ifdef netmsgdebug
masterkookus 8:fa2a2c3a16ce 642 printf("Server Received Data\r\n");
masterkookus 11:d40adc7de05f 643 #endif
masterkookus 10:9da863a6da3e 644 //Increment received message counter
masterkookus 13:4d533751f951 645 netStat.incCount(2);
masterkookus 4:98cdccfb17d6 646 }
masterkookus 0:03ab7f7596e2 647 }
masterkookus 0:03ab7f7596e2 648 }
masterkookus 0:03ab7f7596e2 649 }
masterkookus 0:03ab7f7596e2 650
masterkookus 8:fa2a2c3a16ce 651 //Serial device to server
masterkookus 0:03ab7f7596e2 652 void datasrx(netsys *net2)
masterkookus 0:03ab7f7596e2 653 {
masterkookus 0:03ab7f7596e2 654 char rxbuf[256];
masterkookus 0:03ab7f7596e2 655 int rxlen=0;
masterkookus 9:d6e7981dfc89 656 int rxindex=0;
masterkookus 0:03ab7f7596e2 657 int rxc;
masterkookus 9:d6e7981dfc89 658 bool crRx = false;
masterkookus 9:d6e7981dfc89 659 int4byte cmdpack;
masterkookus 9:d6e7981dfc89 660
masterkookus 0:03ab7f7596e2 661 while (1)
masterkookus 0:03ab7f7596e2 662 {
masterkookus 10:9da863a6da3e 663 //Check to see if there is any data received by serial port and store length
masterkookus 9:d6e7981dfc89 664 rxlen=sport0.readable();
masterkookus 10:9da863a6da3e 665 //If data is ready push into receive buffer
masterkookus 9:d6e7981dfc89 666 if (rxlen>0)
masterkookus 0:03ab7f7596e2 667 {
masterkookus 9:d6e7981dfc89 668 for (rxc=0;rxc<rxlen;rxc++)
masterkookus 9:d6e7981dfc89 669 {
masterkookus 9:d6e7981dfc89 670 rxbuf[rxindex+rxc]=sport0.getc();
masterkookus 10:9da863a6da3e 671 //Check to see if a carriage return has been detected
masterkookus 9:d6e7981dfc89 672 if (rxbuf[rxindex+rxc]=='\r')
masterkookus 9:d6e7981dfc89 673 {
masterkookus 9:d6e7981dfc89 674 crRx=true;
masterkookus 9:d6e7981dfc89 675 }
masterkookus 9:d6e7981dfc89 676 }
masterkookus 10:9da863a6da3e 677 //Store the current cursor location in the buffer
masterkookus 9:d6e7981dfc89 678 rxindex=rxindex+rxlen;
masterkookus 10:9da863a6da3e 679 //Set the received length to zero
masterkookus 9:d6e7981dfc89 680 rxlen=0;
masterkookus 10:9da863a6da3e 681 //If there is data in the buffer and a carriage return has been detected search for a command
masterkookus 9:d6e7981dfc89 682 if ((rxindex>2) && (crRx==true))
masterkookus 0:03ab7f7596e2 683 {
masterkookus 10:9da863a6da3e 684 //Set the carriage return flag false
masterkookus 9:d6e7981dfc89 685 crRx=false;
masterkookus 9:d6e7981dfc89 686 for (rxc=0;rxc<=rxindex-3;rxc++)
masterkookus 0:03ab7f7596e2 687 {
masterkookus 9:d6e7981dfc89 688 cmdpack.bytes[3]=rxbuf[rxc];
masterkookus 9:d6e7981dfc89 689 cmdpack.bytes[2]=rxbuf[rxc+1];
masterkookus 9:d6e7981dfc89 690 cmdpack.bytes[1]=rxbuf[rxc+2];
masterkookus 9:d6e7981dfc89 691 cmdpack.bytes[0]=rxbuf[rxc+3];
masterkookus 10:9da863a6da3e 692 //Search for the Min/Max command
masterkookus 9:d6e7981dfc89 693 if (cmdpack.cmdint==0x4d45544d)
masterkookus 9:d6e7981dfc89 694 {
masterkookus 11:d40adc7de05f 695 #ifdef netmsgdebug
masterkookus 9:d6e7981dfc89 696 printf("MIN MAX METERING\r\n");
masterkookus 11:d40adc7de05f 697 #endif
masterkookus 13:4d533751f951 698 netStat.setDevMsgReq(0);
masterkookus 13:4d533751f951 699 netStat.setDevMsgPos(2);
masterkookus 13:4d533751f951 700 netStat.bit_toset(serPollReq);
masterkookus 9:d6e7981dfc89 701 rxindex=0;
masterkookus 9:d6e7981dfc89 702 }
masterkookus 10:9da863a6da3e 703 //Search for the Tap Report Command
masterkookus 9:d6e7981dfc89 704 if (cmdpack.cmdint==0x54415052)
masterkookus 9:d6e7981dfc89 705 {
masterkookus 11:d40adc7de05f 706 #ifdef netmsgdebug
masterkookus 9:d6e7981dfc89 707 printf("TAP REPORT\r\n");
masterkookus 11:d40adc7de05f 708 #endif
masterkookus 13:4d533751f951 709 netStat.setDevMsgReq(1);
masterkookus 13:4d533751f951 710 netStat.setDevMsgPos(2);
masterkookus 13:4d533751f951 711 netStat.bit_toset(serPollReq);
masterkookus 13:4d533751f951 712 rxindex=0;
masterkookus 13:4d533751f951 713 }
masterkookus 13:4d533751f951 714 //Search for the Tap Report Command
masterkookus 13:4d533751f951 715 if (cmdpack.cmdint==0x53544154)
masterkookus 13:4d533751f951 716 {
masterkookus 13:4d533751f951 717 #ifdef netmsgdebug
masterkookus 13:4d533751f951 718 printf("STATS\r\n");
masterkookus 13:4d533751f951 719 #endif
masterkookus 13:4d533751f951 720 sport0.printf("Status %08x\r\n",netStat.getStatus());
masterkookus 9:d6e7981dfc89 721 rxindex=0;
masterkookus 9:d6e7981dfc89 722 }
masterkookus 0:03ab7f7596e2 723 }
masterkookus 10:9da863a6da3e 724 //If no command found set cursor location to zero
masterkookus 9:d6e7981dfc89 725 if (rxindex>0)
masterkookus 9:d6e7981dfc89 726 {
masterkookus 11:d40adc7de05f 727 #ifdef netmsgdebug
masterkookus 9:d6e7981dfc89 728 printf("Serial Command Not Found");
masterkookus 11:d40adc7de05f 729 #endif
masterkookus 9:d6e7981dfc89 730 rxindex=0;
masterkookus 9:d6e7981dfc89 731 }
masterkookus 0:03ab7f7596e2 732 }
masterkookus 0:03ab7f7596e2 733 }
masterkookus 0:03ab7f7596e2 734 }
masterkookus 0:03ab7f7596e2 735 }
masterkookus 0:03ab7f7596e2 736
masterkookus 2:ec972966689e 737 //Checks for a Ethernet to Serial connection
masterkookus 0:03ab7f7596e2 738 void conchk(netsys *net2)
masterkookus 0:03ab7f7596e2 739 {
masterkookus 0:03ab7f7596e2 740 TCPServer *server=&(net2->srv);
masterkookus 0:03ab7f7596e2 741 TCPSocket *client_socket=&(net2->clt_sock);
masterkookus 0:03ab7f7596e2 742 SocketAddress *client_address=&(net2->clt_addr);
masterkookus 0:03ab7f7596e2 743
masterkookus 0:03ab7f7596e2 744 while(1)
masterkookus 0:03ab7f7596e2 745 {
masterkookus 10:9da863a6da3e 746 //Wait for someone to connect
masterkookus 5:c656fd08007b 747 while (server->accept(client_socket, client_address) < 0)
masterkookus 0:03ab7f7596e2 748 {
masterkookus 5:c656fd08007b 749 //printf("Connection Failed.\r\n");
masterkookus 0:03ab7f7596e2 750 }
masterkookus 11:d40adc7de05f 751 #ifdef netmsgdebug
masterkookus 6:9f97716eae76 752 printf("Server Port %d\r\n", net2->srvPort);
masterkookus 5:c656fd08007b 753 printf("accept %s:%d\r\n", client_address->get_ip_address(), client_address->get_port());
masterkookus 11:d40adc7de05f 754 #endif
masterkookus 13:4d533751f951 755 netStat.bit_toset(srvIsActive);
masterkookus 13:4d533751f951 756 netDevTimers[1].reset();
masterkookus 13:4d533751f951 757 netDevTimers[1].start();
masterkookus 12:4bb088c27838 758 }
masterkookus 12:4bb088c27838 759 }
masterkookus 12:4bb088c27838 760
masterkookus 0:03ab7f7596e2 761 int main()
masterkookus 0:03ab7f7596e2 762 {
masterkookus 0:03ab7f7596e2 763 EthernetInterface eth;
masterkookus 7:be13a9037d41 764 eth.set_network(setseveraddress,setsevermask,setsevergateway); //Use these parameters for static IP
masterkookus 0:03ab7f7596e2 765 eth.connect();
masterkookus 0:03ab7f7596e2 766
masterkookus 8:fa2a2c3a16ce 767 initVoltageRegulator(&vReg1);
masterkookus 8:fa2a2c3a16ce 768
masterkookus 11:d40adc7de05f 769 #ifdef netmsgdebug
masterkookus 0:03ab7f7596e2 770 printf("The target IP address is '%s'\r\n", eth.get_ip_address());
masterkookus 11:d40adc7de05f 771 #endif
masterkookus 4:98cdccfb17d6 772 confignetdevices(&eth);
masterkookus 2:ec972966689e 773 /* Setup Ethernet to Serial Connection Thread */
masterkookus 0:03ab7f7596e2 774 conchkthread[0].start(callback(conchk,&net1));
masterkookus 2:ec972966689e 775 /* Setup polltick Ticker */
masterkookus 7:be13a9037d41 776 nettimer.attach_us(heartbeat,10000);
masterkookus 2:ec972966689e 777 /* Setup Ethernet to Serial transmit data Thread */
masterkookus 8:fa2a2c3a16ce 778 rxtxdatathread[0].start(callback(datansrx,&net1));
masterkookus 8:fa2a2c3a16ce 779 rxtxdatathread[1].start(callback(datancrx,&net1));
masterkookus 2:ec972966689e 780 /* Setup Ethernet to Serial receive data Thread */
masterkookus 8:fa2a2c3a16ce 781 rxtxdatathread[2].start(callback(datasrx,&net1));
masterkookus 8:fa2a2c3a16ce 782 rxtxdatathread[3].start(callback(datantx,&net1));
masterkookus 8:fa2a2c3a16ce 783 rxtxdatathread[4].start(callback(dataprocess,&net1));
masterkookus 12:4bb088c27838 784
masterkookus 12:4bb088c27838 785 unsigned int sxc;
masterkookus 7:be13a9037d41 786
masterkookus 12:4bb088c27838 787 netDevTimers[0].start();
masterkookus 12:4bb088c27838 788 netDevTimers[2].start();
masterkookus 12:4bb088c27838 789 netDevTimers[3].start();
masterkookus 14:3d437acb92e3 790 netDevTimers[6].start();
masterkookus 3:ac1f2af8bd0f 791
masterkookus 0:03ab7f7596e2 792 while (true) {
masterkookus 3:ac1f2af8bd0f 793
masterkookus 12:4bb088c27838 794 polltick=getPollTick();
masterkookus 3:ac1f2af8bd0f 795
masterkookus 3:ac1f2af8bd0f 796 if (polltick)
masterkookus 3:ac1f2af8bd0f 797 {
masterkookus 12:4bb088c27838 798 setPollTick(false);
masterkookus 13:4d533751f951 799
masterkookus 13:4d533751f951 800 if (netStat.bit_isset(srvCloseConnection))
masterkookus 0:03ab7f7596e2 801 {
masterkookus 12:4bb088c27838 802 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 803 printf("Closed\r\n");
masterkookus 12:4bb088c27838 804 #endif
masterkookus 12:4bb088c27838 805 net1.clt_sock.close();
masterkookus 13:4d533751f951 806 netStat.bit_toclear(srvIsActive);
masterkookus 13:4d533751f951 807 netStat.bit_toclear(srvCloseConnection);
masterkookus 4:98cdccfb17d6 808
masterkookus 0:03ab7f7596e2 809 }
masterkookus 13:4d533751f951 810 if (netStat.bit_isset(serCloseConnection))
masterkookus 12:4bb088c27838 811 {
masterkookus 12:4bb088c27838 812 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 813 printf("Serial Connection Closed\r\n");
masterkookus 12:4bb088c27838 814 #endif
masterkookus 13:4d533751f951 815 if (netStat.bit_isset(serRespRx))
masterkookus 12:4bb088c27838 816 {
masterkookus 13:4d533751f951 817 netStat.incCount(2);
masterkookus 12:4bb088c27838 818 }
masterkookus 12:4bb088c27838 819 else
masterkookus 12:4bb088c27838 820 {
masterkookus 13:4d533751f951 821 netStat.incCount(4);
masterkookus 12:4bb088c27838 822 }
masterkookus 13:4d533751f951 823 netStat.bit_toclear(serclose);
masterkookus 13:4d533751f951 824 netStat.bit_toset(cltCloseConnection);
masterkookus 12:4bb088c27838 825 }
masterkookus 13:4d533751f951 826 if (netStat.bit_isset(fmCloseConnection))
masterkookus 4:98cdccfb17d6 827 {
masterkookus 12:4bb088c27838 828 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 829 printf("Fast Meter Connection Closed\r\n");
masterkookus 12:4bb088c27838 830 #endif
masterkookus 13:4d533751f951 831 if ((netStat.bit_isset(fmRespRx)) || (netStat.bit_isset(fmdRespRx)))
masterkookus 12:4bb088c27838 832 {
masterkookus 13:4d533751f951 833 netStat.incCount(2);
masterkookus 12:4bb088c27838 834 }
masterkookus 12:4bb088c27838 835 else
masterkookus 7:be13a9037d41 836 {
masterkookus 13:4d533751f951 837 netStat.incCount(3);
masterkookus 12:4bb088c27838 838 }
masterkookus 13:4d533751f951 839 netStat.bit_toclear(fmclose);
masterkookus 13:4d533751f951 840 netStat.bit_toset(cltCloseConnection);
masterkookus 12:4bb088c27838 841 }
masterkookus 13:4d533751f951 842 if (netStat.bit_isset(cltCloseConnection))
masterkookus 12:4bb088c27838 843 {
masterkookus 13:4d533751f951 844 sport0.printf("Status %08x\r\n",netStat.getStatus());
masterkookus 12:4bb088c27838 845 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 846 printf("Connection Closed\r\n");
masterkookus 12:4bb088c27838 847 #endif
masterkookus 12:4bb088c27838 848 net1.srv_sock.close();
masterkookus 12:4bb088c27838 849 net1.sendState=0;
masterkookus 13:4d533751f951 850 netStat.bit_toclear(cltclose);
masterkookus 12:4bb088c27838 851 }
masterkookus 12:4bb088c27838 852
masterkookus 13:4d533751f951 853 if ((netStat.bit_isclear(serPollInProg)) && (netStat.bit_isclear(fmPollInProg)) && (netStat.bit_isclear(fmdPollInProg)) && (netStat.bit_isset(devOnline)))
masterkookus 12:4bb088c27838 854 {
masterkookus 14:3d437acb92e3 855 if (netStat.bit_isset(recDataFile))
masterkookus 14:3d437acb92e3 856 {
masterkookus 14:3d437acb92e3 857 vReg1.calculated[0].analog1Value=voltageMinMax.getMin();
masterkookus 14:3d437acb92e3 858 vReg1.calculated[1].analog1Value=voltageAvg.getAvg();
masterkookus 14:3d437acb92e3 859 vReg1.calculated[2].analog1Value=voltageMinMax.getMax();
masterkookus 14:3d437acb92e3 860 vReg1.calculated[3].analog1Value=tapMinMax.getMin();
masterkookus 14:3d437acb92e3 861 vReg1.calculated[4].analog1Value=tapMinMax.getMax();
masterkookus 14:3d437acb92e3 862 sport0.printf("%.2f\r\n",vReg1.calculated[0].analog1Value);
masterkookus 14:3d437acb92e3 863 sport0.printf("%.2f\r\n",vReg1.calculated[1].analog1Value);
masterkookus 14:3d437acb92e3 864 sport0.printf("%.2f\r\n",vReg1.calculated[2].analog1Value);
masterkookus 14:3d437acb92e3 865 sport0.printf("%.2f\r\n",vReg1.calculated[3].analog1Value);
masterkookus 14:3d437acb92e3 866 sport0.printf("%.2f\r\n",vReg1.calculated[4].analog1Value);
masterkookus 14:3d437acb92e3 867
masterkookus 14:3d437acb92e3 868 voltageAvg.resetNum();
masterkookus 14:3d437acb92e3 869 voltageMinMax.resetNum();
masterkookus 14:3d437acb92e3 870 tapMinMax.resetNum();
masterkookus 14:3d437acb92e3 871
masterkookus 14:3d437acb92e3 872 netStat.bit_toclear(recDataFile);
masterkookus 14:3d437acb92e3 873 netDevTimers[6].reset();
masterkookus 14:3d437acb92e3 874 netDevTimers[6].start();
masterkookus 14:3d437acb92e3 875 }
masterkookus 13:4d533751f951 876 if (netStat.bit_isset(fmdPollReq))
masterkookus 12:4bb088c27838 877 {
masterkookus 13:4d533751f951 878 if (netStat.bit_isset(fmdEnabled))
masterkookus 12:4bb088c27838 879 {
masterkookus 12:4bb088c27838 880 printf("Demand Reading\r\n");
masterkookus 12:4bb088c27838 881 sendCmd(4);
masterkookus 13:4d533751f951 882 netStat.bit_toclear(fmdPollReq);
masterkookus 13:4d533751f951 883 netStat.bit_toset(fmdPollInProg);
masterkookus 12:4bb088c27838 884 }
masterkookus 12:4bb088c27838 885 else
masterkookus 7:be13a9037d41 886 {
masterkookus 12:4bb088c27838 887 printf("Demand Configuration\r\n");
masterkookus 12:4bb088c27838 888 sendCmd(3);
masterkookus 13:4d533751f951 889 netStat.bit_toclear(fmdPollReq);
masterkookus 13:4d533751f951 890 netStat.bit_toset(fmdPollInProg);
masterkookus 12:4bb088c27838 891 }
masterkookus 13:4d533751f951 892 netDevTimers[4].reset();
masterkookus 12:4bb088c27838 893 netDevTimers[4].start();
masterkookus 12:4bb088c27838 894 }
masterkookus 13:4d533751f951 895 else if (netStat.bit_isset(fmPollReq))
masterkookus 12:4bb088c27838 896 {
masterkookus 13:4d533751f951 897 if (netStat.bit_isset(fmEnabled))
masterkookus 12:4bb088c27838 898 {
masterkookus 12:4bb088c27838 899 printf("Meter Reading\r\n");
masterkookus 12:4bb088c27838 900 sendCmd(2);
masterkookus 13:4d533751f951 901 netStat.bit_toclear(fmPollReq);
masterkookus 13:4d533751f951 902 netStat.bit_toset(fmPollInProg);
masterkookus 12:4bb088c27838 903 }
masterkookus 12:4bb088c27838 904 else
masterkookus 12:4bb088c27838 905 {
masterkookus 12:4bb088c27838 906 printf("Meter Configuration\r\n");
masterkookus 12:4bb088c27838 907 sendCmd(1);
masterkookus 13:4d533751f951 908 netStat.bit_toclear(fmPollReq);
masterkookus 13:4d533751f951 909 netStat.bit_toset(fmPollInProg);
masterkookus 12:4bb088c27838 910 }
masterkookus 13:4d533751f951 911 netDevTimers[4].reset();
masterkookus 12:4bb088c27838 912 netDevTimers[4].start();
masterkookus 12:4bb088c27838 913 }
masterkookus 13:4d533751f951 914 else if (netStat.bit_isset(serPollReq))
masterkookus 12:4bb088c27838 915 {
masterkookus 13:4d533751f951 916 if (netStat.bit_isset(serEnabled))
masterkookus 12:4bb088c27838 917 {
masterkookus 13:4d533751f951 918 sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]);
masterkookus 13:4d533751f951 919 netStat.bit_toclear(serPollReq);
masterkookus 13:4d533751f951 920 netStat.bit_toset(serPollInProg);
masterkookus 13:4d533751f951 921 netDevTimers[5].reset();
masterkookus 13:4d533751f951 922 netDevTimers[5].start();
masterkookus 12:4bb088c27838 923 }
masterkookus 13:4d533751f951 924 else
masterkookus 13:4d533751f951 925 {
masterkookus 13:4d533751f951 926 netStat.bit_toclear(serPollReq);
masterkookus 13:4d533751f951 927 }
masterkookus 12:4bb088c27838 928 }
masterkookus 12:4bb088c27838 929 }
masterkookus 13:4d533751f951 930 if ((netStat.bit_isclear(devOnline)) && (netStat.bit_isclear(fmCfgInProg)) && (netStat.bit_isset(fmCfgReq)))
masterkookus 12:4bb088c27838 931 {
masterkookus 12:4bb088c27838 932 sendCmd(0);
masterkookus 13:4d533751f951 933 netStat.bit_toclear(fmCfgReq);
masterkookus 13:4d533751f951 934 netStat.bit_toset(fmCfgInProg);
masterkookus 12:4bb088c27838 935 net1.sendState=1;
masterkookus 12:4bb088c27838 936 }
masterkookus 12:4bb088c27838 937 }
masterkookus 12:4bb088c27838 938
masterkookus 12:4bb088c27838 939
masterkookus 12:4bb088c27838 940 //Begin Sending Data
masterkookus 12:4bb088c27838 941 sendtick=getSendTick();
masterkookus 12:4bb088c27838 942
masterkookus 12:4bb088c27838 943 if (sendtick)
masterkookus 12:4bb088c27838 944 {
masterkookus 12:4bb088c27838 945 setSendTick(false);
masterkookus 13:4d533751f951 946 //sport0.printf("Status %08x\r\n",netStat.getStatus());
masterkookus 12:4bb088c27838 947 switch (net1.sendState)
masterkookus 12:4bb088c27838 948 {
masterkookus 12:4bb088c27838 949 case 0:
masterkookus 12:4bb088c27838 950 if (!sendLength.empty())
masterkookus 12:4bb088c27838 951 {
masterkookus 13:4d533751f951 952 sport0.printf("Status %08x\r\n",netStat.getStatus());
masterkookus 12:4bb088c27838 953 sendLength.pop(net1.sendLen);
masterkookus 12:4bb088c27838 954 for (sxc=0;sxc<net1.sendLen;sxc++)
masterkookus 9:d6e7981dfc89 955 {
masterkookus 12:4bb088c27838 956 sendBuffer.pop(net1.sendString[sxc]);
masterkookus 10:9da863a6da3e 957 }
masterkookus 12:4bb088c27838 958 net1.sendState=1;
masterkookus 10:9da863a6da3e 959 }
masterkookus 12:4bb088c27838 960 break;
masterkookus 12:4bb088c27838 961 case 1:
masterkookus 12:4bb088c27838 962 ret=net1.srv_sock.open(&eth);
masterkookus 12:4bb088c27838 963 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 964 printf("Socket%d\r\n",ret);
masterkookus 12:4bb088c27838 965 #endif
masterkookus 12:4bb088c27838 966 if (ret < 0)
masterkookus 12:4bb088c27838 967 {
masterkookus 12:4bb088c27838 968 if (ret==-3003)
masterkookus 10:9da863a6da3e 969 {
masterkookus 12:4bb088c27838 970 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 971 printf("May already be attached, attempting connect.\r\n");
masterkookus 12:4bb088c27838 972 #endif
masterkookus 10:9da863a6da3e 973 }
masterkookus 10:9da863a6da3e 974 else
masterkookus 10:9da863a6da3e 975 {
masterkookus 13:4d533751f951 976 netStat.bit_toset(attachRetry);
masterkookus 12:4bb088c27838 977 net1.sendRetryCount=0;
masterkookus 12:4bb088c27838 978 net1.sendState=2;
masterkookus 12:4bb088c27838 979 break;
masterkookus 10:9da863a6da3e 980 }
masterkookus 10:9da863a6da3e 981 }
masterkookus 12:4bb088c27838 982 net1.sendState=3;
masterkookus 13:4d533751f951 983 netStat.bit_toset(cltIsActive);
masterkookus 12:4bb088c27838 984 break;
masterkookus 12:4bb088c27838 985 case 2:
masterkookus 12:4bb088c27838 986 ret=net1.srv_sock.open(&eth);
masterkookus 12:4bb088c27838 987 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 988 printf("Socket%d\r\n",ret);
masterkookus 12:4bb088c27838 989 #endif
masterkookus 12:4bb088c27838 990 if (ret < 0)
masterkookus 7:be13a9037d41 991 {
masterkookus 13:4d533751f951 992 netStat.bit_toset(attachRetry);
masterkookus 12:4bb088c27838 993 net1.sendRetryCount++;
masterkookus 12:4bb088c27838 994 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 995 printf("Attach Attempt Failed, Code: %d\r\n",ret);
masterkookus 12:4bb088c27838 996 #endif
masterkookus 12:4bb088c27838 997 if (net1.sendRetryCount>3)
masterkookus 7:be13a9037d41 998 {
masterkookus 11:d40adc7de05f 999 #ifdef netmsgdebug
masterkookus 12:4bb088c27838 1000 printf("Communication Failed, Closing\r\n");
masterkookus 11:d40adc7de05f 1001 #endif
masterkookus 13:4d533751f951 1002 netStat.bit_toclear(attachRetry);
masterkookus 12:4bb088c27838 1003 net1.sendRetryCount = 0;
masterkookus 12:4bb088c27838 1004 net1.messageFailCount++;
masterkookus 7:be13a9037d41 1005 net1.sendState=0;
masterkookus 7:be13a9037d41 1006 }
masterkookus 5:c656fd08007b 1007 break;
masterkookus 12:4bb088c27838 1008 }
masterkookus 12:4bb088c27838 1009 net1.sendState=3;
masterkookus 13:4d533751f951 1010 netStat.bit_toclear(attachRetry);
masterkookus 13:4d533751f951 1011 netStat.bit_toset(cltIsActive);
masterkookus 12:4bb088c27838 1012 break;
masterkookus 12:4bb088c27838 1013 case 5:
masterkookus 12:4bb088c27838 1014 if (!sendLength.empty())
masterkookus 12:4bb088c27838 1015 {
masterkookus 13:4d533751f951 1016 sport0.printf("Status %08x\r\n",netStat.getStatus());
masterkookus 12:4bb088c27838 1017 sendLength.pop(net1.sendLen);
masterkookus 12:4bb088c27838 1018 for (sxc=0;sxc<net1.sendLen;sxc++)
masterkookus 5:c656fd08007b 1019 {
masterkookus 12:4bb088c27838 1020 sendBuffer.pop(net1.sendString[sxc]);
masterkookus 5:c656fd08007b 1021 }
masterkookus 12:4bb088c27838 1022 net1.sendState=4;
masterkookus 12:4bb088c27838 1023 }
masterkookus 12:4bb088c27838 1024 break;
masterkookus 12:4bb088c27838 1025 default:
masterkookus 12:4bb088c27838 1026 break;
masterkookus 4:98cdccfb17d6 1027 }
masterkookus 1:a57cbebba3fd 1028 }
masterkookus 0:03ab7f7596e2 1029 }
masterkookus 0:03ab7f7596e2 1030 }