📄 lcd_messages.c
字号:
/********************************************************************************
* *
* 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 "lcd_messages.h"
#include "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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -