view src/cs/drivers/drv_app/r2d/lcd_messages.c @ 75:8697f358f505

backlight rework: Condat light driver accepts levels The present change is another intermediate step on the path toward new FreeCalypso backlight handling. At this intermediate step the Condat light driver accepts 0-255 backlight levels driven by MFW, and puts them out on PWL on Luna development boards. At the same time on C139 it is now possible to turn on the display backlight with or without the keypad bl - the lsb of the 0-255 backlight level controls the keypad bl. MFW presently drives only 0 and 255 backlight levels, thus there is no visible behavioral change yet - but the plan for subsequent stages of this backlight rework is to add a dimmed backlight state (no keypad bl on C139) during active calls.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 24 Oct 2020 20:44:04 +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);
}