Guía de introducción - Controlador estándar de Microsoft para impresoras 3D
El controlador estándar de Microsoft para impresoras 3D permite a los desarrolladores hacer que su impresora sea compatible fácilmente con Windows 10. Cualquier impresora que use descriptores del sistema operativo de Microsoft se puede reconocer como una impresora 3D compatible. Con un ejemplo concreto, en este artículo se muestra cómo crear firmware que permite que un dispositivo se reconozca como una impresora 3D de Windows 10 y comunique sus funcionalidades de impresión.
Introducción
El controlador estándar de Microsoft para impresoras 3D alivia la carga de tener que escribir su propio controlador de proveedores de hardware independientes (IHV) que quieren que sus impresoras 3D sean compatibles con Windows 10. Las versiones de Windows que conocen los descriptores del sistema operativo de Microsoft usan solicitudes de control para recuperar la información y las usan para instalar y configurar el dispositivo sin necesidad de ninguna interacción del usuario.
El proceso general para obtener una impresora 3D que funcione en Windows 10 incluye los pasos siguientes:
ID de compatible. El proveedor de hardware independiente (IHV) tiene que incluir el identificador de compatible con "Impresión 3D" en el firmware de la impresora. Esto permite que el dispositivo se reconozca como una impresora 3D.
Controlador estándar. Una vez conectado el dispositivo, Windows Update descarga el controlador estándar de impresión 3D y detecta el dispositivo actual como una impresora 3D que usa una configuración predeterminada.
Descriptor de propiedades extendidas. Varias configuraciones base para impresoras 3D están disponibles como parte del controlador estándar. Por lo tanto, un desarrollador puede elegir una configuración base que coincida con su impresora 3D. Además de elegir una configuración base, un desarrollador puede invalidar algunas de las propiedades para que coincidan mejor con su impresora 3D e incluirlas en el nuevo firmware.
Plug and play. Una vez grabado el firmware en la memoria flash de la impresora 3D, cada vez que un usuario la conecte a una máquina con Windows 10, el controlador estándar se descargará automáticamente y utilizará las capacidades de impresión personalizadas que el desarrollador haya elegido.
En las secciones siguientes, se ilustrará cada uno de estos pasos mediante un ejemplo concreto.
Para obtener más información, consulte Descriptores del SO Microsoft.
Id. compatible
Para especificar en el sistema operativo Windows que actualmente estamos usando una impresora 3D, tenemos que usar el identificador de compatible adecuado. La lista de identificadores de compatible de Microsoft está disponible en Descriptores del SO de Microsoft.
El identificador de compatible de una impresora 3D se muestra en la tabla siguiente:
Id. compatible | ID de subcompatible | Descripción |
---|---|---|
"3DPRINT" (0x33 0x44 0x50 0x52 0x49 0x4E 0x54 0x00) | Varía | Impresora MS3DPRINT G-Code |
En el archivo de encabezado que se incluye en el firmware de la impresora 3D, el IHV debe especificar el identificador de compatible como se muestra aquí:
#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
};
Esta línea del código anterior es el identificador de compatible de una impresora 3D:
'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")
Con esta configuración específica, los IHV pueden compilar su firmware e instalar el dispositivo. A continuación, cuando el dispositivo se conecta, el controlador estándar de impresión 3D se descarga automáticamente de Windows Update.
En esta fase, la impresora usa la configuración predeterminada del controlador estándar, se puede acceder a los parámetros utilizados por la configuración predeterminada desde la carpeta %SYSTEMROOT%\System32\MS3DPrint del archivo StandardGCode.xml. Además, un desarrollador puede optar por usar una configuración base diferente, una lista de configuraciones base están disponibles en la misma carpeta %SYSTEMROOT%\System32\MS3DPrint. Esta lista se rellena periódicamente con nueva configuración a medida que surgen nuevas impresoras 3D en el mercado.
Descriptor de características del sistema operativo de propiedades extendidas
Como se indicó en la sección anterior, los IHV tienen acceso a varias configuraciones base. Esto tiene la ventaja de minimizar la cantidad de información que se debe almacenar en la memoria flash de la impresora. Los desarrolladores pueden inspeccionar las configuraciones base disponibles y elegir la más cercana a sus impresoras. En este ejemplo, vamos a elegir la configuración base de la tarjeta SD e invalidar algunas de las propiedades con los parámetros siguientes:
Parámetros | Valor |
---|---|
Job3DOutputAreaWidth | 250000 |
Job3DOutputAreaDepth | 260000 |
Job3DOutputAreaHeight | 270000 |
Filamentdiameter | 2850 |
Para obtener más información sobre estos parámetros, consulte el documento MS3DPrint Standard G-Code Driver.docx en la documentación del SDK de impresión 3D (descarga MSI).
Para especificar la configuración base que se va a usar y los parámetros que se van a invalidar, el desarrollador debe especificarlo a través del descriptor de características del sistema operativo de propiedades extendidas, como se muestra aquí:
// 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 */
};
La información sobre el descriptor de características del sistema operativo de propiedades extendidas se encuentra en el archivo OS_Desc_Ext_Prop.doc. Para obtener más información, consulte Descriptores del SO Microsoft.
Comprobación de las funcionalidades de impresión
Una vez que el dispositivo tenga el firmware grabado en la memoria flash, Windows 10 detectará automáticamente el dispositivo y las funcionalidades de impresión se almacenarán en el registro.
Es importante que el IHV cambie el VID/PID del dispositivo al suyo propio. Nunca debe usar el identificador de proveedor (VID) o el identificador de producto (PID) de otro dispositivo existente, ya que el sistema operativo no podrá detectar el dispositivo correctamente, ya que el VID y el PID tienen prioridad sobre el descriptor del sistema operativo.
Si el dispositivo se ha instalado correctamente, debe aparecer en Dispositivos e impresoras.
En el Administrador de dispositivos, se puede comprobar el identificador de dispositivo e identificador de compatible coincidentes.
Las propiedades del controlador USB se pueden obtener en el Registro, en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB.
Las propiedades del controlador de impresión 3D se pueden obtener en el Registro, en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers.
Recursos
Para obtener más información, consulte los siguientes documentos y recursos:
SDK de impresión 3D (descarga MSI)
Descriptores del SO de Microsoft
También puede ponerse en contacto con el equipo de impresión de Microsoft 3D en ask3dprint@microsoft.com.