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
|
2.0.0: The previous version has been used for nearly two years without any
reported bugs, so it can be considered quite stable. Only a minor
function was added at users' request in this release, so it is now
pretty much feature-complete. Hence the jump in major version number.
1.8.8: This release fixes a rather blatant bug corruption bug that somehow
managed to surface only now. It would occur when a serie of backlogged
CWirc frames would arrive from the IRC server all at once, right after
the receiving client's buffer had underrun, during the fadeout period.
This bug would cause a bunch of "Receiving cw from ..." lines to be
dumped in the X-Chat window, but with no CW signal for several seconds,
and would be triggered by a high buffering value and a lagged IRC
server.
1.8.7:
1.8.6: CWirc now filters out Morse frames even when the plugin is disabled.
That means there's always some CWirc code running all the time in
X-Chat, whereas until now, when the plugin was disabled, it was truly
inactive.
1.8.5: The CWirc Debian package is now maintained by Joop Stakenborg PG4I.
1.8.4: The CWirc frontend now tries to renice itself when it starts. If it
can (because the binary was installed suid root), the performances for
the I/O process are improved, which helps solve the bad sound problem
on system with low-end sound chips. A less kludgy solution would have
been to increase the sound buffering, but this would have increased the
lag between local keying and beeping, which rapidly becomes
disconcerting for high-speed keyers. Right now, the lag is 30ms and
that is already quite enough to make a noticeable difference between
keying a real rig and CWirc.
1.8.3:
1.8.2: The size of the CWirc frontend binary was reduced dramatically by
very simply tricks, like re-working and optimizing the XPM icons.
Also, the code was cleaned up, resulting in some improvenemts in
memory usage.
1.8.1: An obscure double-to-int rounding bug has been squashed. So obscure in
fact that nobody ever hit it, but it was there nonetheless.
1.8.0: The keyer has been totally revamped. Now it proposes truly correct
modes, and many options to fine-tune it just right.
1.7.7: A number of people were unhappy with the Curtis mode-B keyer setting,
as it isn't like a conventional dit memory, or a Super CMOS mode-B.
Also, the simple "mode-B" toggle button wasn't a very clear way to set
the keyer's mode. Therefore, 2 new keyer modes have been added and a
menu is now used to select them.
1.7.6:
1.7.5: The sidetone mode and the decoder decoding the local key was something
many people have wanted for a long time. Now it's possible to see what
you key, without sending anything on the channel, which is good for
training to key.
1.7.1: The addition of the Hellschreiber extension, and the intolerance of the
Hellschreiber mode for timing errors, has revealed bad inaccuracies in
the sent and received event values, mainly due to rounding floats into
ints when sending, and ints back to floats when receiving, with no
correction for the timing drift this introduces. Timing drifts are now
handled correctly, making Hellschreiber transmissions almost perfect.
1.7.0: The frame format has been extended to conserve bandwidth when
transmitting many keyups/keydowns per frames. The base frame format is
entirely compatible with the previous formats used so far. The extended
frame format, however, isn't. Consequently, newer CWirc version will be
able to receive transmissions from clients up to version 1.6.1, but
older clients won't be able to receive all the frames from the newer
versions.
The new CWirc extension mechanism allows external programs to interact
with CWirc : they can receive the sound CWirc generates using a ring
buffer and 2 semaphores to transfer audio data, and to synchronize
themselves with CWirc, and a flag to key CWirc. Extension programs (or
synlinks to them) must be installed in the directory specified in the
Makefile for CWirc to see them and list them in the extensions tab.
When CWirc starts an extension program, it passes it "--cwirc" followed
by the shared memory id of the extensions API. Only one extension
program can run at any given time.
The extensions API was made specifically to interface gMFSK and CWirc,
in order to do FeldHell-over-IP : Feldhell is the only digital mode
that's slow enough and close enough to CW to work over IRC.
1.6.1: NetBSD has its own sound API that is not OSS, the API used by CWirc.
However, it has an OSS emulation library (libossaudio) that allows
Linux programs to be compiled without modification. Therefore, in
order to build and use CWirc under NetBSD, the "-lossaudio" flag must
be passed to the linker.
1.6.0:
1.5.0: FreeBSD doesn't seem to have a native RTC mechanism to provide real-time
periodic interrupts. The only thing it seems to have is a Linux /dev/rtc
emulator that only has ioctls to start the periodic interrupts, but none
to stop them, which makes it unsuitable for CWirc. Therefore, the
soundcard-less operation for FreeBSD has been disabled.
Also, FreeBSD has different dsp and tty device names, so these are
reflected in the default CWirc settings.
Finally, this release has been tested under FreeBSD 5.1. I am told
FreeBSD 4.x boxes have slight differences in the naming of devices
nodes in /dev, but the initial FreeBSD port was done on one of these
boxes, so I believe it works. I'm a FreeBSD newbie though, so don't
take my word for it. You might have to hack around to get it to go.
1.4.2:
1.4.1:
1.4.0:
1.3.0: The new signal strength simulation is based on the physical distance
between stations. If the signal strength is completely artificial and
made up, the algorithm to calculate the distance between two stations
on the planet is accurate.
The QRM generator generates pseudo pink noise by downsampling white
noise and upsampling it back. It's not an accurate radio noise but it's
much less CPU-intensive than "proper" sound generation with FFTs.
1.2.3: The automatic decoder now has a real "inertia" built-in, i.e. it tends
to resist changing decoding speed. As a result, transient timing errors
are more easily ironed out. Also, to decode bad straight keying better,
it now works on the assumption that beginners follow the "music" even
when they key dits or dahs way too short, resulting in spaces that are
too long and would normally trigger the decoding of the current
character. The decoder now silently allows longer spaces if it sees
characters that it thinks are too short. This feature is on all the time
as it doesn't impact the decoding of good keying by definition.
1.2.2:
1.2.1: CWirc is now more conservative with CPU, so it's possible to use it on
slower computers, and faster computers with a high load, without sound
breakup. This was done mainly by replacing trigonometry function calls
by precalculated tables in tight loops, and by reducing the amount of
GTK pixmap redraws in the S-meter drawing code.
1.2.0: This version can now generate sounder clicks as well as regular morse
beeps. The sounder click samples come from an actual sounder, and the
timing of its arm going down and up as the coil is energized and
de-energized is reproduced accurately in CWirc.
In the process of extending the sound routines, the regular beeping
sound has also been cleanup up to fade in and out softly, removing
the annoying clicks at the end of each beep.
1.1.0: The CW frame protocol has been extended to pass an explicit callsign
along IRC message. The feature is of little value alone, but it will
allow single repeater bots to forward message from multiple callsigns
on non-CWirc morse networks. Note that the explicit callsign is
scrambled in the IRC message, so casual IRC chatters don't immediately
see who it is from.
1.0.1: Just a few minor cosmetic changes in this release.
1.0.0: This is a major code change. The user interface has been recoded as a
GTK+ gui, which meant splitting the X-Chat plugin part of CWirc from
the rest, so as to avoid problems between the X-Chat GTK+ session and
the CWirc GTK+ one.
Also, in this new version, the I/O process has been recoded to never
stop and be reconfigurable on the fly. Therefore, even if it doesn't
perform because of some error, the gui stays up and can reconfigure it.
As a result, it's now possible to configure CWirc entirely from the gui.
(no more editing ~/.cwircrc).
0.9.2:
0.9.1: In the previous version, if the sounder was activated when the plugin
was disabled, it would continue beeping. This has been fixed by making
the I/O process terminate gracefully and turn off the sounder before
exiting. The main process doesn't abruptly kill the I/O and user
interface processes anymore, it now asks them to terminate and waits
for them to die, which is cleaner anyway.
Also, previous versions used up nearly 2M of memory in one shared memory
block, due to over-generous buffering and way to many concurrent senders
which was ridiculous. The shared memory usage has been brought down to
less than 50K.
0.9.0: It is now possible to output the received or sent morse code on an
external sounder, or CW oscillator, throught the RTS line on a serial
port. It's also possible to do without a soundcard altogether, but in
this case, CWirc needs to use /dev/rtc to get its timing. Since it uses
the periodic interrupt at 512Hz, it'll need special privileges set in
/proc/sys/dev/rtc/max-user-freq. Since multiple inputs and outputs where
getting confusing, 2 new variables have been added to the configuration
file (cwinput and cwoutput) to clarify things.
0.8.2:
0.8.1: The details of exactly what iambic timings are implemented in CWirc are
now included.
0.8.0: The new morse frame format uses 1/3rd less bandwidth than the previous
one. The tests I've run show that one can send a continuous stream of
dits at 30wpm without being throttled or kicked on the most common
IRC servers, which means that in a real QSO, sustained speeds of 40/45
wpm can be expected. That should be more than enough for most operators.
0.7.0: The sound device is now used at 44.1KHz / 16 bit / stereo, in order to
increase the sound fragment size to 256 bytes and still maintain a
timing precision in the order of one millisecond. As a result, since
44100 Hz isn't 1000 times a power of 2 like 8000 Hz, the entire I/O,
encoding and decoding sections have been adapted to cope with timing
durations that aren't exactly one millisecond. This was necessary for
broken or cheap sound cards that can't cope with very small sound
fragments. Since it's usually admitted that all sound devices should be
able to cope at least with 256 byte fragments, that's why CWirc now
uses the most common sound format that consumes as many bytes per
seconds as possible.
The Makefile has been modified to ask the user to set the paths to
xchat-plugin.h and the base installation directory for X-Chat. I've
just noticed that the Debian install package I use installs X-Chat in
/usr, while the X-Chat tarball installs in /usr/local and doesn't copy
the .h file into the install directory. So the user has to set the
correct path for his/her machine first, and the Makefile now makes sure
of that.
0.6.0: An automatic morse decoder has been added. It decodes from the overall
signal received, so it's useless in a pile-up, but it works rather
well when receiving cw from a single sender who keys cleanly and
regularly. Some people have asked for this, to help them copy fast
iambic keyers.
0.5.1:
0.5.0: I finally modularized the code. The single "cwirc.c" file was quickly
becoming spaghetti code. That gave me the occasion to review all the
code, interactions between processes, and clean/simplify/better the
whole thing. A fake S-meter has been added to the control panel : it's
basically cosmetic, as there isn't much use for RST reports on IRC
obviously, but it helps feel in front of a real trx, while the static
panel doesn't.
0.4.2:
0.4.1:
There's now a delay between the moment a cw frame is received and the
moment it starts being played on the sound card. This allows for some
lag in the connection to the IRC server. Before that, IRC servers had
to be nearly flawlessly snappy to sustain the morse rate without
choppiness. It does increase the lag between keying a frame on one end
and hearing it on the other though.
0.4.0: CWirc can now be used solely with a mouse, without a real key connected
to a serial port. Many people have asked for this.
0.3.0: The bug fixes in 0.2.1 didn't quite do it. After much experimenting, I
determined that X-Chat just isn't thread-safe. Even spawning a thread
that does nothing but sleep in a loop makes X-Chat segfault randomly
after a while. So I turned the threads into normal heavy-weight
processes and it appears rock-stable now. It's not as efficient in
terms of memory or CPU, but at least it works well. The frame format
is now more compact and many IRC servers that would kick the client
when keying fast don't anymore as a result.
0.2.1: The cleanup code in the standalone version of CWirc was always followed
by the termination of the program. In the plugin, it may be called again
and again. As a result, the code that left variables hanging was
causing the plugin and X-Chat to segfault regularly when doing /CWENABLE
several times. This is fixed.
0.2.0: CWirc is now an X-Chat plugin. It makes much more sense than creating a
brand new standalone IRC client, since X-Chat is full-featured, has
a fairly complete plugin interface and allows plugins to do pretty much
whatever they wants in terms of threads and file accesses.
Corrected the iambic code, so that even a light tap on one paddle while
the other is actuated ends up sending a single inverted element in the
morse stream.
0.1.0: Added support for iambic keyers in mode A or B. Mode-A implemetation is
straightforward, and I implemented mode-B timing as I believe it should
correctly be, which is that the extra dit or dah sent after releasing
squeezed paddles is sent only if the paddles are released after the
first half of the last element has been sent.
0.0.2: The code was broken in the first release : users couldn't set the
serial port the morse key is connected to in the config file. This is
corrected.
0.0.1: First release of CWirc. The user interface is minimalistic, the code is
still very unpolished and the buffering and timing code isn't very
robust. The basics work though.
|