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

📄 ca320240_drv.c.bak

📁 移植好的Ibm405ep bsp板极支持包
💻 BAK
字号:
/*
 * $Id: ca320240_drv.c,v 1.111.2.6.4.1 2004/02/06 08:58:59 hzk Exp $
 * $Copyright: (c) 2004-2005,Vcom Corp.
 * All Rights Reserved.$
 *
 * ca320240_drv
 */
#include <vxworks.h>
#include <ioLib.h>
#include "ca320240.h"
#include "ca320240_drv.h"


static CA320240_CHAN ca3202400chan;

/* forward declarations */

static STATUS ca320240Ioctl (CA320240_CHAN *pChan,int request,int arg);
static int    ca320240PollOutput (SIO_CHAN *,char);
static int    ca320240PollInput (SIO_CHAN *,char *);
int   ca320240Startup (CA320240_CHAN *);
static int    ca320240CallbackInstall (SIO_CHAN *, int, STATUS (*)(), void *);

/* local driver function table */

static SIO_DRV_FUNCS ca320240SioDrvFuncs =
    {
    (int (*)())			ca320240Ioctl,
    (int (*)())			ca320240Startup,
    (int (*)())				ca320240CallbackInstall,
    (int (*)())			ca320240PollInput,
    (int (*)(SIO_CHAN *,char))ca320240PollOutput
    };
/*******************************************************************************
*
* ppc860Ioctl - special device control
*
* RETURNS: OK on success, EIO on device error, ENOSYS on unsupported
*          request.
*
*/

LOCAL STATUS ca320240Ioctl
    (
    CA320240_CHAN *	pChan,		/* device to control */
    int			request,	/* request code */
    int			arg		/* some argument */
    )
    {


    S_CA320240_XY *point;
    S_CA320240_INVERT_XY *invert_point;
    STATUS 	status = OK;

    switch (request)
	{
	 case SIO_MODE_SET:
            if (!((int) arg == SIO_MODE_POLL || (int) arg == SIO_MODE_INT))
                {
                status = EIO;
                break;
                }
            pChan->channelMode = arg;
            break;

        case SIO_MODE_GET:
            * (int *) arg = pChan->channelMode;
	    	break;

        case SIO_AVAIL_MODES_GET:
            *(int *)arg = SIO_MODE_INT | SIO_MODE_POLL;
	    break;
	    /*清屏*/
	case CA320240_CLEAR:
	    	ca320240_clear();
	    	pChan->x=0;
			pChan->y=0;
	    	break;
	   /*反白显示*/
	case CA320240_INVERT_DISPLAY:
		invert_point=(S_CA320240_INVERT_XY *)arg;
		ca320240_invert_display(invert_point->x,invert_point->y,invert_point->len,invert_point->flag);
		break;
	    /*清除一行*/
	case CA320240_CLEAR_LINE:
	    	ca320240_clear_line(pChan->x);
	    	pChan->x=0;
	    	break;
	/*设置x,y坐标*/
	case CA320240_SET_XY:
	    	point=(S_CA320240_XY *)arg;
	    	if(point->x>=AP){
				status=ENOSYS;
				break;
			}
			if(point->y>=LF/8){
				status=ENOSYS;
				break;	
			}
			ca320240_gotoxy_text(point->x,point->y);
			pChan->x=point->x;
			pChan->y=point->y;
			break;
		/*读取x,y坐标*/
		case CA320240_GET_XY:
			point=(S_CA320240_XY *)arg;
			ca320240_getxy_text(&point->x,&point->y);
			break;
	    	

	default:
	    status = ENOSYS;
	}

    return (status);
    } 
/*******************************************************************************
*
* ppc860Startup - transmitter startup routine
*/

int ca320240Startup
    (
    CA320240_CHAN *pChan		/* ty device to start up */
    )
    {
    char outChar;
    CA320240_CHAN *pChanx=&ca3202400chan;
    FAST UINT16 dataLen = 0;
    if (pChan->channelMode == SIO_MODE_POLL){
		return ERROR;
	}
    while((*pChan->getTxChar) (pChan->getTxArg, &outChar) == OK){
		do{
	    	pChanx->buf[dataLen++]=outChar;
		}while ((dataLen < sizeof(pChanx->buf)) &&((*pChan->getTxChar) (pChan->getTxArg, &outChar) == OK));
		ca320240_output_en_drv(&pChanx->x,&pChanx->y,dataLen,pChanx->buf,1);     
	}
    return OK;
}
/******************************************************************************
*
* ppc860PollInput - poll the device for input.
*
* RETURNS: OK if a character arrived, ERROR on device error, EAGAIN
*          if the input buffer is empty.
*/

static int ca320240PollInput
    (
    SIO_CHAN *	pSioChan,
    char *	thisChar
    )
    {
        return (EAGAIN); 
    }
/******************************************************************************
*
* ppc860PollOutput - output a character in polled mode.
*
* RETURNS: OK if a character arrived, ERROR on device error, EAGAIN
*          if the output buffer if full.
*/

static int ca320240PollOutput
    (
    SIO_CHAN *	pSioChan,
    char	outChar
    )
    {
    CA320240_CHAN *	pChan = (CA320240_CHAN *) pSioChan;


    ca320240_output_en_drv(&pChan->x,&pChan->y,1,&outChar,1);
    return (OK);
    }  
/******************************************************************************
*
* ca320240CallbackInstall - install ISR callbacks to get put chars.
*
*/

static int ca320240CallbackInstall
    (
    SIO_CHAN *	pSioChan,
    int		callbackType,
    STATUS	(* callback)(),
    void *	callbackArg
    )
    {
    CA320240_CHAN * pChan = (CA320240_CHAN *) pSioChan;

    switch (callbackType)
        {
        case SIO_CALLBACK_GET_TX_CHAR:
            pChan->getTxChar    = callback;
            pChan->getTxArg     = callbackArg;
            return (OK);
	    break;

        case SIO_CALLBACK_PUT_RCV_CHAR:
            pChan->putRcvChar   = callback;
            pChan->putRcvArg    = callbackArg;
            return (OK);
	    break;

        default:
            return (ENOSYS);
        }
    } 
extern void ca320240_init_font(); 
void ca320240DevInit1()
{
	bzero((char *)&ca3202400chan,sizeof(ca3202400chan));
	ca3202400chan.x=0;
	ca3202400chan.y=300;
	ca3202400chan.pDrvFuncs=&ca320240SioDrvFuncs;	
	ca320240_init_font();	
}
void ca320240DevInit()
{
	int fd;
	char tyName[64];
	sprintf(tyName,"%s%d","/tyCo/",100);
	ttyDevCreate(tyName,(SIO_CHAN *)&ca3202400chan,512,2048);	
	fd=open(tyName,O_WRONLY,0);
	/*ioGlobalStdSet (STD_IN,  fd);*/
	/*设置液晶为标准输出,错误输出接口*/
    	ioGlobalStdSet (STD_OUT, fd);
    	ioGlobalStdSet (STD_ERR, fd);
};

⌨️ 快捷键说明

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