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 12:44:38 2019 +0000
Revision:
12:4bb088c27838
Parent:
11:d40adc7de05f
Child:
13:4d533751f951
Added percent or value option

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