Vietnamese (machine translation)

Lưu ý

Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.

Bản gốc:

User-Space DTX (Clipboard Detachment System) Interface

Người dịch:

Google Translate (machine translation)

Phiên bản gốc:

8541d8f725c6

Cảnh báo

Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.

Giao diện DTX (Hệ thống tách bảng tạm) không gian người dùng

Trình điều khiển ZZ0000ZZ chịu trách nhiệm tách clipboard thích hợp và xử lý việc đính kèm lại. Để đạt được mục đích này, nó cung cấp ZZ0001ZZ tệp thiết bị, qua đó nó có thể giao tiếp với daemon không gian người dùng. Cái này daemon sau đó chịu trách nhiệm cuối cùng trong việc xác định và thực hiện các biện pháp cần thiết các hành động, chẳng hạn như tháo các thiết bị gắn vào đế, dỡ/tải lại trình điều khiển đồ họa, thông báo người dùng, v.v.

Có hai nguyên tắc giao tiếp cơ bản được sử dụng trong trình điều khiển này: Lệnh (trong các phần khác của tài liệu còn được gọi là yêu cầu) và sự kiện. Các lệnh được gửi đến EC và có thể có ý nghĩa khác trong bối cảnh khác nhau. Các sự kiện được EC gửi theo một số trạng thái nội bộ thay đổi. Các lệnh luôn được khởi tạo bởi trình điều khiển, trong khi các sự kiện luôn được thực hiện do EC khởi xướng.

Danh pháp

  • ZZ0000ZZ Phần trên có thể tháo rời của Surface Book, chứa màn hình và CPU.

  • ZZ0000ZZ Phần dưới của Surface Book nơi có thể lấy bảng nhớ tạm tách rời, tùy chọn (tùy theo kiểu máy) chứa GPU (dGPU) riêng biệt.

  • ZZ0000ZZ Cơ chế giữ clipboard gắn vào đế bình thường hoạt động và cho phép nó được tách ra khi được yêu cầu.

  • ZZ0000ZZ Lệnh được EC chấp nhận là lệnh hợp lệ và được xác nhận (tuân theo giao thức truyền thông tiêu chuẩn), nhưng EC không hoạt động trên đó, tức là bỏ qua nó.e phần trên của

Quá trình tách rời

Cảnh báo: Phần tài liệu này dựa trên kỹ thuật đảo ngược và kiểm tra và do đó có thể có lỗi hoặc không đầy đủ.

Trạng thái chốt

Cơ chế chốt có hai trạng thái chính: ZZ0000ZZ và ZZ0001ZZ. trong Trạng thái ZZ0002ZZ (mặc định), bảng tạm được cố định vào đế, trong khi ở trạng thái trạng thái ZZ0003ZZ, người dùng có thể xóa bảng nhớ tạm.

Ngoài ra, chốt có thể được khóa và mở khóa tương ứng, điều này có thể ảnh hưởng đến quá trình tách. Cụ thể, cơ chế khóa này nhằm ngăn chặn dGPU, được đặt ở đế của thiết bị, khỏi bị rút phích cắm nóng trong khi sử dụng. Thông tin chi tiết có thể được tìm thấy trong tài liệu về thủ tục tách ra dưới đây. Theo mặc định, chốt là đã được mở khóa.

Thủ tục tách ra

Lưu ý rằng quá trình tách ra được điều chỉnh hoàn toàn bởi EC. các Trình điều khiển ZZ0000ZZ chỉ chuyển tiếp các sự kiện từ EC sang không gian người dùng và các lệnh từ không gian người dùng đến EC, tức là nó không ảnh hưởng đến quá trình này.

Quá trình tách được bắt đầu bằng việc người dùng nhấn nút ZZ0001ZZ trên đế của thiết bị hoặc thực thi ZZ0000ZZ IOCTL. Tiếp theo đó:

  1. EC bật đèn chỉ báo trên nút tháo, gửi một tín hiệu Sự kiện ZZ0001ZZ (ZZ0000ZZ) và đang chờ đợi thêm hướng dẫn/lệnh. Trong trường hợp chốt được mở khóa, đèn led sẽ nhấp nháy màu xanh lá cây. Nếu chốt đã bị khóa thì led sẽ có màu đỏ đặc

  2. Sự kiện này, thông qua trình điều khiển ZZ0000ZZ, được chuyển tiếp đến không gian người dùng, trong đó một daemon không gian người dùng thích hợp có thể xử lý nó và gửi lại hướng dẫn tới EC thông qua IOCTL do trình điều khiển này cung cấp.

  3. EC chờ hướng dẫn từ không gian người dùng và hành động theo hướng dẫn đó. Nếu EC không nhận được bất kỳ hướng dẫn nào trong một khoảng thời gian nhất định, nó sẽ hết thời gian và tiếp tục như sau:

  • Nếu chốt không khóa thì EC sẽ mở chốt và clipboard

    có thể tách rời khỏi đế. Đây là hành vi chính xác như không có trình điều khiển này hoặc bất kỳ daemon không gian người dùng nào. Xem ZZ0000ZZ mô tả bên dưới để biết thêm chi tiết về hoạt động tiếp theo của EC.

  • Nếu chốt bị khóa thì EC sẽ ZZ0003ZZ mở chốt, nghĩa là

    clipboard không thể tách rời khỏi đế. Hơn nữa, EC gửi một sự kiện hủy bỏ (ZZ0001ZZ) nêu chi tiết điều này với sự kiện hủy bỏ lý do ZZ0002ZZ (xem ZZ0000ZZ để biết chi tiết).

Phản hồi hợp lệ của daemon không gian người dùng đối với sự kiện yêu cầu tách là:

  • Chạy ZZ0000ZZ. Điều này sẽ ngay lập tức hủy bỏ quá trình tách rời. Hơn nữa, EC sẽ gửi một sự kiện yêu cầu tách ra, tương tự như việc người dùng nhấn nút tách để hủy quá trình đã nói (xem bên dưới).

  • Chạy ZZ0000ZZ. Điều này sẽ khiến EC mở chốt, sau đó người dùng có thể tách bảng tạm và đế.

Khi điều này thay đổi trạng thái chốt, một sự kiện ZZ0002ZZ

(ZZ0000ZZ) sẽ được gửi sau khi chốt được mở thành công. Nếu EC không mở được chốt, ví dụ: do phần cứng lỗi hoặc pin yếu, sự kiện hủy chốt (ZZ0001ZZ) sẽ xảy ra được gửi với lý do hủy cho biết lỗi cụ thể.

Nếu chốt hiện đang bị khóa, chốt sẽ tự động được khóa.

đã được mở khóa trước khi mở.

  • Chạy ZZ0000ZZ. Điều này sẽ thiết lập lại thời gian chờ nội bộ. Sẽ không có hành động nào khác được thực hiện, tức là quá trình tách sẽ không được hoàn thành hay bị hủy bỏ và EC vẫn sẽ chờ đợi thêm những phản hồi.

  • Thực hiện ZZ0000ZZ. Điều này sẽ hủy bỏ quá trình tách ra, tương tự như ZZ0001ZZ, được mô tả ở trên hoặc nút nhấn, được mô tả dưới đây. Sự kiện ZZ0003ZZ (ZZ0002ZZ) được gửi để đáp lại điều này. Tuy nhiên, trái ngược với những điều đó, lệnh này không kích hoạt một quy trình tách mới nếu hiện tại không có quy trình nào trong tiến bộ.

  • Không làm gì cả. Quá trình tách cuối cùng hết thời gian như được mô tả trong điểm 3.

Xem ZZ0000ZZ để biết thêm chi tiết về những phản hồi này.

Điều quan trọng cần lưu ý là, nếu người dùng nhấn nút tháo bất kỳ lúc nào điểm khi một hoạt động tách đang được tiến hành (tức là sau khi EC đã gửi sự kiện ZZ0001ZZ ban đầu (ZZ0000ZZ) và trước đó nhận được phản hồi tương ứng kết thúc quá trình), nhóm tách ra quá trình bị hủy ở cấp EC và một sự kiện giống hệt đang được gửi. Do đó, bản thân sự kiện ZZ0002ZZ không báo hiệu sự bắt đầu của quá trình tách rời.

Quá trình tách rời có thể bị EC hủy bỏ thêm do phần cứng lỗi hoặc pin clipboard yếu. Việc này được thực hiện thông qua sự kiện hủy (ZZ0000ZZ) với lý do hủy tương ứng.

Tài liệu về giao diện không gian người dùng

Mã lỗi và giá trị trạng thái

Mã lỗi và trạng thái được chia thành các loại khác nhau, có thể được sử dụng để xác định xem mã trạng thái có bị lỗi hay không và nếu có thì mức độ nghiêm trọng và loại lỗi đó. Các loại hiện tại là:

Overview of Status/Error Categories.

Name

Value

Short Description

STATUS

0x0000

Non-error status codes.

RUNTIME_ERROR

0x1000

Non-critical runtime errors.

HARDWARE_ERROR

0x2000

Critical hardware failures.

UNKNOWN

0xF000

Unknown error codes.

Các danh mục khác được dành riêng để sử dụng trong tương lai. Macro ZZ0000ZZ có thể được sử dụng để xác định danh mục của bất kỳ giá trị trạng thái nào. các Macro ZZ0001ZZ có thể được sử dụng để kiểm tra xem giá trị trạng thái có phải là giá trị thành công (ZZ0002ZZ) hoặc nếu nó báo lỗi.

Trạng thái không xác định hoặc mã lỗi do EC gửi được gán cho ZZ0000ZZ được người lái xe phân loại và có thể được triển khai thông qua mã riêng của họ trong tương lai.

Mã lỗi hiện đang được sử dụng là:

Overview of Error Codes.

Name

Category

Value

Short Description

SDTX_DETACH_NOT_FEASIBLE

RUNTIME

0x1001

Detachment not feasible due to low clipboard battery.

SDTX_DETACH_TIMEDOUT

RUNTIME

0x1002

Detachment process timed out while the latch was locked.

SDTX_ERR_FAILED_TO_OPEN

HARDWARE

0x2001

Failed to open latch.

SDTX_ERR_FAILED_TO_REMAIN_OPEN

HARDWARE

0x2002

Failed to keep latch open.

SDTX_ERR_FAILED_TO_CLOSE

HARDWARE

0x2003

Failed to close latch.

Các mã lỗi khác được dành riêng để sử dụng trong tương lai. Mã trạng thái không có lỗi có thể chồng chéo và thường chỉ duy nhất trong trường hợp sử dụng của chúng:

Latch Status Codes.

Name

Category

Value

Short Description

SDTX_LATCH_CLOSED

STATUS

0x0000

Latch is closed/has been closed.

SDTX_LATCH_OPENED

STATUS

0x0001

Latch is open/has been opened.

Base State Codes.

Name

Category

Value

Short Description

SDTX_BASE_DETACHED

STATUS

0x0000

Base has been detached/is not present.

SDTX_BASE_ATTACHED

STATUS

0x0001

Base has been attached/is present.

Một lần nữa, các mã khác được dành riêng để sử dụng trong tương lai.

Sự kiện

Sự kiện có thể được nhận bằng cách đọc từ tập tin thiết bị. Họ bị vô hiệu hóa bởi mặc định và phải được kích hoạt bằng cách thực thi ZZ0000ZZ đầu tiên. Tất cả các sự kiện đều tuân theo bố cục do ZZ0001ZZ quy định. Cụ thể các loại sự kiện có thể được xác định bằng mã sự kiện của chúng, được mô tả trong ZZ0002ZZ. Lưu ý rằng các mã sự kiện khác được dành riêng để sử dụng trong tương lai, do đó, trình phân tích sự kiện phải có khả năng xử lý mọi sự kiện không xác định/không được hỗ trợ các loại một cách duyên dáng, bằng cách dựa vào độ dài tải trọng được cung cấp trong tiêu đề sự kiện.

Các loại sự kiện hiện được cung cấp là:

Overview of DTX events.

Name

Code

Payload

Short Description

SDTX_EVENT_REQUEST

1

0 bytes

Detachment process initiated/aborted.

SDTX_EVENT_CANCEL

2

2 bytes

EC canceled detachment process.

SDTX_EVENT_BASE_CONNECTION

3

4 bytes

Base connection state changed.

SDTX_EVENT_LATCH_STATUS

4

2 bytes

Latch status changed.

SDTX_EVENT_DEVICE_MODE

5

2 bytes

Device mode changed.

Các sự kiện riêng lẻ chi tiết hơn:

ZZ0000ZZ

Được gửi khi quá trình tách được bắt đầu hoặc, nếu đang diễn ra, bị hủy bỏ bởi người dùng, thông qua nhấn nút tách hoặc yêu cầu tách (ZZ0000ZZ) được gửi từ không gian người dùng.

Không có bất kỳ tải trọng nào.

ZZ0000ZZ

Được gửi khi quá trình tách bị EC hủy do chưa được thực hiện điều kiện tiên quyết (ví dụ: pin clipboard quá yếu để tháo ra) hoặc phần cứng thất bại. Lý do hủy được nêu chi tiết trong phần tải trọng sự kiện bên dưới và có thể là một trong

  • ZZ0000ZZ: Đã hết thời gian tách ra khi chốt đã bị khóa. Chốt chưa được mở cũng như không được mở khóa.

  • ZZ0000ZZ: Việc tách rời không khả thi do bảng nhớ tạm thấp pin.

  • ZZ0000ZZ: Không mở được chốt (lỗi phần cứng).

  • ZZ0000ZZ: Không thể giữ chốt mở (phần cứng thất bại).

  • ZZ0000ZZ: Không đóng được chốt (lỗi phần cứng).

Các mã lỗi khác trong ngữ cảnh này được dành riêng để sử dụng trong tương lai.

Các mã này có thể được phân loại thông qua macro ZZ0000ZZ để phân biệt giữa các lỗi phần cứng nghiêm trọng (ZZ0001ZZ) hoặc lỗi thời gian chạy (ZZ0002ZZ), lỗi sau có thể xảy ra trong quá trình hoạt động bình thường nếu có những điều kiện tiên quyết nhất định để tách rời không được đưa ra.

Detachment Cancel Event Payload

Field

Type

Description

reason

__u16

Reason for cancellation.

ZZ0000ZZ

Được gửi khi trạng thái kết nối cơ sở đã thay đổi, tức là khi cơ sở đã được việc gắn, tách hoặc tách đã trở nên không khả thi do bảng nhớ tạm thấp pin. Trạng thái mới và nếu một cơ sở được kết nối, ID của cơ sở đó là được cung cấp dưới dạng tải trọng loại ZZ0000ZZ với bố cục được trình bày dưới đây:

Base-Connection-Change Event Payload

Field

Type

Description

state

__u16

Base connection state.

base_id

__u16

Type of base connected (zero if none).

Các giá trị có thể có của ZZ0000ZZ là:

  • ZZ0000ZZ,

  • ZZ0001ZZ, và

*ZZ0002ZZ.

Các giá trị khác được dành riêng để sử dụng trong tương lai.

ZZ0000ZZ

Được gửi khi trạng thái chốt đã thay đổi, tức là khi chốt đã được mở, đã đóng hoặc xảy ra lỗi. Trạng thái hiện tại được cung cấp dưới dạng tải trọng:

Latch-Status-Change Event Payload

Field

Type

Description

status

__u16

Latch status.

Các giá trị có thể có của ZZ0000ZZ là:

  • ZZ0000ZZ,

  • ZZ0001ZZ,

  • ZZ0002ZZ,

  • ZZ0003ZZ, và

*ZZ0004ZZ.

Các giá trị khác được dành riêng để sử dụng trong tương lai.

ZZ0000ZZ

Được gửi khi chế độ thiết bị đã thay đổi. Chế độ thiết bị mới được cung cấp dưới dạng tải trọng:

Device-Mode-Change Event Payload

Field

Type

Description

mode

__u16

Device operation mode.

Các giá trị có thể có của ZZ0000ZZ là:

  • ZZ0000ZZ,

  • ZZ0001ZZ, và

*ZZ0002ZZ.

Các giá trị khác được dành riêng để sử dụng trong tương lai.

IOCTL

Các IOCTL sau đây được cung cấp:

Overview of DTX IOCTLs

Type

Number

Direction

Name

Description

0xA5

0x21

-

EVENTS_ENABLE

Enable events for the current file descriptor.

0xA5

0x22

-

EVENTS_DISABLE

Disable events for the current file descriptor.

0xA5

0x23

-

LATCH_LOCK

Lock the latch.

0xA5

0x24

-

LATCH_UNLOCK

Unlock the latch.

0xA5

0x25

-

LATCH_REQUEST

Request clipboard detachment.

0xA5

0x26

-

LATCH_CONFIRM

Confirm clipboard detachment request.

0xA5

0x27

-

LATCH_HEARTBEAT

Send heartbeat signal to EC.

0xA5

0x28

-

LATCH_CANCEL

Cancel detachment process.

0xA5

0x29

R

GET_BASE_INFO

Get current base/connection information.

0xA5

0x2A

R

GET_DEVICE_MODE

Get current device operation mode.

0xA5

0x2B

R

GET_LATCH_STATUS

Get current device latch status.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Kích hoạt sự kiện cho bộ mô tả tệp hiện tại. Sự kiện có thể thu được bằng cách đọc từ thiết bị, nếu được bật. Sự kiện bị tắt theo mặc định.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Tắt các sự kiện cho bộ mô tả tệp hiện tại. Sự kiện có thể thu được bằng cách đọc từ thiết bị, nếu được bật. Sự kiện bị tắt theo mặc định.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Khóa chốt, khiến quy trình tách bị hủy bỏ mà không mở được chốt thời gian chờ. Chốt được mở khóa theo mặc định. Lệnh này sẽ được âm thầm bỏ qua nếu chốt đã bị khóa.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Mở khóa chốt, khiến quy trình tháo rời mở chốt hết thời gian chờ. Chốt được mở khóa theo mặc định. Lệnh này sẽ không mở chốt khi được gửi trong quá trình tách rời đang diễn ra. Sẽ âm thầm bỏ qua nếu chốt đã được mở khóa.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Yêu cầu chốt chung. Hành vi phụ thuộc vào ngữ cảnh: Nếu không quá trình tách rời đang hoạt động, việc tách rời được yêu cầu. Nếu không thì quá trình tách rời hiện đang hoạt động sẽ bị hủy bỏ.

Nếu một quá trình tách rời bị hủy bỏ bởi thao tác này, một quá trình tách rời chung sự kiện yêu cầu (ZZ0000ZZ) sẽ được gửi.

Về cơ bản, thao tác này hoạt động giống như thao tác nhấn nút tách rời.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Xác nhận và xác nhận yêu cầu chốt. Nếu được gửi trong thời gian liên tục quá trình tách rời, lệnh này sẽ khiến chốt được mở ngay lập tức. Chốt cũng sẽ được mở nếu nó đã bị khóa. Trong trường hợp này, chốt khóa được đặt lại về trạng thái mở khóa.

Lệnh này sẽ được âm thầm bỏ qua nếu hiện tại không có đội nào thủ tục đang được tiến hành.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Gửi nhịp tim, về cơ bản là đặt lại thời gian chờ của nhóm. Cái này lệnh có thể được sử dụng để duy trì quá trình tách rời trong khi công việc được yêu cầu để biệt đội thành công vẫn đang được tiến hành.

Lệnh này sẽ được âm thầm bỏ qua nếu hiện tại không có đội nào thủ tục đang được tiến hành.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Hủy quá trình tách đang diễn ra (nếu có). Nếu quá trình tách bị hủy bỏ bởi hoạt động này, một sự kiện yêu cầu tách nhóm chung (ZZ0000ZZ) sẽ được gửi.

Lệnh này sẽ được âm thầm bỏ qua nếu hiện tại không có đội nào thủ tục đang được tiến hành.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Nhận trạng thái kết nối cơ sở hiện tại (tức là đã đính kèm/tách rời) và loại của đế được kết nối với khay nhớ tạm. Đây là lệnh về cơ bản cung cấp một cách để truy vấn thông tin được cung cấp bởi sự kiện thay đổi kết nối cơ sở (ZZ0000ZZ).

Các giá trị có thể có của ZZ0000ZZ là:

  • ZZ0000ZZ,

  • ZZ0001ZZ, và

*ZZ0002ZZ.

Các giá trị khác được dành riêng để sử dụng trong tương lai.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Trả về chế độ hoạt động của thiết bị, cho biết cơ sở có hoạt động hay không và như thế nào đính kèm vào clipboard. Đây là lệnh về cơ bản cung cấp một cách để truy vấn thông tin được cung cấp bởi sự kiện thay đổi chế độ thiết bị (ZZ0000ZZ).

Các giá trị trả về là:

  • ZZ0000ZZ

  • ZZ0001ZZ

  • ZZ0002ZZ

Xem ZZ0000ZZ để biết chi tiết. Các giá trị khác được dành riêng cho tương lai sử dụng.

ZZ0000ZZ

Được xác định là ZZ0000ZZ.

Nhận trạng thái chốt hiện tại hoặc (có lẽ) lỗi cuối cùng gặp phải khi cố gắng mở/đóng chốt. Đây là lệnh về cơ bản cung cấp một cách để truy vấn thông tin được cung cấp bởi sự kiện thay đổi trạng thái chốt (ZZ0000ZZ).

Các giá trị trả về là:

  • ZZ0000ZZ,

  • ZZ0001ZZ,

  • ZZ0002ZZ,

  • ZZ0003ZZ, và

*ZZ0004ZZ.

Các giá trị khác được dành riêng để sử dụng trong tương lai.

Lưu ý về ID cơ sở

Loại cơ sở/ID được cung cấp qua ZZ0000ZZ hoặc ZZ0001ZZ được chuyển tiếp trực tiếp từ EC ở cấp độ thấp hơn byte của giá trị ZZ0002ZZ kết hợp, với trình điều khiển lưu trữ loại EC từ ID này xuất hiện ở byte cao (không có ID này, ID cơ sở trên các byte khác nhau các loại EC có thể chồng chéo).

Macro ZZ0000ZZ có thể được sử dụng để xác định thiết bị EC loại. Đây có thể là một trong

  • ZZ0000ZZ, dành cho Mô-đun tổng hợp bề mặt trên HID và

  • ZZ0000ZZ, dành cho Mô-đun tổng hợp bề mặt qua Surface Serial Trung tâm.

Lưu ý rằng hiện tại chỉ hỗ trợ ZZ0000ZZ loại EC, tuy nhiên ZZ0001ZZ loại được dành riêng để sử dụng trong tương lai.

Cấu trúc và Enum

Người dùng API

Có thể tìm thấy daemon không gian người dùng sử dụng API này tại ZZ0000ZZ