/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* etm_main.c
*
* Project:
* --------
*
*
* Description:
* ------------
* This Module defines a task to provide touch panel driver interface
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#include "drv_comm.h"
#include "stack_common.h"
#include "syscomp_config.h"
#include "stack_msgs.h"
#include "app_ltlcom.h" /* Task message communiction */
#include "stacklib.h" /* Basic type for dll, evshed, stacktimer */
#include "event_shed.h" /* Event scheduler */
#include "stack_timer.h" /*Timer*/
#include "app_buff_alloc.h" /*buffer*/
#include "task_config.h" /* Task creation */
#include "stack_ltlcom.h" /*msg_send_ext_queue.....definitions*/
#include "uart_sw.h"
#include "reg_base.h"
#include "eint.h"
#include "custom_config.h"
#include "stdarg.h"
#include "etm_common.h"
#include "etm_dev.h"
#include "etm_custom_app.h"
#define MAXCHARS 512
#define MAXFRACT 10000
#define NumFract 4
//============================================================
/* local variables */
//============================================================
ETM_MENU g_etm_current_menu = MENU_ROOT;
kal_uint16 g_etm_custom_app_menu_count=0;
char __static_buf[MAXCHARS];
//============================================================
/* local function */
//============================================================
kal_bool etm_create(comptask_handler_struct **handle);
static void etm_main(task_entry_struct *task_entry_ptr);
static kal_bool etm_init( task_indx_type index_type);
static void etm_itoa(kal_char **buf, kal_int32 i, kal_int32 base);
static void etm_itof(kal_char **buf, kal_int32 i);
void etm_data_ind_req_hdlr(local_para_struct *local_ptr);
kal_bool etm_cmd_parse_and_hdlr(kal_char *cmd);
//#define __ETM_MULTIPLE_COMMAND_SUPPORT__
#ifdef __ETM_MULTIPLE_COMMAND_SUPPORT__
#define CMD_STRING_MAXLEN 2048
#else
#define CMD_STRING_MAXLEN 128
#endif
etm_custom_menu_struct etm_custom_app[ETM_CUSTOM_APP_MENU_MAX] =
{
//default
{ETM_ACTION_CUST_APP_CMD1, NULL, "LCD backlight brightness setting"},
// {ETM_ACTION_CUST_APP_CMD2, etm_custom_app_dump_data, "dump the data of specific address"},
//customer add
//......
};
#define ETM_APP_MENU_INIT() \
do\
{\
kal_uint8 i__;\
g_etm_custom_app_menu_count = 0;\
for(i__=0;i__<ETM_CUSTOM_APP_MENU_MAX;i__++)\
{\
sprintf(etm_custom_app[i__].description, " %d)", (i__+1)); \
}\
}while(0)
#define ETM_APP_REGISTER(function, info) \
do\
{\
if(g_etm_custom_app_menu_count >= 9) \
break;\
etm_custom_app[g_etm_custom_app_menu_count].name = (g_etm_custom_app_menu_count+1)+'0';\
etm_custom_app[g_etm_custom_app_menu_count].func = function;\
strcpy(etm_custom_app[g_etm_custom_app_menu_count].description+strlen(etm_custom_app[g_etm_custom_app_menu_count].description), info);\
strcpy(etm_custom_app[g_etm_custom_app_menu_count].description+strlen(etm_custom_app[g_etm_custom_app_menu_count].description), "\r\n");\
g_etm_custom_app_menu_count++;\
}while(0)
void __print(char *fmt,...)
{
va_list ap;
double dval;
int ival;
char *p, *sval;
char *bp, cval;
int fract;
unsigned short len;
bp= __static_buf;
*bp= 0;
va_start (ap, fmt);
for (p= fmt; *p; p++)
{
if (*p != '%')
{
*bp++= *p;
continue;
}
switch (*++p) {
case 'd':
ival= va_arg(ap, int);
if (ival < 0){
*bp++= '-';
ival= -ival;
}
etm_itoa (&bp, ival, 10);
break;
case 'o':
ival= va_arg(ap, int);
if (ival < 0){
*bp++= '-';
ival= -ival;
}
*bp++= '0';
etm_itoa (&bp, ival, 8);
break;
case 'x':
ival= va_arg(ap, int);
if (ival < 0){
*bp++= '-';
ival= -ival;
}
*bp++= '0';
*bp++= 'x';
etm_itoa (&bp, ival, 16);
break;
case 'c':
cval= va_arg(ap, int);
*bp++= cval;
break;
case 'f':
dval= va_arg(ap, double);
if (dval < 0){
*bp++= '-';
dval= -dval;
}
if (dval >= 1.0)
etm_itoa (&bp, (int)dval, 10);
else
*bp++= '0';
*bp++= '.';
fract= (int)((dval- (double)(int)dval)*(double)(MAXFRACT));
etm_itof(&bp, fract);
break;
case 's':
for (sval = va_arg(ap, char *) ; *sval ; sval++ )
*bp++= *sval;
break;
}
}
*bp= 0;
len = (unsigned short)(bp - __static_buf);
UART_PutBytes(uart_port1,(kal_uint8 *)__static_buf,len, MOD_ETM);
va_end (ap);
}
/*************************************************************************
* FUNCTION
* etm_create
*
* DESCRIPTION
* This function implements xyz entity's create handler.
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_bool etm_create(comptask_handler_struct **handle)
{
static const comptask_handler_struct task_handler_info =
{
etm_main, /* task entry function */
etm_init, /* task initialization function */
NULL, /* task configuration function */