diff options
Diffstat (limited to 'src/MTS_IO_CellularRadio.cpp')
| -rw-r--r-- | src/MTS_IO_CellularRadio.cpp | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index bb7cd40..c4514e6 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -1262,3 +1262,79 @@ const char *CellularRadio::RadioBandMap::getRadioBandName(const std::string &cha      return band;  } + +ICellularRadio::CODE CellularRadio::getFileSize(int fd, size_t& nBytes) { +    CODE rc = FAILURE; + +    do { +        ssize_t dScrollPos; +        dScrollPos = lseek(fd, 0, SEEK_SET); +        if (dScrollPos < 0) { +            printError("Failed to seek to the start of the file: %d", errno); +            break; +        } + +        dScrollPos = lseek(fd, 0, SEEK_END); +        if (dScrollPos < 0) { +            printError("Failed to determine the file size: %d", errno); +            break; +        } + +        nBytes = static_cast<size_t>(dScrollPos); + +        rc = SUCCESS; + +    } while (false); + +    lseek(fd, 0, SEEK_SET); +    return rc; +} + +ICellularRadio::CODE CellularRadio::sizeToChunks(const size_t nBytes, const size_t chunkSize, size_t& nChunks) { +    nChunks = (nBytes + chunkSize - 1) / chunkSize; +    return SUCCESS; +} + +ICellularRadio::CODE CellularRadio::readChunk(int fd, char* pChunk, size_t dChunkSize, size_t& nReadBytes) { +    size_t nUsedBuffer = 0; +    CODE rc = FAILURE; + +    while (true) { + +        if (nUsedBuffer > dChunkSize) { +            printError("Internal pointer error, abort upload: %d", nUsedBuffer); +            rc = ERROR; +            break; +        } + +        if (nUsedBuffer == dChunkSize) { +            // full chunk received +            rc = SUCCESS; +            nReadBytes = dChunkSize; +            break; +        } + +        char* pData = pChunk + nUsedBuffer; +        size_t nFreeBuffer = dChunkSize - nUsedBuffer; + +        ssize_t dReadCount = read(fd, pData, nFreeBuffer); +        if (dReadCount < 0) { +            printError("Failed to read from the source file: %d", errno); +            rc = ERROR; +            break; +        } + +        size_t duReadCount = static_cast<size_t>(dReadCount); +        if (duReadCount == 0) { +            // EOF. Return what was already read +            nReadBytes = nUsedBuffer; +            rc = SUCCESS; +            break; +        } + +        nUsedBuffer += duReadCount; + +    } + +    return rc; +} | 
