/*******************************************************************/
/************************* 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);

/*@}*/
