void SpillOutputStream::updatePage() { if (!cbBuffer) { return; } assert(cbBuffer > getBytesAvailable()); uint cbConsumed = cbBuffer - getBytesAvailable(); pSegOutputStream->consumeWritePointer(cbConsumed); cbBuffer -= cbConsumed; pSegOutputStream->updatePage(); }
bool SBBTA252::getStatus() { // Declare variables. int bytes_to_discard = 0; // Get the number of bytes available on the serial port. getBytesAvailable(); // Make sure we don't read too many bytes and overrun the buffer. if (bytes_available >= SERIAL_MAX_DATA) { bytes_available = SERIAL_MAX_DATA - 1; } if (bytes_available + strlen(buf_recv) >= SERIAL_MAX_DATA) { bytes_to_discard = bytes_available + strlen(buf_recv) - SERIAL_MAX_DATA - 1; memmove(buf_recv, &buf_recv[bytes_to_discard], bytes_to_discard); } // Read data off the serial port. if (bytes_available > 0) { recv(); // Look for entire message. if (findMsg()) { // Parse the status. return parseStatus(); } } return false; } // end getStatus()
/** * @brief Scope command parse function * @param None * @retval Command ACK or ERR */ command parseGeneratorCmd(void){ command cmdIn=CMD_ERR; uint8_t error=0; uint16_t index; uint8_t length,chan; uint16_t watchDog=5000; ///////do{ cmdIn = giveNextCmd(); switch(cmdIn){ case CMD_GEN_DATA://set data cmdIn = giveNextCmd(); //index=(cmdIn&0xff00)>>8 | (cmdIn&0x00ff)<<8; index=SWAP_UINT16(cmdIn); length=cmdIn>>16; chan=cmdIn>>24; while(watchDog>0 && getBytesAvailable()<length*2+1){ watchDog--; osDelay(1); } if(getBytesAvailable()<length*2+1){ error=GEN_MISSING_DATA; while(commBufferReadByte(&chan)==0); }else{ error=genSetData(index,length*2,chan); if (error){ while(commBufferReadByte(&chan)==0); }else{ genDataOKSendNext(); } } break; case CMD_GEN_SAMPLING_FREQ: //set sampling freq cmdIn = giveNextCmd(); if(cmdIn != CMD_END && cmdIn != CMD_ERR){ error=genSetFrequency(((cmdIn)&0xffffff00)>>8,(uint8_t)(cmdIn)); }else{
void SpillOutputStream::closeImpl() { if (scratchPageLock.isLocked()) { // discard contents scratchPageLock.unlock(); } else { assert(pSegOutputStream); assert(!scratchPageLock.isLocked()); // flush long log pSegOutputStream->consumeWritePointer(cbBuffer - getBytesAvailable()); cbBuffer = 0; pSegOutputStream.reset(); } }
void SpillOutputStream::flushBuffer(uint cbRequested) { if (scratchPageLock.isLocked()) { assert(!pSegOutputStream); // grow from short to long spill(); } else { assert(pSegOutputStream); assert(!scratchPageLock.isLocked()); // already long assert(cbBuffer >= getBytesAvailable()); pSegOutputStream->consumeWritePointer(cbBuffer - getBytesAvailable()); } assert(pSegOutputStream); if (cbRequested) { PBuffer pBuffer = pSegOutputStream->getWritePointer(cbRequested,&cbBuffer); setBuffer(pBuffer, cbBuffer); } else { pSegOutputStream->hardPageBreak(); cbBuffer = 0; } }
void SpillOutputStream::spill() { DeviceMode devMode = DeviceMode::createNew; // TODO: make this a parameter; for now it's always direct since this is // only used for log streams devMode.direct = true; SharedSegment pLongLogSegment = pSegmentFactory->newTempDeviceSegment( scratchPageLock.getCacheAccessor()->getCache(), devMode, spillFileName); SegmentAccessor segmentAccessor(pLongLogSegment, pCacheAccessor); pSegOutputStream = SegOutputStream::newSegOutputStream(segmentAccessor); pSegOutputStream->setWriteLatency(writeLatency); pSegOutputStream->writeBytes( scratchPageLock.getPage().getReadableData(), cbBuffer - getBytesAvailable()); scratchPageLock.unlock(); }