Windows.Devices.SerialCommunication Ruang nama

Namespace Windows.Devices.SerialCommunication mendefinisikan kelas Windows Runtime yang dapat digunakan aplikasi UWP untuk berkomunikasi dengan perangkat yang mengekspos port serial atau beberapa abstraksi port serial. Kelas menyediakan fungsionalitas untuk menemukan perangkat serial tersebut, membaca dan menulis data, dan mengontrol properti khusus serial untuk kontrol aliran, seperti mengatur laju baud, status sinyal.

Dukungan Perangkat

Perangkat serial akan mengekspos dirinya ke sistem oleh properti DEVPKEY_Device_ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318} dan membuat DeviceInterface dengan = DEVPKEY_DeviceInterface_ClassGuid{86e0d1e0-8089-11d0-9ce4-08003e301f73} ().GUID_DEVINTERFACE_COMPORT

Windows secara asli mendukung port yang diekspos oleh adaptor Serial-ke-USB yang termasuk dalam kelas perangkat USB-CDC menggunakan driver kotak usbser.sys masuk (seperti yang digunakan di Arduino Uno R3s). Id yang kompatibel dengan USB-CDC adalah:

  • USB\Class_02&SubClass_02&Prot_01
  • USB\Class_02&SubClass_02

Adaptor Serial-ke-USB lainnya (seperti FTDI/Prolific/Silicon-Labs) yang mengekspos GUID_DEVINTERFACE_COMPORTjuga didukung, tetapi memerlukan driver khusus vendor tambahan.

Port serial yang ditandai sebagai internal untuk komputer (DEVPKEY_Device_InLocalMachineContainer == TRUE) tidak dapat diakses kecuali secara eksplisit ditandai oleh driver vendor sebagai tidak terbatas (DEVPKEY_DeviceInterface_Restricted == TRUE). Oleh karena itu, perangkat terhubung melalui sebagian besar kartu ekspansi port PCI COM tidak dapat diakses.

Port seri yang tidak dapat diakses mungkin masih dijumlahkan oleh DeviceInformation.FindAllAsync(), tetapi tidak dapat dibuka oleh SerialDevice.FromIdAsync(). Mengintegrasikan untuk membuka perangkat seperti itu akan melemparkan pengecualian atau mengembalikan null. Aplikasi harus menangani kasus ini dengan memfilter port serial tersebut dari tampilan pengguna, sehingga pengguna tidak akan dapat berinteraksi dengan port serial yang tidak didukung tersebut.

Ada kemungkinan bahwa koleksi DeviceInformation yang dikembalikan oleh DeviceInformation.FindAllAsync() mungkin memiliki perangkat serial yang properti DeviceInformation.Name-nya diatur ke nama komputer. Ini dirancang dan dapat terjadi saat menghitung port seri onboard. Aplikasi harus menangani kasus ini dengan:

  • Memfilter port serial tersebut dari tampilan pengguna, sehingga pengguna tidak akan dapat berinteraksi dengan port serial yang tidak didukung sama sekali.
  • Jika aplikasi memutuskan untuk membiarkan pengguna berinteraksi dengan port serial seperti itu, perhatikan bahwa ketika aplikasi memanggil fungsi DeviceAccessInformation.CreateFromId(), pengecualian dengan pesan: "Sistem tidak dapat menemukan file yang ditentukan. (Pengecualian dari HRESULT: 0x80070002)" akan dilemparkan. Aplikasi harus menangani pengecualian seperti itu dan memberi tahu pengguna bahwa port tidak didukung.

Kebijakan aksesbilitas/kemampuan selalu dapat ditimpa dengan menulis driver kustom dan Aplikasi Dukungan Perangkat Keras yang cocok

Kemampuan Perangkat Serial

Aplikasi UWP Anda harus menyertakan kemampuan perangkat tertentu dalam manifes paket Aplikasinya. Kemampuan mengidentifikasi perangkat dan tujuannya. Berikut adalah elemen yang diperlukan dalam urutan hierarkis:

Sejak Windows 10, versi 1809 (Pembaruan Oktober 2018)

Sejak 1809, jenis vidpid dan fungsi tidak perlu lagi ditentukan dan akan diabaikan pada sistem ini. Jika menargetkan sistem sebelum 1809, lihat di bawah ini.

<DeviceCapability Name="serialcommunication"/>

Sebelum Windows 10, versi 1809 (Pembaruan Oktober 2018)

  • <DeviceCapability>: Atribut Name harus serialcommunication.

    • <Perangkat>: Atribut Id harus menentukan pengidentifikasi perangkat. Jika Anda menggunakan adaptor Serial-ke-USB, Id harus menentukan pengidentifikasi vendor/produk atau dapat berupa "apa pun" untuk memungkinkan akses ke perangkat apa pun yang cocok dengan jenis fungsi.

      • <Fungsi>: Atribut Type menentukan fungsi perangkat. Untuk perangkat serial, ini harus serialPort.
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

Contoh kemampuan perangkat serial

Berikut adalah contoh untuk menentukan kemampuan perangkat serial. Ini memungkinkan aplikasi untuk mengakses port serial melalui adaptor Serial-ke-USB.

<DeviceCapability Name="serialcommunication">
  <Device Id="vidpid:045E 0610">
    <Function Type="name:serialPort"/>
  </Device>
</DeviceCapability>

Pemecahan Masalah

  • Verifikasi kemampuan serial (serialcommunication) ada dalam manifes aplikasi.
  • Verifikasi bahwa pengguna telah memberikan izin bagi aplikasi untuk menggunakan perangkat serial.
  • Perangkat internal mesin (DEVPKEY_Device_InLocalMachineContainer == TRUE) umumnya tidak dapat diakses. (misalnya kartu ekspansi port PCI COM)
    • Kecuali properti DEVPKEY_DeviceInterface_Restricted antarmuka perangkat untuk GUID_DEVINTERFACE_COMPORT diatur ke FALSE, perangkat internal tidak dapat diakses. Driver tertentu, terutama pada SKU IoT dapat mengatur properti ini ke FALSE.
    • Jika mengakses pengontrol Serial berdasarkan SerCx atau SerCx2 kemudian memulai Windows 10 1903 (Pembaruan Mei 2019) perangkat dapat memilih untuk dapat diakses langsung dari mode pengguna atau dengan mengaktifkan RhProxy.
  • Pembatasan ini dapat dilewati saat membuat perangkat kustom dengan bekerja dengan pengembang driver untuk membuat Aplikasi Dukungan Perangkat Keras

Kelas

ErrorReceivedEventArgs

Mewakili objek yang diteruskan sebagai parameter ke penanganan aktivitas yang dipanggil saat kesalahan terjadi pada port serial.

PinChangedEventArgs

Mewakili objek yang diteruskan sebagai parameter ke penanganan aktivitas yang dipanggil saat status baris sinyal berubah pada port serial.

SerialDevice

Mewakili port serial. Objek menyediakan metode dan properti yang dapat digunakan aplikasi untuk menemukan dan berinteraksi dengan port serial pada sistem.

Enum

SerialError

Menentukan nilai untuk kondisi kesalahan yang dapat terjadi pada port serial.

SerialHandshake

Menentukan nilai untuk protokol kontrol alur perangkat keras dan perangkat lunak yang digunakan dalam komunikasi serial. Nilai digunakan oleh properti Handshake pada objek SerialDevice .

SerialParity

Menentukan nilai untuk bit paritas untuk transmisi data serial. Nilai digunakan oleh properti Parity pada objek SerialDevice .

SerialPinChange

Menentukan nilai untuk jenis perubahan status sinyal pada port serial.

SerialStopBitCount

Menentukan nilai yang menunjukkan jumlah bit stop yang digunakan dalam transmisi. Nilai digunakan oleh properti StopBits pada objek SerialDevice .

Lihat juga