入门指南 - 适用于 3D 打印机的 Microsoft 标准驱动程序
使用适用于 3D 打印机的 Microsoft 标准驱动程序,开发人员可以轻松使其打印机与 Windows 10 兼容。 可以将任何使用 Microsoft OS 描述符的打印机识别为兼容的 3D 打印机。 本文使用具体示例演示如何创建一个固件,使设备能够被 Windows 10 识别为 3D 打印机,并传达其打印功能。
介绍
Microsoft 标准驱动程序减轻了独立硬件供应商 (IHV) 编写自己的驱动程序的负担,这些供应商希望其 3D 打印机与 Windows 10 兼容。 了解 Microsoft OS 描述符的 Windows 版本使用控制请求来检索信息,并使用它来安装和配置设备,而无需任何用户交互。
获取在 Windows 10 上运行的 3D 打印机的常规过程包括以下步骤:
兼容 ID。 独立硬件供应商 (IHV) 必须包含打印机固件中的“3D 打印”兼容 ID。 这允许将设备识别为 3D 打印机。
标准驱动程序。 插入设备后,Windows 更新会下载 3D 打印标准驱动程序,并将当前设备检测为使用默认配置的 3D 打印机。
扩展属性描述符。 3D 打印机的多个基本配置作为标准驱动程序的一部分提供。 因此,开发人员可以选择与其 3D 打印机匹配的基本配置。 在选择基本配置的基础上,开发人员可以覆盖某些属性,以更好地匹配其 3D 打印机并将其包含在新的固件中。
即插即用。 在 3D 打印机的闪存中刻录乳尖后,每当用户将其插入 Windows 10 计算机时,都会自动下载标准驱动程序,并使用开发人员选择的自定义打印功能。
在以下几个部分中,我们将使用具体示例来说明上述每个步骤。
有关详细信息,请参阅 Microsoft OS 描述符。
兼容 ID
若要指定当前正在使用 3D 打印机的 Windows 操作系统,必须使用正确的兼容 ID。 Microsoft OS 描述符中提供了 Microsoft 兼容 ID 的列表。
下表显示了 3D 打印机的兼容 ID:
兼容 ID | 子兼容 ID | 说明 |
---|---|---|
"3DPRINT" (0x33 0x44 0x50 0x52 0x49 0x4E 0x54 0x00) | 多种多样 | MS3DPRINT G-Code 打印机 |
在 3D 打印机固件中包含的头文件中,IHV 必须指定兼容 ID,如下所示:
#define MS3DPRINT_CONFIG_SIZE 232
#define MS3DPRINT_OSP_SIZE (4+4+2+0x20+4+MS3DPRINT_CONFIG_SIZE)
#define MS3DPRINT_XPROP_SIZE (4+2+2+2+MS3DPRINT_OSP_SIZE)
#define SIZE_TO_DW(__size) \
((uint32_t)__size) & 0xFF, \
(((uint32_t)__size)>>8) & 0xFF, \
(((uint32_t)__size)>>16) & 0xFF, \
(((uint32_t)__size)>>24) & 0xFF
// CompatibleID and SubCompatibleID
static const uint8_t PROGMEM ms3dprint_descriptor[40] = {
0x28, 0x00, 0x00, 0x00, // dwLength
0x00, 0x01, // bcdVersion
0x04, 0x00, // wIndex
0x01, // bCount
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // RESERVED
0x00, // bFirstInterfaceNumber
0x01, // RESERVED
'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")
// subCompatibleID
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* */
,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // RESERVED
};
上面的代码中的此行是 3D 打印机的兼容 ID:
'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")
使用此特定配置,IHV 可以编译其固件并刷写设备。 然后,当插入设备时,会自动从 Windows 更新下载 3D 打印标准驱动程序。
在此阶段,打印机使用的是标准驱动程序默认配置,默认配置使用的参数可在文件 StandardGCode.xml 的 %SYSTEMROOT%\System32\MS3DPrint 文件夹中访问。 此外,开发人员可以选择使用不同的基本配置,基本配置列表位于同一文件夹 %SYSTEMROOT%\System32\MS3DPrint 中。 随着市场上出现新的 3D 打印机,此列表会定期填充新配置。
扩展属性 OS 功能描述符
如上一部分所述,IHV 有权访问多个基本配置。 这可以最大程度地减少必须存储在打印机闪存中的信息量。 开发人员可以检查可用的基本配置,并选择最接近其打印机的配置。 在此示例中,我们将选择 SD 卡片基本配置,并使用以下参数覆盖某些属性:
参数 | 值 |
---|---|
Job3DOutputAreaWidth | 250000 |
Job3DOutputAreaDepth | 260000 |
Job3DOutputAreaHeight | 270000 |
Filamentdiameter | 2850 |
有关这些参数的详细信息,请参阅 3D 打印 SDK(MSI 下载)文档中的 MS3DPrint 标准 G-Code Driver.docx 文档。
若要指定要使用的基本配置和要覆盖的参数,开发人员必须通过扩展属性 OS 功能描述符指定,具体如下:
// Modifiers to the base configuration
static const uint8_t PROGMEM ms3dprint_properties_descriptor[] = {
SIZE_TO_DW(MS3DPRINT_XPROP_SIZE), // dwLength
0x00, 0x01, // bcdVersion
0x05, 0x00, // wIndex
0x01, 0x00, // wCount
SIZE_TO_DW(MS3DPRINT_OSP_SIZE), // dwSize
0x07, 0x00, 0x00, 0x00, // dwPropertyDataType (1=REG_SZ, 4=REG_DWORD, 7=REG_MULTI_SZ)
0x20, 0x00, // wPropertyNameLength
'M', 0x0, 'S', 0x0, '3', 0x0, 'D', 0x0, // bPropertyName
'P', 0x0, 'r', 0x0, 'i', 0x0, 'n', 0x0,
't', 0x0, 'C', 0x0, 'o', 0x0, 'n', 0x0,
'f', 0x0, 'i', 0x0, 'g', 0x0, 0x0, 0x0,
SIZE_TO_DW(MS3DPRINT_CONFIG_SIZE), // dwPropertyDataLength
// Data
0x42, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x3D, 0x00, 0x53, 0x00, 0x44, 0x00, 0x00, 0x00, /* Base=SD */
0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00, 0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00, /* Job3DOut */
0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x57, 0x00, /* putAreaW */
0x69, 0x00, 0x64, 0x00, 0x74, 0x00, 0x68, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x35, 0x00, 0x30, 0x00, /* idth=250 */
0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00, /* 000 Job3 */
0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00, /* DOutputA */
0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x44, 0x00, 0x65, 0x00, 0x70, 0x00, 0x74, 0x00, 0x68, 0x00, /* reaDepth */
0x3D, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, /* =260000 */
0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00, 0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00, /* Job3DOut */
0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x48, 0x00, /* putAreaH */
0x65, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x37, 0x00, /* eight=27 */
0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, /* 0000 fil */
0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x64, 0x00, 0x69, 0x00, 0x61, 0x00, /* amentdia */
0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x38, 0x00, /* meter=28 */
0x35, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 /* 50 */
};
有关扩展属性 OS 功能描述符的信息,请参阅 OS_Desc_Ext_Prop.doc 文件。 有关详细信息,请参阅 Microsoft OS 描述符。
验证打印功能
设备在闪存中刻录固件后,Windows 10 会自动检测到该设备,并且打印功能将存储在注册表中。
IHV 将设备的 VID/PID 更改为自己的值很重要。 绝不应使用另一个现有设备的供应商 ID (VID) 或产品 ID (PID),因为操作系统将无法正确检测设备,因为 VID 和 PID 优先于 OS 描述符。
如果已安装正确设备,设备应列在“设备和打印机”中。
在设备管理器中,可以验证匹配的设备 ID 和兼容的 ID。
通过访问注册表的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB,可以获取 USB 驱动程序属性。
通过访问注册表的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers,可以获取 3D 打印驱动程序属性。
资源
有关详细信息,请参阅下面的文档和资源:
还可以联系 Microsoft 3D 打印团队,联系方式为 ask3dprint@microsoft.com。