bool _i2cAvailableData(InputStream* inputStream) {
    fillI2CInputInternalBuffer(inputStream);
    Buffer* buffer = _i2cMasterInputStreamGetBuffer(inputStream);
    bool result = !isBufferEmpty(buffer);

    return result;
}
Пример #2
0
char bufferGetFirstChar(Buffer* buffer) {
    int isEmpty = isBufferEmpty(buffer);
    if (!isEmpty) {
		char* sPointer = (char*) buffer->s;
		// Shift to the right cell index
		sPointer += buffer->readIndex;
		char result = *sPointer;		

        return result;
    } else {
        // We must log the problem
        writeError(IO_BUFFER_EMPTY);
    }
    return 0;
}
Пример #3
0
int SocketReader::bufferData() {
	if (isBufferEmpty()) {
		const int ReadAmount = ::read(_MySocket, _BufferedData, BufferSize);
		const int ReadError = errno;

		if (ReadAmount > 0U) {
			_BufferIndex = ReadAmount;
			_BufferReadIndex = 0U;
		}

		return ReadAmount;
	} else {
		return 0;
	}
}
Пример #4
0
uint32_t SocketReader::getAvailableData(uint8_t * dataOut,
		const uint32_t MaxOut) throw (int) {

	if (isBufferEmpty()) {
		const int bufferResult = bufferData();

		if (bufferResult < 0 && _BufferIndex == 0U) {
			throw bufferResult;
		} else if (_BufferIndex == 0U) {
			throw 0;
		}
	}

	const uint32_t BytesToTake = MIN(_BufferIndex - _BufferReadIndex, MaxOut);
	memcpy(dataOut, &_BufferedData[_BufferReadIndex], BytesToTake);

	_BufferReadIndex += BytesToTake;

	return BytesToTake;
}
// Arbitrary-size pop function
unsigned int popFromBuffer(buffer_t *b, void *d, unsigned int l){
    unsigned int elementIndex, byteIndex;

    for (elementIndex = 0; elementIndex < l; elementIndex++) {
        for (byteIndex = 0; byteIndex < b->width; byteIndex++) {
            if (!isBufferEmpty(b)){
                
                // Stacks swap bytes of multi-byte elements, so swap back
                // on pop operation
                if (b->behavior.bits.stack){
                    *( (unsigned char*)(d + ((elementIndex + 1) * b->width) - 1 - byteIndex) ) = popByte(b);
                }
                
                // Queue does not swap bytes, so no need to swap on pop
                else {
                    *( (unsigned char*)(d + (elementIndex * b->width) + byteIndex) ) = popByte(b);
                }
            }
            else {
                // Push any bytes back to buffer that form an incomplete element
                // -Ideally this should never run, but added just in case
                unsigned int failedbytes;
                for (failedbytes=byteIndex; failedbytes > 0; failedbytes--){
                    
                    // Careful not to swap bytes here...
                    pushByte(b, *( (unsigned char*)(d + elementIndex * b->width + failedbytes ) ));
                }
                
                // Return a count of failed pop operations
                // -Include partial pops in counter
                return l - elementIndex;
            }
        }
    }
    return 0;
}
Пример #6
0
void printBuffer(OutputStream* outputStream, Buffer* buffer) {
	while(!isBufferEmpty(buffer)) {
        unsigned char c = bufferReadChar(buffer);
        append(outputStream, c);
    }
}
Пример #7
0
/**
 * Definition of a function which is able to return if there is character to read.
 */
BOOL _bufferAvailableData(InputStream* inputStream) {
    Buffer* buffer = (Buffer*) inputStream->object;
    BOOL result = !isBufferEmpty(buffer);

    return result;
}