void SpillOutputStream::updatePage()
{
    if (!cbBuffer) {
        return;
    }
    assert(cbBuffer > getBytesAvailable());
    uint cbConsumed = cbBuffer - getBytesAvailable();
    pSegOutputStream->consumeWritePointer(cbConsumed);
    cbBuffer -= cbConsumed;
    pSegOutputStream->updatePage();
}
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
/**
  * @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();
}