//============================================================================
// Name        : main.c
// Author      : huaqiyan@zlg.cn
// Version     :
// Copyright   : zhiyuan electronics  co., ltd.
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <stdio.h>
#include <assert.h>

#include "nvmem.h"

int main(int argc, char **argv) {

	char buf[256] = {0};
	int ret = 0, bytes, offset;

	nvmem_t *nvm = nvmem_create();
	if(nvm){

		nvmem_init(nvm, NULL);

		/* normal read/write */
		offset = 0;
		bytes = snprintf(buf, sizeof(buf), "%s", "Hello World in C++, Ansi-style");
		ret = nvmem_write(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("write offset=%d, bytes=%d\n", offset, ret);

		memset(buf, 0, sizeof(buf));
		ret = nvmem_read(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("read offset=%d, bytes=%d\n", offset, ret);

		/* over page, page size is 32 byte */
		offset = 60;
		bytes = snprintf(buf, sizeof(buf), "%s", "Hello World in C++, Ansi-style");
		ret = nvmem_write(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("write offset=%d, bytes=%d\n", offset, ret);

		memset(buf, 0, sizeof(buf));
		ret = nvmem_read(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("read offset=%d, bytes=%d\n", offset, ret);

		/* out of nvmem */
		offset = 4090;
		bytes = snprintf(buf, sizeof(buf), "%s", "Hello World in C++, Ansi-style");
		ret = nvmem_write(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("write offset=%d, bytes=%d\n", offset, ret);

		memset(buf, 0, sizeof(buf));
		ret = nvmem_read(nvm, offset, buf, bytes);
		assert(ret > 0);
		printf("read offset=%d, bytes=%d\n", offset, ret);

		/* out of nvmem again */
		offset = 4096;
		bytes = snprintf(buf, sizeof(buf), "%s", "Hello World in C++, Ansi-style");
		ret = nvmem_write(nvm, offset, buf, bytes);
		assert(ret >= 0);
		printf("write offset=%d, bytes=%d\n", offset, ret);

		memset(buf, 0, sizeof(buf));
		ret = nvmem_read(nvm, offset, buf, bytes);
		assert(ret >= 0);
		printf("read offset=%d, bytes=%d\n", offset, ret);
	}

	nvmem_free(nvm);

	return 0;
}
