view src/cs/drivers/drv_app/r2d/lcd_messages.c @ 281:a75eefbf8be4

Phone boot with PWON: weed out short button presses Every standard end user phone has a design provision, most naturally implemented in firmware, whereby the PWON button effects a boot only if it is held down long enough - short presses of this PWON button are detected, assumed to be spurious and cause the fw to power back off instead of proceeding with boot. The present change introduces this standard function in FreeCalypso.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 24 Sep 2021 02:03:08 +0000
parents 4e78acac3d88
children
line wrap: on
line source

/********************************************************************************
*																				*
*   lcd_messages.c	: contains functions used by Upper layer to send messages	*
*					  to LCD mailbox, and by LCD to send events to Upper layer  *
*																				*
*	Project			: 															*
*		                                            					    	*
*   Author         	: Davide Carpegna 				    						*
*   Version number	: 1.0														*
*   Date        	: 29 September 2000											*		
*																				*
*   (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved	*		
*********************************************************************************/

#include <string.h>

#include "r2d/lcd_messages.h"
#include "rvm/rvm_use_id_list.h"

/* Global variables */
typedef struct DRIVER_GBL_INFO
{
	T_RVF_MB_ID		prim_id;
	T_RVF_ADDR_ID	addr_id;
	UINT8		rtc_mailbox;
} T_DRIVER_GBL_INFO;

T_DRIVER_GBL_INFO * DRIVER_GBL_INFO_PTR = NULL;

UINT8 DrvTaskReady = 0;


/********************************************************************************/
/*    Function Name: LCD_Reset													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_reset message into lcd mailbox			*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	None													*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_reset(void)
{

		/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);

    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

		return (RV_OK);
}

/********************************************************************************/
/*    Function Name: lcd_clear													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear message into lcd mailbox			*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	None													*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET.                                                             */
/********************************************************************************/


T_RV_RET lcd_clear(void)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR				*msg_ptr;
	

		/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);


	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
	
		msg_ptr->os_hdr.msg_id = LCD_CLEAR_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
	{	
		rvf_send_trace("LCD_Clear function FAILED ",26, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}

}

/********************************************************************************/
/*    Function Name: LCD_Init													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_init message into lcd mailbox			*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	None					                                */
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_init(void)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_INIT				*msg_ptr;
	
		/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
	{	LCD_Init_ll();
		return (RV_NOT_READY);
	}
    if (DrvTaskReady == 0)
	{	LCD_Init_ll();
	    return(RV_NOT_READY);
	}


	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_INIT ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		
		
		msg_ptr->os_hdr.msg_id = LCD_INIT_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);				

		return (RV_OK);
	}
	else 	
	{	rvf_send_trace("LCD_Init function FAILED ",25, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_WriteString		                                    */
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_write_string message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	row, column, string, mode                               */
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_write_string(UINT8 row, UINT8 column, char *string, T_VIDEO_MODE mode)
{

	UINT8					length;
	T_RVF_MB_STATUS			mb_status;
    T_LCD_WRITE_STRING      *msg_ptr;
	
	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
	{
		return (RV_NOT_READY);
	}
    if (DrvTaskReady == 0)
	{
		return (RV_NOT_READY);
	}

	/* the string must fit into one row, so the maximum string length is 14		*/
	/* character starting from column 0											*/
	length = (UINT8) strlen (string);
	if((length*6+column)>DISP_PIXELWIDTH)
	{
		rvf_send_trace("LCD_WriteString - too long string ",34, NULL_PARAM,RV_TRACE_LEVEL_WARNING, R2D_USE_ID );	
		return (RV_INVALID_PARAMETER);
	}

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_WRITE_STRING ) + length, (void **) &msg_ptr);
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->row = row;
		msg_ptr->column = column * 6;
		msg_ptr->mode = mode;

		/* the first byte indicates the string length ('\x00' excepted), while 	*/
		/* the message is included beyond this parameter						*/
		msg_ptr->string = length;
		memcpy (&(msg_ptr->string) + 1,
				string,
				length);
		
		msg_ptr->os_hdr.msg_id = LCD_WRITE_STRING_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
		{	
		rvf_send_trace("LCD_WriteString function FAILED ",32, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}

}


/********************************************************************************/
/*    Function Name: LCD_WriteCenter		                                    */
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_write_center message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	string	                                                */
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_write_center( char *string)
{

	UINT8					length;
	T_RVF_MB_STATUS			mb_status;
    T_LCD_WRITE_CENTER      *msg_ptr;
	
	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
	{
		return (RV_NOT_READY);
	}
	
    if (DrvTaskReady == 0)
	{
	    return(RV_NOT_READY);
	}

	/* the string must fit into one row, so the maximum string length is 14		*/
	/* character starting from column 0											*/
	length = (UINT8) strlen (string);
	if((length*6+X_CENTER-(length/2)*DISP_PAGEHEIGHT)>DISP_PIXELWIDTH)
	{
		rvf_send_trace("LCD_WriteCenter - too long string ",34, NULL_PARAM,RV_TRACE_LEVEL_WARNING, R2D_USE_ID );	
		return (RV_INVALID_PARAMETER);
	}

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_WRITE_CENTER ) + length, (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{

		/* the first byte indicates the length ('\x00' excepted), while the		*/
		/* message is included beyond this parameter							*/
		msg_ptr->string = length;
		memcpy (&(msg_ptr->string) + 1,
				string,
				length);
		
		msg_ptr->os_hdr.msg_id = LCD_WRITE_CENTER_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
	{	
		rvf_send_trace("LCD_WriteCenter function FAILED ",32, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_ClearString		                                    */
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear_strring message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	row					                                    */
/*    Output Parameters: 				            							*/
/*        T_RV_RET.                                                             */
/********************************************************************************/


T_RV_RET lcd_clear_string(UINT8 row)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR_STRING      *msg_ptr;
	
	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);


	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR_STRING ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->row = row;
	
		
		msg_ptr->os_hdr.msg_id = LCD_CLEAR_STRING_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_ClearString function FAILED ",32, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_ClearWord			                                    */
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear_word message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:	row, column, length                                     */
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_clear_word(UINT8 row, UINT8 column, UINT16 length)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR_WORD      *msg_ptr;
	
	 /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);
	

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR_WORD ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->row = row;
		msg_ptr->column = column * 6;
		msg_ptr->length = length;
		
		msg_ptr->os_hdr.msg_id = LCD_CLEAR_WORD_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_ClearWord function FAILED ",31, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}


/********************************************************************************/
/*    Function Name: LCD_PutPixel												*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_put_pixel message into lcd mailbox		*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x,y														*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_put_pixel(UINT8 x, UINT8 y)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_PUT_PIXEL      *msg_ptr;
	
	  /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_PUT_PIXEL ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x = x;
		msg_ptr->y = y;
		
		msg_ptr->os_hdr.msg_id = LCD_PUT_PIXEL_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_PutPixel function FAILED ",29, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_ClearPixel												*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear_pixel message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x,y														*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_clear_pixel(UINT8 x, UINT8 y)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR_PIXEL      *msg_ptr;
	
	  /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR_PIXEL ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x = x;
		msg_ptr->y = y;
		
		msg_ptr->os_hdr.msg_id = LCD_CLEAR_PIXEL_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_ClearPixel function FAILED ",31, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_DrawLine										    	*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_draw_line message into lcd mailbox		*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x1,y1, x2,y2												*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_draw_line(UINT8 x1, UINT8 y1, UINT8 x2, UINT8 y2)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_DRAW_LINE	      *msg_ptr;
	
	  /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_DRAW_LINE ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x1 = x1;
		msg_ptr->y1 = y1;
		msg_ptr->x2 = x2;
		msg_ptr->y2 = y2;

		msg_ptr->os_hdr.msg_id = LCD_DRAW_LINE_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_DrawLine function FAILED ",29, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}
/********************************************************************************/
/*    Function Name: LCD_ClearLine												*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear_line message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x1,y1, x2,y2												*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_clear_line(UINT8 x1, UINT8 y1, UINT8 x2, UINT8 y2)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR_LINE	      *msg_ptr;
	
	  /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR_LINE ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x1 = x1;
		msg_ptr->y1 = y1;
		msg_ptr->x2 = x2;
		msg_ptr->y2 = y2;

		msg_ptr->os_hdr.msg_id = LCD_CLEAR_LINE_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_ClearLine function FAILED ",30, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_DrawRectangle											*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_draw_rectangle message into lcd mailbox*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x1,y1, x2,y2												*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_draw_rectangle(UINT8 x1, UINT8 y1, UINT8 x2, UINT8 y2)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_DRAW_RECTANGLE	      *msg_ptr;
	
	  /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_DRAW_RECTANGLE ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x1 = x1;
		msg_ptr->y1 = y1;
		msg_ptr->x2 = x2;
		msg_ptr->y2 = y2;

		msg_ptr->os_hdr.msg_id = LCD_DRAW_RECTANGLE_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_DrawRectangle function FAILED ",34, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}
/********************************************************************************/
/*    Function Name: LCD_ClearRectangle											*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_clear_rectangle message into lcd mailbox*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x1,y1, x2,y2												*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_clear_rectangle(UINT8 x1, UINT8 y1, UINT8 x2, UINT8 y2)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_CLEAR_RECTANGLE	      *msg_ptr;
	
	 /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_CLEAR_RECTANGLE ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->x1 = x1;
		msg_ptr->y1 = y1;
		msg_ptr->x2 = x2;
		msg_ptr->y2 = y2;

		msg_ptr->os_hdr.msg_id = LCD_CLEAR_RECTANGLE_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_ClearRectangle function FAILED ",35, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_DrawIcon						    					*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_display_icon message into lcd mailbox	*/
/*																				*/		
/*                                                                              */
/*    Input Parameters:x, y, icon_id											*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_draw_icon(UINT8 x,UINT8 y,UINT8 icon_id)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_DRAW_ICON			*msg_ptr;
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
	{	
		return (RV_NOT_READY);
	}

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_DRAW_ICON ), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->icon_id = icon_id;
		msg_ptr->x = x;
		msg_ptr->y = y;

		msg_ptr->os_hdr.msg_id = LCD_DRAW_ICON_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
			{	
		rvf_send_trace("LCD_DrawIcon function FAILED ",29, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_RefreshBloc								    		*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_draw_bloc message into lcd mailbox		*/	
/*																				*/		
/*                                                                              */
/*    Input Parameters:table,x_dim,y_dim,x_pos,y_pos							*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_refresh_bloc(char *table,UINT8 x_dim,UINT8 y_dim,UINT8 x_pos,UINT8 y_pos)
{

	T_RVF_MB_STATUS			mb_status;
    T_LCD_REFRESH_BLOC	      *msg_ptr;
	

	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);

    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_REFRESH_BLOC), (void **) &msg_ptr);	

	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		
		msg_ptr->table = table;
		msg_ptr->x_dim = x_dim;
		msg_ptr->y_dim = y_dim;
		msg_ptr->x_pos = x_pos;
		msg_ptr->y_pos = y_pos;

		msg_ptr->os_hdr.msg_id = LCD_REFRESH_BLOC_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
	{	
		rvf_send_trace("LCD_RefreshBloc function FAILED ",32, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_PixBlt													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_refresh_bloc message into lcd mailbox	*/	
/*																				*/		
/*                                                                              */
/*    Input Parameters:table,x_dim,y_dim,x_pos,y_pos,table						*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_pix_blt(int x_pos,int y_pos,int x_dim,int y_dim,char *table)
{
	T_RVF_MB_STATUS			mb_status1,mb_status2;
    T_LCD_DRAW_BLOC	    	*msg_ptr;
	int  					i;
	char					*table_to_send;  //pointer to the table created to copy the transmitted data
	

	 /* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);
	
    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);
	
	if((x_pos>83)||(y_pos>48))
	{
		rvf_send_trace("LCD - image outside lcd",23, NULL_PARAM,RV_TRACE_LEVEL_WARNING, R2D_USE_ID );	
		return(RV_OK);
	}
     
	mb_status1 = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_DRAW_BLOC), (void **) &msg_ptr);	
	
	if((mb_status1==RVF_RED))//memory allocation failed
	{	
		rvf_send_trace("LCD_PixBlt function FAILED ",27, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
    }

	//dynamic allocation of the copy table
	mb_status2 = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, (x_dim*y_dim)/8, (void **) &table_to_send);

   	if((mb_status2==RVF_RED))//memory allocation failed
	  {	
		rvf_free_buf(msg_ptr);
		rvf_send_trace("LCD_PixBlt function FAILED ",27, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
      }

	else 
	{  
		for(i=0;i<((x_dim*y_dim/8)-1);i++)
			table_to_send[i]=table[i];
	
		msg_ptr->table = table_to_send;
		msg_ptr->x_dim = x_dim;
		msg_ptr->y_dim = y_dim;
		msg_ptr->x_pos = x_pos;
		msg_ptr->y_pos = y_pos;

		msg_ptr->os_hdr.msg_id = LCD_DRAW_BLOC_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);	

		return (RV_OK);
	}
}

/********************************************************************************/
/*    Function Name: LCD_Enable													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_enable message into lcd mailbox		*/	
/*																				*/		
/*                                                                              */
/*    Input Parameters:	x														*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_enable(UINT8 x)
{

	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);

    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

		return (RV_OK);
}

/********************************************************************************/
/*    Function Name: LCD_SetPower												*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_set_power message into lcd mailbox		*/	
/*																				*/		
/*                                                                              */
/*    Input Parameters:	None													*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_set_power()
{

	T_RVF_MB_STATUS		mb_status;
    T_LCD_SET_POWER		*msg_ptr;
	
	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
	{	LCD_Init_ll();
		return (RV_NOT_READY);
	}
    if (DrvTaskReady == 0)
	{
     	LCD_Init_ll();
		return (RV_NOT_READY);
	}
	

	mb_status = rvf_get_buf (DRIVER_GBL_INFO_PTR->prim_id, sizeof (T_LCD_SET_POWER), (void **) &msg_ptr);	
	
	if ((mb_status == RVF_GREEN) || (mb_status == RVF_YELLOW)) /* Memory allocation success */
	{		

		msg_ptr->os_hdr.msg_id = LCD_SET_POWER_EVT;
		
		rvf_send_msg (DRIVER_GBL_INFO_PTR->addr_id, msg_ptr);		

		return (RV_OK);
	}
	else 
		{	
		rvf_send_trace("LCD_SetPower function FAILED ",29, NULL_PARAM, 
						RV_TRACE_LEVEL_WARNING, R2D_USE_ID );
		return(RV_MEMORY_ERR);
	}
}

/********************************************************************************/
/*    Function Name: LCD_Cursor													*/
/*                                                                              */
/*    Purpose:called by Appli, sends lcd_cursor message into lcd mailbox		*/	
/*																				*/		
/*                                                                              */
/*    Input Parameters:x,y														*/
/*    Output Parameters: 				            							*/
/*        T_RV_RET                                                              */
/********************************************************************************/


T_RV_RET lcd_cursor(UINT8 y,UINT8 x)
{

	/* check if the driver has been started */
	if ( DRIVER_GBL_INFO_PTR == NULL)
		return (RV_NOT_READY);

    if (DrvTaskReady == 0)
	    return(RV_NOT_READY);

		return (RV_OK);
}