content/hp34970a_4.rst

Wed, 12 Jul 2023 21:35:29 +0200

author
David Douard <david.douard@sdf3.org>
date
Wed, 12 Jul 2023 21:35:29 +0200
changeset 149
5ce5f3046c0b
parent 148
2f87039dd0b5
permissions
-rw-r--r--

Add a blog entry for the Numworks N0110 repair

66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
1 ==========================================
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
2 HP 34970A Data Acquisition Unit - part 4
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
3 ==========================================
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
4
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
5 :Author: David Douard
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
6 :Category: Electronics
130
56ffb9577050 Fix tags for HP 34970A posts
David Douard <david.douard@sdf3.org>
parents: 128
diff changeset
7 :Tags: HP, 34970A, HP34970A, DMM, repair, test equipment
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
8 :series: HP 34970A repair
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
9 :series_index: 4
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
10
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
11
130
56ffb9577050 Fix tags for HP 34970A posts
David Douard <david.douard@sdf3.org>
parents: 128
diff changeset
12 After a summer pause, I'm back on my HP34970A repair project. In
128
aba381b2bac9 Fix several inter-document links
David Douard <david.douard@sdf3.org>
parents: 115
diff changeset
13 `the previous post in this series <{filename}/hp34970a_3.rst>`_, I've
130
56ffb9577050 Fix tags for HP 34970A posts
David Douard <david.douard@sdf3.org>
parents: 128
diff changeset
14 started to reverse engineer the serial protocol between the CPU board
56ffb9577050 Fix tags for HP 34970A posts
David Douard <david.douard@sdf3.org>
parents: 128
diff changeset
15 and the front panel, and implement a prototype of replacement display.
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
16
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
17
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
18 OLED display
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
19 ============
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
20
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
21 I bought the bigest OLED display I could find (at a reasonable price)
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
22 that would fit in the front panel assembly. It's a `blue 256x64 OLED
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
23 display`_ drived by a SSD1322 controler.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
24
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
25 .. _`blue 256x64 OLED display`: http://www.buydisplay.com/default/oled-3-2-inch-displays-module-companies-with-driver-circuit-blue-on-black
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
26
115
6b6e13653348 content: use {static} instead of {filename} in image paths
David Douard <david.douard@sdfa3.org>
parents: 108
diff changeset
27 .. image:: {static}/images/hp34970a/oled_module.jpg
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
28 :alt: 3"2 blue OLED module used as a replacement display for the HP34970A.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
29
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
30 My first problem was to drive the display from my Nucleo board. I
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
31 couldn't find graphic library that worked directly. I was already
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
32 using the UniGraphic_ library with the small TFT display, so I decided
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
33 to implement support for this OLED module in the library.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
34
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
35 .. _UniGraphic: https://developer.mbed.org/teams/GraphicsDisplay/code/UniGraphic
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
36
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
37 I spent quite some time to make this work for several reasons, among
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
38 others:
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
39
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
40 - I was first using my Nucleo F031K6 board; it's nice, it's small, but
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
41 it only have 4k of RAM, so the malloc I as doing in my test code to
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
42 allocate the "framebuffer" in which drawings are done before being
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
43 tranferred to the display module... well let's say if I took time to
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
44 check the return value of the malloc call (which one should always
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
45 do, even on small embedded devices), I would have not lost a couple
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
46 of hours, so to speak (tip: allocating 8k in a 4k RAM will not fit),
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
47
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
48 - The SSD1322 controller is *reasonnably* well documented, but what's
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
49 not documented is how it is used on the OLED display... In fact,
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
50 once I could at least see some pixels on my display, I spent quite
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
51 some time trying to control where my pixels are located on the
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
52 module. There is not that much demo material available for this
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
53 module besides a `poorly written sample C code`_ (in a .txt file!)
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
54 for the 80C51 processor. What's hidden in this file (which I could
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
55 not fing any where else) is the magic 0x1C value which must be given
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
56 as first argument to the SET_COLUMN_ADDR "function" of the SSD1322.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
57
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
58 - I also lost some time trying to implement the support for this module
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
59 as a class derived from UniGraphic's `LCD class`_ (like several
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
60 other supported modules like the SSD1306_), but that was a mistake,
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
61 since this kind of OLED module is too different from both a TFT
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
62 display or a monochrome LCD display. So I've reimplemented the class
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
63 as a derived class of the GraphicDisplay_. This work is far for being
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
64 finished yet (and ready for a *Pull Request* to submit to the
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
65 UniGrahic project), but at least, I can continue my work on the
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
66 HP34970's display.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
67
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
68
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
69 .. _`LCD class`: https://developer.mbed.org/teams/GraphicsDisplay/code/UniGraphic/file/tip/Display/LCD.h
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
70 .. _SSD1306: https://developer.mbed.org/teams/GraphicsDisplay/code/UniGraphic/file/tip/Inits/SSD1306.h
128
aba381b2bac9 Fix several inter-document links
David Douard <david.douard@sdf3.org>
parents: 115
diff changeset
71 .. _GraphicDisplay: https://developer.mbed.org/teams/GraphicsDisplay/code/UniGraphic/file/tip/Graphics/GraphicsDisplay.h
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
72 .. _`poorly written sample C code`: http://www.buydisplay.com/download/democode/ER-OLEDM032-1_DemoCode.txt
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
73
115
6b6e13653348 content: use {static} instead of {filename} in image paths
David Douard <david.douard@sdfa3.org>
parents: 108
diff changeset
74 .. image:: {static}/images/hp34970a/oled.jpg
69
56bcb94f6ff5 [hp34970a] small update
David Douard <david.douard@logilab.fr>
parents: 66
diff changeset
75 :alt: The replacement 3"2 blue OLED module for the HP34970A.
56bcb94f6ff5 [hp34970a] small update
David Douard <david.douard@logilab.fr>
parents: 66
diff changeset
76
56bcb94f6ff5 [hp34970a] small update
David Douard <david.douard@logilab.fr>
parents: 66
diff changeset
77
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
78
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
79 Improving the serial sniffer
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
80 ============================
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
81
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
82 Once I could draw pixels on my OLED module, I put this code in my
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
83 existing prototype replacing the simple display code I used with the
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
84 TFT module.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
85
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
86 And one problem I already had with the previous "working" prototype
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
87 became bigger: I was missing many characters on the serial bus between
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
88 the CPU and the front panel.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
89
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
90 My first implementation of the protocol sniffing was very tedious and
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
91 poorly written. It was not reading at all the traffic on the Tx line
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
92 (ie the key strokes), so I was never sure if a 0x66 was the beginning
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
93 of a transmission or some payload for which I missed the beginning.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
94
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
95 Using the interrupt-based (asynchronous) BufferedSerial_
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
96 implementation did not help that much.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
97
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
98 So I rewrote this part of the using 2 serial ports, using only the Rx
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
99 line on both of them, one plugged on the Rx line of the serial
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
100 communication, and the other on the Tx line of this comm. Doing so I
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
101 can sniff the whole communication between the CPU and the display
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
102 panel and make a way better protocol interpreter.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
103
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
104 The result was way better than before, and now I was able to detect
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
105 the protocol interpretation errors, but still, I was missing many
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
106 parts of the transmission.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
107
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
108 I ended up to figure that the culprit was my
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
109 ``SSD1322::copy_to_lcd()`` method: it takes almost 20ms to transmit
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
110 the whole display content the module. And with the way my code was
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
111 written, even with interrupt driven serial handlers, these interrupt
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
112 were not captured during the execution of this copy routine.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
113
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
114 At this point, I've started to read a bit more the asynchronous and
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
115 event driven APIs of the mbed platform, but could not clearly see a
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
116 pattern to prevent this long "frozen" periods during which I was
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
117 unable to capture serial communications.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
118
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
119 .. _BufferedSerial: https://developer.mbed.org/users/sam_grove/code/BufferedSerial/
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
120
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
121 I was almost ready to use 2 microcontrollers for the job: one to sniff
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
122 and interpret the serial communication and one to drive the display.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
123
115
6b6e13653348 content: use {static} instead of {filename} in image paths
David Douard <david.douard@sdfa3.org>
parents: 108
diff changeset
124 .. image:: {static}/images/hp34970a/poc_oled.jpg
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
125 :alt: Improvment of the POC based on the Nucleo F446RE and using a blue OLED module.
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
126
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
127 Improving the tasks
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
128 ===================
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
129
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
130 But I've discovered a few days ago that the RTOS project is now part
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
131 of the mbed platform, allowing to use threads instead of pure event
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
132 driven code. So I tried to put the copy_to_lcd routine executions in a
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
133 dedicated thread, and bingo, I've got now something that begins to
148
2f87039dd0b5 Replace video links with working ones from new peertube instance
David Douard <david.douard@sdf3.org>
parents: 130
diff changeset
134 work enough to make it usable.
66
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
135
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
136
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
137
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
138 What's next
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
139 ===========
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
140
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
141 There is still a lot of work to do:
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
142
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
143 - improve the display reactivity: I'll probably try to implement
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
144 partial copy of the display instead of sending the whole
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
145 "framebuffer" each time something is changed on the display (the
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
146 SSD1322 allows to specify a "window" in which to send data),
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
147
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
148 - improve overall display organisation and find the missing flags (I
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
149 still have not found the flag values for OC, MIN, MAX, AVG, ONCE,
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
150 AUTO and MEM),
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
151
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
152 - try to install the display module and the Nucleo board in the front
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
153 panel assembly (I don't want to go for a specifically designed PCB,
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
154 at least for now),
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
155
70aad9a1272b [hp34970a] part 4
David Douard <david.douard@logilab.fr>
parents:
diff changeset
156 - publish the code.

mercurial