/*******************************************************************/
/************************* File Description ************************/
/*******************************************************************/
/* File Name:		$Workfile:   hmx_uprade.h  $
 * Version:			$Revision:   1.0  $
 * Original Author: Yang Hyun Uk $
 * Current Author:	$Author: huyang@humaxdigital.com $
 * Date:			$Date: 2011.09.30
 * File Description:	Upgrade APIs
 * Module:
 * Remarks:
 */

/**
 * @defgroup UPGRADE Upgrade APIs
 */

/**
 * @author Hyunuk Yang(huyang@humaxdigital.com)
 * @date 30 Sept 2011
 */

/**
 * @note
 * Copyright (C) 2011 Humax Corporation. All Rights Reserved. <br>
 * This software is the confidential and proprietary information
 * of Humax Corporation. You may not use or distribute this software
 * except in compliance with the terms and conditions of any applicable license
 * agreement in writing between Humax Corporation and you.
 */

 /*@{*/

/**
 * @file hmx_upgrade.h
 */

/*******************************************************************/
/**************************** Header Files**************************/
/*******************************************************************/
/* Start Including Header Files */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include <assert.h>
#include <sys/queue.h>
#include <unistd.h>
#include <fcntl.h>
#include "hmx_upgrade_system.h"
#include "hmx_upgrade_flash.h"
/* End Including Headers*/

/*******************************************************************/
/************************ Extern variables *************************/
/*******************************************************************/
/* Start Extern variablee */

/* End Extern variable */


/*******************************************************************/
/************************ Macro Definition *************************/
/*******************************************************************/
/* Start Macro definition */
/* End Macro definition */



/*******************************************************************/
/****************************** typedef ****************************/
/*******************************************************************/
/* Start typedef */

typedef enum
{
	HMX_UPGRADE_START, 		/**< */
	HMX_UPGRADE_STOP, 		/**<  */
	HMX_UPGRADE_FETCH, 		/**<  */
}HMX_UPGRADE_COMMAND_e;

typedef struct
{
	HMX_UPGRADE_COMMAND_e command;
	unsigned char * file_path;
}HMX_UPGRADE_COMMAND_t;

/**
 * HMX_UPGRADE Status cases.
 */
typedef enum
{
	HMX_UPGRADE_STARTED, 						/**< Upgrade Module is just started */
	HMX_UPGRADE_GET_VERSION, 				/**< this comes with version information */
	HMX_UPGRADE_READING, 						/**< reading file. Upgrade is in progress. */
	HMX_UPGRADE_FLASHING, 					/**< Flashing. Upgrade is in progress.  */
	HMX_UPGRADE_DONE, 						/**< Upgrade is done without any error, After this message, Upgrade module will be destroy itself. */
	HMX_UPGRADE_STOPED_BY_USER, 				/**< Upgrade is stopped by user. After this message, Upgrade module will be destroy itself. */
	HMX_UPGRADE_FAILED, 						/**< Upgrade is failed, it shouldn't happen. After this message, Upgrade module will be destroy itself.*/
	HMX_UPGRADE_VERSION_FAILED, 				/**< Upgrade is failed, version problem. */
	HMX_UPGRADE_FILE_NOT_EXIST, 				/**< Upgrade is failed, there is no file exist  */
	HMX_UPGRADE_FILE_FORMAT_ERROR, 			/**< Upgrade is failed, file is not HDF Format   */

}HMX_UPGRADE_EVENT_e;


/**
 * HMX_UPGRADE_Status_Messages
 */
typedef struct
{
	HMX_UPGRADE_EVENT_e event;		/**< event from Upgrade module */
	unsigned int percentage;		/**< percentage progress */
	unsigned int current_version;		/**< version current */
	unsigned int version_to_upgrade;		/**< version to upgrade */
} HMX_UPGRADE_STATUS_Msg_t;

/**
 *  Prototype of upgrade event callback function <br>
 *  Callback can be added by HMX_UPGRADE_Start <br><br>
 *  HMX_UPGRADE_READING, HMX_UPGRADE_FLASHING events always comes with value of percentage.
 */
typedef void (*HMX_UpgradeEventCallback) (HMX_UPGRADE_STATUS_Msg_t * UpgradeStatusMessages);

/* End typedef */


/*******************************************************************/
/******************** global function prototype ********************/
/*******************************************************************/
/* Start global function prototypes */
extern HMX_UpgradeEventCallback g_fUpgradeStatusCallback;
/* End global function prototypes */

int HMX_UPGRADE_Start( HMX_UpgradeEventCallback callback,  unsigned char * file);
int HMX_UPGRADE_Stop( void);

/*@}*/
