【DM642学习笔记五】FVID驱动模型 API函数

1、FVID_control

作用:发送一个控制命令到mini_driver

语法: status = FVID_control(fvidChan, cmd, args);

参数:

FVID_HandlefvidChan           

            Intcmd                        

             Ptrargs                       

             Return Value Int status

参数说明:

fvidChan是FVID_create()创建的指向通道的句柄.

 cmd有两个值: IOM_ABORT----作用是中止所以的未定的I/O工作

              IOM_FLUSH----作用是所以采集口的工作被丢弃,所以显示I/O的工作正常进行.

返回值:

   如果调用成功,FVID_control返回IOM_COMPLETED .如果有错误产生,这个调用会返回一个负值.

Example:

 

FVID_control(fvidChan,IOM_ABORT, NULL);

2、FVID_create()

   作用:分配并初始化FVID通道对象;

 语法:fvidChan = FVID_create(name, mode, *status, optArgs, *attrs);

Stringname                 

Intmode                    

Int*status                 

PtroptArgs                 

FVID_Attrs*attrs           

其中:name是设备实例的句柄,是一个字符串

mode 是选择的模式,只有两个值:IOM_INPUT设置采集模式,IOM_OUTPUT设置显示模式.

status是The status argument isan out parameter that this function fills with a pointer to thestatus that was returned by the mini-driver.

attrs 是指向FVID_Attrs结构的指针:

FVID_Attrs的定义如下:typedefstruct FVID_Attrs

              {

                                                       Uns timeout;

                                                      } FVID_Attrs;

timeout成员用来指定旗语同步,它的值可以是:

1.     >SYS_FOREVER:会让FVID_alloc, FVID_free andFVID_exchange的调用不确定的等待到这个调用完成.

2.     >数字的timeout值会让这些APIs阻塞一段指定的时间(以系统时钟).

3.     >0值会让APIs不阻塞,他们会立刻返回,这种情况下,应用程序会检查返回的status值来保证调用已经成功完成.

备注:FVID_alloc, FVID_free andFVID_exchange 的调用只能在 DSP/BIOS task (TSK).

·        FVID_create的返回值:

如果通道成功的打开了,那么FVID_create返回一个指向通道的句柄.这个句柄可以用来让后来的模块调用这个通道.

Example

FVID_ATTRS dispAttrs =FVID_ATTRS;

chan-

Handle =FVID_create(“display0”, IOM_INPUT, NULL, NULL,

&dispAttrs);

3、FVID.h的定义

 

#defineFVID_BASE      IOM_USER

#defineFVID_ALLOC     (FVID_BASE + 0)
  #defineFVID_FREE      (FVID_BASE + 1)
  #define FVID_EXCHANGE  (FVID_BASE + 2)

typedef GIO_HandleFVID_Handle;

typedef struct FVID_IFrame{
    Char*y1;
    Char*cb1;
    Char*cr1;
    Char*y2;
    Char*cb2;
    Char*cr2;
}FVID_IFrame;


typedef struct FVID_PFrame {
    Char*y;
    Char*cb;
    Char*cr;
} FVID_PFrame;



typedef struct FVID_RawIFrame{
    Char*buf1;   
    Char*buf2;   
} FVID_RawIFrame;

typedef structFVID_RawPFrame{
    Char*buf;   
} FVID_RawPFrame;


typedef struct FVID_Frame {
   QUE_Elem       queElement;
    union{
       FVID_IFrame    iFrm;    
       FVID_PFrame    pFrm;    
       FVID_RawIFrame riFrm;   
       FVID_RawPFrame rpFrm;   
    }frame;   
} FVID_Frame;


#define FVID_alloc(gioChan, bufp)
       GIO_submit(gioChan, FVID_ALLOC, bufp, NULL, NULL)



#define FVID_control(gioChan, cmd, args)
       GIO_control(gioChan, cmd, args)



#define  FVID_create(name, mode, status, optArgs,attrs)
       GIO_create(name, mode, status, optArgs, attrs)



#define FVID_delete(gioChan)
       GIO_delete(gioChan)



#define FVID_exchange(gioChan, bufp)
       GIO_submit(gioChan, FVID_EXCHANGE, bufp, NULL, NULL)

 


#define FVID_free(gioChan, bufp)
       GIO_submit(gioChan, FVID_FREE, bufp, NULL, NULL)


#ifdef __cplusplus
}
#endif

#endif

原文地址:https://www.cnblogs.com/eaglediao/p/7136535.html