view src/cs/drivers/drv_app/r2d/lcd_messages.c @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +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);
}