⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgque.c

📁 GM5621原代码
💻 C
字号:
/*
	$Workfile:   msgque.c  $
	$Revision:   1.8  $
	$Date:   Sep 15 2004 17:15:24  $
*/

//******************************************************************
//
//          Copyright (C) 2002. GENESIS MICROCHIP INC.
//  All rights reserved.  No part of this program may be reproduced.
//
//	Genesis Microchip Corp., 2150 Gold Street
//			Alviso, CA 95002	USA
//  Genesis Microchip Inc., 165 Commerce Valley Dr. West
//          Thornhill, Ontario, Canada, L3T 7V8
//
//================================================================
//
//  MODULE: msgque.c
//
//  USAGE : This module contains the message queue code for implementing
//          a circular message que.
//
//******************************************************************

//******************************************************************
//                  I N C L U D E    F I L E S
//******************************************************************
#include "inc\all.h"

#define	DEBUG_QUE    1

#if DEBUG_QUE && DEBUG_MSG
	#define	msg(a,b)	gm_Print((const char far *)a,b)

	char far* getOsdMsgStr(BYTE message);
	char far* getPHMsgStr(BYTE message);
#else
	#define msg(a,b)
#endif

MsgQueueType OsdQ = {0,0,0}; // clear head and tail indices and size.
MsgQueueType PowerHandlerQ = {0,0,0}; // clear head and tail indices and size.


//******************************************************************************
//	DESCRIPTION	:	Adds a BYTE message to the circular queue.  If queue is
//					Full, the oldest message is over-written.
//	SYNTAX     	:	BYTE SendMsg(MsgQueueType *queue, BYTE message)
//	PARAMETERS	:	Pointer to desired message queue, and a BYTE size message.
//  RETURN		:	gmd_TRUE
//******************************************************************************
BYTE SendMsg(MsgQueueType *queue, BYTE message)
{
    if(queue->Size >= MAX_MSG_QUEUE_SIZE)
    	queue->Size--;

    queue->Size++;

    queue->Queue[queue->Head] = message;

    queue->Head++;
    if(queue->Head >= MAX_MSG_QUEUE_SIZE)
        queue->Head = 0;

	#if DEBUG_QUE && DEBUG_MSG
    if(queue == &OsdQ)
    {
    	msg("SendMsg >>>>>> OSD",0);
        msg(getOsdMsgStr(message),0);
    }
    else
    {
    	msg("SendMsg >>>>>> PH",0);
        msg(getPHMsgStr(message),0);
    }
    #endif

    return gmd_TRUE;
}

//******************************************************************************
//	DESCRIPTION	:	Retreves a BYTE message to the circular queue.
//	SYNTAX     	:	BYTE GetMsg(MsgQueueType *queue)
//	PARAMETERS	:	Pointer to desired message queue.
//  RETURN		:	Returns next message in queue or 0x00 if no message.
//******************************************************************************
BYTE GetMsg(MsgQueueType *queue)
{
    BYTE msg;

    if(!queue->Size)
        return (QUEUE_EMPTY);

    queue->Size--;
    msg = queue->Queue[queue->Tail];

    queue->Tail++;
    if(queue->Tail >= MAX_MSG_QUEUE_SIZE)
        queue->Tail = 0;

	return (msg);
}
//******************************************************************************
//	DESCRIPTION	:	Checks to see if there's a message pending.
//	SYNTAX     	:	BYTE GetMsg(MsgQueueType *queue)
//	PARAMETERS	:	Pointer to desired message queue.
//  RETURN		:	Returns gmd_TRUE/gmd_FALSE
//******************************************************************************
gmt_RET_STAT IsMsg(MsgQueueType *queue)
{
	 if(!queue->Size)
		  return gmd_FALSE;

	  return gmd_TRUE;
}

#if DEBUG_QUE && DEBUG_MSG
char far* getOsdMsgStr(BYTE message)
{
	switch(message)
	 {
		case MTO_POWER_ON           :
        	return "MTO_POWER_ON";
		case MTO_POWER_STANDBY      :
        	return "MTO_POWER_STANDBY";
		case MTO_POWER_SUSPEND      :
        	return "MTO_POWER_SUSPEND";
		case MTO_POWER_DOWN_NOTICE  :
        	return "MTO_POWER_DOWN_NOTICE";
		case MTO_POWER_DOWN         :
        	return "MTO_POWER_DOWN";
		case MTO_NO_SYNC            :
        	return "MTO_NO_SYNC";
		case MTO_NO_CABLE           :
        	return "MTO_NO_CABLE";
		case MTO_VALID_MODE         :
        	return "MTO_VALID_MODE";
		case MTO_MODE_CHANGE        :
        	return "MTO_MODE_CHANGE";
		case MTO_OUT_OF_RANGE       :
        	return "MTO_OUT_OF_RANGE";
		case MTO_SUBSAMPLE          :
        	return "MTO_SUBSAMPLE";
		case MTO_SPLASH_SCREEN      :
        	return "MTO_SPLASH_SCREEN";
		case MTO_AUTO_ADJ           :
        	return "MTO_AUTO_ADJ";
		case MTO_SYNC_STANDBY       :
        	return "MTO_SYNC_STANDBY";
		case MTO_SYNC_SUSPEND       :
			return "MTO_SYNC_SUSPEND";
		case MTO_REQ_HARD_POWER_DOWN       :
			return "MTO_REQ_HARD_POWER_DOWN";
      case MTO_INPUT_RGB:
			return  "MTO_INPUT_RGB";
      case MTO_INPUT_DVI:
			return  "MTO_INPUT_DVI";
      case MTO_START_AUTO:
			return  "MTO_START_AUTO";
      case MTO_AUTO_COMPLETE:
			return  "MTO_AUTO_COMPLETE";
      case MTO_AUTO_SUCCESS:
			return  "MTO_AUTO_SUCCESS";
      case MTO_AUTO_FAILED:
			return  "MTO_AUTO_FAILED";
        default :
        	return "unknown";
    }
}
char far* getPHMsgStr(BYTE message)
{
	switch(message)
    {
		case MTP_SOFTKEY_OFF :
        	return "MTP_SOFTKEY_OFF";
		case MTP_SOFTKEY_ON  :
        	return "MTP_SOFTKEY_ON";
		case MTP_POWER_DOWN  :
        	return "MTP_POWER_DOWN";
        default :
        	return "unknown";
    }
}
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -