Partilhar via


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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

instalação de uma impressora 3D compatível.

É 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.

dispositivos e impressoras.

No Gerenciador de Dispositivo, a ID do dispositivo correspondente e a ID compatível podem ser verificadas.

Gerenciador de Dispositivos.

guia de detalhes do gerenciador de dispositivos: ID do dispositivo correspondente.

guia de detalhes do Gerenciador de Dispositivos: IDs compatíveis.

As propriedades do driver USB podem ser obtidas visitando o registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB.

edite o valor de cadeia de caracteres múltipla no registro usb.

As propriedades do driver de impressão 3D podem ser obtidas visitando o registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers.

visualize as propriedades do driver de impressão 3D no Registro.

Recursos

Para obter mais informações, consulte os seguintes documentos e recursos:

SDK de impressão 3D (download MSI)

Descritores do Microsoft OS

Especificação do USB 2.0

Você também pode entrar em contato com a equipe de Impressão 3D da Microsoft em ask3dprint@microsoft.com.