-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathプロトコル仕様.txt
188 lines (148 loc) · 8.38 KB
/
プロトコル仕様.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
fly by wireプロトコル仕様
2021.10.24
(1) 概説
・画像1枚を1画像単位として、最大4096枚の画像単位を送信する。
・1bitの表現は、画像(1920*1080pixel)の水平線1920pixel全てのRGB値に対応し、bit=1であればRGB=(255,255,255)となり、bit=0はRGB=(0,0,0)となる。
・各1画像単位は、preamble+reserved+size+numbering+data(datum * ~42)の領域で構成されている。
・preambleは9bitの領域であり、同期検出及び1画像単位の開始を表す標識である。
・reservedは21bitの領域であり、将来拡張するための領域で、000011110000111100001で埋める。
・sizeは18bitの領域であり、送信するデータの合計画像単位数と最後に送信される画像単位中のデータ終端までのdatumの数を含む(詳細は後述)。
・numberingは234itの領域であり、後述のdatumと同様の仕様で最大12bit=4096までの画像単位に関する一連番号を表示する。
・dataは24bitのdatumを1個単位として、最大で42個のdatumにより構成される領域である。
・datumは、12bitのpayloadと11bitのerror correction code(ecc)、1bitのbalanceにより構成される。
・payloadは任意のbitパターンとすることができる。
・error correction codeは、payloadのbitパターンに応じて決まる(詳細は後述)。
・balanceは、直前のpayload及びeccに出現する計23bitの1と0の出現数を比較し、少ないものを挿入する。
全体図
|preamble:9bit|reserved:15bit|size:24bit |numbering:24bit--------|data:23*n(n=1~42)----------------------------------------------------------------------------------|
|=101010101 |=00001111...01| | |datum[0]:24bit |datum[1]:24bit |datum[2]:24bit |...|datum[41]:24bit |
| |payload|+|ecc|+|balance|payload|+|ecc|+|balance|payload|+|ecc|+|balance|payload|+|ecc|+|balance|...|payload|+|ecc|+|balance|
bit| | 12 |+|11 |+| 1 | 12 |+|11 |+| 1 | 12 |+|11 |+| 1 | 12 |+|11 |+| 1 |...| 12 |+|11 |+| 1 |
| <-------- 24 bit --------> |<--24bit-->| <------ 24 bit -----> | <------ 24 bit -----> | <------ 24 bit -----> | <------ 24 bit -----> |...| <------ 24 bit -----> |
| <------------------------------------------------------------------------ 1080 bit (pixel) ----------------------------------------------------------------------> |
(2) 各領域の詳細
/--preamble--/ total 9bit
0 --> 8
101010101
bitパターン固定、同期検出&が画像単位の信号開始地点の標識
/--reserved--/ total 15 bit
9 --> 23
000011110000111100001
同期精度を向上するため、将来的に使用される可能性があるが、通常は0で埋める方が誤検出が少なくて良い。
/--size--/ total 24 bit
24 --> 47
ここに送信データ量を2進数で表示する。
fly by wireの最大データ量となる。24bit=16,777,216>258,048で十分である。
numberingは12bit=最大4096画像となるが、これを上回るデータ量の場合、再度0からカウントし直す。
尚、この処理は受信側で解決される。
/--numbering--/ total 23bit
48 --> 70
何枚目の画像単位であるかの標識。完全ゴレイ符号23bit及びbalance 1bitで構成され、data領域を構成するdatumと同じ仕様となる。
従って、実際には12bitがnumberingとして使用できる。
つまり、4096枚の画像単位の並び順を表現している。
/--data--/
70 --> 70 + 24 * n(n=1,2,3,,,,42)
data領域は、24bitのdataが最大で42個連結される。
各datumはpayload 12bit及びerrpr correctionn code 11bit、balance 1bitで構成される。
/--payload--/
0 --> 11
任意のbitパターンを配置することができる。送信するデータ列は、ここに配置される。
/--error correctionn code--/
12 --> 22
payloadの12bitのbitパターンにより決定される誤り訂正用のbitパターンである。
/--balance--/
23 --> 23
直前のpayloadの12bit、及びeccの11bitのパターンにより決定される信号の電圧バランス調整用のbitパターンである。
payloadとeccに出現した1及び0について、出現数が少ない方をbalanceに挿入する。
(3)error correction codeの計算方法
payload 12bitに対して、先頭00から最後尾11までに、以下の11bitの符号を定義する。
bit:
00 :11000111010
01 :01100011101
02 :11110110100
03 :01111011010
04 :00111101101
05 :11011001100
06 :01101100110
07 :00110110011
08 :11011100011
09 :10101001011
10 :10010011111
11 :10001110101
各bitに対しこれが1であれば、対応する11bitの符号を全てXORし、これをerror correction code とする。
例:
payload:101010101010
1->00:1100 0111 010
0-> nothing | XOR
1->02:1111 0110 100
0-> nothing | XOR
1->04:0011 1101 101
0-> nothing | XOR
1->06:0110 1100 110
0-> nothing | XOR
1->08:1010 1001 011
0-> nothing | XOR
1->10:1001 0011 111
0-> nothing | XOR
error correct code:0100 1010 001 (= 11000111010 xor 11110110100 xor 00111101101 xor 01101100110 xor 10101001011 xor 10010011111)
(4) 復号方法
・同期
preambleのbitパターン101010101を検出し、これの先頭から1080bitを1画像単位として処理する。
・同期確認(暫定)
同期が正しく行われたか検証するために、reservedが0000であることを確認する。
0000でない場合、再度同期待ちとする。
・データサイズの確認
size領域を読み取り、データサイズを確認する。
データサイズに基づき、信号の最後尾まで受信する。
データサイズは誤り訂正がないが、各画像単位に同一のデータサイズが送信されるため、正確な値を送信できる。
・numberingの受信
受信側は、numbering領域の先頭12bitに対して、error correction codeを計算し、この結果の11bitをAとする。
次に、numbering領域の後半11bitに対して、以下に示す計算により11bitのBを求める。
numbering領域後半11bitについて、先頭から順に以下の11bitの符号を対応させる。
00:10000000000
01:01000000000
02:00100000000
03:00010000000
04:00001000000
05:00000100000
06:00000010000
07:00000001000
08:00000000100
09:00000000010
10:00000000001
numbering領域後半11bitについて、bitが1の部分にそれぞれ対応する全ての11bitの符号を与え、これをXORする。これがBとなる。
次に、以下の計算をしてCを求める。この結果に従ってnumbering領域前半12bitの誤りを訂正する。
訂正の際は、下記表の訂正箇所が1の場合、これに対応するnumbering領域前半12bitの部分をNOTする。
A XOR B = C
C:
:訂正箇所
:0 1 2 3 4 5 6 7 8 9 10
00000000000:0 0 0 0 0 0 0 0 0 0 0
01100011101:0 1 0 0 0 0 0 0 0 0 0
以下追記予定
例1:
numbering前半11bitが10000000000
後半12bitが11000111010
の場合
A=11000111010
B=11000111010
C=A XOR B =00000000000
つまり、訂正箇所はなく、誤りは生じていない。
例2:
numbering前半12bitが11000000000
後半11bitが11000111010
の場合
A=10100100111
B=11000111010
C=A XOR B =01100011101
表によると、2番目のbitをNOTする必要がある。そのため、
11000000000 -> 10000000000
とする。
numberingの受信及び復号について、一連番号に欠落が生じた場合、以降の受信は行わない。
・data領域の受信
sizeより計算されるデータの終端部まで、受信を継続する。
各datumについての誤り訂正はnumberingと同様である。
(5) 諸元
・最大データ送信量:258,048Byte = 2,064,384bit = 252KByte
・通信速度:ディスプレイが1920*1080@60Hzである場合、3,780Byte/sec
・誤り訂正能力:最大で13.04%であり、data内の最大3bitを訂正可能