lớp USB_VCP -- cổng truyền thông ảo USB

Lớp USB_VCP cho phép tạo đối tượng giống stream đại diện cho cổng truyền thông ảo USB. Nó có thể được dùng để đọc và ghi dữ liệu qua USB tới máy chủ đã kết nối.

Hàm khởi tạo

class pyb.USB_VCP(id: int = 0)

Tạo đối tượng USB_VCP mới. Tham số id chọn cổng USB VCP nào sẽ được dùng khi có nhiều hơn một cổng được cung cấp.

Phương thức

init(*, flow: int = -1) None

Cấu hình cổng USB VCP. Nếu tham số flow không phải -1, nó sẽ đặt kiểm soát luồng, là phép OR theo bit của USB_VCP.RTSUSB_VCP.CTS. RTS kiểm soát hành vi đọc; CTS kiểm soát hành vi ghi.

setinterrupt(chr: int) None

Đặt ký tự làm ngắt mã Python đang chạy. Mặc định được đặt là 3 (CTRL-C), và khi nhận được ký tự CTRL-C qua cổng USB VCP, ngoại lệ KeyboardInterrupt sẽ được đưa ra.

Đặt thành -1 để tắt tính năng ngắt này. Điều này hữu ích khi bạn muốn gửi byte thô qua cổng USB VCP.

isconnected() bool

Trả về True nếu USB được kết nối như thiết bị serial, ngược lại trả về False.

debug_mode_enabled() bool

Trả về True nếu OpenMV IDE đang kết nối với OpenMV Cam.

any() bool

Trả về True nếu có ký tự đang chờ, ngược lại trả về False.

close() None

Phương thức này không làm gì. Nó tồn tại để đối tượng USB_VCP có thể hoạt động như một file.

read(nbytes: int | None = None) bytes | None

Đọc tối đa nbytes từ thiết bị serial và trả về chúng dưới dạng đối tượng bytes. Nếu nbytes không được chỉ định thì phương thức đọc tất cả các byte hiện có từ thiết bị serial. USB_VCP stream hoạt động ngầm định ở chế độ không chặn, vì vậy nếu không có dữ liệu đang chờ, phương thức này sẽ trả về ngay lập tức với giá trị None.

readinto(buf: bytearray, maxlen: int | None = None) int | None

Đọc các byte từ thiết bị serial và lưu chúng vào buf, đây phải là đối tượng giống bộ đệm. Đọc tối đa len(buf) byte. Nếu maxlen được chỉ định thì đọc tối đa min(maxlen, len(buf)) byte.

Trả về số byte đã đọc và lưu vào buf hoặc None nếu không có dữ liệu đang chờ.

readline() bytes | None

Đọc toàn bộ một dòng từ thiết bị serial.

Trả về đối tượng bytes chứa dữ liệu, bao gồm ký tự xuống dòng ở cuối, hoặc None nếu không có dữ liệu đang chờ.

readlines() List[bytes]

Đọc càng nhiều dữ liệu càng tốt từ thiết bị serial, chia thành các dòng.

Trả về danh sách các đối tượng bytes, mỗi đối tượng là một dòng. Mỗi dòng sẽ bao gồm ký tự xuống dòng.

write(buf: bytes | bytearray | str) int

Ghi các byte từ buf lên thiết bị serial.

Trả về số byte đã ghi.

recv(data: int | bytearray, *, timeout: int = 5000) bytes | int

Nhận dữ liệu trên bus:

  • data có thể là một số nguyên (số byte cần nhận) hoặc bộ đệm có thể ghi, sẽ được điền bằng các byte nhận được.

  • timeout là thời gian chờ tính bằng mili giây để chờ nhận.

Giá trị trả về: nếu data là số nguyên thì trả về bộ đệm mới chứa các byte đã nhận, ngược lại trả về số byte đã đọc vào data.

send(data: int | bytes | bytearray, *, timeout: int = 5000) int

Gửi dữ liệu qua USB VCP:

  • data là dữ liệu cần gửi (một số nguyên để gửi, hoặc đối tượng bộ đệm).

  • timeout là thời gian chờ tính bằng mili giây để chờ gửi.

Giá trị trả về: số byte đã gửi.

irq(handler: Callable[[USB_VCP], None] | None = None, trigger: int = IRQ_RX, hard: bool = False) None

Đăng ký handler để được gọi mỗi khi xảy ra sự kiện được chỉ định bởi trigger. Hàm handler phải nhận đúng một đối số là đối tượng USB VCP. Truyền vào None để tắt hàm gọi lại.

Các giá trị hợp lệ cho trigger là:

  • USB_VCP.IRQ_RX: có dữ liệu mới sẵn sàng để đọc từ đối tượng USB VCP.

Hằng số

RTS: int

Cờ kiểm soát luồng cho init(). Bật RTS khiến thiết bị điều tiết quá trình truyền của máy chủ khi bộ đệm đọc đầy.

CTS: int

Cờ kiểm soát luồng cho init(). Bật CTS khiến thiết bị tuân theo kiểm soát luồng của máy chủ trong quá trình ghi (chặn cho đến khi máy chủ sẵn sàng nhận). Có thể OR với RTS.

IRQ_RX: int

Kích hoạt irq(): kích hoạt khi có dữ liệu mới sẵn sàng để đọc từ đối tượng USB VCP.