Vẽ ra chân dung khách hà ng cà ng rõ bao nhiêu thì cà ng tốt bấy nhiêu, nhÆ° tuổi tác, nghá»� nghiệp, hôn nhân gia đình, chức vụ, sở thÃch, lối sống, hà nh vi, đồ dùng, hoà n cảnh sống,… Há»� Ä‘ang gặp vấn Ä‘á»� gì, có những nhu cầu, mong muốn, khao khát gì trong cuá»™c sống, ở hiện tại và tÆ°Æ¡ng lai.
Vẽ ra chân dung khách hà ng cà ng rõ bao nhiêu thì cà ng tốt bấy nhiêu, nhÆ° tuổi tác, nghá»� nghiệp, hôn nhân gia đình, chức vụ, sở thÃch, lối sống, hà nh vi, đồ dùng, hoà n cảnh sống,… Há»� Ä‘ang gặp vấn Ä‘á»� gì, có những nhu cầu, mong muốn, khao khát gì trong cuá»™c sống, ở hiện tại và tÆ°Æ¡ng lai.
Hãy nhìn thẳng và o những vấn Ä‘á»�, nhu cầu từ biểu hiện ra bên ngoà i đến thầm kÃn bên trong. Nhu cầu cà ng thầm kÃn bên trong mà mình tìm ra được thì đụng và o cà ng dá»… lung lay, kiểu nhÆ° ngÆ°á»�i bạn tâm giao chỉ cần nói má»™t câu là dÆ°á»�ng nhÆ° đã hiểu nhau cả Ä‘á»�i rồi ấy.
Nên nhá»›, sản phẩm của mình chỉ là má»™t phần trong toà n bá»™ giá trị mình trao đến khách hà ng. Và dụ câu chuyện anh Ä‘i uống rượu, chÆ°a say rượu đã say cô bán rượu. Váºy ở đây cô bán rượu đâu chỉ bán rượu mà cả vẻ đẹp, nụ cÆ°á»�i, liếc mắt Ä‘Æ°a tình, nói chuyện ngá»�t lịm, nét duyên, tình yêu,…
NhÆ° váºy giá trị mình muốn Ä‘em đến cho khách hà ng nữ nà y là sá»± an toà n, khá»�e mạnh, xinh đẹp, tá»± tin từ trong ra ngoà i, trên xuống dÆ°á»›i,… Và son môi, mỹ phẩm chỉ là má»™t phần nhá»� xÃu trong vẻ đẹp bên ngoà i và khúc trên thôi nhé.
Open bằng Keil C. Đầu tiên chúng ta sẽ thêm thư viện Hid vào main để dễ dàng thao tác bằng lệnh #include “usbd_hid.h”
Sau đó extern biến chứa giá trị cài đặt của USB vào main
Khi chọn chế độ USB HID, CubeMX đã mặc định chọn thiết bị HID đó là chuột máy tính. Chúng ta cùng phân tích Report Desciptor mà CubeMx đã cho sẵn nhé. Các bạn vào USBD_HID.c và tìm dòng code như sau:
Copy đoạn dữ liệu và paste vào công cụ phân tích mình vừa mới nêu trên: http://eleccelerator.com/usbdescreqparser/
Ta thấy rằng trình tự các byte gửi như sau:
1 byte nút nhấn -> 3 byte X, Y, Whell -> 2byte Wakeup -> 1 byte kết thúc
Số byte này bạn chỉ cần đếm trong các đoạn Report Count theo thứ tự từ trên xuống dưới. Còn ý nghĩa của các từ mình đã giải thích bên trên rồi nhé.
Vậy nên chúng ta sẽ tạo 1 mảng chứa giá trị của các byte gửi lên với 1byte kết thúc là mặc định nên ko cần thêm vào. Mình tạo mảng mouse_report[5], và mảng lưu 2 giá trị ADC1 truyền qua DMA
Trước Main ta sẽ lập trình như sau
Tạo một hàm tên là map để chuyển đổi giá trị ADC từ 0 – 4096 thành -127,127
Tạo hàm đọc giá trị nút nhấn, thực hiện chuyển đổi và ghi vào mảng mouse_report
Trước While cho bắt đầu chuyển đổi ADC DMA, Trong While ta đọc giá trị của mouse và gửi qua cổng USB HID
Nhấn F7 để Build và F8 để nạp Code vào Kit.
Kết nối Joystick vào Kit theo hướng dẫn:
Cắm dây Micro USB vào mạch và cắm đầu còn lại vào máy tính. Mở Manager ra xem bạn sẽ thấy thêm 1 thiết bị Mouse
Mở Paint Sử dụng Joystick điều khiển thử.
Ta thấy rằng chuột chạy quá nhanh, không thể kiếm xoát và khi không di chuyển chuột cũng vẫn tự chạy. Lý do đó là điểm cân bằng của Joystick không giống lý thuyết đó là giá trị 2048.
Và chuột chạy quá nhanh do mạch sẽ gủi các giá trị từ -127 đến 127 cực nhanh khi giữ Joystick, các tọa độ này khiến chuột di chuyển rất nhanh. Vậy làm ntn để hiệu chỉnh hai thứ đó
Rút dây cắm HID từ chuột ra, chạy chế độ debug.
Trong debug ta add giá trị ADC_Val vào Watch 1 và nhấn chạy chương trình. Chúng ta thấy rằng: giá trị cân bằng khác nhau dẫn tới chuột luôn luôn di chuyển.
Sửa lại trong hàm Get Action, như sau:
Sửa -127, 127 thành -10 và 10 sẽ giúp chuột di chuyển chậm hơn.
STM32 USB HID được sử dụng rất rộng rãi khi muốn giao tiếp với máy tính, điện thoại, game pad một cách đơn giản nhất. Về cơ bản tất cả các device sử dụng USB HID đều làm việc giống nhau, sự khác nhau của chúng là cấu trúc gói tin truyền và đích đến sẽ được định nghĩa hết trong Report Descriptor.
Nếu thấy bài viết này có ích hãy like và chia sẻ cho người khác, đừng quên vào nhóm Anh Em Nghiện Lập Trình để giao lưu nhé các bạn
Nguồn: Lập trình STM32 USB HID giả lập chuột máy tính Tác giả: Khuê Nguyễn
from Khuê Nguyễn – Học Điên Tử Lập Trình https://ift.tt/3bSo3gA
Trước tiên nếu bạn chưa bao giờ điều khiển một thiết bị USB thì hãy quay lại Bài 16 để đọc bài viết và tài liệu USB in a Nutshell để có cái nhìn tổng quát nhất.
Thiết bị HID và Host (máy chủ) giao tiếp với nhau qua kiểu Control Transfer ( hay Endpoint 0). Sử dụng Ngắt tại chiều IN và tùy chọn ở chiều Out. Đặc tả của lớp HID cho phép chúng có thể truyền dữ liệu ở cả tốc dộ low speed , full speed và high speed.
Trong bài này mình sẽ sử dụng Joystick đọc giá trị ADC biểu thị trục X, Y. Và nút nhấn trên Joystick biểu thị cho Left_Button trên chuột máy tính.
Chỉ với 4 bước đơn giản là bạn sẽ có được một bà i rồi:
Bước 1: Xác định rõ khách hà ng của mình là ai
Bước 2: Xác định những giá trị mình sẽ đem đến khách hà ng là gì
Bước 3: � tưởng nội dung
Gi� thì đi và o chi tiết hơn nhé!
Cách đơn giản nhất để có ý tưởng đó là thay đổi góc nhìn
1. Hãy ch�n lấy một đối tượng (ở đây có thể là khách hà ng của mình)
2. Ch�n lấy một bối cảnh nơi mà vấn đ� của h� đã, đang hoặc sẽ phát sinh
3. �ưa ra một giải pháp cho vấn đ�, nhu cầu đó
4. �ối tượng nói v� giải pháp đó (có thể là bất cứ ai, bất cứ cái gì trong bối cảnh đó)
1. Một bạn gái đã có ngư�i yêu một th�i gian
2. Chuẩn bị ra mắt nhà chồng nhưng chưa biết phải chuẩn bị gì, ứng biến ra sao
3. Xây dá»±ng vẻ đẹp bên ngoà i, chuẩn bị tinh thần tá»± tin để sẵn sà ng ra mắt ( có thể liên quan Ãt hay nhiá»�u, có hay không sá» dụng sản phẩm Ä‘á»�u được )
4. Các đối tượng khác nhau
Bạn có thể tạo nội dung bằng:
– Tụ h�p thà nh từng nhóm viết rồi chia sẻ cho nhau dùng
– Sưu tầm rồi xà o lại:
Với bốn bước được chắt l�c v� đơn giản hết mức như thế nà y thì với một ngư�i thư�ng xuyên được điểm bốn môn văn là m được thì bạn cũng là m được. Hy v�ng với công thức nà y, bạn có thể “hấp thụ� và sớm đạt tới mức “thượng thừa� trong cách viết content bán hà ng hay.
Phần mềm gửi và nhận dữ liệu HID Terminal:
Tools giải mã report descriptor.
http://eleccelerator.com/usbdescreqparser/
Trước khi máy chủ có thể nói chuyện với thiết bị, nó cần biết cách sử dụng hoặc ứng dụng của thiết bị này là gì? Dữ liệu của nó được tổ chức như thế nào? và Dữ liệu thực sự đo lường điều gì?
Lấy ví dụ: Nếu thiết bị của bạn là một con chuột máy tính, các nút bấm và tọa độ sẽ điều khiển Pointer trên màn hình. Sự kiện click hoặc righ click sẽ làm gì, scroll sẽ làm gì. Để tất cả các sự kiện đó được sảy ra, trình điều khiển lớp HID phải biết rõ:
Tất cả các thông tin này sẽ được mô tả trong phần Report Descriptor. Khi trình điều khiển phân tích cú pháp của Report Descriptor nó sẽ hiểu được khi thiết bị chuột máy tính truyền dữ liệu lên, dữ liệu nào sẽ thuộc ứng dụng nào của máy tính. (Tương tự bạn phân luồng dữ liệu UART vậy).
Khi một thiết bị HID được kết nối, Host sẽ tạo ra 1 Request đó là GET_DESCRIPTOR, sau khi hoàn tất quá trình. Chuột máy tính và máy tính sẽ giao tiếp với nhau mà ko cần thêm driver gì cả.
Bộ Report Descriptor được mô tả bởi chuỗi các mục, các mục này mô tả dữ liệu sẽ truyền đi khi thiết bị USB HID device truyền hoặc nhận. Mỗi mục bắt đầu bằng tiền tố là 1 Byte quy định vai trò của mục và độ dài dữ liệu của nó.
Mỗi mục chia làm 3 loại thẻ chính:
Mỗi loại thẻ bao gồm một số loại chính như:
Mỗi thẻ mục sẽ được phân loại tương ứng với 1 mã từ 0 – 255 ( 1 Byte).
Cấu trúc của Report Descriptor như sau:
Lấy ví dụ về Report Descriptor cho chuột máy tính như sau:
Phần khoanh đỏ cấu hình 3 nút nhấn của chuột, phần khoanh xanh cấu hình tọa độ của chuột.
Phần Usage Page và Usage xác định kiểu thiết bị đó là Mouse và thuộc máy tính để bàn (Generic Desktop).
Các bạn có thể tham khảo link này để phân tích 1 RD: https://www.crifan.com/files/doc/docbook/usb_hid/release/webhelp/hid_report_example_analysis.html