Guia de introdução: driver padrão da Microsoft para impressoras 3D
O driver padrão da Microsoft para impressoras 3D permite que os desenvolvedores tornem facilmente sua impressora compatível com o Windows 10. Qualquer impressora que use descritores do sistema operacional da Microsoft pode ser reconhecida como uma impressora 3D compatível. Usando um exemplo concreto, este artigo mostra como criar firmware que permite que um dispositivo seja reconhecido como uma impressora 3D pelo Windows 10 e comunique seus recursos de impressão.
Introdução
O driver padrão da Microsoft alivia o ônus de escrever seu próprio driver de fornecedores independentes de hardware (IHVs) que desejam que suas impressoras 3D sejam compatíveis com o Windows 10. As versões do Windows que reconhecem os descritores do sistema operacional da Microsoft usam solicitações de controle para recuperar as informações e usá-las para instalar e configurar o dispositivo sem exigir nenhuma interação do usuário.
O processo geral para fazer uma impressora 3D funcionar no Windows 10 inclui as seguintes etapas:
ID compatível. O fornecedor independente de hardware (IHV) deve incluir a ID compatível com "Impressão 3D" no firmware da impressora. Isso permite que o dispositivo seja reconhecido como uma impressora 3D.
Driver padrão. Depois que o dispositivo é conectado, o Windows Update faz o download do driver padrão de impressão 3D e detecta o dispositivo atual como uma impressora 3D que usa uma configuração padrão.
Descritor de propriedades estendidas. Várias configurações básicas para impressoras 3D são disponibilizadas como parte do driver padrão. Um desenvolvedor pode, portanto, escolher uma configuração básica que corresponda à sua impressora 3D. Além de escolher uma configuração básica, o desenvolvedor pode substituir algumas das propriedades para corresponder melhor à sua impressora 3D e incluí-las no novo firmware.
Plug and play. Depois que o firmware for gravado na memória flash da impressora 3D, sempre que um usuário conectá-la a uma máquina com Windows 10, o driver padrão será baixado automaticamente e usará os recursos de impressão personalizados que o desenvolvedor escolheu.
Nas seções a seguir, ilustraremos cada uma dessas etapas usando um exemplo concreto.
Para obter mais informações, consulte Descritores do sistema operacional da Microsoft.
ID compatível
Para especificar ao sistema operacional Windows que estamos usando uma impressora 3D no momento, precisamos usar o ID compatível correto. A lista de IDs compatíveis com a Microsoft está disponível em Descritores do Microsoft OS.
O ID compatível para uma impressora 3D é mostrado na tabela a seguir:
ID compatível | ID subcompatível | Descrição |
---|---|---|
"3DPRINT" (0x33 0x44 0x50 0x52 0x49 0x4E 0x54 0x00) | Varia | MS3DPRINT Impressora G-Code |
No arquivo de cabeçalho incluído no firmware da impressora 3D, o IHV deve especificar a ID compatível, como mostrado aqui:
#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 linha no código acima é o ID compatível de uma impressora 3D:
'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")
Com essa configuração específica, os IHVs podem compilar seu firmware e atualizar o dispositivo. Então, quando o dispositivo estiver conectado, o driver padrão de impressão 3D será baixado automaticamente do Windows Update.
Neste estágio, a impressora está usando a configuração padrão do driver e os parâmetros usados pela configuração padrão podem ser acessados na pasta %SYSTEMROOT%\System32\MS3DPrint no arquivo StandardGCode.xml. Além disso, um desenvolvedor pode optar por usar uma configuração base diferente, uma lista de configurações básicas está disponível na mesma pasta %SYSTEMROOT%\System32\MS3DPrint. Essa lista é preenchida regularmente com novas configurações à medida que novas impressoras 3D surgem no mercado.
Descritor de recursos do sistema operacional de propriedades estendidas
Conforme indicado na seção acima, os IHVs têm acesso a várias configurações básicas. Isso tem a vantagem de minimizar a quantidade de informações que devem ser armazenadas na memória flash da impressora. Os desenvolvedores podem inspecionar as configurações básicas disponibilizadas e escolher a que mais se aproxima de suas impressoras. Neste exemplo, vamos escolher a configuração da base do cartão SD e substituir algumas das propriedades pelos parâmetros abaixo:
Parâmetros | Valor |
---|---|
Job3DOutputAreaWidth | 250.000 |
Job3DOutputAreaDepth | 260000 |
Job3DOutputAreaHeight | 270000 |
Filamentdiameter | 2850 |
Para obter mais informações sobre esses parâmetros, consulte o documento MS3DPrint Standard G-Code Driver.docx na documentação 3D Printing SDK (MSI download).
Para especificar qual configuração base usar e quais parâmetros substituir, o desenvolvedor precisa especificá-la por meio do descritor de recursos do sistema operacional de propriedades estendidas, conforme mostrado aqui:
// 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 */
};
As informações sobre o descritor de recursos do sistema operacional de propriedades estendidas estão no arquivo OS_Desc_Ext_Prop.doc. Para obter mais informações, consulte Descritores do sistema operacional da Microsoft.
Verificação dos recursos de impressão
Quando o dispositivo tiver o firmware gravado na memória flash, ele será automaticamente detectado pelo Windows 10 e os recursos de impressão serão armazenados no registro.
É importante que o IHV altere o VID/PID do dispositivo para o seu próprio. Você nunca deve usar a ID do fornecedor (VID) ou a ID do produto (PID) de outro dispositivo existente, pois o sistema operacional não será capaz de detectar o dispositivo corretamente, pois o VID e o PID têm prioridade sobre o descritor do sistema operacional.
Se o dispositivo tiver sido instalado corretamente, ele deverá estar listado em Dispositivos e Impressoras.
No Gerenciador de Dispositivo, a ID do dispositivo correspondente e a ID compatível podem ser verificadas.
As propriedades do driver USB podem ser obtidas visitando o registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB.
As propriedades do driver de impressão 3D podem ser obtidas visitando o registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers.
Recursos
Para obter mais informações, consulte os seguintes documentos e recursos:
SDK de impressão 3D (download MSI)
Você também pode entrar em contato com a equipe de Impressão 3D da Microsoft em ask3dprint@microsoft.com.