VirtualBox

source: vbox/trunk/src/VBox/Devices/Samples/VBoxSampleDevice.cpp@ 69067

Last change on this file since 69067 was 69067, checked in by vboxsync, 7 years ago

Devices/Samples: Separate the Playground device from the sample device, because the latter should be simple and clean, while the former is meant as a showcase for unusual things and therefore will have special needs.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.5 KB
Line 
1/* $Id: VBoxSampleDevice.cpp 69067 2017-10-13 08:41:13Z vboxsync $ */
2/** @file
3 * VBox Sample Device.
4 */
5
6/*
7 * Copyright (C) 2009-2016 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19/*********************************************************************************************************************************
20* Header Files *
21*********************************************************************************************************************************/
22#define LOG_GROUP LOG_GROUP_MISC
23#include <VBox/vmm/pdmdev.h>
24#include <VBox/version.h>
25#include <VBox/err.h>
26#include <VBox/log.h>
27
28#include <iprt/assert.h>
29
30
31/*********************************************************************************************************************************
32* Structures and Typedefs *
33*********************************************************************************************************************************/
34/**
35 * Device Instance Data.
36 */
37typedef struct VBOXSAMPLEDEVICE
38{
39 uint32_t Whatever;
40} VBOXSAMPLEDEVICE;
41typedef VBOXSAMPLEDEVICE *PVBOXSAMPLEDEVICE;
42
43
44
45static DECLCALLBACK(int) devSampleDestruct(PPDMDEVINS pDevIns)
46{
47 /*
48 * Check the versions here as well since the destructor is *always* called.
49 */
50 PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns);
51
52 return VINF_SUCCESS;
53}
54
55
56static DECLCALLBACK(int) devSampleConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
57{
58
59 /*
60 * Check that the device instance and device helper structures are compatible.
61 */
62 PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
63 NOREF(pCfg);
64
65 /*
66 * Initialize the instance data so that the destructor won't mess up.
67 */
68 PVBOXSAMPLEDEVICE pThis = PDMINS_2_DATA(pDevIns, PVBOXSAMPLEDEVICE);
69 pThis->Whatever = 0;
70
71 /*
72 * Validate and read the configuration.
73 */
74 PDMDEV_VALIDATE_CONFIG_RETURN(pDevIns, "Whatever1|Whatever2", "");
75
76 /*
77 * Use the instance number if necessary (not for this device, which in
78 * g_DeviceSample below declares a maximum instance count of 1).
79 */
80 NOREF(iInstance);
81
82 return VINF_SUCCESS;
83}
84
85
86/**
87 * The device registration structure.
88 */
89static const PDMDEVREG g_DeviceSample =
90{
91 /* u32Version */
92 PDM_DEVREG_VERSION,
93 /* szName */
94 "sample",
95 /* szRCMod */
96 "",
97 /* szR0Mod */
98 "",
99 /* pszDescription */
100 "VBox Sample Device.",
101 /* fFlags */
102 PDM_DEVREG_FLAGS_DEFAULT_BITS,
103 /* fClass */
104 PDM_DEVREG_CLASS_MISC,
105 /* cMaxInstances */
106 1,
107 /* cbInstance */
108 sizeof(VBOXSAMPLEDEVICE),
109 /* pfnConstruct */
110 devSampleConstruct,
111 /* pfnDestruct */
112 devSampleDestruct,
113 /* pfnRelocate */
114 NULL,
115 /* pfnMemSetup */
116 NULL,
117 /* pfnPowerOn */
118 NULL,
119 /* pfnReset */
120 NULL,
121 /* pfnSuspend */
122 NULL,
123 /* pfnResume */
124 NULL,
125 /* pfnAttach */
126 NULL,
127 /* pfnDetach */
128 NULL,
129 /* pfnQueryInterface */
130 NULL,
131 /* pfnInitComplete */
132 NULL,
133 /* pfnPowerOff */
134 NULL,
135 /* pfnSoftReset */
136 NULL,
137 /* u32VersionEnd */
138 PDM_DEVREG_VERSION
139};
140
141
142/**
143 * Register devices provided by the plugin.
144 *
145 * @returns VBox status code.
146 * @param pCallbacks Pointer to the callback table.
147 * @param u32Version VBox version number.
148 */
149extern "C" DECLEXPORT(int) VBoxDevicesRegister(PPDMDEVREGCB pCallbacks, uint32_t u32Version)
150{
151 LogFlow(("VBoxSampleDevice::VBoxDevicesRegister: u32Version=%#x pCallbacks->u32Version=%#x\n", u32Version, pCallbacks->u32Version));
152
153 AssertLogRelMsgReturn(u32Version >= VBOX_VERSION,
154 ("VirtualBox version %#x, expected %#x or higher\n", u32Version, VBOX_VERSION),
155 VERR_VERSION_MISMATCH);
156 AssertLogRelMsgReturn(pCallbacks->u32Version == PDM_DEVREG_CB_VERSION,
157 ("callback version %#x, expected %#x\n", pCallbacks->u32Version, PDM_DEVREG_CB_VERSION),
158 VERR_VERSION_MISMATCH);
159
160 return pCallbacks->pfnRegister(pCallbacks, &g_DeviceSample);
161}
162
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette