/*
 *	clipihex.h
 *
 *	インテルHEX形式ファイルローダー
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2015 Naoyuki Sawa
 *
 *	* Fri Nov 30 18:52:54 JST 2012 Naoyuki Sawa
 *	- 1st リリース。
 *	* Sun Jul 12 17:07:37 JST 2015 Naoyuki Sawa
 *	- IntelHex_load_r()を追加しました。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __CLIP_IHEX_H__
#define __CLIP_IHEX_H__

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

/* インテルHEX形式ファイルをロードします。
 * [in]
 *	fname		ファイル名
 *	callback	アプリケーション定義のコールバック関数
 * [out]
 *	無し
 * [note]
 *	//使用例
 *	unsigned char Memory[MEMORY_SIZE];
 *	static void MyCallback(int addr, int data) {
 *		if((unsigned)addr >= MEMORY_SIZE) DIE();
 *		Memory[addr] = data;
 *	}
 *	void MyLoadTest() {
 *		memset(Memory, -1, MEMORY_SIZE);
 *		IntelHex_load("sample.hex", MyCallback);
 *	}
 */
void IntelHex_load(const char* fname, void (*callback)(int addr, int data));

/* インテルHEX形式ファイルをロードします。(スレッドセーフ版)
 * [in]
 *	fname		ファイル名
 *	callback	アプリケーション定義のコールバック関数
 *	userdata	コールバック関数に引き渡される任意の値
 * [out]
 *	無し
 * [note]
 *	//使用例
 *	static void MyCallback(int addr, int data, void* userdata) {
 *		unsigned char* Memory = userdata;
 *		if((unsigned)addr >= MEMORY_SIZE) DIE();
 *		Memory[addr] = data;
 *	}
 *	void MyLoadTest() {
 *		unsigned char Memory[MEMORY_SIZE];
 *		memset(Memory, -1, MEMORY_SIZE);
 *		IntelHex_load_r("sample.hex", MyCallback, Memory);
 *	}
 */
void IntelHex_load_r(const char* fname, void (*callback)(int addr, int data, void* userdata), void* userdata);

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif /*__CLIP_IHEX_H__*/
