Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

SnCommWin.cpp

Committer:
uci1
Date:
2012-08-03
Revision:
6:6f002d202f59
Parent:
3:24c5f0f50bf1
Child:
8:95a325df1f6b

File content as of revision 6:6f002d202f59:

#include "SnCommWin.h"

#include "SnHeaderFrame.h"
#include "SnConfigFrame.h"
#include "SnSDUtils.h"

SnCommWin::ECommWinResult SnCommWin::SendData(SnConfigFrame& conf,
                                              SnEventFrame& evt,
                                              char* const genBuf,
                                              const uint32_t bsize,
                                              const uint32_t timeout) {
    printf("SnCommWin::SendData\r\n");
    ECommWinResult res = kUndefFail;
    const uint32_t to = (conf.IsObeyingTimeout()) ? timeout : kSecsPerYear;
    if (conf.IsSendingAllFiles()) {
        printf("sending all files\r\n");
        res = SnSDUtils::SendAllFiles(this, conf.IsDeletingFiles(), to, 
                                      genBuf, bsize, conf, evt);
    } else {
        if (conf.GetCommSendData()==0) {
            printf("no data to send\r\n");
            res = kOkNoMsg;
        } else {
            const uint32_t nev = (conf.GetCommSendData()>0) ?
                                  conf.GetCommSendData() // send N events
                                  : 0u; // send all events in last file
            res = SendData(SnSDUtils::GetCurFile(), SnSDUtils::GetCurFileName(),
                           conf, evt, genBuf, bsize, nev, to);
            printf("after send data cur file, res=%d\r\n",(int)res);
        }
    }
    return res;
}

SnCommWin::ECommWinResult SnCommWin::SendData(FILE* inf, const char* infn,
                                              const SnConfigFrame& curConf,
                                              SnEventFrame& evt,
                                              char* const genBuf,
                                              const uint32_t bsize,
                                              const uint32_t nevts,
                                              const uint32_t timeout_clock,
                                              const uint32_t firstEvt) {
    // nevts==0 ==> send all events
    
    printf("SnCommWin::SendData cur file\r\n");
    ECommWinResult res = kUndefFail;
    if (inf!=0) {
        // send the file name
        res = SendFilename(infn, genBuf, timeout_clock);
        if (res>kAllFails) {
            if (genBuf!=0) {
                // send the contents
                res = SendFileContents(inf, curConf, evt, genBuf,
                                       nevts, timeout_clock, firstEvt);
                if (res>SnCommWin::kAllFails) {
                    // wait for handshake
                    uint8_t hndshk=0;
                    res = WaitHandshake(timeout_clock, genBuf, bsize, hndshk);
                    if (    (res==SnCommWin::kOkWithMsg) // got handshake
                         && (nevts==0)                   // sent whole file
                         &&  curConf.IsDeletingFiles()   // want to delete
                         //&& (strcmp(infn, SnSDUtils::GetCurFileName()!=0) // not current file (TODO?)
                         && (hndshk==SnHeaderFrame::kHnShOkComplCode)) {  // whole file received
                        // delete it
                        SnSDUtilsWhisperer::DeleteFile(inf, infn);
                    }
                }
            }
        }
    }
    return res;
}