/*******************************************************************/
/************************* File Description ************************/
/*******************************************************************/
/* File Name:		$Workfile:   hmx_uprade.c  $
 * Version:			$Revision:   1.0  $
 * Original Author:		Yang Hyun Uk $
 * Current Author:	$Author: huyang@humaxdigital.com $
 * Date:			$Date: 2011.09.30
 * File Description:	HTTP Live Streaming
 * 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.c
 */

/*******************************************************************/
/**************************** Header Files *************************/
/*******************************************************************/
/* Start Including Header Files */
#include <stdio.h>
#include "hmx_upgrade.h"
#include "util.h"
/* End Including Headers */


/*******************************************************************/
/****************************** define *****************************/
/*******************************************************************/
#define  	HMX_UPGRADE_NUMBER_OF_QUEUE	64
#define	HMX_UPGRADE_TASK_PRIORITY				10
#define	HMX_UPGRADE_TASK_STACK_SIZE				(1024*128)

/* End #define */

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


/*******************************************************************/
/************************ global variables *************************/
/*******************************************************************/
/* Start global variable */

/**
 * Upgrade Status Callback notifies status to APP
 */
HMX_UpgradeEventCallback g_fUpgradeStatusCallback = NULL;
HMX_UPGRADE_COMMAND_t g_tUpgradeCommand;
/* End global variable */


/*******************************************************************/
/************************ static variables *************************/
/*******************************************************************/
/* Start static variable */
static unsigned long		s_ulUpgradeTaskId = 0;
static unsigned long 		s_ulUpgradeMessgseId=0;
/* End static variable */

static void P_HMX_Upgrade_Task(void* param);


/**
 * @b Function @b Description <br>
 * Start Humax Upgrade Module. it creates a thread for Upgrading. <br>
 *
 * @param[in] callback : specify a callback to get Upgrade Status. if NULL, Upgrade Module can't be started.
 * @param[in] file : specify a file path. also http address will be possible. if NULL, Upgrade Module can't be started.
 *
 * @return  #  0 : success <br>
 *          #  1 : failed <br>
 *
 */
int HMX_UPGRADE_Start( HMX_UpgradeEventCallback callback,  unsigned char * file)
{
	int err;
	HMX_UPGRADE_COMMAND_t upgrade_msg;

	/* Add Callback */
	if( callback == NULL )
	{
		printf("[%s] ERROR callback porinter is NULL \n", __FUNCTION__);
		return 1;
	}
	g_fUpgradeStatusCallback = callback;

	if ( file == NULL )
	{
		printf("[%s] ERROR file path is nULL\n", __FUNCTION__);
		return 1;
	}

	err = HMX_MSG_Create(HMX_UPGRADE_NUMBER_OF_QUEUE, sizeof(HMX_UPGRADE_COMMAND_t),	 "UpgradeMsgQ", &s_ulUpgradeMessgseId, HMX_SUSPENDTYPE_FIFO);
	if(err != HMX_OK)
	{
		printf("[%s] [%d] Error(0x%x) \n\r",__FUNCTION__,__LINE__, err);
		return HMX_ERROR;
	}

	err = HMX_TASK_Create( P_HMX_Upgrade_Task, HMX_UPGRADE_TASK_PRIORITY, HMX_UPGRADE_TASK_STACK_SIZE, "UpgradeTask", NULL, &s_ulUpgradeTaskId, 0);
	if( err != HMX_OK )
	{
		printf("[%s] [%d] Error(0x%x) \n\r",__FUNCTION__,__LINE__, err);
		return HMX_ERROR;
	}

	HMX_TASK_Start(s_ulUpgradeTaskId);

	upgrade_msg.command = HMX_UPGRADE_FETCH;
	/* this should be freed at Reciever */
	upgrade_msg.file_path = strdup(file);

	err = HMX_MSG_Send(s_ulUpgradeMessgseId, &upgrade_msg, sizeof(HMX_UPGRADE_COMMAND_t),0);
	if(err != HMX_OK)
	{
		printf( "[HMX_UPGRADE_Start] HMX_MSG_Send error : err is 0x%x\n", err);
		return HMX_ERROR;
	}

	return HMX_OK;
}

/**
 * @b Function @b Description <br>
 * Stop Humax Upgrade Module. even it can be stoped while it is Reading or Flashing. <br>
 *
 * @return  #  0 : success <br>
 *          #  1 : failed <br>
 *
 */
int HMX_UPGRADE_Stop(void)
{
	int err;
	HMX_UPGRADE_COMMAND_t upgrade_msg;
	upgrade_msg.command = HMX_UPGRADE_STOP;

	err = HMX_MSG_SendUrgent(s_ulUpgradeMessgseId, &upgrade_msg, sizeof(HMX_UPGRADE_COMMAND_t),0);
	if(err != HMX_OK)
	{
		printf( "[HMX_UPGRADE_Stop] HMX_MSG_Send error : err is 0x%x\n", err);
		return HMX_ERROR;
	}

	HMX_TASK_Stop(s_ulUpgradeTaskId);

	err = HMX_TASK_Destroy(s_ulUpgradeTaskId);
	if( err != HMX_OK )
	{
		printf("[%s] [%d] Error(0x%x) \n\r",__FUNCTION__,__LINE__, err);
		return HMX_ERROR;
	}

	err = HMX_MSG_Destroy(s_ulUpgradeMessgseId);
	if(err != HMX_OK)
	{
		printf("[%s] [%d] Error(0x%x) \n\r",__FUNCTION__,__LINE__, err);
		return HMX_ERROR;
	}

	return HMX_OK;
}

#if 0
/**
 * @b Function @b Description <br>
 * Specify a file to upgrade <br>
 *
 * @param[in] file : specify full file path.
 *
 * @return  #  0 : success <br>
 *          #  1 : failed <br>
 *
 */
int HMX_UPGRADE_FetchFileToUpgrade(unsigned char * file)
{
	int nErr;
	HMX_UPGRADE_COMMAND_t upgrade_msg;

	if ( file == NULL )
	{
		printf("[%s] file path is nULL\n", __FUNCTION__);
	}

	upgrade_msg.command = HMX_UPGRADE_FETCH;
	/* this should be freed at Reciever */
	upgrade_msg.file_path = strdup(file);

	printf("[%s] file path is %s\n", __FUNCTION__, upgrade_msg.file_path);


	nErr = HMX_MSG_SendTimeout(s_ulUpgradeMessgseId, &upgrade_msg, sizeof(HMX_UPGRADE_COMMAND_t),0);
	if(nErr != HMX_OK)
	{
		printf( "[HMX_UPGRADE_FetchFileToUpgrade] HMX_MSG_Send error : err is 0x%x\n", nErr);
		return HMX_ERR;
	}

	return HMX_OK;
}
#endif

void HMX_UPGRADE_Call_Callback(HMX_UPGRADE_STATUS_Msg_t * upgrade_status_msg )
{
	if ( g_fUpgradeStatusCallback != NULL )
	{
		g_fUpgradeStatusCallback(upgrade_status_msg);
	}

}

/*******************************************************************/
/************************ static funtions **************************/
/*******************************************************************/

static HMX_UPGRADE_EVENT_e P_HMX_UPGRADE_FILE(unsigned char * path)
{
	HMX_UPGRADE_STATUS_Msg_t * upgrade_status_msg;
	int ret;
	upgrade_status_msg = malloc(sizeof(HMX_UPGRADE_STATUS_Msg_t));

	printf ("[%s] \n", __FUNCTION__ );


	ret = HMX_UPGRADE_HDF_Do_Flash( path );
	if ( ret != HMX_OK )
	{
		printf ("[%s] HMX_UPGRADE_HDF_Do_Flash ret %d\n", __FUNCTION__, ret );
		upgrade_status_msg->event = ret;
		HMX_UPGRADE_Call_Callback(upgrade_status_msg);
		return HMX_UPGRADE_FILE_NOT_EXIST;
	}

	free(upgrade_status_msg);
	return HMX_UPGRADE_DONE;
}

static void P_HMX_Upgrade_Task(void* param)
{
	HMX_UPGRADE_EVENT_e nErr;
	int upgrade_is_done = 0;
	HMX_UPGRADE_COMMAND_t recieved_command;
	unsigned char * file_path=NULL;
	HMX_UPGRADE_COMMAND_t send_command;

	HMX_UPGRADE_STATUS_Msg_t * upgrade_status_msg;
	upgrade_status_msg = malloc(sizeof(upgrade_status_msg));

	while(1)
	{
		nErr = HMX_MSG_Receive(s_ulUpgradeMessgseId, &recieved_command, sizeof(HMX_UPGRADE_COMMAND_t));
		if(nErr != HMX_OK)
		{
			printf ("%s (%d) Error>  Error VK_MSG_ReceiveTimeout\n",__FUNCTION__,__LINE__);
		}
		else
		{
			switch( recieved_command.command)
			{
				case HMX_UPGRADE_START:
					{
						printf("[%s] Receive HMX_UPGRADE_START command \n",__FUNCTION__);

						/* DO Upgrade ........ here */
						nErr = P_HMX_UPGRADE_FILE(file_path);

						send_command.command = HMX_UPGRADE_STOP;
						(void)HMX_MSG_Send(s_ulUpgradeMessgseId, &send_command, sizeof(HMX_UPGRADE_COMMAND_t),0);
						break;
					}
				case HMX_UPGRADE_STOP:
					{
						printf("[%s] HMX_UPGRADE_STOP \r\n",__FUNCTION__);

						free(upgrade_status_msg);
						free(file_path);

						/* Notify to app, UPgreade is done. */
						upgrade_status_msg->event = HMX_UPGRADE_DONE;
						HMX_UPGRADE_Call_Callback(upgrade_status_msg);

						/* TASK kills itself. */
						return 0;
					}
				case HMX_UPGRADE_FETCH:
					{
						printf("[%s] HMX_UPGRADE_FETCH \r\n",__FUNCTION__);
						file_path = strdup(recieved_command.file_path);

						printf("[%s] file path = %s \r\n",__FUNCTION__, file_path);

						/* command file_path free */
						free(recieved_command.file_path);

						send_command.command = HMX_UPGRADE_START;
						(void)HMX_MSG_Send(s_ulUpgradeMessgseId, &send_command, sizeof(HMX_UPGRADE_COMMAND_t),0);
						break;
					}

				default:
					printf("[%s] Receive Unknown Command \r\n",__FUNCTION__);
					break;
			}
		}
	}
}

/*@}*/
