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

📄 hostif_pc.c

📁 PNX系列设备驱动 PNX系列设备驱动
💻 C
字号:
/*
 *  +-------------------------------------------------------------------+
 *  | Copyright (c) 1995,1996,1997 by Philips Semiconductors.           |
 *  |                                                                   |
 *  | This software  is furnished under a license  and may only be used |
 *  | and copied in accordance with the terms  and conditions of such a |
 *  | license  and with  the inclusion of this  copyright notice.  This |
 *  | software or any other copies of this software may not be provided |
 *  | or otherwise  made available  to any other person.  The ownership |
 *  | and title of this software is not transferred.                    |
 *  |                                                                   |
 *  | The information  in this software  is subject  to change  without |
 *  | any  prior notice  and should not be construed as a commitment by |
 *  | Philips Semiconductors.                                           |
 *  |                                                                   |
 *  | This  code  and  information  is  provided  "as is"  without  any |
 *  | warranty of any kind,  either expressed or implied, including but |
 *  | not limited  to the implied warranties  of merchantability and/or |
 *  | fitness for any particular purpose.                               |
 *  +-------------------------------------------------------------------+
 *
 *
 *  Module name              : HostIF_pc.c    1.2
 *
 *  Last update              : 13:05:40 - 97/10/09
 *
 *  Title                    : Low level WinNT communication, TM-1 part
 *
 *  Reviewed                 : 
 *
 *  Revision history         : 
 *
 *  Description              :  
 *
 *           This module is part of an implementation of the HostCall interface.
 *           HostCall is the software component which is required by
 *           the TCS toolset to adapt the programs generated by this toolset
 *           to a specific host (see file HostCall.h in the TCS include dir).
 *           
 *           HostIF is one of two modules which form an implementation of
 *           the HostCall interface (the other one is RPCClient), and provides
 *           the necessary communication layer. 
 *           This communication layer consists of functions for sending and
 *           receiving pointer values to/from the RPCServer running on the
 *           host.
 *
 *           The implementation of HostCall is partitioned between RPCClient
 *           and HostIF as follows:
 *
 *           - _HostCall_notify is provided in HostIF
 *           - _HostCall_host_send is provided in RPCClient.
 *           - _HostCall_init and -terminate are provided in RPCClient.
 *           - Module RPCClient provides the general implementation strategy
 *             and solves all cache problems.
 *           - HostIF provides a simple communication interface for sending
 *             pointers hence and forth.
 *           - RPCClient communicates with a RPCServer on the host.
 *
 *           More specific, HostIF should provide for the following:
 * 
 *           1) It must implement functions _HostIF_init and _HostIF_term,
 *              for whatever initialisation and termination is needed.
 *           2) It must implement a function _HostIF_send for sending a pointer
 *              (to a command buffer) to the RPCServer on the host. 
 *              This function must return a success status.
 *           3) It must be able to receive similar pointers from the 
 *              RPCServer on the host, which must each be passed to a call
 *              to function _RPCClient_notify.
 *           4) A debug print routine to whatever destination
 *
 *           This is an HostIF implementation for communicating with
 *           an RPCServer running on a PC under the Windows NT OS.
 *           This module is implemented on top of the TM Manager.
 */

/*----------------------------includes----------------------------------------*/

#include "HostIF.h"
#include <stdarg.h>
#include <tmlib/tmtypes.h>
#include <tmlib/dprintf.h>
#include "tmmanapi.h"
#include "tmmanerr.h"

/*-----------------------------module state-----------------------------------*/


static UInt32 hostcall_channel;             /* Created communication channel */



/*----------------------------functions---------------------------------------*/

    
Bool _HostIF_send( Pointer command )
{
	tmmanPacket      packet;

	packet.Argument[0]= (UInt32)command;

	while (tmmanMessageSend(hostcall_channel, &packet) == statusChannelMailboxFullError) ;

        return True;
}

     

/*--------------------------- Initialisation / Termination -------------------*/



    static TMStatus notify()
    {
	tmmanPacket Packet;

	while (tmmanMessageReceive(hostcall_channel, &Packet) == statusSuccess) {
            Pointer command = Packet.Argument[0];
           _RPCClient_notify(command);
        }

	return statusSuccess;
    }



Bool _HostIF_init()
{
        UInt32  DSPHandle;

        tmmanInit( 0, Null);
 
        if (   tmmanDSPOpen ( 0, &DSPHandle ) != statusSuccess )  {
            return False;
        }

        if ( tmmanMessageCreate ( 
		    DSPHandle, 
		    "CRunTime", /* message ID - should be the same on the host */
		    (UInt32)notify,
		    constTMManModuleTargetCallback, /* Synchronizaton Flags */
		    &hostcall_channel ) != statusSuccess
           ) {
           tmmanExit( 0 ); 
           return False;
        }

        return True;
}



void _HostIF_term()
{
	tmmanMessageDestroy ( hostcall_channel );
        tmmanExit           ( 0 ); 
}

⌨️ 快捷键说明

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