📄 ca320240_drv.c
字号:
/*
* $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()
{
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 + -