Windows.Devices.SerialCommunication Ruang nama
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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_COMPORT
juga 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>: Atribut Name harus
serialcommunication
.
<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
.
- <Fungsi>: Atribut Type menentukan fungsi perangkat. Untuk perangkat serial, ini harus
<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 untukGUID_DEVINTERFACE_COMPORT
diatur keFALSE
, perangkat internal tidak dapat diakses. Driver tertentu, terutama pada SKU IoT dapat mengatur properti ini keFALSE
. - Jika mengakses pengontrol Serial berdasarkan
SerCx
atauSerCx2
kemudian memulai Windows 10 1903 (Pembaruan Mei 2019) perangkat dapat memilih untuk dapat diakses langsung dari mode pengguna atau dengan mengaktifkanRhProxy
.
- Kecuali properti
- 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 . |