Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

587 lines
11 KiB

  1. /*++
  2. Copyright (c) 1998-99 Microsoft Corporation
  3. Module Name:
  4. 61883.h
  5. Abstract:
  6. The public header for clients of the 61883 Class.
  7. Author:
  8. WGJ
  9. PSB
  10. --*/
  11. //
  12. // Class GUID
  13. //
  14. // {7EBEFBC0-3200-11d2-B4C2-00A0C9697D07}
  15. DEFINE_GUID(GUID_61883_CLASS, 0x7ebefbc0, 0x3200, 0x11d2, 0xb4, 0xc2, 0x0, 0xa0, 0xc9, 0x69, 0x7d, 0x7);
  16. //
  17. // IOCTL Definitions
  18. //
  19. #define IOCTL_61883_CLASS CTL_CODE( \
  20. FILE_DEVICE_UNKNOWN, \
  21. 0x91, \
  22. METHOD_IN_DIRECT, \
  23. FILE_ANY_ACCESS \
  24. )
  25. //
  26. // Current 61883 DDI Version
  27. //
  28. #define CURRENT_61883_DDI_VERSION 0x1
  29. //
  30. // INIT_61883_HEADER Macro
  31. //
  32. #define INIT_61883_HEADER( Av61883, Request ) \
  33. (Av61883)->Function = Request; \
  34. (Av61883)->Version = CURRENT_61883_DDI_VERSION;
  35. //
  36. // 61883 I/O Request Functions
  37. //
  38. enum {
  39. Av61883_GetUnitInfo,
  40. Av61883_SetUnitInfo,
  41. NotSupported0,
  42. Av61883_GetPlugHandle,
  43. Av61883_GetPlugState,
  44. Av61883_Connect,
  45. Av61883_Disconnect,
  46. Av61883_AttachFrame,
  47. Av61883_CancelFrame,
  48. Av61883_Talk,
  49. Av61883_Listen,
  50. Av61883_Stop,
  51. Av61883_SendFcpRequest,
  52. Av61883_GetFcpResponse,
  53. NotSupported1,
  54. Av61883_MAX
  55. };
  56. //
  57. // Plug States
  58. //
  59. #define CMP_PLUG_STATE_IDLE 0
  60. #define CMP_PLUG_STATE_READY 1
  61. #define CMP_PLUG_STATE_SUSPENDED 2
  62. #define CMP_PLUG_STATE_ACTIVE 3
  63. //
  64. // Connect Speeds (not the same as 1394 speed flags!!)
  65. //
  66. #define CMP_SPEED_S100 0x00
  67. #define CMP_SPEED_S200 0x01
  68. #define CMP_SPEED_S400 0x02
  69. //
  70. // CIP Frame Flags
  71. //
  72. #define CIP_VALIDATE_FIRST_SOURCE 0x00000001
  73. #define CIP_VALIDATE_ALL_SOURCE 0x00000002
  74. #define CIP_STRIP_SOURCE_HEADER 0x00000004
  75. #define CIP_USE_SOURCE_HEADER_TIMESTAMP 0x00000008
  76. #define CIP_DV_STYLE_SYT 0x00000010
  77. #define CIP_AUDIO_STYLE_SYT 0x00000020
  78. //
  79. // CIP Status Codes
  80. //
  81. #define CIP_STATUS_SUCCESS 0x00000000
  82. #define CIP_STATUS_CORRUPT_FRAME 0x00000001
  83. #define CIP_STATUS_FIRST_FRAME 0x00000002
  84. //
  85. // Plug Type
  86. //
  87. typedef enum {
  88. CMP_PlugOut = 0,
  89. CMP_PlugIn
  90. } CMP_PLUG_TYPE;
  91. //
  92. // Connect Type
  93. //
  94. typedef enum {
  95. CMP_Broadcast = 0,
  96. CMP_PointToPoint
  97. } CMP_CONNECT_TYPE;
  98. //
  99. // Client Request Structures
  100. //
  101. //
  102. // GetUnitInfo nLevel's
  103. //
  104. #define GET_UNIT_INFO_IDS 0x00000001 // Retrieves IDs of Unit
  105. #define GET_UNIT_INFO_CAPABILITIES 0x00000002 // Retrieves Capabilities of Unit
  106. typedef struct _GET_UNIT_IDS {
  107. //
  108. // UniqueID
  109. OUT LARGE_INTEGER UniqueID;
  110. //
  111. // VendorID
  112. //
  113. OUT ULONG VendorID;
  114. //
  115. // ModelID
  116. //
  117. OUT ULONG ModelID;
  118. //
  119. // VendorText Length
  120. //
  121. OUT ULONG ulVendorLength;
  122. //
  123. // VendorText String
  124. //
  125. OUT PWSTR VendorText;
  126. //
  127. // ModelText Length
  128. //
  129. OUT ULONG ulModelLength;
  130. //
  131. // ModelText String
  132. //
  133. OUT PWSTR ModelText;
  134. } GET_UNIT_IDS, *PGET_UNIT_IDS;
  135. typedef struct _GET_UNIT_CAPABILITIES {
  136. //
  137. // Number of Output Plugs supported by device
  138. //
  139. OUT ULONG NumOutputPlugs;
  140. //
  141. // Number of Input Plugs supported by device
  142. //
  143. OUT ULONG NumInputPlugs;
  144. //
  145. // MaxDataRate
  146. //
  147. OUT ULONG MaxDataRate;
  148. //
  149. // CTS Flags
  150. //
  151. OUT ULONG CTSFlags;
  152. //
  153. // Hardware Flags
  154. //
  155. OUT ULONG HardwareFlags;
  156. } GET_UNIT_CAPABILITIES, *PGET_UNIT_CAPABILITIES;
  157. //
  158. // GetUnitInfo
  159. //
  160. typedef struct _GET_UNIT_INFO {
  161. IN ULONG nLevel;
  162. IN OUT PVOID Information;
  163. } GET_UNIT_INFO, *PGET_UNIT_INFO;
  164. //
  165. // SetUnitInfo
  166. //
  167. typedef struct _SET_UNIT_INFO {
  168. IN ULONG nLevel;
  169. IN OUT PVOID Information;
  170. } SET_UNIT_INFO, *PSET_UNIT_INFO;
  171. //
  172. // GetPlugHandle
  173. //
  174. typedef struct _CMP_GET_PLUG_HANDLE {
  175. //
  176. // Requested Plug Number
  177. //
  178. IN ULONG PlugNum;
  179. //
  180. // Requested Plug Type
  181. //
  182. IN CMP_PLUG_TYPE Type;
  183. //
  184. // Returned Plug Handle
  185. //
  186. OUT HANDLE hPlug;
  187. } CMP_GET_PLUG_HANDLE, *PCMP_GET_PLUG_HANDLE;
  188. //
  189. // GetPlugState
  190. //
  191. typedef struct _CMP_GET_PLUG_STATE {
  192. //
  193. // Plug Handle
  194. //
  195. IN HANDLE hPlug;
  196. //
  197. // Current State
  198. //
  199. OUT ULONG State;
  200. //
  201. // Current Data Rate
  202. //
  203. OUT ULONG DataRate;
  204. //
  205. // Current Payload Size
  206. //
  207. OUT ULONG Payload;
  208. //
  209. // Number of Broadcast Connections
  210. //
  211. OUT ULONG BC_Connections;
  212. //
  213. // Number of Point to Point Connections
  214. //
  215. OUT ULONG PP_Connections;
  216. } CMP_GET_PLUG_STATE, *PCMP_GET_PLUG_STATE;
  217. //
  218. // CipDataFormat
  219. //
  220. typedef struct _CIP_DATA_FORMAT {
  221. //
  222. // FMT and FDF either known, or discovered
  223. // via AV/C command
  224. //
  225. UCHAR FMT;
  226. UCHAR FDF_hi;
  227. UCHAR FDF_mid;
  228. UCHAR FDF_lo;
  229. //
  230. // SPH as defined by IEC-61883
  231. //
  232. BOOLEAN bHeader;
  233. //
  234. // QPC as defined by IEC-61883
  235. //
  236. UCHAR Padding;
  237. //
  238. // DBS as defined by IEC-61883
  239. //
  240. UCHAR BlockSize;
  241. //
  242. // FN as defined by IEC-61883
  243. //
  244. UCHAR Fraction;
  245. //
  246. // BlockPeriod - TX Only
  247. //
  248. ULONG BlockPeriod;
  249. } CIP_DATA_FORMAT, *PCIP_DATA_FORMAT;
  250. //
  251. // Connect
  252. //
  253. typedef struct _CMP_CONNECT {
  254. //
  255. // Output Plug Handle
  256. //
  257. IN HANDLE hOutputPlug;
  258. //
  259. // Input Plug Handle
  260. //
  261. IN HANDLE hInputPlug;
  262. //
  263. // Requested Connect Type
  264. //
  265. IN CMP_CONNECT_TYPE Type;
  266. //
  267. // Requested Data Format - TX Only
  268. //
  269. IN CIP_DATA_FORMAT Format;
  270. //
  271. // Returned Connect Handle
  272. //
  273. OUT HANDLE hConnect;
  274. } CMP_CONNECT, *PCMP_CONNECT;
  275. //
  276. // Disconnect
  277. //
  278. typedef struct _CMP_DISCONNECT {
  279. //
  280. // Connect Handle to Disconnect
  281. //
  282. IN HANDLE hConnect;
  283. } CMP_DISCONNECT, *PCMP_DISCONNECT;
  284. //
  285. // CIP Frame typedef
  286. //
  287. typedef struct _CIP_FRAME CIP_FRAME, *PCIP_FRAME;
  288. //
  289. // ValidateInfo Struct. returned on pfnValidate.
  290. //
  291. typedef struct _CIP_VALIDATE_INFO {
  292. //
  293. // Connection Handle
  294. //
  295. HANDLE hConnect;
  296. //
  297. // Validate Context
  298. //
  299. PVOID Context;
  300. //
  301. // TimeStamp for current source packet
  302. //
  303. CYCLE_TIME TimeStamp;
  304. //
  305. // Packet offset for current source packet
  306. //
  307. PUCHAR Packet;
  308. } CIP_VALIDATE_INFO, *PCIP_VALIDATE_INFO;
  309. //
  310. // NotifyInfo Struct. returned on pfnNotify
  311. //
  312. typedef struct _CIP_NOTIFY_INFO {
  313. //
  314. // Connection Handle
  315. //
  316. HANDLE hConnect;
  317. //
  318. // Notify Context
  319. //
  320. PVOID Context;
  321. //
  322. // Frame
  323. //
  324. PCIP_FRAME Frame;
  325. } CIP_NOTIFY_INFO, *PCIP_NOTIFY_INFO;
  326. //
  327. // Validate & Notify Routines
  328. //
  329. typedef
  330. ULONG
  331. (*PCIP_VALIDATE_ROUTINE) (
  332. IN PCIP_VALIDATE_INFO ValidateInfo
  333. );
  334. typedef
  335. ULONG
  336. (*PCIP_NOTIFY_ROUTINE) (
  337. IN PCIP_NOTIFY_INFO NotifyInfo
  338. );
  339. //
  340. // CIP Frame Struct
  341. //
  342. struct _CIP_FRAME {
  343. IN PCIP_FRAME pNext; // chain multiple frames together
  344. IN ULONG Flags; //specify flag options
  345. IN PCIP_VALIDATE_ROUTINE pfnValidate; //backdoor
  346. IN PVOID ValidateContext;
  347. IN PCIP_NOTIFY_ROUTINE pfnNotify; //completion
  348. IN PVOID NotifyContext;
  349. OUT CYCLE_TIME Timestamp;
  350. OUT ULONG Status;
  351. IN OUT PUCHAR Packet; //the locked buffer
  352. };
  353. //
  354. // CIP Attach Frame Structure
  355. //
  356. typedef struct _CIP_ATTACH_FRAME {
  357. HANDLE hConnect; // Connect Handle
  358. ULONG FrameLength; // Frame Length
  359. ULONG SourceLength; // Source Length
  360. PCIP_FRAME Frame; // Frame
  361. } CIP_ATTACH_FRAME, *PCIP_ATTACH_FRAME;
  362. //
  363. // CIP Cancel Frame Structure
  364. //
  365. typedef struct _CIP_CANCEL_FRAME {
  366. IN HANDLE hConnect;
  367. IN PCIP_FRAME Frame;
  368. } CIP_CANCEL_FRAME, *PCIP_CANCEL_FRAME;
  369. //
  370. // CIP Talk Structure
  371. //
  372. typedef struct _CIP_TALK {
  373. //
  374. // Connect Handle
  375. //
  376. IN HANDLE hConnect;
  377. } CIP_TALK, *PCIP_TALK;
  378. //
  379. // CIP Listen Structure
  380. //
  381. typedef struct _CIP_LISTEN {
  382. //
  383. // Connect Handle
  384. //
  385. IN HANDLE hConnect;
  386. } CIP_LISTEN, *PCIP_LISTEN;
  387. //
  388. // CIP Stop Structure
  389. //
  390. typedef struct _CIP_STOP {
  391. //
  392. // Connect Handle
  393. //
  394. IN HANDLE hConnect;
  395. } CIP_STOP, *PCIP_STOP;
  396. //
  397. // FCP Frame Format
  398. //
  399. typedef struct _FCP_FRAME {
  400. UCHAR ctype:4;
  401. UCHAR cts:4;
  402. UCHAR payload[511];
  403. } FCP_FRAME, *PFCP_FRAME;
  404. //
  405. // FCP Request Structure
  406. //
  407. typedef struct _FCP_Request {
  408. IN ULONG Length;
  409. IN PFCP_FRAME Frame;
  410. } FCP_REQUEST, *PFCP_REQUEST;
  411. //
  412. // FCP Response Structure
  413. //
  414. typedef struct _FCP_Response {
  415. IN OUT ULONG Length;
  416. IN OUT PFCP_FRAME Frame;
  417. } FCP_RESPONSE, *PFCP_RESPONSE;
  418. //
  419. // Av61883 Struct
  420. //
  421. typedef struct _AV_61883_REQUEST {
  422. //
  423. // Requested Function
  424. //
  425. ULONG Function;
  426. //
  427. // Selected DDI Version
  428. //
  429. ULONG Version;
  430. //
  431. // Flags
  432. //
  433. ULONG Flags;
  434. union {
  435. GET_UNIT_INFO GetUnitInfo;
  436. SET_UNIT_INFO SetUnitInfo;
  437. CMP_GET_PLUG_HANDLE GetPlugHandle;
  438. CMP_GET_PLUG_STATE GetPlugState;
  439. CMP_CONNECT Connect;
  440. CMP_DISCONNECT Disconnect;
  441. CIP_ATTACH_FRAME AttachFrame;
  442. CIP_CANCEL_FRAME CancelFrame;
  443. CIP_TALK Talk;
  444. CIP_LISTEN Listen;
  445. CIP_STOP Stop;
  446. FCP_REQUEST Request;
  447. FCP_RESPONSE Response;
  448. };
  449. } AV_61883_REQUEST, *PAV_61883_REQUEST;