1 điểm bởi GN⁺ 2025-05-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • Rotary Phone Dial Linux Kernel Driver là một module kernel chuyển đổi điện thoại quay số kiểu cũ thành thiết bị nhập liệu evdev trên Linux
  • Dự án này cung cấp một trình điều khiển mẫu đơn giản cùng môi trường phát triển dựa trên máy ảo, nên cũng rất hữu ích cho mục đích giáo dục và kiểm thử
  • Có thể phát triển và kiểm thử ngay cả khi không có phần cứng thực, đồng thời hỗ trợ mô phỏng GPIO
  • Hỗ trợ gần như mọi cấu hình ánh xạ phím và có thể tương thích với nhiều kiểu mã hóa xung khác nhau của từng quốc gia
  • Vì là module kernel tiêu chuẩn nên có thể mở rộng và tích hợp vào hệ thống Linux một cách dễ dàng

Tổng quan về Rotary Phone Dial Linux Kernel Driver

  • Dự án này là một module kernel chuyển mặt quay số của điện thoại xoay kiểu cũ thành thiết bị nhập liệu tiêu chuẩn của hệ thống Linux (ví dụ: bàn phím số)
  • Những người sau có thể cân nhắc sử dụng
    • Muốn nhập số bằng cách quay số với tốc độ chậm
    • Người dùng muốn đưa điện thoại analog đời cũ vào thời đại số
    • Giảng viên/người dạy học cần một trình điều khiển kernel mẫu và môi trường phát triển/kiểm thử ảo mà không cần phần cứng thực
    • Hoặc các mục đích thử nghiệm sáng tạo khác

Cách nối mạch

  • Về cơ bản, bộ quay số gồm hai công tắc: BUSY (trạng thái mở)PULSE (trạng thái đóng)
    • Hai công tắc này được nối với các chân GPIO của hệ thống có thể chạy Linux nhúng, kèm theo điện trở kéo lên
  • Khi quay số, công tắc BUSY chuyển sang trạng thái đóng, và trong lúc mặt quay trở về vị trí ban đầu, công tắc PULSE sẽ lặp lại việc mở/đóng nhiều lần
  • Cách đấu nối và sơ đồ chân khác nhau tùy theo quốc gia hoặc nhà sản xuất, vì vậy nên dùng đồng hồ vạn năng để kiểm tra phản ứng của công tắc
  • Chu kỳ hoạt động (thời gian mở/đóng) của tín hiệu xung và cách giải mã cũng khác nhau theo từng quốc gia và nhà sản xuất
    • Ví dụ: ở Đức, mỗi xung có 62ms mở và 38ms đóng
    • Thông thường, một đến chín xung tương ứng với 1–9, còn mười xung tương ứng với 0 (dù có ngoại lệ như Thụy Điển)
  • Nếu chưa chắc chắn, nên kiểm tra nhãn trên bộ quay số hoặc tự kiểm thử

Cách sử dụng

  • Trình điều khiển này là một module kernel ngoài cây nguồn tiêu chuẩn (out-of-tree kernel module)
  • Tóm tắt các bước
    • Thêm node rotary-dial vào device tree, ánh xạ pulse-gpiosbusy-gpios tới các chân thực tế
    • Nếu cần, thay đổi ánh xạ keycode bằng thuộc tính linux,keycodes
    • Chỉ định đường dẫn mã nguồn kernel (KDIR) bằng biến môi trường, sau đó build, cài đặt và nạp module
  • Khi module kernel được nạp, một thiết bị nhập liệu sẽ được tạo ra và hoạt động như bàn phím số
  • Có thể dùng công cụ evemu để theo dõi thuộc tính thiết bị nhập liệu và các sự kiện quay số

Máy ảo (VM) cho phát triển và kiểm thử

  • Cung cấp môi trường máy ảo cho phát triển trình điều khiển và kiểm thử end-to-end
    • VM này vá devicetree với các GPIO busy/pulse được mô phỏng bằng gpio-sim
    • Có thể điều khiển GPIO từ không gian người dùng để triển khai các kịch bản kiểm thử
  • Có thể build và chạy VM sau khi bật trình quản lý gói Nix và tính năng flakes
  • Khi vào VM, hệ thống sẽ đăng nhập thẳng vào shell phát triển
  • Sau khi build trình điều khiển, cũng hỗ trợ nạp/gỡ module
  • Có thể dùng công cụ rotary_dialer để mô phỏng số lượng xung cụ thể nhằm kiểm tra nhập liệu quay số
    • (Ví dụ trong môi trường mã hóa kiểu Thụy Điển, 3 xung sẽ được nhận là số 2)

Kiểm thử

  • Trình điều khiển đi kèm bộ kiểm thử toàn diện
  • Trong môi trường VM, có thể chạy các ca kiểm thử tự động bằng make test
    • Có thể kiểm tra nhiều tình huống như xác minh hoạt động của thiết bị nhập liệu, xác nhận việc phát ra keycode đúng khi quay số, xử lý đầu vào sai, v.v.

Có được đưa vào mainline hay không

  • Tác giả nói đùa rằng mình lạc quan về tương lai của quay số kiểu xoay, nhưng Linus Torvalds có thể sẽ không đồng ý

1 bình luận

 
GN⁺ 2025-05-25
Ý kiến trên Hacker News
  • Chia sẻ ký ức vào cuối những năm 70 đã tự làm một bộ quay số điện thoại bằng máy tính HP41C; đã nối rơ-le lưỡi gà không tiếp điểm với còi piezo và đường dây điện thoại, rồi dùng “synthetic programming” (các lệnh không được tài liệu hóa) để tạo các tiếng bíp ngắn nhằm hoàn thành xung quay số. Cách dùng là nhập tên (có hỗ trợ chữ cái), máy sẽ tìm số rồi gọi ngay. Cũng kể lại kỷ niệm khoảng 10 năm trước khi gặp Keith Jarrett ở công ty, mọi người thường nhầm ông ấy là nhạc sĩ; còn bản thân lại hỏi có phải ông là tác giả của HP-41C Synthetic Programming Manual không, và ông ấy đã tỏ ra ngạc nhiên lẫn vui mừng. Đính kèm thông tin sáchthông tin về synthetic programming
    • Tò mò không biết chương trình đó có được viết trực tiếp trên máy tính hay không; cũng khoe rằng mình từng tự viết trên hp49g, và cho rằng 41c với màn hình 1 dòng hẳn là một thử thách còn lớn hơn nhiều
  • Chia sẻ kinh nghiệm độ một chiếc điện thoại quay số thành tai nghe Bluetooth hoàn chỉnh, đồng thời làm cho nó có thể quay số bằng mặt số luôn. Trên HN phản ứng không nhiều nhưng được hackaday giới thiệu nên thấy rất tự hào. Đính kèm liên kết dự ánbài viết trên blog cá nhân. Nghĩ rằng chế độ bàn phím số quay Bluetooth cũng sẽ khá dễ làm, nhưng hiện tại không đủ thời gian
    • Ngày nay ESP32 là lựa chọn kinh tế hơn nhiều, nhưng vì rất muốn tự viết một driver kernel Linux nên đã tự triển khai
  • Kể rằng vào thời iPhone còn chỉ là tin đồn, đã từng đề xuất việc tái hiện quay số kiểu điện thoại xoay bằng touch wheel của iPod vì sẽ rất thú vị, nhưng bị mọi người bác bỏ hết; đồng thời nghĩ đến việc muốn dựng một Linux box để có lại cảm giác quay số cổ điển
    • Khẳng định rằng mình không phải người duy nhất; thực tế Apple đã đăng ký bằng sáng chế quay số kiểu rotary bằng touch wheel, và Steve Jobs cũng có tên trong danh sách nhà phát minh. Bản thân người này và một đồng nghiệp ở Apple cũng nộp một bằng gần như giống hệt, nhưng cuối cùng bằng của họ hết hiệu lực còn bằng của Steve thì vẫn còn. Khi đang ngồi nhậu ở SF, họ đã nảy ra ý tưởng tạo quay số bằng touch wheel, và physics engine của game pinball là nguồn cảm hứng quan trọng; ý tưởng đó cũng được hội đồng sáng chế công nhận. Dù có khác với bằng của Steve, họ cho rằng đây cũng có thể là một phần của chiến lược tăng số lượng bằng sáng chế cho iPhone
    • Tưởng tượng rằng nếu iPod được phát hành chỉ với việc bổ sung cellular networking thì có lẽ đã tạo ra một dòng lịch sử thay thế thú vị; cũng giới thiệu video gõ chữ hiệu quả
    • Phỏng đoán chắc chắn có ứng dụng cho phép quay số kiểu điện thoại xoay trên màn hình cảm ứng
  • Phấn khích vì có vẻ cuối cùng cũng có người thử chơi xong Dark Souls bằng điện thoại quay số
    • Gợi nhớ kỷ niệm từng chơi Soul Calibur bằng cần câu của Dreamcast
  • Điều này làm nhớ đến việc Sarah ở Connections Museum tại Seattle đã tạo một driver kết nối với soft PBX Asterisk để cho phép pulse signaling trên tổng đài điện thoại cũ; cũng giới thiệu video giải thích
  • Khi nhìn các triển khai driver tối giản như thế này, thấy ấn tượng ở chỗ mã driver thực tế có thể rất ít là đủ, nhưng lại cần biết cực nhiều về các cờ kernel và phương thức. Từng muốn viết lại bằng Rust nhưng tiếc là các binding cần thiết chưa sẵn sàng. Cũng cho rằng sẽ rất thú vị nếu viết một bài blog về cách tiếp cận và những khó khăn đã gặp
    • Thừa nhận rằng hiện tại chỉ có một số ít API subsystem được hỗ trợ bởi Rust binding nên chưa thể tiến xa; hy vọng sang năm khi hỗ trợ trưởng thành hơn sẽ thử lại và chia sẻ kinh nghiệm
  • Nhớ lại rằng trên các modem tương thích Hayes, có thể dùng lệnh ATDP thay vì ATDT để quay số xung kiểu điện thoại xoay
  • Giới thiệu một chi tiết lịch sử thú vị: ở New Zealand, các con số trên điện thoại quay số được ánh xạ ngược với số lượng xung; thực tế họ dùng hệ xung 10 chữ số
    • Giải thích lý do kỹ thuật: ở các thiết bị tổng đài cơ khí đời đầu kiểu rotary exchange, để giảm hao mòn tổng thể do miếng đệm ly hợp bị mòn, người ta đã thiết kế ngược lại, chẳng hạn quay số 1 thì tạo 9 xung. Ý tưởng này bắt đầu ở New Zealand, và theo hiểu biết của người viết thì Na Uy cũng áp dụng cách tương tự. Đính kèm liên kết Wikipedia về rotary system
  • Đề cập sự cần thiết của một phiên bản chuyển đổi DTMF (touch-tone); ở Úc từng có những hộp nhỏ chạy bằng nguồn đường dây để chuyển xung quay số sang touch-tone. Nhờ đó khi còn dùng đường dây điện thoại thông thường thì có thể tiếp tục dùng lâu dài, nhưng các tòa nhà gần đây lại không còn đường dây điện thoại nữa nên thấy tiếc
    • Vẫn có thể nối vào FXS/ATA để dùng như điện thoại voip; ngay cả điện thoại candlestick từ thập niên 1920 cũng vẫn đang được sử dụng nhờ cách này
  • Thấy thật trùng hợp khi đúng lúc đọc bài này thì cũng đang tháo tung một chiếc điện thoại quay số trên bàn và lên dây cót cho nó
    • Tò mò không biết thực tế chiếc điện thoại đã nằm tháo rời trên bàn bao lâu rồi; bản thân cũng tương tự và đoán chắc khoảng 2 năm