54 not acknowledge a received byte, but sending a SoT instead of the |
54 not acknowledge a received byte, but sending a SoT instead of the |
55 expected ACK value, |
55 expected ACK value, |
56 |
56 |
57 - acknowledge values are: |
57 - acknowledge values are: |
58 |
58 |
59 - 0x99 as a response to the SoT, |
59 - one-complement of the received SoT byte, so |
|
60 |
|
61 - 0x99 for the 0x66 SoT byte and |
|
62 - 0xCC for the 0x33 SoT byte. |
60 |
63 |
61 - 0x00 otherise |
64 - 0x00 otherise |
62 |
65 |
|
66 - a special packet is sent by the Display Panel at startup, which SoT value is |
|
67 ``0x33``, which does not seem to follow the general pattern in which the first |
|
68 value after the SoT byte is the number of arguments. |
|
69 |
|
70 Initialization sequence |
|
71 ----------------------- |
|
72 |
|
73 The initialization transmission is: |
|
74 |
|
75 .. wavedrom:: |
|
76 |
|
77 { signal: [ |
|
78 {name: "CPU", wave: "zz5x5x5xx", data: ["0xCC", "0x00", "0x00"]}, |
|
79 {name: "DP", wave: "z3x4x4x3x", data: ["0x33", "0x02", "0x00", "0x55"]}, |
|
80 ]} |
|
81 |
|
82 If a key is pressed during while powering the unit on, then the initialization |
|
83 of the Display Panel is frozen (with all elements of the display lit) until the |
|
84 key is released. In this case, the initialization packet adds the key code of |
|
85 that key, typically used with the Shift key pressed in to force a full test of |
|
86 the device (in this datagram, ``0x0C`` is the keycode of the Shift key): |
|
87 |
|
88 .. wavedrom:: |
|
89 |
|
90 { signal: [ |
|
91 {name: "CPU", wave: "zz5x5x5x5xx", data: ["0xCC", "0x00", "0x00", "0x00"]}, |
|
92 {name: "DP", wave: "z3x4x4x4x3x", data: ["0x33", "0x02", "0xFF", "0x0C", "0x55"]}, |
|
93 ]} |
|
94 |
|
95 |
|
96 Shutdown sequence |
|
97 ----------------- |
|
98 |
|
99 .. wavedrom:: |
|
100 |
|
101 { signal: [ |
|
102 {name: "Rx", wave: "z3x4x44|=4", data: ["0x66", "0x86", "0x55", "0x55","0x55"] }, |
|
103 {name: "Tx", wave: "zx5x5xx", data: ["0x99", "0x00"] }, |
|
104 ]} |
|
105 |
|
106 |
|
107 CPU -> DP trasmission |
|
108 --------------------- |
63 |
109 |
64 The CPU->DP transmission protocol looks like: |
110 The CPU->DP transmission protocol looks like: |
65 |
111 |
66 .. wavedrom:: |
112 .. wavedrom:: |
67 |
113 |
74 ie. without sending the EoT byte, eg.: |
120 ie. without sending the EoT byte, eg.: |
75 |
121 |
76 .. wavedrom:: |
122 .. wavedrom:: |
77 |
123 |
78 { signal: [ |
124 { signal: [ |
79 {name: "Rx", wave: "z3x4x4x|=x3x4x|3x", |
125 {name: "Rx", wave: "z3x4x4x|=x3x4x|3x", |
80 data: ["0x66", "0x0C", "0x03", "D3", "0x66", "0x0A", "0x55"] }, |
126 data: ["0x66", "0x0C", "0x03", "D3", "0x66", "0x0A", "0x55"] }, |
81 {name: "Tx", wave: "zx5x5x5x|5x5x5x|x", |
127 {name: "Tx", wave: "zx5x5x5x|5x5x5x|x", |
82 data: ["0x99", "0x00", "0x00", "0x00", "0x99", "0x00"] }, |
128 data: ["0x99", "0x00", "0x00", "0x00", "0x99", "0x00"] }, |
83 ]} |
129 ]} |
84 |
130 |
85 |
131 |
|
132 DP -> CPU transmission |
|
133 ---------------------- |
|
134 |
86 When the user press a key on the front panel, a slightly simpler "packet transmission" occurs: |
135 When the user press a key on the front panel, a slightly simpler "packet transmission" occurs: |
87 |
136 |
88 .. wavedrom:: |
137 .. wavedrom:: |
89 |
138 |
90 { signal: [ |
139 { signal: [ |
91 {name: "Rx", wave: "zz5x5xx", data: ["0x99", "0x00"]}, |
140 {name: "Rx", wave: "zz5x5xx", data: ["0x99", "0x00"]}, |
92 {name: "Tx", wave: "z3x4x3x", data: ["0x66", "KP", "0x55"]}, |
141 {name: "Tx", wave: "z3x4x3x", data: ["0x66", "KP", "0x55"]}, |
93 ]} |
142 ]} |
94 |
143 |
|
144 |
|
145 Commands |
|
146 ======== |
|
147 |
|
148 The known command bytes sent by the CPU for now are: |
|
149 |
|
150 :0x00: show text on the main display. N arguments; the characters to display. |
|
151 |
|
152 :0x0C: show text in the 'channels' area. 3 arguments; the digits to display. |
|
153 |
|
154 :0x0A: indicators (or flags) to display. 4 arguments; the flag bytes. |
|
155 |
|
156 :0x08: to set an indicator in low bright mode. 1 argument; the number of the |
|
157 indicator dimm. |
|
158 |
|
159 :0x09: to set an indicator in hight bright mode. 1 argument; the number of the |
|
160 indicator to highlight. |
|
161 |
|
162 :0x01: clear the 'shift' button. Typically sent as ``0x01 0x01 0x0E``. 1 |
|
163 argument; 0x0E to clear the 'shift' flag. Other values unknown. |
|
164 |
|
165 :0x02: might be a reset or clear for the front panel (typically sent as |
|
166 ``0x02 0x01 0x0C`` packet). 1 argument; unknown. |
|
167 |
|
168 :0x86: shutdown. 0 argument. |
|
169 |
|
170 :0x0D: set char at pos dimm (eg 0D 01 02 55 = cursor on the 3rd char) |
95 |
171 |
96 Sending data to the main display |
172 Sending data to the main display |
97 ================================ |
173 ================================ |
98 |
174 |
99 The main display consist in 13 17-segments digits, in which the |
175 The main display consist in 13 17-segments digits, in which the |
102 ",", ":" and ";"). Punctuation signs are also very close to the |
178 ",", ":" and ";"). Punctuation signs are also very close to the |
103 preceding chracters. |
179 preceding chracters. |
104 |
180 |
105 .. image:: {filename}/images/hp34970a/digit.jpg |
181 .. image:: {filename}/images/hp34970a/digit.jpg |
106 :alt: 17-segments digit of the main display. |
182 :alt: 17-segments digit of the main display. |
107 |
183 |
108 The command used to send text to the main display is ``0x00``. The |
184 The command used to send text to the main display is ``0x00``. The |
109 character ``0x09`` (tabulation) has a special meaning: it marks the |
185 character ``0x09`` (tabulation) has a special meaning: it marks the |
110 beginning and the end of a part of the text to be displayed darker |
186 beginning and the end of a part of the text to be displayed darker |
111 than the usual. This is used to emphasis a portion of the displayed |
187 than the usual. This is used to emphasis a portion of the displayed |
112 text. Also, as the punctuation signs do not consume a digit, the |
188 text. Also, as the punctuation signs do not consume a digit, the |
137 { signal: [ |
213 { signal: [ |
138 {name: "Rx", wave: "z344====3x", |
214 {name: "Rx", wave: "z344====3x", |
139 data: ["0x66", "0x0A", "0x04", "F1", "F2", "F3", "F4", "0x55"]} |
215 data: ["0x66", "0x0A", "0x04", "F1", "F2", "F3", "F4", "0x55"]} |
140 ]} |
216 ]} |
141 |
217 |
142 Then the flags I've identified so far are: |
218 The 29 flags I've identified are (should be complete): |
143 |
219 |
144 .. wavedrom:: |
220 .. wavedrom:: |
145 |
221 |
146 { signal: [ |
222 { signal: [ |
147 {name: "bit", wave: "z========z", |
223 {name: "bit", wave: "z========z", |
148 data: ["7", "6", "5", "4", "3", "2", "1", "0"]}, |
224 data: ["7", "6", "5", "4", "3", "2", "1", "0"]}, |
149 |
225 |
150 {name: "F1", wave: "z=3333333z", |
226 {name: "F1", wave: "z=3333333z", |
151 data: ["", "HI", "Alarm", "LO", "Channels", "Ch. frame", "Mx+B", "<Bell>"]}, |
227 data: ["Al. frame", "HI", "Alarm", "LO", "Channel", "Ch. frame", "Mx+B", "<Bell>"]}, |
152 {name: "F2", wave: "z===33333z", |
228 {name: "F2", wave: "z===33333z", |
153 data: ["", "", "", "4W", "1", "3", "4", "2"]}, |
229 data: ["AVG", "", "OC", "4W", "1", "3", "4", "2"]}, |
154 {name: "F3", wave: "z========z", |
230 {name: "F3", wave: "z========z", |
155 data: ["", "", "", "", "", "", "", ""]}, |
231 data: ["ERROR", "EXT", "ONCE", "", "MEM", "LAST", "MIN", "MAX"]}, |
156 {name: "F4", wave: "z=3=333==z", |
232 {name: "F4", wave: "z=3=333==z", |
157 data: ["", "CONFIG", "", "MON", "VIEW", "*", "", ""]}, |
233 data: ["", "CONFIG", "SCAN", "MON", "VIEW", "*", "ADRS", "REMOTE"]}, |
158 ], |
234 ], |
159 config: { hscale: 2 }, |
235 config: { hscale: 2 }, |
160 } |
236 } |
161 |
237 |
162 |
|
163 |
|
164 |
|
165 |
238 |
166 Keypad |
239 Keypad |
167 ====== |
240 ====== |
168 |
241 |
169 Note that the front panel sends a "key press event" and a "key |
242 the keycode byte consists in: |
170 released event", depending on the value of the bit 7: |
|
171 |
|
172 :0: key pressed |
|
173 :1: key released |
|
174 |
|
175 The bit 8 of the key event byte is set high for the knob. |
|
176 |
243 |
177 .. wavedrom:: |
244 .. wavedrom:: |
178 |
245 |
179 {signal: [ |
246 {signal: [ |
180 |
247 |
181 {name: "bit", wave: "z========z", |
248 {name: "bit", wave: "z========z", |
182 data: ["7", "6", "5", "4", "3", "2", "1", "0"]}, |
249 data: ["7", "6", "5", "4", "3", "2", "1", "0"]}, |
183 {name: "KP", wave: "z34=.....z", |
250 {name: "KP", wave: "z344=....z", |
184 data: ["Knob", "Key", "Key Code"]}, |
251 data: ["Knob", "Rel.", "Shift", "Key Code"]}, |
185 ], |
252 ], |
186 config: { hscale: 1 }, |
253 config: { hscale: 1 }, |
187 } |
254 } |
|
255 |
|
256 :Bit 5: is set when the key has been pressed while 'shift' indicator was stil |
|
257 active. |
|
258 |
|
259 :Bit 6: is set when the key is released, and clear for the key pressed event. |
|
260 |
|
261 :Bit 7: of the key event byte is set high for the knob key events. |
188 |
262 |
189 |
263 |
190 The key codes are: |
264 The key codes are: |
191 |
265 |
192 :0x00: View |
266 :0x00: View |