ソフト編(1) で検討した内容を踏まえて検討する。
I2C デバイスのやり取り
I2C では、WRITE もしくは READ パケットをホストが送出する。WRITE では、
アドレス(2B) データ1 データ2 データ3 ...
こんな感じで レジスタへの WRITE データを送ってくる。データの数は決まっていないが、デバイス側で上限を設けることはできる。1B 毎にハンドシェークするのだが、上限に達したときに NAK を返す。(NAK は、これ以上受け取れないという意味で、直前のデータは受信)
HID over I2C では、Command Register に対し
Op Code , (Report Type | Report ID)
10: Input
20: Output
30: Feature
という 2 バイトをまず送ってくる。
Op Code で Linux が対応しているものは、
01 RESET
02 GET_REPORT
03 SET_REPORT
08 SET_POWER
だけである。また
0E VENDOR
という好きに使ってよいコマンドがある。
ただし HID の定義では、
04 GET_IDLE 必須
05 SET_IDLE 必須
06 GET_PROTOCOL ブートキーボードでは必須
07 SET_PROTOCOL ブートキーボードでは必須
ということになっている。なお SET_REPORT は キーボードの LED 操作であり必須ではない。
例えば、SET_REPORT を送ったとしよう。次は、Output Register に対しリポートを Write してくる。
アドレス(2B) レングス(2B) レポートの中身
あるいは
アドレス(2B) レングス(2B) レポートID(1B) レポートの中身
どちらになるかは、Report Descriptor の内容で決まる。
例えば、GET_REPORT。 キーボードの Input Report を Input Register に対し Read してくる。
(WRITE) アドレス(2B)
(READ) レングス(2B) レポートの中身
あるいは、
(WRITE) アドレス(2B)
(READ) レングス(2B) レポートID(1B) レポートの中身
ということになる。
・ https://docs.mbed.com/docs/ble-hid/en/latest/api/md_doc_HID.html
実際の中身について、ここに説明がある。
[modifier, reserved, Key1, Key2, Key3, Key4, Key5, Key6]
modifier:
bit 0: left control
bit 1: left shift
bit 2: left alt
bit 3: left GUI (Win/Apple/Meta key)
bit 4: right control
bit 5: right shift
bit 6: right alt
bit 7: right GUI
null report: [0, 0, 0, 0, 0, 0, 0, 0]
'a' report: [0, 0, 4, 0, 0, 0, 0, 0]
'A' report: [2, 0, 4, 0, 0, 0, 0, 0]
モデファイア以外の同時押しが 6 つまでで、6 つを超えると "Keyboard ErrorRollOver" コードに全部書き換える。作ったキーボードでは、left control, left shift, left alt の3つがモデファイア。Fn キーは内部で処理するので送出しない。同時押し可能なキーは 他に ESC,TAB,BS,ENTER と 4 つあり、6 個を埋める場合がある。
HID では、常に 8バイト使って、状態を送る。HID over I2C の場合は、2 バイトの Length または、2 バイトの Length + 1 バイトの Report ID が前に付くということである。
常にレジスタを指定し、WRITE または READ するわけだが、そのレジスタはどこにあるのか?
HID over I2C の場合、HID Descriptor というものがある。USB での ディスクリプタのようなもの。
面倒なので Linux からコピー
struct i2c_hid_desc {
__le16 wHIDDescLength;
__le16 bcdVersion;
__le16 wReportDescLength;
__le16 wReportDescRegister;
__le16 wInputRegister;
__le16 wMaxInputLength;
__le16 wOutputRegister;
__le16 wMaxOutputLength;
__le16 wCommandRegister;
__le16 wDataRegister;
__le16 wVendorID;
__le16 wProductID;
__le16 wVersionID;
__le32 reserved;
} __packed;
HID Descriptor 自体の長さから始まって version ... と続く 30 バイトである。
この中でレジスタが、
ReportDescRegister
InputRegister
OutputRegister
CommandRegister
DataRegister
と 5 つ定義されている。ReportDescRegister は、Report Descriptor を読むアドレス。このアドレスを WRITE して、READ する。
InputRegister, OutputRegister は、USB でいう所の エンドポイント。ホストが受信する Report は、InputRegister をまず指定して Read するということらしい。DataRegister は、コマンドに対するステータスとか?
Report Descriptor だが、こちらは HID を定義する デスクリプタ。その内容はというと ... USB と同じ。
では、HID Descriptor はどこから読むのか? ... ACPI で定義せよ?
実装方針
HID over I2C について、あまり分かったわけではないが、それと共存できる独自方式のやりかたは分かった。
-- レジスタを指定(WRITE)して 続いて データを送る。
-- レジスタを指定(WRITE)して 改めて READ する。
-- アドレス空間は 2 バイトあるが、1 バイトだけ使っても構わない
基本はこういうことである。
1) FIFO の読み出し → READ バッファの読み出し(レジスタ)
ソフト編(1)では、FIFO としたが、ちょっと変える。 READ バッファということにして、スキャンでは、 READ バッファに詰めていく。READ が来たら、全部持って行ってもらう。フォーマットは 最初に Length 2 バイトを付ける。
これは、Input Register と共用できる。
なお、READ の最中は、READ バッファを更新してはならない。スキャンを禁止しないといけない。
ここが FIFO と大きく違う。
2) 機能の指定 (レジスタ)
0E xx で 機能を指定する
00 なし
01 ローカルスキャンコード
02 ASCII
03 スキャンコード1
これは、Command Register と共用できる。
3) 現在の状態の読み出し(レジスタ)
14 バイト(7 バイト)のテーブルを作っているのだから、これを勝手に読み出せば良い。
サイズが大きく READ バッファを使えない読み出しなので、専用のレジスタにする。統一するため 最初に 2バイトの Length を付ける(かも知れない:未確定)
4) 独自ディスクリプタ読み出し(レジスタ)
使える機能とかを定義して、ROM から読み込む。
専用のレジスタにするが、仕組みは、HID Descripor , Report Descriptor と共用にする。
最低限必要なのは、こんなところ。ステータスを返す Data Registor とか必要になるかも知れないが、作りながら検討しよう。
I2C の制御
USI については、以前作ったものがある。それを元にするつもりで、TWI 対応もそれに準じた作りにする予定。
それは良いのだが、すっかり忘れてしまった。復習しないといけない。
教材としては、AVR311 (TWI slave), AVR312(USI slave) がある。AVR.jp に日本語訳もある。あとは各データシート。
これらの教材は、デバイスの使い方であって、どう処理するかは設計しないといけない。
設計方針
基本は、割り込みである。
割り込みが来たら、WRITE では、1 バイトを受け取り、READ では送信データをセットする。これらをどう処理するか検討していく。
処理の基本は、ステートマシンである。1 バイト目のWRITE で何かをして、2 バイト目のWRITE を受け取る状態にする・・・みたいな処理。
1 バイト目 アドレス(L) : カレントレジスタの設定
例えば、独自ディスクリプタ読み出しレジスタが設定されたら、読み込むアドレスとレングス、ROM からの読み出しを示すフラグを設定する。
2 バイト目 アドレス(L) :無視
3 バイト目 コマンド:
カレントレジスタが、コマンドレジスタであり、コマンドが 0E のときのみ次に進む
4 バイト目 機能選択:
メインループ側に 機能が変わったということを通知
それ以降:無視
終了条件:初期状態にリセット
簡単なものは、こんな感じ。
READ では、
1 バイト目 レングス(L) :
2 バイト目 レングス(H) :
それ以降:
カレントレジスタの設定で設定された情報に従って 送信データをセットする。
(レングスが 0 になっているときは、0 をセット)
終了条件:初期状態にリセット
レングスを 0 にする・・・だけで良いのだろうか?
繰り返し READ することをサポートするのであれば、ちょっと処理が変わる。
繰り返し READ が来た場合、同じデータが先頭から読めないといけないようだ。HIDDescriptor の読み込みでいきなり、それが起きる。
他に RESET が来たときは、READY になったら 00 00 が読めなければならない。最後まで READ した場合は、レングスを 0 にするが、途中でやめたときは、READ 前に戻すことにしよう。
必ず終了条件が来るので、ステートマシンとしてそう複雑なものではない。状態数は多くないので、すべてを 1 バイトに収める。分かりやすくするために状態変数を分けたりはしない。
役割分担と排他制御
割り込み処理が絡むので何をメインループで処理させるか? メインループと競合がおきないようどう排他制御するか設計しないとならない。ここは非常に重要である。
READ バッファ
READ バッファ自体は、メインループだけが変更する。割り込みでは、READ バッファを読み込むが、更新をーひいてはスキャンを停止させなければならない。メインループで処理が一段落したら、次のループからスキャンを行わない。I2C の次の割り込みまで間があるので、十分時間的猶予がある。
・READ バッファの読み出しレジスタがセットされたら、一時停止フラグを立てる。
・現在の状態の読み出しレジスタも対象にする
・READ が(正しく)完了したら一時停止フラグを落とす。
これだけでは、ずっとスキャンが停止してしまうかも知れない。
・WRITE が来たら、まず一時停止フラグを落とす。
これだけ入れておけば良いような気がする。なにも要求が来なければ、なにもしないで良いのである。なにか要求が来たら、割り込み終了後ただちに スキャンすることになる。
READ でどこから読み込むかの情報
これは、割り込み側でのみ操作する情報。メインループ側では関知しない。READ バッファも レングスを転記する。
動作モード
メモリに置いて、動作モード変更フラグは GPIOR に置く。割り込み側でのみ変更。
動作モードは、メインループの一回のループで一度だけ読む。volatile 属性。
変更フラグを先にチェックし、フラグが立っていたら、READ バッファを クリアし、フラグを落とす。-- こういう処理も割り込みでやってはいけない。
忘れていたが、READ バッファの読み込み完了の通知も 動作モード変更フラグ を流用しよう。一時停止フラグを落としたら、このフラグを立てる。
HID over I2C はいきなりは対応しないが、
・READ バッファの生成要求
というのも作っておかないといけない。これもフラグ1つ。生成が終わったらフラグを落とす。
フラグを立てるタイミングは、GET_REPORT が来たときで良いのではないかと思う。
これらフラグは、GPIOR に詰め込んでいく。メモリとは全くコストが違うのである。
排他制御が重要と書いたが、基本緩いフラグ処理で行けそうな気がする。
なお、HID over I2C はいきなりは対応しないと書いたが、USB が先である。HID を理解し動かしてから、I2C に入れていく。
ここまでで、一旦検討終了。作り出すことが出来そう。
今のところ、version 1 2313版 の基板を作る部品だけ揃っている。作っているうちに 861 版 も揃うだろう。version 3 t88a 版はまだまだ。一か月ぐらいみておかないと。
なお HID over I2C の実装は、USB キーボードの実装後。
・http://d.hatena.ne.jp/hanya_orz/20140425/p1
ここを読んで HID を理解しておこう。
付録
レジスタアドレス定義
XX00 LocalDescRegister
XX01 HIDDescRegister
XX02 ReportDescRegister
XX03 InputRegister
XX04 OutputRegister
XX05 CommandRegister
XX06 DataRegister
XX07 KeystatRegister
LocalDescriptor 定義
HIDDescriptor 定義
__le16 wHIDDescLength = 30;
__le16 bcdVersion = 0x0100;
__le16 wReportDescLength;
__le16 wReportDescRegister = 2;
__le16 wInputRegister = 3;
__le16 wMaxInputLength = 10;
__le16 wOutputRegister = 4;
__le16 wMaxOutputLength;
__le16 wCommandRegister = 5;
__le16 wDataRegister = 6;
__le16 wVendorID;
__le16 wProductID;
__le16 wVersionID = 0x0000;
__le32 reserved = 0;
GPIOR フラグ一覧
タイマー(Tick)フラグ
オートリピート中 ?
オートリピート2個目以降 ?
モード変更イベント?
ROM からの読み出しを示すフラグ
スキャンの一時停止フラグ
READ バッファの生成要求
https://www.pixnet.net/pcard/6300060b9536eb7640/article/17003700-4ecc-11ec-9ef0-3b218075dd55
https://tralitulot.weebly.com/inspecter-dhanush-man-3-full-movie-3gp-download.html
http://torfuvesmo.unblog.fr/2021/11/26/anymp4-pdf-converter-ultimate-3-3-16-incl-patch-best/
https://document.onl/sales/pennin-perumai-movie-songs-download-kristal-mathematique.html
https://trello.com/c/vJjeHw5W/69-zbirkavene2downloadpdf-fiorand
https://trello.com/c/fNg468Cm/39-crack-mapilab-duplicate-email-removerl-elyijalea
https://trello.com/c/xXGWnZqZ/38-mx-simulator-demo-crack-by-now-heamar
https://trello.com/c/GeawQFny/35-mecanizado-por-arranque-de-viruta-micheletti-pdf-downloadl-kamusaffe
https://wakelet.com/wake/zu-kEfkY6Uoa0bDYMWTXg
https://shantaymanezch.wixsite.com/livadiska/post/free-download-all-episode-binbir-gece-greek-subtitles-rarl
http://draglironet.unblog.fr/2021/11/29/medicamentos-que-matan-y-crimen-organizado-epub-90/
https://uploads.strikinglycdn.com/files/0b167bdd-fc43-4a8b-8f52-f188e076d1b4/Highway-15-Online-Free.pdf
https://wakelet.com/wake/W75O5x3QX0oH5QhJhqzrY
https://www.pixnet.net/pcard/16960602990f208895/article/aa34e230-525c-11ec-b753-77f7753797ee
https://www.pixnet.net/pcard/525016019c55dc35a1/article/aa14e5f0-525c-11ec-9cb3-53dbcc3a8d5c
http://promlopsinas.unblog.fr/2021/12/01/link-adobe-photoshop-cs3-keygen-activation-download/
https://coub.com/stories/2806049-hypixel-skyblock-pickaxe-guide-westxil
https://coub.com/stories/2806050-ncert-maths-workbook-for-class-3
https://coub.com/stories/2806051-wondershare-dr-fone-registration-code-crack-gereli
https://coub.com/stories/2806052-revit-2012-crack-xforce-better-keygen-epub
https://coub.com/stories/2806049-hypixel-skyblock-pickaxe-guide-westxil
https://coub.com/stories/2806050-ncert-maths-workbook-for-class-3
https://coub.com/stories/2806051-wondershare-dr-fone-registration-code-crack-gereli
https://coub.com/stories/2806052-revit-2012-crack-xforce-better-keygen-epub
https://coub.com/stories/2883675-avs-dvd-authoring-v1-3-4-56-crack-frojani
https://coub.com/stories/2884217-adobe-xd-cc-27-1-12-crack-plus-torrent-full-version-2020-extra-quality
https://coub.com/stories/2884337-download-pyaar-ka-punchnama-2-torrent-better
https://coub.com/stories/2883508-naimatullah-shah-wali-predictions-urdu-pdf-downloadl-quichar
https://wakelet.com/wake/86UHmMsUHOu1jUBXoPV8s
https://wakelet.com/wake/LI3JUd1E4n1RX4cH3Mkqv
https://wakelet.com/wake/eRSNxHeA3JINv-YN_Omru
https://wakelet.com/wake/FZLO1TY4DlBikOYjtRqTs
https://wakelet.com/wake/FSy4Dmbw2Th-3-H37jnMk
https://wakelet.com/wake/bTCudfgshHzccOk0U3UOQ
https://wakelet.com/wake/EisbxbPgG__XhOYztmBqw
https://wakelet.com/wake/pg0HrctKKlUdMzEHbcaYF
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgID_xIirCwwLEgZDb3Vyc2UYgICAn6v4pggMCxIIQWN0aXZpdHkYgIDA4PTbyQgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDAh67aCgwLEgZDb3Vyc2UYgIDAgK3D_wsMCxIIQWN0aXZpdHkYgICA_5frpwgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCgyIXaCgwLEgZDb3Vyc2UYgIDA4PbdwQsMCxIIQWN0aXZpdHkYgICA_5e8hwoMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDAh7LyCAwLEgZDb3Vyc2UYgIDAwNb8zQgMCxIIQWN0aXZpdHkYgIDA4OWs4QgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://wakelet.com/wake/cc7_MIGMK9FVpRkcmAm1o
https://wakelet.com/wake/U4HsBYF7XZH4HmfnnnC2b
https://wakelet.com/wake/d_IWE9LCnzmlHEgDUUQUk
https://wakelet.com/wake/D5B5Dsphw-P-NtTHMmjVC
https://wakelet.com/wake/Nd6F-CiQOao_4Z8b4YQ-r
https://wakelet.com/wake/1HB8tUIKcpkBGbOaKnVFS
https://wakelet.com/wake/qpNCMCGTXCQEsCJ7gZ63r
https://wakelet.com/wake/6o03DWpyuTS_tUj2qsuHF
https://coub.com/stories/2632548-kienzle-wall-clock-serial-number
https://coub.com/stories/2632543-the-girls-next-door-naked-vagina-pics-gertnewb
https://coub.com/stories/2632547-verified-biology-brooker-et-al-pdf-download
https://coub.com/stories/2632546-navy-uniform-inspection-checklist
https://coub.com/stories/2808311-rrrsrss-srrr-kurs_angl_dlya_it_spec-rar-4-17-rr-new
https://coub.com/stories/2789885-khachaturian-sonatina-1959-pdf-nirkir
https://coub.com/stories/2789884-set-aside-prayer-herb-k
https://coub.com/stories/2789881-ap-biology-exam-practice
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgIDfi-LbCgwLEgZDb3Vyc2UYgIDAwJbqyAkMCxIIQWN0aXZpdHkYgIDAwIX4jgsMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgID_pJ2oCAwLEgZDb3Vyc2UYgICAn6TzjgsMCxIIQWN0aXZpdHkYgIDAsOX4oAgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCg-Mf-CgwLEgZDb3Vyc2UYgICAn5ur5woMCxIIQWN0aXZpdHkYgIDAwLmDjgkMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDAzKqpCAwLEgZDb3Vyc2UYgIDAwMy-yAkMCxIIQWN0aXZpdHkYgIDAsLS__wsMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCA0Z2ACgwLEgZDb3Vyc2UYgIDAgNH7_QoMCxIIQWN0aXZpdHkYgIDA4O-z-ggMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDQwN6oCQwLEgZDb3Vyc2UYgIDAoPPeyAoMCxIIQWN0aXZpdHkYgIDAwPOD6QkMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgID_-eTpCAwLEgZDb3Vyc2UYgICAn6vm1goMCxIIQWN0aXZpdHkYgIDAkJq0xQgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDAqe67CAwLEgZDb3Vyc2UYgIDAkP-e5wsMCxIIQWN0aXZpdHkYgIDAoJqOpQkMogEQNTcyODg4NTg4Mjc0ODkyOA
https://coub.com/stories/2936806-x-force-2019-zip-serial-key
https://coub.com/stories/2936807-hd-online-player-khiladi-786-movie-download-in-720p-t-repack
https://coub.com/stories/2949102-best-newblue-fx-sony-vegas-keygen-26
https://coub.com/stories/2949103-download-software-kartu-pelajar-full-version-friecri
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDA1rHlCQwLEgZDb3Vyc2UYgICAn8v38wkMCxIIQWN0aXZpdHkYgIDA4O-L6AoMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgICfm4byCAwLEgZDb3Vyc2UYgICAv6OBzAkMCxIIQWN0aXZpdHkYgIDA4Ozs7woMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgICfhPr1CQwLEgZDb3Vyc2UYgIDAgNjm_gsMCxIIQWN0aXZpdHkYgIDA4J-JtwsMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMDA4IHmCQwLEgZDb3Vyc2UYgIDAwODMhgsMCxIIQWN0aXZpdHkYgIDA0M3vxwsMogEQNTcyODg4NTg4Mjc0ODkyOA
https://coub.com/stories/2939626-exclusive-revo-uninstaller-pro-8-1-5-final-crack-crack
https://coub.com/stories/2939627-link-download-tutak-tutak-tutiya-full-movie-in-hd-1080p-torrent
https://coub.com/stories/2939628-atiradeonx1200pixelshader30driver-extra-quality
https://coub.com/stories/2939629-better-automation-empire-update-v20200101-codex
https://coub.com/stories/3105862-daily-nation-newspaper-pdf-patched-download
https://coub.com/stories/3105860-stellar-phoenix-outlook-pst-repair-v4-5-free-patched-site-key-crack-serial-rapidshare
https://coub.com/stories/3105859-microsoft-office-2019-pro-plus-1808-build-10730-20102-crack-new-serial-key
https://coub.com/stories/3105858-orthopedics-mcqs-books-free-download-farrrua
https://coub.com/stories/3111286-netsupport-school-11-keygen-downloader-cracked
https://coub.com/stories/3111285-hd-online-player-amrapali-patched-full-movies-hd-720p
https://coub.com/stories/3111284-download-driver-printer-matrix-point-mp-7645-39-link
https://coub.com/stories/3111282-hot-aspekte-neu-b1-plus-arbeitsbuch-pdf-25
https://coub.com/stories/3036346-sony-picture-package-1-5-1-ciriberw
https://coub.com/stories/3036345-it-is-not-found-any-file-specified-for-isarcextract-solution-lulphy
https://coub.com/stories/3036343-lg-shark-codes-calculator-zip-link
https://coub.com/stories/3036341-alidvrs2-player-exclusive
https://coub.com/stories/3089811-buddy-guy-discography-torrent-verified
https://coub.com/stories/3089814-mortal-kombat-x-update-v20150425-reloaded-version-download-birdae
https://coub.com/stories/3089816-verified-telecharger-dictionnaire-francais-larousse-jar
https://coub.com/stories/3089812-ratatat-cream-on-chrome-mp3-down-olestame
https://coub.com/stories/3035834-youtube-by-click-2-2-115-patch
https://coub.com/stories/3035832-solfeo-de-los-solfeos-pozzoli-15-pdf-verified
https://coub.com/stories/3035833-better-sylenth1-v3-041-keygen
https://coub.com/stories/3035831-dota-1-5-latest-update-2013-free-download-link
https://coub.com/stories/3108137-_top_-adobe-acrobat-xi-pro-11-0-20-final-crack-techtools-setup-free
https://coub.com/stories/3108136-portraiture-plugin-for-photoshop-cs3-free-download-crack-of-internet-vivyarm
https://coub.com/stories/3108134-multimedia-technology-and-applications-david-hillman-pdf-free-download-link
https://coub.com/stories/3108135-alan-constable-traffic-sounds-ultimate-edition-for-fsx-latest-version-hot
https://coub.com/stories/3061150-install-solarwinds-engineers-toolset-v9-keygen-generator
https://coub.com/stories/3061148-the-richest-of-the-rich-in-el-salvador-book-nelwmar
https://coub.com/stories/3061144-better-gillesania-books-pdf-free-171
https://coub.com/stories/3061146-download-terjemahan-bidayatul-hidayah-pdf-downloadl-reiing
https://unbromgambgane.wixsite.com/presenhirmo/post/the-sopra-download-pc-ultimate-full-64
https://gupiwarmfihelba.wixsite.com/pofigapet/post/alienware-update
https://flatrediscompphepi.wixsite.com/theoromuspi/post/boy-power-11-1-damien-close-up-undies-img-1-008-imgsrc-ru
https://singteheadracertbe.wixsite.com/seucomppassaa/post/ム-ムツオムム毛ム篇�-ムム飯ム�-ム-ム�-ムム毛-ム�ム嶝�-ム�ム柘-ム-ムム篇�-ムツオ-5-feet-and-barefoot-2340129-imgsrc-ru
https://coub.com/stories/3262329-herb-pomeroy-line-writing-pdf-download-ilikav
https://coub.com/stories/3262326-supremo-4-0-0-1964-key-torrent-download-2019-cracked-working-hot
https://coub.com/stories/3262324-cracked-rosario-miraggio-discografia
https://coub.com/stories/3262320-patched-adobe-illustrator-cs6-18-0-1-32-64-bit-chingliu-zenpey
https://wakelet.com/wake/rueigQG8d2cN1mAOyXl_f
https://wakelet.com/wake/49AGJkbKHsKIBgmAmlpUg
https://wakelet.com/wake/0cVzzNHSBRxkQQLdheXJ1
http://www.mendicinoinrete.org/2020/03/13/auguri-liga-il-cantante-regista-e-scrittore-compie-60-anni/
https://coub.com/stories/3351169-ponniyin-selvan-english-translation-karthik-narayanan-pdf-ehawrag
https://coub.com/stories/3351166-taare-zameen-par-720p-full-movie-download-kailgeer
https://coub.com/stories/3351164-nirmala-aunty-telugu-movie-2012-free-download-manastr
https://nasosovnet.ru/producers/others/nasosy-ksb.html
https://coub.com/stories/3355948-cbt-nuggets-cisco-ccip-bgp-642-661-download-verified
https://coub.com/stories/3355946-best-will-smith-big-willie-style-full-album-zip
https://coub.com/stories/3355941-inventor-2019-crack-xforce-keygen-adobe-jandalit
https://sfhpurple.com/61172