Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
電子辞書Brainをネットに繋げてみた(自力編)
Search
らすぴー
May 30, 2026
Technology
820
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
電子辞書Brainをネットに繋げてみた(自力編)
をやりたかったんですけどね...
らすぴー
May 30, 2026
More Decks by らすぴー
See All by らすぴー
USB PDを使ってスマホを労わりたい
raspython3
0
190
typoなんかねぇよ
raspython3
0
810
高校のChromebookでも自由なネット環境を!
raspython3
0
270
限界環境CPython rev. seccamp2025
raspython3
0
82
kernel-vm-ittekita-yuukousai
raspython3
0
130
kernelvm-brain-net
raspython3
0
1.2k
pyconjp2024-wince
raspython3
0
93
seccamp2024-edictionary-python-TLS
raspython3
0
70
Other Decks in Technology
See All in Technology
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
260
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
330
バフェットコード開発チームの心得(v1.1)
shoe116
0
110
VLA-JEPA: Enhancing Vision-Language-Action Models with Latent World Models
takmin
0
330
クラウドサインを止めずに Nuxt へ 次の10年のために先に決めたこと
bengo4com
1
150
AI駆動開発における開発環境のセキュリティの考え方
yamahiro
2
620
AIエージェント時代、Kaggleにどう取り組むか
takanao
1
180
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
780
野良MCPサーバーを排除せよ!MCPサーバーのガバナンス
yukiogawa
1
240
AI時代のGraphQL
joere
3
410
プロダクトが成長すると、 プロダクトマネージャーの仕事はどう変わるのか - 「まず作る」から「小さく学び、確かめながら進む」へ
sansantech
PRO
1
370
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
140
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Designing for humans not robots
tammielis
254
26k
The SEO identity crisis: Don't let AI make you average
varn
0
610
GitHub's CSS Performance
jonrohan
1033
470k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
900
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
450
Everyday Curiosity
cassininazir
0
360
4 Signs Your Business is Dying
shpigford
187
23k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Transcript
電子辞書Brainを ネットに繋げてみた ~ 自力編 ~ らすぴー / RasPython3 (@RasPython3) 1
をやりたかったんですがね...
自己紹介 活動名 RasPython3 / らすぴー X: @raspython3 seccamp’24 全国 seccamp’25
チューター 普段やってること 各種ウェブツールづくり 電子辞書いじり ゲーム内コーディング ネットワーク関連 etc. 2
本題に入る前に • 電子辞書Brainについて • SHARPの電子辞書シリーズ • Windows CE(WinCE)が動作 • 2021年以降のモデルは別OS
• 2chなどで自作アプリやハックが 盛んだった • 昨年5月頃にインターネット接続に ついに成功 • Kernel/VM@関西11回目で発表した • その後マルチプレイできるマイクラとかが 移植されててビビった 3 SHARP Brain SH-PW7-W 自分が持ってる機体の色違い
本題に入る前に 本日の内容はなんと 未完 です!!!(←???) 正確には、実装が終わりませんでした ネタの錬成は計画的に... 4
背景 • 昨年の Kernel/VM探検隊@関西11回目 にて • 電子辞書Brainを • ネットに繋げて •
発表をしました • 今回はその続きです 5
背景 正直なところ... • WinCEのビルド以外ほぼ何もやっていないよね??? • IPアドレス固定のPythonスクリプト書いたぐらい • 大きな問題点も • サンプルコードもMicrosoftの著作物なわけで...
• DLLとかの配布がちょっと厳しそう → 手軽に使える、まではできない 6
と、いうわけで 自分でデバイスドライバを書いて 配布できるようにしよう! 7
どうやって? • RNDISはMicrosoftがすでに書いている • 最近BrainuxがRNDISからCDC-NCMに変わった → せっかくだから CDC-NCM デバイスドライバを自分で書こう! 8
そもそも • RNDISってなんやねん • CDC-NCMってなんやねん 9
RNDIS • Remote NDIS (NDIS: Network Driver Interface Specification) の略
• WinCEのNDISレイヤーとUSBレイヤーを つないで、Ethernetフレームを受け渡す • MacOSではデフォでは使えないそうで、 そのためMacOSとの接続で使うのが めんどくさいらしい • 詳細なプロトコル仕様を見つけられなかった 10
RNDIS • Chromium OSのソースコード の中でRNDISはクソって 書いてある • ** STRONGLY DISCOURAGED
** • CDC-ACM/ECM/NCMのほうが 簡単らしい 11 https://chromium.googlesource.com/chromiumos/third_party/kernel/+/0.12.392.B/chromeos/compat-wireless/drivers/net/usb/rndis_host.c
CDC-NCM • CDC : Communication Device Class • NCM :
Network Control Model • CDC-ECM (Ethernet Control Model) を ベースとしてより高速な プロトコルとして設計された • 複数のEthernetフレームを まとめて送受信することで 高速に動作する 12 https://www.usb.org/sites/default/files/NCM11.pdf
CDC-NCM • Ethernetフレームを 右のようなNTB (NCM Transfer Block) に詰め込んで送る • 構造はかなり単純
• そりゃRNDISより 簡単なわけだ 13
RNDIS と CDC-NCM の共通点 • 中に入っているのがEthernetフレーム • どちらも複数まとめて送受信できる(はず) • RNDISのサンプルコードを読むと、
Data Class Interface と Communication Control Interfaceなど 構成がほぼ同じ 14
RNDIS と CDC-NCM の違い • 送り方が少し違う • RNDISはパケットとメッセージを同じ形式にして送受信 • パケットはバルク転送で、メッセージはコントロール転送の
Encapsulatedなんちゃらで送ってるっぽい • 中身がちょっとごちゃごちゃしてるっぽい • CDC-NCMはパケット(Ethernetフレーム)とメッセージ(リクエスト)を別 にして送る • Ethernetフレームはブロックにまとめてバルク転送 • リクエストはコントロール転送でUSB Device Request 15
方針 1. MSのドキュメントを見ながら1からコードを書く • 一番クリーンにできる • 一番大変 2. すでにあるデバイスドライバのサンプルプログラムを流用して書 く
• クリーン度合いは落ちる • 比較的楽 16
• この時点ではまだKernel/VMまで1~2か月あった • 「さすがにこれだけ時間があればなんとかなるやろ」(フラグ) • 方針1を探る 17
やること • USBのプロトコル仕様を調べながら • Windows CEにおけるデバイスドライバの書き方を調べる • CDC-NCMのプロトコル仕様を調べながらドライバを書く 18
補足:Windows CEにおけるドライバの動作 • 他のOSにおけるデバイスドライバの動作はよく知らないので 比較はしませんが... • OSのカーネルプロセスであるNK.EXEがドライバのDLLをロード • 各ドライバはNK.EXEのスレッドとして動作する •
なのでドライバのDLLとレジストリ設定さえ用意すれば動く 19
ところがどっこい その1 • Microsoftのドキュメントがスッカスカであまりにも情報不足 • WinCEのドキュメントはもともとページが抜けがち()だけど USB機能ドライバ周辺は突出してなんもない • 目次ページっぽいのはあったけどそれ以降のページが無ぇ! •
Lv.100のエスパータイプでもなければ無理 20
ところがどっこい その1 21 普通ならもっとページがある リンクになってないし検索しても情報が ほとんどヒットしない
ところがどっこい その1 • Windows CEは組み込みOS → そもそも一般向けじゃないからドキュメントが充実してない • USB Function
Driverを書くケース自体レア → 一層ドキュメントが充実してない • Microsoft → 見せなくていいとこは隠したがるのでドキュメントに書かない 22
• 他にもドキュメントに書いてないAPIがRNDISのサンプルコードで 山ほど使われている • 普段開発に使っているcegccのヘッダーファイルも足りない →方針1は諦めて、方針2に転換 ただしどちらにせよcegccに足りないヘッダーはWinCEのソースに 入ってるヘッダーを参考にして自分で用意する 23
ところで この時点であっという間に残り一週間 24 17 11 12 13 14 15 16
24 18 19 20 21 22 23 31 25 26 27 28 29 30 Kernel/VM okarev Seccamp 課題締切 今ここ
ところで • この週末(23,24)頑張ったらギリギリ完成しそう • 動いても動かなくてもそれも話にできるから どうにかなるでしょ ──────そう思っていた 25
ところがどっこい その2 なんと 風邪をひき発熱でダウン ...というわけで週末がログアウトしました やっべぇ(´・ω・`;;;) 26
ところがどっこい その2 • 残るは平日のみ、しかも授業・授業課題があるから あまり時間を割けない • 今流行りのAIコーディングとかも試したかったけど そんなことをやっている暇はなさそう • AIに書かせるより自分で書いたほうがおそらく速い
(内容的にAIのハルシネーションがヤバそう) 27
とにかく書く • 要するに • を書いて • こうすれば動く 28 CDC-NCM Miniport
CDC-NCM USB Transport
とにかく書く RNDISのサンプルコードの構成 • RNDISFN ... USB機能ドライバ本体、USB側の入出力担当 └ rndisfn.cpp • RNDISMINI
... NDISミニポートドライバ、NDIS側の入出力担当 ├ cemini.c ミニポートドライバのrndisfnとやり取りする側(多分) ├ hostmini.c ミニポートドライバのNDISとやり取りする側(多分) ├ rndis.c RNDISのプロトコルドライバ ├ wince.c よくわかんないけどWinCEのドライバに必要なものたち └ utils.c その他 29
とにかく書く さて... • RNDISFN └ rndisfn.cpp 76 KB • RNDISMINI
├ cemini.c 52 KB ├ hostmini.c 33 KB ├ rndis.c 64 KB ├ wince.c 16 KB └ utils.c 4 KB 30 計 245KB ≒ 24万5千字 +各種ヘッダーファイル
とにかく書く • やることは普通の移植作業に近い • RNDIS固有の実装だけCDC-NCMのものに書き換える • それ以外はほぼ写経 • 改変が多い部分はファイル単位でまとまっていそう •
rndisfn.cpp rawに近い部分なので改変必要 • rndis.c これが一番違う • cemini.c これとrndis.cが NDIS RNDIS の変換をしている(はず) • PCを触れるときはひたすら書く • 通学時間はひたすらCDC-NCMの仕様とrndisのサンプルコードの 中身を読んで頭に叩き込む (脳内マッピングによるコーディング速度の最適化) 31
間に合わねぇ! • 自分の自作動画編集ツール(約280KB)と同じくらいのサイズ でもそれは3年くらいかけて書いてる • 頑張ったけど間に合わず • 週の前半は忙しくてコード書けず • それでも2,3日の間に
90KB 書いた • rndisfn.cppにあたるncmfn.c • rndis.cにあたるncm.cの途中まで • このスライドも前日の夜から作り始めました 32 計画性
• 正直なところ... • もし完成してもできることは去年と変わらないから 見栄えしないんだよね... 33
おわりに そういえばKernel/VM@東京のconnpassページが公開されましたね ふむ... (意味深) ご清聴ありがとう ございました! 34