• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2008 NVIDIA, Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23 
24 #ifndef __NVCTRLLIB_H
25 #define __NVCTRLLIB_H
26 
27 #include "NVCtrl.h"
28 
29 #if defined __cplusplus
30 extern "C" {
31 #endif
32 
33 /*
34  *  XNVCTRLQueryExtension -
35  *
36  *  Returns True if the extension exists, returns False otherwise.
37  *  event_basep and error_basep are the extension event and error
38  *  bases.  Currently, no extension specific errors or events are
39  *  defined.
40  */
41 
42 Bool XNVCTRLQueryExtension(Display *dpy, int *event_basep, int *error_basep);
43 
44 /*
45  *  XNVCTRLQueryVersion -
46  *
47  *  Returns True if the extension exists, returns False otherwise.
48  *  major and minor are the extension's major and minor version
49  *  numbers.
50  */
51 
52 Bool XNVCTRLQueryVersion(Display *dpy, int *major, int *minor);
53 
54 /*
55  *  XNVCTRLIsNvScreen
56  *
57  *  Returns True is the specified screen is controlled by the NVIDIA
58  *  driver.  Returns False otherwise.
59  */
60 
61 Bool XNVCTRLIsNvScreen(Display *dpy, int screen);
62 
63 /*
64  *  XNVCTRLQueryTargetCount -
65  *
66  *  Returns True if the target type exists.  Returns False otherwise.
67  *  If XNVCTRLQueryTargetCount returns True, value will contain the
68  *  count of existing targets on the server of the specified target
69  *  type.
70  *
71  *  Please see "Attribute Targets" in NVCtrl.h for the list of valid
72  *  target types.
73  *
74  *  Possible errors:
75  *     BadValue - The target doesn't exist.
76  */
77 
78 Bool XNVCTRLQueryTargetCount(Display *dpy, int target_type, int *value);
79 
80 /*
81  *  XNVCTRLSetAttribute -
82  *
83  *  Sets the attribute to the given value.  The attributes and their
84  *  possible values are listed in NVCtrl.h.
85  *
86  *  Not all attributes require the display_mask parameter; see
87  *  NVCtrl.h for details.
88  *
89  *  Calling this function is equivalent to calling XNVCTRLSetTargetAttribute()
90  *  with the target_type set to NV_CTRL_TARGET_TYPE_X_SCREEN and
91  *  target_id set to 'screen'.
92  *
93  *  Possible errors:
94  *     BadValue - The screen or attribute doesn't exist.
95  *     BadMatch - The NVIDIA driver is not present on that screen.
96  */
97 
98 void XNVCTRLSetAttribute(Display *dpy,
99                          int screen,
100                          unsigned int display_mask,
101                          unsigned int attribute,
102                          int value);
103 
104 /*
105  *  XNVCTRLSetTargetAttribute -
106  *
107  *  Sets the attribute to the given value.  The attributes and their
108  *  possible values are listed in NVCtrl.h.
109  *
110  *  Not all attributes require the display_mask parameter; see
111  *  NVCtrl.h for details.
112  *
113  *  Possible errors:
114  *     BadValue - The target or attribute doesn't exist.
115  *     BadMatch - The NVIDIA driver is not present on that target.
116  */
117 
118 void XNVCTRLSetTargetAttribute(Display *dpy,
119                                int target_type,
120                                int target_id,
121                                unsigned int display_mask,
122                                unsigned int attribute,
123                                int value);
124 
125 /*
126  *  XNVCTRLSetAttributeAndGetStatus -
127  *
128  * Same as XNVCTRLSetAttribute().
129  * In addition, XNVCTRLSetAttributeAndGetStatus() returns
130  * True if the operation succeeds, False otherwise.
131  *
132  */
133 
134 Bool XNVCTRLSetAttributeAndGetStatus(Display *dpy,
135                                      int screen,
136                                      unsigned int display_mask,
137                                      unsigned int attribute,
138                                      int value);
139 
140 /*
141  *  XNVCTRLSetTargetAttributeAndGetStatus -
142  *
143  * Same as XNVCTRLSetTargetAttribute().
144  * In addition, XNVCTRLSetTargetAttributeAndGetStatus() returns
145  * True if the operation succeeds, False otherwise.
146  *
147  */
148 
149 Bool XNVCTRLSetTargetAttributeAndGetStatus(Display *dpy,
150                                            int target_type,
151                                            int target_id,
152                                            unsigned int display_mask,
153                                            unsigned int attribute,
154                                            int value);
155 
156 /*
157  *  XNVCTRLQueryAttribute -
158  *
159  *  Returns True if the attribute exists.  Returns False otherwise.
160  *  If XNVCTRLQueryAttribute returns True, value will contain the
161  *  value of the specified attribute.
162  *
163  *  Not all attributes require the display_mask parameter; see
164  *  NVCtrl.h for details.
165  *
166  *  Calling this function is equivalent to calling
167  *  XNVCTRLQueryTargetAttribute() with the target_type set to
168  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
169  *
170  *  Possible errors:
171  *     BadValue - The screen doesn't exist.
172  *     BadMatch - The NVIDIA driver is not present on that screen.
173  */
174 
175 Bool XNVCTRLQueryAttribute(Display *dpy,
176                            int screen,
177                            unsigned int display_mask,
178                            unsigned int attribute,
179                            int *value);
180 
181 /*
182  * XNVCTRLQueryTargetAttribute -
183  *
184  *  Returns True if the attribute exists.  Returns False otherwise.
185  *  If XNVCTRLQueryTargetAttribute returns True, value will contain the
186  *  value of the specified attribute.
187  *
188  *  Not all attributes require the display_mask parameter; see
189  *  NVCtrl.h for details.
190  *
191  *  Possible errors:
192  *     BadValue - The target doesn't exist.
193  *     BadMatch - The NVIDIA driver does not control the target.
194  */
195 
196 Bool XNVCTRLQueryTargetAttribute(Display *dpy,
197                                  int target_Type,
198                                  int target_id,
199                                  unsigned int display_mask,
200                                  unsigned int attribute,
201                                  int *value);
202 
203 /*
204  * XNVCTRLQueryTargetAttribute64 -
205  *
206  *  Returns True if the attribute exists.  Returns False otherwise.
207  *  If XNVCTRLQueryTargetAttribute returns True, value will contain the
208  *  value of the specified attribute.
209  *
210  *  Not all attributes require the display_mask parameter; see
211  *  NVCtrl.h for details.
212  *
213  *  Note: this function behaves like XNVCTRLQueryTargetAttribute(),
214  *  but supports 64-bit integer attributes.
215  *
216  *  Possible errors:
217  *     BadValue - The target doesn't exist.
218  *     BadMatch - The NVIDIA driver does not control the target.
219  */
220 
221 Bool XNVCTRLQueryTargetAttribute64(Display *dpy,
222                                    int target_Type,
223                                    int target_id,
224                                    unsigned int display_mask,
225                                    unsigned int attribute,
226                                    int64_t *value);
227 
228 /*
229  *  XNVCTRLQueryStringAttribute -
230  *
231  *  Returns True if the attribute exists.  Returns False otherwise.
232  *  If XNVCTRLQueryStringAttribute returns True, *ptr will point to an
233  *  allocated string containing the string attribute requested.  It is
234  *  the caller's responsibility to free the string when done.
235  *
236  *  Calling this function is equivalent to calling
237  *  XNVCTRLQueryTargetStringAttribute() with the target_type set to
238  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
239  *
240  *  Possible errors:
241  *     BadValue - The screen doesn't exist.
242  *     BadMatch - The NVIDIA driver is not present on that screen.
243  *     BadAlloc - Insufficient resources to fulfill the request.
244  */
245 
246 Bool XNVCTRLQueryStringAttribute(Display *dpy,
247                                  int screen,
248                                  unsigned int display_mask,
249                                  unsigned int attribute,
250                                  char **ptr);
251 
252 /*
253  *  XNVCTRLQueryTargetStringAttribute -
254  *
255  *  Returns True if the attribute exists.  Returns False otherwise.
256  *  If XNVCTRLQueryTargetStringAttribute returns True, *ptr will point
257  *  to an allocated string containing the string attribute requested.
258  *  It is the caller's responsibility to free the string when done.
259  *
260  *  Possible errors:
261  *     BadValue - The target doesn't exist.
262  *     BadMatch - The NVIDIA driver does not control the target.
263  *     BadAlloc - Insufficient resources to fulfill the request.
264  */
265 
266 Bool XNVCTRLQueryTargetStringAttribute(Display *dpy,
267                                        int target_type,
268                                        int target_id,
269                                        unsigned int display_mask,
270                                        unsigned int attribute,
271                                        char **ptr);
272 
273 /*
274  *  XNVCTRLSetStringAttribute -
275  *
276  *  Returns True if the operation succeded.  Returns False otherwise.
277  *
278  *  Possible X errors:
279  *     BadValue - The screen doesn't exist.
280  *     BadMatch - The NVIDIA driver is not present on that screen.
281  *     BadAlloc - Insufficient resources to fulfill the request.
282  */
283 
284 Bool XNVCTRLSetStringAttribute(Display *dpy,
285                                int screen,
286                                unsigned int display_mask,
287                                unsigned int attribute,
288                                char *ptr);
289 
290 /*
291  *  XNVCTRLSetTargetStringAttribute -
292  *
293  *  Returns True if the operation succeded.  Returns False otherwise.
294  *
295  *  Possible X errors:
296  *     BadValue - The screen doesn't exist.
297  *     BadMatch - The NVIDIA driver is not present on that screen.
298  *     BadAlloc - Insufficient resources to fulfill the request.
299  */
300 
301 Bool XNVCTRLSetTargetStringAttribute(Display *dpy,
302                                      int target_type,
303                                      int target_id,
304                                      unsigned int display_mask,
305                                      unsigned int attribute,
306                                      char *ptr);
307 
308 /*
309  * XNVCTRLQueryValidAttributeValues -
310  *
311  * Returns True if the attribute exists.  Returns False otherwise.  If
312  * XNVCTRLQueryValidAttributeValues returns True, values will indicate
313  * the valid values for the specified attribute; see the description
314  * of NVCTRLAttributeValidValues in NVCtrl.h.
315  *
316  *  Calling this function is equivalent to calling
317  *  XNVCTRLQueryValidTargetAttributeValues() with the target_type set to
318  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
319  */
320 
321 Bool XNVCTRLQueryValidAttributeValues(Display *dpy,
322                                       int screen,
323                                       unsigned int display_mask,
324                                       unsigned int attribute,
325                                       NVCTRLAttributeValidValuesRec *values);
326 
327 /*
328  * XNVCTRLQueryValidTargetAttributeValues -
329  *
330  * Returns True if the attribute exists.  Returns False otherwise.  If
331  * XNVCTRLQueryValidTargetAttributeValues returns True, values will indicate
332  * the valid values for the specified attribute.
333  */
334 
335 Bool XNVCTRLQueryValidTargetAttributeValues(Display *dpy,
336                                             int target_type,
337                                             int target_id,
338                                             unsigned int display_mask,
339                                             unsigned int attribute,
340                                             NVCTRLAttributeValidValuesRec *values);
341 
342 /*
343  * XNVCTRLQueryValidTargetStringAttributeValues -
344  *
345  * Returns True if the attribute exists.  Returns False otherwise.  If
346  * XNVCTRLQueryValidTargetStringAttributeValues returns True, values will
347  * indicate the valid values for the specified attribute.
348  */
349 
350 Bool XNVCTRLQueryValidTargetStringAttributeValues(Display *dpy,
351                                                   int target_type,
352                                                   int target_id,
353                                                   unsigned int display_mask,
354                                                   unsigned int attribute,
355                                                   NVCTRLAttributeValidValuesRec *values);
356 
357 /*
358  * XNVCTRLQueryAttributePermissions -
359  *
360  * Returns True if the attribute exists.  Returns False otherwise.  If
361  * XNVCTRLQueryAttributePermissions returns True, permissions will
362  * indicate the permission flags for the attribute.
363  */
364 
365 Bool XNVCTRLQueryAttributePermissions(Display *dpy,
366                                       unsigned int attribute,
367                                       NVCTRLAttributePermissionsRec *permissions);
368 
369 /*
370  * XNVCTRLQueryStringAttributePermissions -
371  *
372  * Returns True if the attribute exists.  Returns False otherwise.  If
373  * XNVCTRLQueryStringAttributePermissions returns True, permissions will
374  * indicate the permission flags for the attribute.
375  */
376 
377 Bool XNVCTRLQueryStringAttributePermissions(Display *dpy,
378                                             unsigned int attribute,
379                                             NVCTRLAttributePermissionsRec *permissions);
380 
381 /*
382  * XNVCTRLQueryBinaryDataAttributePermissions -
383  *
384  * Returns True if the attribute exists.  Returns False otherwise.  If
385  * XNVCTRLQueryBinaryDataAttributePermissions returns True, permissions
386  * will indicate the permission flags for the attribute.
387  */
388 
389 Bool XNVCTRLQueryBinaryDataAttributePermissions(Display *dpy,
390                                                 unsigned int attribute,
391                                                 NVCTRLAttributePermissionsRec *permissions);
392 
393 /*
394  * XNVCTRLQueryStringOperationAttributePermissions -
395  *
396  * Returns True if the attribute exists.  Returns False otherwise.  If
397  * XNVCTRLQueryStringOperationAttributePermissions returns True,
398  * permissions will indicate the permission flags for the attribute.
399  */
400 
401 Bool XNVCTRLQueryStringOperationAttributePermissions(Display *dpy,
402                                                      unsigned int attribute,
403                                                      NVCTRLAttributePermissionsRec *permissions);
404 
405 /*
406  *  XNVCTRLSetGvoColorConversion -
407  *
408  *  Sets the color conversion matrix, offset, and scale that should be
409  *  used for GVO (Graphic to Video Out).
410  *
411  *  The Color Space Conversion data is ordered like this:
412  *
413  *   colorMatrix[0][0] // r.Y
414  *   colorMatrix[0][1] // g.Y
415  *   colorMatrix[0][2] // b.Y
416  *
417  *   colorMatrix[1][0] // r.Cr
418  *   colorMatrix[1][1] // g.Cr
419  *   colorMatrix[1][2] // b.Cr
420  *
421  *   colorMatrix[2][0] // r.Cb
422  *   colorMatrix[2][1] // g.Cb
423  *   colorMatrix[2][2] // b.Cb
424  *
425  *   colorOffset[0]    // Y
426  *   colorOffset[1]    // Cr
427  *   colorOffset[2]    // Cb
428  *
429  *   colorScale[0]     // Y
430  *   colorScale[1]     // Cr
431  *   colorScale[2]     // Cb
432  *
433  *  where the data is used according to the following formulae:
434  *
435  *   Y  =  colorOffset[0] + colorScale[0] *
436  *           (R * colorMatrix[0][0] +
437  *            G * colorMatrix[0][1] +
438  *            B * colorMatrix[0][2]);
439  *
440  *   Cr =  colorOffset[1] + colorScale[1] *
441  *           (R * colorMatrix[1][0] +
442  *            G * colorMatrix[1][1] +
443  *            B * colorMatrix[1][2]);
444  *
445  *   Cb =  colorOffset[2] + colorScale[2] *
446  *           (R * colorMatrix[2][0] +
447  *            G * colorMatrix[2][1] +
448  *            B * colorMatrix[2][2]);
449  *
450  *  Possible errors:
451  *     BadMatch - The NVIDIA driver is not present on that screen.
452  *     BadImplementation - GVO is not available on that screen.
453  */
454 
455 void XNVCTRLSetGvoColorConversion(Display *dpy,
456                                   int screen,
457                                   float colorMatrix[3][3],
458                                   float colorOffset[3],
459                                   float colorScale[3]);
460 
461 /*
462  *  XNVCTRLQueryGvoColorConversion -
463  *
464  *  Retrieves the color conversion matrix and color offset
465  *  that are currently being used for GVO (Graphic to Video Out).
466  *
467  *  The values are ordered within the arrays according to the comments
468  *  for XNVCTRLSetGvoColorConversion().
469  *
470  *  Possible errors:
471  *     BadMatch - The NVIDIA driver is not present on that screen.
472  *     BadImplementation - GVO is not available on that screen.
473  */
474 
475 Bool XNVCTRLQueryGvoColorConversion(Display *dpy,
476                                     int screen,
477                                     float colorMatrix[3][3],
478                                     float colorOffset[3],
479                                     float colorScale[3]);
480 
481 /*
482  *  XNVCTRLQueryBinaryData -
483  *
484  *  Returns True if the attribute exists.  Returns False otherwise.
485  *  If XNVCTRLQueryBinaryData returns True, *ptr will point to an
486  *  allocated block of memory containing the binary data attribute
487  *  requested.  It is the caller's responsibility to free the data
488  *  when done.  len will list the length of the binary data.
489  *
490  *  Calling this function is equivalent to calling
491  *  XNVCTRLQueryTargetBinaryData() with the target_type set to
492  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
493  *
494  *  Possible errors:
495  *     BadValue - The screen doesn't exist.
496  *     BadMatch - The NVIDIA driver is not present on that screen.
497  *     BadAlloc - Insufficient resources to fulfill the request.
498  */
499 
500 Bool XNVCTRLQueryBinaryData(Display *dpy,
501                             int screen,
502                             unsigned int display_mask,
503                             unsigned int attribute,
504                             unsigned char **ptr,
505                             int *len);
506 
507 /*
508  * XNVCTRLQueryTargetBinaryData -
509  *
510  *  Returns True if the attribute exists.  Returns False otherwise.
511  *  If XNVCTRLQueryTargetBinaryData returns True, *ptr will point to an
512  *  allocated block of memory containing the binary data attribute
513  *  requested.  It is the caller's responsibility to free the data
514  *  when done.  len will list the length of the binary data.
515  *
516  *  Possible errors:
517  *     BadValue - The target doesn't exist.
518  *     BadMatch - The NVIDIA driver does not control the target.
519  *     BadAlloc - Insufficient resources to fulfill the request.
520  */
521 
522 Bool XNVCTRLQueryTargetBinaryData(Display *dpy,
523                                   int target_type,
524                                   int target_id,
525                                   unsigned int display_mask,
526                                   unsigned int attribute,
527                                   unsigned char **ptr,
528                                   int *len);
529 
530 /*
531  * XNVCTRLStringOperation -
532  *
533  * Takes a string as input and returns a Xmalloc'ed string as output.
534  * Returns True on success and False on failure.
535  */
536 
537 Bool XNVCTRLStringOperation(Display *dpy,
538                             int target_type,
539                             int target_id,
540                             unsigned int display_mask,
541                             unsigned int attribute,
542                             char *pIn,
543                             char **ppOut);
544 
545 /*
546  * XNVCtrlSelectNotify -
547  *
548  * This enables/disables receiving of NV-CONTROL events.  The type
549  * specifies the type of event to enable (currently, the only
550  * type that can be requested per-screen with XNVCtrlSelectNotify()
551  * is ATTRIBUTE_CHANGED_EVENT); onoff controls whether receiving this
552  * type of event should be enabled (True) or disabled (False).
553  *
554  * Returns True if successful, or False if the screen is not
555  * controlled by the NVIDIA driver.
556  */
557 
558 Bool XNVCtrlSelectNotify(Display *dpy, int screen, int type, Bool onoff);
559 
560 /*
561  * XNVCtrlSelectTargetNotify -
562  *
563  * This enables/disables receiving of NV-CONTROL events that happen on
564  * the specified target.  The notify_type specifies the type of event to
565  * enable (currently, the only type that can be requested per-target with
566  * XNVCtrlSelectTargetNotify() is TARGET_ATTRIBUTE_CHANGED_EVENT); onoff
567  * controls whether receiving this type of event should be enabled (True)
568  * or disabled (False).
569  *
570  * Returns True if successful, or False if the target is not
571  * controlled by the NVIDIA driver.
572  */
573 
574 Bool XNVCtrlSelectTargetNotify(Display *dpy,
575                                int target_type,
576                                int target_id,
577                                int notify_type,
578                                Bool onoff);
579 
580 /*
581  * XNVCtrlEvent structure
582  */
583 
584 typedef struct
585 {
586     int type;
587     unsigned long serial;
588     Bool send_event; /* always FALSE, we don't allow send_events */
589     Display *display;
590     Time time;
591     int screen;
592     unsigned int display_mask;
593     unsigned int attribute;
594     int value;
595 } XNVCtrlAttributeChangedEvent;
596 
597 typedef union
598 {
599     int type;
600     XNVCtrlAttributeChangedEvent attribute_changed;
601     long pad[24];
602 } XNVCtrlEvent;
603 
604 /*
605  * XNVCtrlEventTarget structure
606  */
607 
608 typedef struct
609 {
610     int type;
611     unsigned long serial;
612     Bool send_event; /* always FALSE, we don't allow send_events */
613     Display *display;
614     Time time;
615     int target_type;
616     int target_id;
617     unsigned int display_mask;
618     unsigned int attribute;
619     int value;
620 } XNVCtrlAttributeChangedEventTarget;
621 
622 typedef union
623 {
624     int type;
625     XNVCtrlAttributeChangedEventTarget attribute_changed;
626     long pad[24];
627 } XNVCtrlEventTarget;
628 
629 /*
630  * XNVCtrlEventTargetAvailability structure
631  */
632 
633 typedef struct
634 {
635     int type;
636     unsigned long serial;
637     Bool send_event; /* always FALSE, we don't allow send_events */
638     Display *display;
639     Time time;
640     int target_type;
641     int target_id;
642     unsigned int display_mask;
643     unsigned int attribute;
644     int value;
645     Bool availability;
646 } XNVCtrlAttributeChangedEventTargetAvailability;
647 
648 typedef union
649 {
650     int type;
651     XNVCtrlAttributeChangedEventTargetAvailability attribute_changed;
652     long pad[24];
653 } XNVCtrlEventTargetAvailability;
654 
655 /*
656  * XNVCtrlStringEventTarget structure
657  */
658 
659 typedef struct
660 {
661     int type;
662     unsigned long serial;
663     Bool send_event; /* always FALSE, we don't allow send_events */
664     Display *display;
665     Time time;
666     int target_type;
667     int target_id;
668     unsigned int display_mask;
669     unsigned int attribute;
670 } XNVCtrlStringAttributeChangedEventTarget;
671 
672 typedef union
673 {
674     int type;
675     XNVCtrlStringAttributeChangedEventTarget attribute_changed;
676     long pad[24];
677 } XNVCtrlStringEventTarget;
678 
679 /*
680  * XNVCtrlBinaryEventTarget structure
681  */
682 
683 typedef struct
684 {
685     int type;
686     unsigned long serial;
687     Bool send_event; /* always FALSE, we don't allow send_events */
688     Display *display;
689     Time time;
690     int target_type;
691     int target_id;
692     unsigned int display_mask;
693     unsigned int attribute;
694 } XNVCtrlBinaryAttributeChangedEventTarget;
695 
696 typedef union
697 {
698     int type;
699     XNVCtrlBinaryAttributeChangedEventTarget attribute_changed;
700     long pad[24];
701 } XNVCtrlBinaryEventTarget;
702 
703 #if defined __cplusplus
704 } /* extern "C" */
705 #endif
706 
707 #endif /* __NVCTRLLIB_H */
708