windows-nt/Source/XPSP1/NT/drivers/wdm/capture/mini/msdv/msdvavc.h
2020-09-26 16:20:57 +08:00

228 lines
5.1 KiB
C

/*++
Module Name:
MsdvAvc.h
Abstract:
Header file for MsdvAvc.c.
Author:
Yee J. Wu 27-July-99
Environment:
Kernel mode only
Revision History:
--*/
#ifndef _MSDVAVC_INC
#define _MSDVAVC_INC
#include "XPrtDefs.h" // WdmCap directory; derived from DShow's edevdefs.h
#include "EDevCtrl.h" // External Device COM interface structures
//
// The index MUST match DVcrAVCCmdTable[]
//
typedef enum {
DV_UNIT_INFO = 0
,DV_SUBUNIT_INFO
,DV_CONNECT_AV_MODE
,DV_VEN_DEP_CANON_MODE // Vendor denpendent mode of operation for Canon DV that does not support ConnectDV
,DV_VEN_DEP_DVCPRO // Vendor depend cmd to detect DVC PRO tape format
,DV_IN_PLUG_SIGNAL_FMT
,DV_OUT_PLUG_SIGNAL_FMT // to determine if it is a PAL or NTSC
,VCR_TIMECODE_SEARCH
,VCR_TIMECODE_READ
,VCR_ATN_SEARCH
,VCR_ATN_READ
,VCR_RTC_SEARCH
,VCR_RTC_READ
,VCR_OPEN_MIC_CLOSE
,VCR_OPEN_MIC_READ
,VCR_OPEN_MIC_WRITE
,VCR_OPEN_MIC_STATUS
,VCR_READ_MIC
,VCR_WRITE_MIC
,VCR_OUTPUT_SIGNAL_MODE
,VCR_INPUT_SIGNAL_MODE
,VCR_LOAD_MEDIUM_EJECT
,VCR_RECORD
,VCR_RECORD_PAUSE
,VCR_PLAY_FORWARD_STEP
,VCR_PLAY_FORWARD_SLOWEST
,VCR_PLAY_FORWARD_SLOWEST2
,VCR_PLAY_FORWARD_FASTEST
,VCR_PLAY_REVERSE_STEP
,VCR_PLAY_REVERSE_SLOWEST
,VCR_PLAY_REVERSE_SLOWEST2
,VCR_PLAY_REVERSE_FASTEST
,VCR_PLAY_FORWARD
,VCR_PLAY_FORWARD_PAUSE
,VCR_WIND_STOP
,VCR_WIND_REWIND
,VCR_WIND_FAST_FORWARD
,VCR_TRANSPORT_STATE
,VCR_TRANSPORT_STATE_NOTIFY
,VCR_MEDIUM_INFO
,VCR_RAW_AVC
} DVCR_AVC_COMMAND, *PDVCR_AVC_COMMAND;
#define MAX_FCP_PAYLOAD_SIZE 512
//
// CTYPE definitions (in bit-map form... should correlate with AvcCommandType from avc.h)
//
typedef enum {
CMD_CONTROL = 0x01
,CMD_STATUS = 0x02
,CMD_SPEC_INQ = 0x04
,CMD_NOTIFY = 0x08
,CMD_GEN_INQ = 0x10
} BITMAP_CTYPE;
typedef enum {
CMD_STATE_UNDEFINED
,CMD_STATE_ISSUED
,CMD_STATE_RESP_ACCEPTED
,CMD_STATE_RESP_REJECTED
,CMD_STATE_RESP_NOT_IMPL
,CMD_STATE_RESP_INTERIM
,CMD_STATE_ABORTED
} AVC_CMD_STATE, *PAVC_CMD_STATE;
// An AVC command entry
typedef struct _AVC_CMD_ENTRY {
LIST_ENTRY ListEntry;
PDVCR_EXTENSION pDevExt;
PIRP pIrp; // The Irp associated with this command
PAVC_COMMAND_IRB pAvcIrb; // points to the AVC command information
PVOID pProperty; // Data from/to COM interface
DVCR_AVC_COMMAND idxDVCRCmd; // Used to check for RAW AVC command, which requires special processing
AVC_CMD_STATE cmdState; // Issuing, interim, completed
NTSTATUS Status; // To save the results of response parsing
AvcCommandType cmdType; // Type of command: Control, Status. Notify, Gen or Spec Inquery
BYTE OpCode; // Since the opcode in response frame of TRANSITION and STABLE can be different from the COMMAND frame
BYTE Reserved[3]; // Pack to DWORD
} AVCCmdEntry, *PAVCCmdEntry;
#define CMD_IMPLEMENTED 1
#define CMD_NOT_IMPLEMENTED 0
#define CMD_UNDETERMINED 0xffffffff // -1
typedef struct {
DVCR_AVC_COMMAND command; // VCR_PLAY_FORWARD
LONG lCmdImplemented; // 1:Implemented, 0:NotImpelemnted; -1:UnDetermined
ULONG ulRespFlags; // DVCR_AVC_SEND
ULONG ulCmdSupported; // one or more of constants defined in BITMAP_CTYPE
LONG OperandLength; // -1 = variable length
BYTE CType;
BYTE SubunitAddr;
BYTE Opcode;
BYTE Operands[MAX_AVC_OPERAND_BYTES];
} KSFCP_PACKET, *PKSFCP_PACKET;
#define OPC_TIMECODE 0x51
#define OPC_OPEN_MIC 0x60
#define OPC_READ_MIC 0x61
#define OPC_WRITE_MIC 0x62
#define OPC_INPUT_SIGNAL_MODE 0x79
#define OPC_LOAD_MEDIUM 0xc1
#define OPC_RECORD 0xc2
#define OPC_PLAY 0xc3
#define OPC_WIND 0xc4
#define OPC_TRANSPORT_STATE 0xd0
#define OPC_MEDIUM_INFO 0xda
#define UNIT_TYPE_ID_VCR 0x20 // VCR 00100:000; 00100 == 4 == VCR, 000 == instancve number
#define UNIT_TYPE_ID_CAMERA 0x38 // Camera 00111:000; 00111 == 7 == Camera, 000 == instancve number
#define UNIT_TYPE_ID_DV 0xff // DV UNIT as a whole
// Vendor IDs that require special treatments
#define VENDOR_ID_MASK 0x00ffffff
#define VENDORID_CANON 0x85 // VEN_85 : Vendor Dependent command for ModeOfOperation
#define VENDORID_PANASONIC 0x8045 // VEN_8045 : DVCPRO?
#define VENDORID_SAMSUNG 0xf0 // VEN_f0 : exception for AVC Command Retries
#endif
NTSTATUS
DVIssueAVCCommand (
IN PDVCR_EXTENSION pDevExt,
IN AvcCommandType cType,
IN DVCR_AVC_COMMAND idxAVCCmd,
IN PVOID pProperty
);
void
DVAVCCmdResetAfterBusReset(
PDVCR_EXTENSION pDevExt
);
NTSTATUS
DVGetDeviceProperty(
IN PDVCR_EXTENSION pDevExt,
IN PSTREAM_PROPERTY_DESCRIPTOR pSPDesc,
OUT PULONG pulActualBytetransferred
);
NTSTATUS
DVSetDeviceProperty(
IN PDVCR_EXTENSION pDevExt,
IN PSTREAM_PROPERTY_DESCRIPTOR pSPD,
IN PULONG pulActualBytetransferred
);