#include "MCeCoCom.h" #include using namespace std; bool MCeCoCom::InterpreteCmd(TString cmd, TString str) { cout << cmd << ": " << str << endl; return true; } bool MCeCoCom::InterpreteStr(TString str) { const Ssiz_t tok = str.First(' '); const TString cmd = str(0, tok); str.Remove(0, tok+1); if (cmd==(TString)"CC-REPORT" && str.EndsWith("OVER")) { cout << cmd << ": " << str << endl; int y, m, d, h, min, s, ms, len; int n=sscanf(str.Data(), "%02d %04d %02d %02d %02d %02d %02d %03d %n", &fCCStatus, &y, &m, &d, &h, &min, &s, &ms, &len); if (n!=8) { cout << "Communication Problem: Wrong number of arguments" << endl; fComStat = kComProblem; return false; } str.Remove(0, len+1); fT.SetTimer(y, m, d, h, min, s, ms/1000.); // Remove the 29 tokens of the subsystem status // table 12.1 p59 for (int i=0; i<29; i++) str.Remove(0, str.First(' ')+1); // skip solar_irr_Wm2, wind_speed, UPS float zd, az, dec, ra, temp, hum; n=sscanf(str.Data(), "%f %f %f %f %f %*f %*f %f %*f %n", &zd, &az, &dec, &ra, &temp, &hum, &len); if (n!=6) { cout << "Communication Problem: Wrong number of arguments" << endl; fComStat = kComProblem; return false; } str.Remove(0, len); if (str!=(TString)"OVER") { cout << "Communication Problem: Termination (OVER) not found." << endl; fComStat = kComProblem; return false; } cout << "Zd/Az: " << zd << "/" << az << " "; cout << "Ra/Dec: " << ra << "/" << dec << " "; cout << "Temp: " << temp << "'C "; cout << "Hum: " << hum << "%" << endl; fComStat = kCmdReceived; return true; } const bool rc = InterpreteCmd(cmd, str); fComStat = rc ? kCmdReceived : kComProblem; return rc; } bool MCeCoCom::Send(const char *str) { Timer t; t.Now(); const char *msg = Form("%s " "%02d %04d %02d %02d %02d %02d %02d %03d " "%02d %04d %02d %02d %02d %02d %02d %03d " "%s\n", (const char*)fCommand, fStatus, t.Year(), t.Month(), t.Day(), t.H(), t.M(), t.S(), t.MilliSec(), fComStat, fT.Year(), fT.Month(), fT.Day(), fT.H(), fT.M(), fT.S(), fT.MilliSec(), str); const bool rc = MTcpIpIO::Send(msg); fComStat = rc ? kNoCmdReceived : kComProblem; return rc; }