#include <iostream>
#include "SimpleRingBuffer.h"


int main() {
	using namespace std;
	SimpleRingBuffer buffer(64, false);
	uint8_t data[8] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
	ReturnValue_t result = buffer.writeData(data, 8);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	result = buffer.writeData(data, 8);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	uint8_t buffer2[47] = {0};
	for (uint8_t count = 0; count<sizeof(buffer2); count++) {
		buffer2[count] = count;
	}
	result = buffer.writeData(buffer2, sizeof(buffer2));
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	result = buffer.writeData(buffer2, sizeof(buffer2));
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	uint8_t readBuffer[64] = {0};
	uint32_t writtenData = 0;
	result = buffer.readData(readBuffer, 12, true, &writtenData);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "readData failed." << endl;
	} else {
		cout << "Read data: " << writtenData << endl;
		for (uint32_t count = 0; count < writtenData; count++) {
			cout << hex << (uint16_t)readBuffer[count] << " ";
		}
		cout << dec << endl;
	}

	result = buffer.readData(readBuffer, 60, true, &writtenData);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "readData failed." << endl;
	} else {
		cout << "Read data: " << writtenData << endl;
		for (uint32_t count = 0; count < writtenData; count++) {
			cout << hex << (uint16_t)readBuffer[count] << " ";
		}
		cout << dec << endl;
	}
	result = buffer.writeData(data, sizeof(data));
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	result = buffer.readData(readBuffer, 60, true, &writtenData);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "readData failed." << endl;
	} else {
		cout << "Read data: " << writtenData << endl;
		for (uint32_t count = 0; count < writtenData; count++) {
			cout << hex << (uint16_t)readBuffer[count] << " ";
		}
		cout << dec << endl;
	}
	result = buffer.writeData(readBuffer, sizeof(readBuffer));
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	}
	result = buffer.writeData(readBuffer, sizeof(readBuffer)-1);
	if (result != HasReturnvaluesIF::RETURN_OK) {
		cout << "writeData failed." << endl;
	} else {
		cout << "write done." << endl;
	}
}