Erste Schritte - Microsoft-Standardtreiber für 3D-Drucker
Der Microsoft-Standardtreiber für 3D-Drucker bietet Entwickler*innen die Möglichkeit, ihren Drucker problemlos mit Windows 10 kompatibel zu machen. Jeder Drucker, der die Deskriptoren von Microsoft-Betriebssystemen verwendet, kann als kompatibler 3D-Drucker erkannt werden. Anhand eines konkreten Beispiels zeigt dieser Artikel, wie Sie eine Firmware erstellen, die einem Gerät die Möglichkeit bietet, von Windows 10 als 3D-Drucker erkannt zu werden und seine Funktionalitäten zu übermitteln.
Einführung
Der Microsoft-Standardtreiber entlastet unabhängige Hardwarehersteller (IHVs), die ihre 3D-Drucker mit Windows 10 kompatibel machen möchten, von der Aufgabe, einen eigenen Treiber zu schreiben. Windows-Versionen, die die Deskriptoren des Microsoft-Betriebssystems berücksichtigen, verwenden Steueranfragen, um die Informationen abzurufen und sie zur Installation und Konfiguration des Geräts zu verwenden, ohne dass eine Benutzerinteraktion erforderlich ist.
Der allgemeine Prozess, um einen 3D-Drucker unter Windows 10 zum Laufen zu bringen, umfasst die folgenden Schritte:
Kompatible ID. Der unabhängige Hardware-Hersteller (IHV) muss die „3D Print“-kompatible ID in die Firmware des Druckers aufnehmen. Dies lässt die Möglichkeit zu, dass das Gerät als 3D-Drucker erkannt wird.
Standardtreiber. Sobald das Gerät angeschlossen ist, lädt Windows Update den 3D-Druck-Standardtreiber herunter und erkennt das aktuelle Gerät als 3D-Drucker, der eine Standardkonfiguration verwendet.
Erweiterter Eigenschaftsdeskriptor. Als Teil des Standardtreibers werden mehrere Basiskonfigurationen für 3D-Drucker zur Verfügung gestellt. Entwickler*innen können daher eine Basiskonfiguration wählen, die zu ihrem 3D-Drucker passt. Zusätzlich zur Auswahl einer Basiskonfiguration kann ein/eine Entwickler*in einige der Eigenschaften überschreiben, damit sie besser zum 3D-Drucker passen, und sie in die neue Firmware aufnehmen.
Plug-and-Play. Sobald die Firmware in den Flash-Speicher des 3D-Druckers geschrieben wurde, wird der Standardtreiber automatisch heruntergeladen und verwendet die angepassten Funktionalitäten, die der/die Entwickler*in ausgewählt hat, sobald ein/eine Benutzer*in den Drucker an einen Windows 10-Computer anschließt.
In den folgenden Abschnitten werden wir jeden dieser Schritte anhand eines konkreten Beispiels erläutern.
Weitere Informationen finden Sie unter Microsoft OS Deskriptoren.
Kompatible ID
Um dem Windows-Betriebssystem mitzuteilen, dass wir gerade einen 3D-Drucker verwenden, müssen wir die richtige kompatible ID verwenden. Die Liste der kompatiblen IDs von Microsoft finden Sie unter Microsoft Betriebssystem-Deskriptoren.
Die kompatible ID für einen 3D-Drucker ist in der folgenden Tabelle aufgeführt:
Kompatible ID | Unterkompatible ID | Beschreibung |
---|---|---|
"3DPRINT" (0x33 0x44 0x50 0x52 0x49 0x4E 0x54 0x00) | Varies | MS3DPRINT G-Code Printer |
In der Header-Datei, die in der Firmware des 3D-Druckers enthalten ist, muss die IHV die kompatible ID wie hier gezeigt angeben:
#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
};
Diese Zeile im obigen Code ist die kompatible ID eines 3D-Druckers:
'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")
Mit dieser spezifischen Konfiguration können die IHVs ihre Firmware kompilieren und das Gerät flashen. Wenn das Gerät dann angeschlossen wird, wird der 3D-Druck-Standardtreiber automatisch von Windows Update heruntergeladen.
In diesem Stadium verwendet der Drucker die Standardtreiber-Standardkonfiguration. Die von der Standardkonfiguration verwendeten Parameter sind im Ordner %SYSTEMROOT%\System32\MS3DPrint in der Datei StandardGCode.xml. Zusätzlich kann ein/eine Entwickler*in eine andere Basiskonfiguration verwenden. Eine Liste der Basiskonfigurationen ist im gleichen Ordner %SYSTEMROOT%\System32\MS3DPrint verfügbar. Diese Liste wird regelmäßig mit neuen Konfigurationen ergänzt, wenn neue 3D-Drucker auf den Markt kommen.
Extended Properties OS Feature Deskriptor
Wie im obigen Abschnitt erwähnt, haben IHVs Zugriff auf mehrere Basiskonfigurationen. Dies hat den Vorteil, dass die Menge der Informationen, die im Flash-Speicher des Druckers gespeichert werden müssen, minimiert wird. Entwickler*innen können sich die zur Verfügung gestellten Basiskonfigurationen ansehen und diejenige auswählen, die ihren Druckern am nächsten kommt. In diesem Beispiel wählen wir die SD-Karten-Basiskonfiguration und überschreiben einige der Eigenschaften mit den unten aufgeführten Parametern:
Parameter | Wert |
---|---|
Job3DOutputAreaWidth | 250.000 |
Job3DOutputAreaDepth | 260000 |
Job3DOutputAreaHeight | 270000 |
Filament-Durchmesser | 2850 |
Weitere Informationen zu diesen Parametern finden Sie im Dokument MS3DPrint Standard G-Code Driver.docx in der Dokumentation 3D Printing SDK (MSI-Download).
Um festzulegen, welche Basiskonfiguration verwendet werden soll und welche Parameter außer Kraft gesetzt werden sollen, muss die/der Entwickler*in dies über den Extended Properties OS Feature Deskriptor angeben, wie hier gezeigt:
// 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 */
};
Informationen zum Extended Properties OS Feature Deskriptor finden Sie in der Datei OS_Desc_Ext_Prop.doc. Weitere Informationen finden Sie unter Microsoft OS Deskriptoren.
Überprüfen der Funktionalitäten des Druckers
Sobald die Firmware des Geräts in den Flash-Speicher geschrieben wurde, wird das Gerät automatisch von Windows 10 erkannt und die Funktionalitäten des Druckers werden in der Registrierung gespeichert.
Es ist wichtig, dass der IHV die VID/PID des Geräts in seine eigene ändert. Sie sollten niemals die Hersteller-ID (VID) oder Produkt-ID (PID) eines anderen vorhandenen Geräts verwenden, da das Betriebssystem das Gerät nicht richtig erkennen kann, da die VID und PID Vorrang vor dem Deskriptor des Betriebssystems haben.
Wenn das Gerät ordnungsgemäß installiert wurde, sollte es unter Geräte und Drucker aufgeführt sein.
Im Geräte-Manager können Sie die passende Geräte-ID und die kompatible ID überprüfen.
Die Eigenschaften des USB-Treibers können Sie in der Registrierung unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB abrufen.
Die Eigenschaften des 3D-Druckertreibers können Sie in der Registrierung unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers abrufen.
Ressourcen
Weitere Informationen finden Sie in den folgenden Dokumenten und Ressourcen:
3D Printing SDK (MSI-Download)
Sie können auch das Microsoft 3D Printing Team unter ask3dprint@microsoft.com kontaktieren.