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 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875
|
2019-10-02 Kamil Ignacak
* libcw: big part of work on test framework has been
completed. There is now a single test framework to execute all
unit tests in the same fashion, and to collect and display test
statistic in the same manner. The next big step in test code is to
review test functions to ensure good code quality and clarity of
tests.
2019-09-21 Kamil Ignacak
* libcw: beginning to create libcw2.h in master branch with
declarations of functions similar to those existing in
libcw.h. Those new functions will not operate on library's global
generator, key or receiver values, but on values passed as
arguments. This will allow client code to use multiple generators,
keys or receivers at the same time. These functions were already
existing in code, but were used internally only. Now they will
become public.
2017-02-11 Kamil Ignacak
* xcwcp: fixing problem with compilation of application.cc file.
2016-05-03 Kamil Ignacak
* libcw/bugfix: fixing a bug in libcw/generator that may have lead
to a key being permanently in "down" state upon silencing a
generator.
If cwdaemon using libcw with NULL or Console output was generating
tones from user input, and received ESC-4 escape request ("Abort
currently sent message"), it was possible that while the message
was interrupted, the key remained in "down" state.
The fix in libcw makes sure that upon request to stop generating
tones, the key always goes up, regardless of audio output type.
The bug was reported and investigated, and fix was provided by
Csahok Zoltan. Many thanks Zoli!
2016-03-30 Kamil Ignacak
* debian: adding pt_BR.po file, this should close Debian bug
#816939.
2016-01-18 Kamil Ignacak
* cw: bug discovered in cw and fix provided by Rob Wortman: cw
didn't read options from CW_OPTIONS environment variable.
2015-09-29 Kamil Ignacak
* bugfix: fixing code that resets tone queue on flushing. A bug
was found on FreeBSD: after pressing Ctrl+C, application that
wanted to stop and delete generator as part of SIGINT handling
procedure, got stuck in cw_tq_flush_internal() function, waiting
for tone queue to go idle. This never happened. Resetting all tone
queue state variables in flush function ensures that the function
completes and returns, and that client application can exit.
2015-09-12 Kamil Ignacak
* xcwcp: the application souce code files are now ported to
Qt5. Build system files have been modified to use Qt5 to build
xcwcp.
Discovery and adding -fPIC to compiler flags for xcwcp is right
now very naive, perhaps that will have to be improved in the
future.
2015-09-09 Kamil Ignacak
* alternative IPC: now that we have experimental branch, I decided
to remove "alternative IPC" code from master branch and leave that
just in "experimental" branch. master will be for small very
incremental, and only necessary changes. At this point libcw code
in master looks pretty much like it was in around commit
d02491ee32668d5f5ca3904193f306956e72468d, i.e. pre-semaphores.
2015-09-08 Kamil Ignacak
* git: created experimental_receiver branch, where all changes
related to new ideas for receiver will be developed. master branch
will be for boring, non-experimental code.
2015-09-03 Kamil Ignacak
* xcwcp: fixed handling of backspace key in keyboard mode. For
some time now the backspace key didn't remove yet-unplayed
characters from text area. Now the key works correctly.
2015-09-01 Kamil Ignacak
* xcwcp: simplifying class design in display.h. The file is now
called textarea.h, the class/widget derived from QTextEdit is now
called TextArea, and the change is reflected in few of xcwcp's
source files.
I hope to have less work in future thanks to this simplification.
A bit less code to maintain, a bit less logic to understand.
2015-08-31 Kamil Ignacak
* xcwcp: beginning of review of the code, refactoring,
updating comments.
2015-08-30 Kamil Ignacak
* libcw/signals: improving signals code already existing in cw_gen
and cw_tq modules. In particular change in cw_gen (in
dequeue_and_play_internal()) greatly improves correctness of usage
of semaphores so far.
Fixing a FIXME in cw_tq_wait_for_tone_internal(): using new
semaphore deq_semaphore for another aspect of communication
between tq and generator makes the function fully ready for use of
alternative IPC mechanism (the function doesn't need signals
anymore).
* libcw/ipc: adding new header file for new libcw module:
libcw_ipc (Inter Process Communication). For now the module
consists only of a header file with a single macro.
* libcw/ipc: implementing cw_tq_wait_for_level_internal() using
semaphores. Improving the part of
cw_tq_wait_for_tone_queue_internal that used semaphores. This
means that tq module can work without signals, with semaphores
only.
* libcw/tests: adding test_cw_tq_wait_for_level_internal() unit
test function
2015-08-28 Kamil Ignacak
* libcw/signals: Initial commit of semaphores code. The code
enables communication between generator and tone queue using
semaphores instead of signals.
It may be desirable for libcw library to not to use signals, so
that client application can use them freely, without any
interference between application and libcw. This is the first step
to replace signals with other IPC mechanisms. This alternative
mechanism may be enabled with "--enable-signals-alternative"
passed to ./configure script.
2015-08-02 Kamil Ignacak
* tests: moving selected "make" test build targets from
src/libcw/Makefile.am to src/libcw/tests/Makefile.am. Updating
flags for some of the targets, so they may be built a bit
differently
* tests: libcw_test_public.c no longer tests "forever"
feature. Since this is a test of public API, it shouldn't use
LIBCW_UNIT_TESTS flag for compilation, nor should it use any
internal or test functions.
2015-07-31 Kamil Ignacak
* gen/tq: creating small client application that tests for
presence of the problem described on 2015-07-29 ("short space"
problem). The client application is located in src/libcw/tests/
and is executed as part of standard test suite ("make check").
2015-07-29 Kamil Ignacak
* gen/tq: one more attempt in cw_gen_play_eow_space_internal() to
ensure that eow spaces are enqueued so that client software can
have tq low level threshold set to 1.
It should be stressed in release notes that client software cannot
assume that eow space will be one tone. There may have been such
implicit assumption in the past, but it was only implicit, and it
became invalid some time ago.
2015-06-14 Kamil Ignacak
* pre-release: updating information in selected files before
release (updating version numbers, adding notes new releases etc.)
2015-03-19 Kamil Ignacak
* fixes: Few minor changes in main code and test code that solve
problems found during tests on FreeBSD 10.
2015-03-13 Kamil Ignacak
* generator: fixing one possible cause of segfaults: limiting
number of executions of cw_gen_silence_internal() function that
somewhere down in call stack also called pthread_kill(). On some
occasions (during library cleanup) the thread id passed to
pthread_kill becomes invalid, and any subsequent calls to
cw_gen_silence_internal() resulted in segfault.
I have discovered this problem when testing src/cw/cw on Alpine
Linux. Other parts of unixcw package may have been affected by
this problem as well. I don't know how old the problem was (since
when it was possible to create segfaults when exiting from cw on
Alpine Linux). The fix was tested on Alpine Linux and on Debian
GNU/Linux.
2015-03-10 Kamil Ignacak
* tests: testing unixcw on Alpine Linux (with musl libc). Fixing
problems in cw_oss and cw_gen modules.
One important change in libcw made during tests on Alpine Linux:
generator's thread function is now a joinable thread (it was a
detached thread until now). I don't think that it will have any
impact on libcw's client code, but I thought that I should mention
this in ChangeLog.
Also adding one (unit ?) test function to libcw_test_internal.
2015-03-05 Kamil Ignacak
* cw_gen: today I've added second and third brand new unit test
function for cw_gen module in libcw_gen.c file. At the beginning
of this development cycle there were zero functions defined in
libcw_gen.c (there were, and still are, functions testing cw_gen
module in libcw_test_public.c). I think that's a progress :)
During creation of these functions I had an opportunity to improve
code and comments of generator's base functions.
2015-03-04 Kamil Ignacak
* asserts: base libcw is now compiled with -DNDEBUG flag by
default (asserts are "off"). The asserts are still "on" by default
in "unit tests" libcw. Asserts are switched "on" in base libcw
with "./configure --enable-dev".
2015-03-02 Kamil Ignacak
* generator: First unit test intended to be executed on building
"make check" target. The unit test function uncovered one error:
when a generator is created, then is *not* started, and then is
deleted, libcw called pthread_kill(&id, ...) on uninitialized id
in cw_gen_delete(). This caused a program to crash. This has been
fixed by adding a flag to cw_gen_t and additional code in
cw_gen.c.
2015-02-25 Kamil Ignacak
* tq: improving handling of tones in general, and "forever" tones
in particular.
I have created CW_TONE_INIT and CW_TONE_COPY macros that
(re-)initialize a tone variable (all of its fields), and that copy
values of fields from one cw_tone_t variable to other. There are
so many places where I need to set values of fields of cw_tone_t,
that I thought it would be beneficial to have some sort of
constructor/initializer. A full constructor that mallocs() tone
would be too much, but simple macro doing assignments is quite ok.
Until now the tone queue manager and generator used special value
CW_AUDIO_FOREVER_USECS assigned to cw_tone_t.usecs to indicate
that a tone is "forever" tone. This had one downside: a regular,
plain variable had special value that I had to constantly be aware
of. Now the "usecs" is again a regular variable - nothing more
than the length of tone. Information whether or not a tone is
"forever" tone is now conveyed by new field in cw_tone_t:
cw_tone_t.forever.
2015-02-23 Kamil Ignacak
* cw_gen: Lots of small updates. Mostly in comments, but I have
also removed few unused (commented out) lines of code and renamed
some internal functions. One noticeable change was in
cw_generator_set_tone_slope() - some corner cases of handling
function's arguments were cleared in function's top level
comments, and implementation has been updated accordingly.
2015-02-22 Kamil Ignacak
* key, generator, tone queue: Small improvements at intersection
of these modules. One example: after changing third argument to
cw_key_ik_enqueue_symbol_internal(), the function no longer has to
explicitly refer to length of Space/Dot/Dash stored in
generator. Enqueueing symbols with proper length is now
exclusively job of generator (at least in case of this function
call).
Also modifying names of some variables (so that they follow a
convention used already in receiver) and functions (so that their
purpose is more obvious).
So in a nutshell: small improvements in key, generator and tone
queue.
2015-02-22 Kamil Ignacak
* libcw.c: after populating the file with "global" functions for
generator, tone queue and receiver modules, I have also moved here
the "global" functions from cw_key module.
At this point the file contains definitions of global variables
cw_receiver, cw_generator and cw_key (cw_key is static in this
file).
2015-02-19 Kamil Ignacak
* libcw.c: I have (re)created the file. It will contain all the
functions that use global variables cw_generator, cw_receiver and
maybe cw_key as implicit arguments. After moving such functions
from other modules into libcw.c, other modules major should be
completely free of global variables, and should only contain
functions that operate on generators, receivers and keys as
explicit function arguments.
Then the function will have the old interface, and the new
interface. And it will be easy to have multiple generators (or
receivers) in the same application.
2014-12-30 Kamil Ignacak
* valgrind: running valgrind on libcw_test_internal reveals few
small problems in test code, and one small problem in "production"
code. Fixing the problems. Thanks valgrind!
2014-12-20 Kamil Ignacak
* tests: moving as much code as possible from libcw_test_public.c
to respective module files. The tests that are still in
libcw_test_public.c test library functions that depend on
different modules (mostly tone queue and generator). Those library
functions that can be tested in separation are tested in their
module files.
This should shorten the libcw_test_public.c file and ensure that
test functions are defined as close to library functions as
possible, so that library code and related test code are grouped
together (thus improving modularization of library).
There is still some work to be done in this area, but a good
progress has been made. In the process of moving test functions to
their modules, some test functions have been improved a bit.
2014-12-02 Kamil Ignacak
* tests: improving unit tests for receiver module. The receiver's
test code from libcw_test_public.c is being slowly moved to
libcw_rec.c. receiver module is fairly independent from a
generator or audio sinks, so it's ok to mat the tests internal in
the libcw_rec.c file. They can be executed with simple "make
check", and the execution takes very little time.
2014-11-28 Kamil Ignacak
* tests: improving unit tests for receiver module. Working on
functions that will automatically generate test data (input data
for cw_start_receive_tone() and cw_end_receive_tone() functions)
with different parameters
2014-11-24 Kamil Ignacak
* tests: Test executables for libcw now accept -m option, which
allows me to specify libcw module(s) to be tested. Option's values
are:
'r' - receiver
't' - tone queue
'g' - generator
'k' - Morse key
'o' - other
* cwutils: reformatting code in src/cwutils/cmdline.c. No
functional changes.
2014-11-19 Kamil Ignacak
More changes in receiver module. Refactoring and moving public
functions' code to _internal() functions that accept pointer to
receiver as first argument. Updating comments.
If you depend on Receiver State names (strings starting with RS_)
printed by library's debug messages, you may want to check changed
values of RS enum and corresponding strings on top of libcw_rec.c
- they have been changed.
Making some terminology changes in libcw_rec.c - some things are
now named in more consistent way (variable names, names of
things).
2014-11-12 Kamil Ignacak
Proceeding with changes, simplifications and refactoring in
receiver module. Generator module is also affected.
2014-11-11 Kamil Ignacak
Creating new module: libcw_rec. Moving code related to receiver
from libcw.c to libcw_rec.c. Moving other code from libcw.c to
other modules. libcw.c has been emptied and is now removed.
2014-08-17 Kamil Ignacak
* build system: changes in build system files (configure.ac and
src/libcw/Makefile.am) introduced to improve compilation on
OpenBSD 5.5.
2014-08-16 Kamil Ignacak
* README: reviewed contents of README file. Lots of stuff
accumulated in the file over the time, making a first-to-read
document a bit too large. Moved parts of the file to INSTALL,
THANKS and HISTORY files.
* INSTALL: reviewed contents of INSTALL file. Less unnecessary
sentences, more details. Also added a generic installation
instructions as usually found in INSTALL files.
* files: added new files to dist package:
THANKS
HISTORY
added new files to git repository only:
qa_build_debian.sh
qa_compile_headers.sh
qa_test_configure_flags.sh (well this one is moved from ./tools)
qa_valgrind_cwcp.sh
2014-08-12 Kamil Ignacak
* libcw/utils: three more functions have been moved to
libcw_utils: cw_version, cw_license and cw_get_audio_system_label,
because, well, these functions look like utility functions.
* libcw/signal: I couldn't resist and I moved signal-related
functions from libcw.c to new module: libcw_signal. Bodies of
these functions have not been modified, so you can compare
contents of libcw_signal.c with contents of libcw.c from last
release to see how the move has been done.
* libcw/generator: I have moved some more code from libcw.c to
libcw_gen.c. There is still some generator-related code left in
libcw.c, but I promise not to touch it in this release. I think
that I have enough of moving code.
There is still some code left in libcw.c. Big part of this code is
related to receiver. The next big task in my work on libcw should
be understanding (or at least attempting to understand) the
receiver code and its relation to other modules (especially to
libcw_gen and libcw_key modules). Receiver code is one of last
areas that I haven't really tried to digest.
2014-08-07 Kamil Ignacak
* QT4: Simplifying configuration of QT4 in configure.ac: using
PKG_CHECK_MODULES instead of custom shell script. Tests on Linux
and FreeBSD ongoing.
* FreeBSD & clang 3.3: successful build of "make check"
target. Successful execution of libcw_test_simple_gen and
libcw_test_internal. Tests on FreeBSD ongoing.
2014-08-06 Kamil Ignacak
* FreeBSD: I managed to configure and build the package on FreeBSD
10. It worked! I only had to slightly adjust configure.ac and
src/libcw/Makefile.am (dl library). There is still a bit of work
on FreeBSD left to do in configure.ac.
* OSS: During tests of OSS on FreeBSD I've found a bug that
prevented libcw from correctly opening OSS sink (unnecessary
function call). This bug has been fixed. This fix should affect
Linux and FreeBSD.
2014-08-02 Kamil Ignacak
* libcw/key: lots of changes in libcw_key module. After some
trials and errors I've implemented a code with single data type
for all types of code (cw_key_t) while maintaining separate states
of straight key, iambic keyer, and tone-queue-key.
The key and code handling it is not visible to users of public
API. Behaviour of public API functions has not been changed.
2014-07-28 Kamil Ignacak
* libcw: I think that for now I'm done with splitting libcw.c into
parts. In about a week I have moved large portions of code from
libcw.c to separate files. Different parts of libcw.c,
implementing different functionality, are now in their own *.c/*.h
files. These new modules are:
libcw_data.c
libcw_gen.c
libcw_key.c
libcw_tq.c
libcw_utils.c
It's very possible that in future I will move some more code from
libcw.c to new files.
Up until now the code in new files is pretty much the same as it
was in libcw.c (the same order of functions, the same bodies of
functions, pretty much copy-and-paste). If you want to check
correctness of moving the functions to new files, you could do
this by comparing libcw/*.c files from 28.07.2014 with original
libcw.c from previous release (I did such comparing using KDE
application 'kompare', everything looks ok to me).
After today I may make some changes in *.c files that will make
the movement of code less transparent (but of course keeping
everything in git).
In addition to moving parts core functionality of the library from
libcw.c to new files, I have also reviewed test code and build
targets in Makefile.am for building test applications. You can now
build three test executables with "make check":
libcw_test_internal
libcw_test_public
libcw_test_simple_gen
C code used to build these test executables is now a bit more
simple - it uses a bit less #ifdefs, and main() function for each
executable is in its own separate *.c file. There is no main()
function in libcw.c file anymore.
The main goal for the splitting of libcw.c was to introduce more
order into the project. libcw.c file contained almost 10k
LOC. Almost all modules (with exception of audio systems) were in
a single file. Functions implementing these modules were sometimes
mixed. Mental navigation in the file was becoming difficult. The
split should help me solve these problems.
The description above was given to explain why and how the libcw.c
has been modified so heavily in this release. The code is still in
*.c files. No functionality has been removed. No functions have
been added or removed.
Looking from outside, the library hasn't changed. It has the same
set of functions implementing the same functionality. The libcw.h
and libcw_debug.h files haven't changed at all. Changes to libcw
in this release, from users' and developers' point of view, are
none.
2014-07-26 Kamil Ignacak
* cwcp: fixing a stupid error that I introduced in one of previous
releases: cwcp didn't use "combined" argv, so it didn't process
CWCP_OPTIONS from env. Now it should work.
Today's commit ends my main part of work on cwcp code. There were
three main changes made to cwcp: first: fixing the bug mentioned
above; second: calling few delwin()s to plug memory leaks; third:
bringing the code into shape when it comes to project's
indentation and comments style.
2014-07-23 Kamil Ignacak
* libcw/test code: moving some code related to testing from
libcw.c into other files.
This little change triggered a larger change in test utilities for
libcw. Now we have three libcw test executables built with "make
check": libcw_test_internal, libcw_test_public, and
libcw_test_simple. Each of them has its own .c file with its own
main(). There is no main() function in libcw.c anymore.
Explicit "standalone" target has been removed from
src/libcw/Makefile.am. It has been replaced by libcw_test_simple
executable built with "make check".
2014-07-22 Kamil Ignacak
* libcw/keying code: Moving most of code related to iambic keyer,
straight key, and general keying control into new file:
libcw_key.c.
Having separate things in separate files (instead of having
everything in a single 10kLOC file) should make some things easier
for me as a maintainer of libcw.
2014-07-21 Kamil Ignacak
* libcw/tone queue: Moving most of code related to tone queue into
new file: libcw_tq.c.
* libcw/data: Moving code related to characters (and their
representation), prosigns and phonetics to new file: libcw_data.c
Having separate things in separate files (instead of having
everything in a single 10kLOC file) should make some things easier
for me as a maintainer of libcw.
2014-04-23 Kamil Ignacak
* committing changes before a new release; the new release
contains a fix of problem reported by Pino Zollo ZP4KFX. Se NEWS
file for more details.
2013-12-08 Kamil Ignacak
* cwgen: improving seed for random function.
2013-10-26 Kamil Ignacak
* clocking of iambic keyer. There has been a problem with clocking
iambic keyer when the state machine for the keyer was in
motion. The clocking has been receiving imprecise timestamps, and
so recognizing characters (e.g. in xcwcp's receiver) was
difficult. Today I've committed code that fixes timing problems
in clocking iambic keyer.
The code updates receiver's timer with lengths of dequeued tones
in cw_generator_dequeue_and_play_internal(). Receiver uses this
updated timer as an argument to cw_{start|stop}_receive_tone(),
and since the timer is updated with exact time values, the lengths
of spaces and marks are more precise. Fixing the problem also
required some changes in xcwcp/receiver.cc and
xcwcp/application.cc.
2013-10-22 Kamil Ignacak
* unit tests: adding first unit test in cwutils/dictionary module.
2013-10-19 Kamil Ignacak
* unit tests: adding "tests::" and "testedin::" markings in
functions' top level comments to indicate which functions are
tested in which unit tests. Also rewriting parts of bodies of unit
tests in libcwtest.c so that printout of test results is a bit
cleaner.
2013-10-17 Kamil Ignacak
* xcwcp: reviewing, commenting and reformatting code in
receiver.cc - the file that uses libcw's receiver functionality.
2013-10-13 Kamil Ignacak
* receiver code: more changes and reviewing of receiver code. Unit
tests for two functions in recever section:
cw_timestamp_validate_internal() and
cw_timestamp_compare_internal(). I've reversed order of arguments
for the first function, so the order now matches (output, input)
pattern of parameters order.
2013-10-10 Kamil Ignacak
* testing: some improvements in code testing receiving functions
in libcwtest.c: simplifications, comments, refactoring.
* refactoring in libcw.c: moving some free variables related to
sending and receiving of Morse code into generator and receiver
variables, respectively.
2013-10-06 Kamil Ignacak
* tone queue: using "len" property to simplify management and
monitoring of tone queue and its capacity. Code is now a bit
simpler.
2013-10-05 Kamil Ignacak
* tone queue: adding "len" property to tone queue. Adding and
using it should simplify some aspects of queue management.
2013-10-04 Kamil Ignacak
* tone queue: still working with capacity, head and tail. Updated
data type for the three variables, it will be uint32_t.
* debugging: introduced cw_assert() macro that should improve
debugging and assertions.
2013-09-12 Kamil Ignacak
* tone queue: more changes related to "capacity", and additionally
"head" and "tail" properties of tone queue. No functionality
changed yet, just some minor improvements, comments and tests.
2013-09-09 Kamil Ignacak
* tone queue: refactoring code handling "capacity" of tone queue;
two purposes: improved "testability" and possibility of assigning
non-default capacities of tone queues.
2013-07-24 Kamil Ignacak
* FreeBSD patches: applying patches for FreeBSD, provided by Diane
Bruce (thank you!). Thanks to the patches the ./configure script
now should support two new flags:
--with-qt-includes=<path>
--with-qt-libraries=<path>
2013-03-18 Kamil Ignacak
* fixes: Thomas Beierlein has reported that some combinations of
'--enable-*'/'--disable-*' flags result in a code that fails to
compile. He also provided a patch that fixes it. I've created
a tool ('unixcw/tools/test_configure_flags.sh') that tests all
combinations of configure flags, which also detected one more
faulty configuration, in addition to the ones discovered by Thomas.
2013-01-24 Kamil Ignacak
* unit tests: src/libcw/libcwtests.c has been heavily refactored.
The work on the file will continue to ensure that public API of
libcw is tested as thoroughly as reasonably possible.
* new functions: adding new functions: cw_character_is_valid()
(replaces cw_check_character()) and cw_string_is_valid()
(replaces cw_check_string()). The old functions are still available,
but have been marked as deprecated.
2013-01-03 Kamil Ignacak
* fixes: fixing a function in libcw that attempts to open audio
device. Simple improvement of logic conditions makes it less
possible (under certain circumstances) that the function will fail
to open a device.
* pre-release: new version of unicw will have version number
3.2.0. New version of libcw will have soname version 5.0.0.
Implementing necessary changes related to the two pieces of
information. Also attempting to build debian packages from unixcw
source package, and fixing bugs and upgrading files in the
process. Various other updates of files related to pre-release
activities.
2012-12-31 Kamil Ignacak
* distribution: src/libcw/libcw_debug.h is now marked as file to
be installed along with libcw.h
* generator: improved behaviour of cw_generator_new() in cases
when the function failed to create a generator. Now if the
function fails, the generator variable is fully 'de-initialized'.
2012-12-29 Kamil Ignacak
* tone queue: improving the method of queuing a space character.
This helps me avoid problems in some corner case (when a single
space is queued, and tone queue's low watermark is set to 1).
This problem has been spotted when testing cwdaemon.
* compilation errors: unixcw/src/libcw/libcw.h: Rewriting three
cases of usage of "__attribute__ ((deprecated(msg)))", some
versions of gcc may not support "deprecated" with string argument
(error reported by user).
2012-11-21 Kamil Ignacak
* debugging: I have reviewed list of CW_DEBUG_* flags. Some of the
names of the flags have changed. If you are using any of these flags,
you need to review your code.
debug module now provides updated macro printing debug messages.
The macro now accepts 'severity level' flag (debug / info /
warning / error). There are now three permanent debug objects
provided by libcw. Two of them are only for debug purposes, the
third one is for general use. Behaviour of the objects may be
controlled by the severity flag, as well as by debug flags
defining areas of code, for which the debugging is active.
2012-09-17 Kamil Ignacak
* libcw: code implementing support for various audio backends has
been moved from libcw.c to new files. That way we have less mess
in libcw.c, better separation of modules, and cleaner space for
improvements in code implementing support for audio backends (e.g.
advanced API of PulseAudio).
2012-09-11 Kamil Ignacak
* debug: adding src/libcw/libcw_debug.py - a tool that transforms
timing information that may be printed by debugged libcw
applications. The transformed timing information may be then
plotted by plotting programs to gain insight into inner workings
and time dependencies of different parts of libcw applications.
The tool is rather imperfect and may need manual adjustments for
every new situation, but hopefully it will turn out to be useful.
* cwcp: refactoring cwcp.c, adding comments, fixing one small
annoyance.
2012-08-15 Kamil Ignacak
* tone slopes: libcw now can generate tones with slopes shaped as
sine function or as raised cosine function. The 'raised cosine'
slope is now default. Until now, shape of slopes has been calculated
every time a tone has been generated. Now the shape is calculated
only when some parameters of generator (volume, sample rate, length
of slope) change. This should improve performance of libcw by one or
two percents (no benchmarks were performed :/ ).
2012-08-11 Kamil Ignacak
* debug: Adding src/libcw/libcw_debug.c module. Currently the module
implements only debug events with time stamps, but most probably all
debugging facilities will be moved to the module in future.
2012-08-06 Kamil Ignacak
* build system configuration: fixing faulty logic checking
"--disable-feature" flags in configure.ac. Bug reported by Thomas
Beierlein. Thanks Thomas!
2012-07-04 Kamil Ignacak
* libcw: fixing problem with interlocks in threaded code; since
this is an important fix, I will have to prepare new release of
unixcw.
2012-05-27 Kamil Ignacak
* libcw: fixing an error with overflowing n_samples. It was spotted
during some tests performed when reviewing files before new release.
I guess that means that I'm in a phase of final tests of the package.
* unixcw: bunch of changes that prepare the package for new release.
New release number of unixcw will be 3.1.0, new soname of libcw will
be 4:0:0.
2012-05-21 Kamil Ignacak
* libcw: Implementing loading of PulseAudio and ALSA libraries at
run-time (loading symbols from the two libraries - to be exact),
instead of doing it at compile time (load time?).
This means that support for PulseAudio and/or ALSA can be enabled
during compile time, but user doesn't have to have PulseAudio and/or
ALSA installed on target system in order to install libcw. In other
words: PulseAudio and ALSA libraries are now recommended, but not
required.
This does not mean that the two libraries are somehow deprecated by
libcw. It just means that installing libcw doesn't have to mean a
necessity of installing too much additional packages.
OSS - by its nature - doesn't have to be loaded to be used by libcw,
it's just open(), write() and close(), so handling OSS is much
easier and doesn't involve run time loading (the description is
rather simplified, but still OSS is a different story than PulseAudio
and ALSA libraries).
2012-05-17 Kamil Ignacak
* libcw/pulseaudio: some general improvements in PulseAudio code;
there may be a slight improvement in responsiveness, as I've added
code that configures buffering attribute passed to pa_simple_new().
The configuration is very simple (read: code copied from the net),
I suspect that it can be improved.
* libcw/Null: Adding support for Null output.
Null output is an empty device that doesn't produce a sound. It
doesn't use any physical or logical device to output a sound.
Its only function is to provide a timing information: it acts as
if it accepts and plays x microseconds of sound, and it returns
after the x microseconds.
I'm not sure if this will turn out useful, maybe yes, maybe no.
Currently it is implemented using single call to usleep(), without
any checks of return value. This should be improved.
Code from cwutils has been changed to use/provide functionality
related to the new output.
2012-05-14 Kamil Ignacak
* libcw/tone queue: cw_generator_write_sine_wave_internal(): using
cw_signal_wait_internal() (together with pthread_kill() in enqueue
function) instead of usleep() - this should decrease CPU usage in idle
state; still needs to be tested and verified, but - overall - good
idea; I think that this solution existed in libcw before I've started
slaughtering the code, so consider this just rediscovering of a clever
code;
2012-05-10 Kamil Ignacak
* libcw/console: Console output now works correctly, playing nicely
with queue()/dequeue() and the generator.
2012-05-06 Kamil Ignacak
* cwcp/user interface: fixing small bug in code: till now modifying
practice time didn't work correctly, any attempts to do so resulted
in resetting the time to zero. Now this is fixed.
2012-05-01 Kamil Ignacak
* libcw/experimental code: removed code that was disabled when
CW_DEV_EXPERIMENTAL_WRITE was set to 1.
2012-05-01 Kamil Ignacak
* libcw/audio: more changes in libcw; I'm decreasing dependency
on timers, and increasing dependency on tone queue. I could put
it that way: there are less places where time periods are dictated
by itimers, and more places where time periods are measured by
audio systems' 'write' functions. This way I am sure that when I'm
sending X samples to audio sink, it - given sample rate Y - results
in Z microseconds of sound.
This seems like a good concept, it works well so far. I think that
it will me impossible (and impractical) to get rid of all timers,
but for generating audio - it works well.
There may be a problem with console buzzer, as there is no audio
sink that would accept X samples, but already I have an idea how
to solve this.
I've been using CW_DEV_EXPERIMENTAL_WRITE definition to enable new,
experimental code, and disable old code. Since the new, experimental
code works so well, I will completely get rid of the old code soon.
2012-04-25 Kamil Ignacak
* libcw/ALSA: the problem described below has been solved, but
at a cost of significant changes in how a Morse code sound is
generated (timers are no longer used). This will almost certainly
affect other parts of libcw (e.g. Morse keys handling), but it has
advantages: timing of ALSA sound is (should be - to be tested)
perfect, and I can easily add support for PulseAudio. (this change
has been made and committed earlier, somewhere between 21.04 and
24.04, I'm just describing it now).
* libcw/PulseAudio: Adding support for PulseAudio.
PulseAudio only works with "experimental write" enabled, so there
is no way that I can have both PulseAudio and old algorithm for
generating audio. Either I will have to refactor/refresh/rework
rest of libcw.c (and then have PulseAudio), or I will leave old
way of generating audio (not breaking things (yet) in applications
using libcw, but also not having PulseAudio).
2012-04-21 Kamil Ignacak
* libcw/ALSA: I've noticed that there is a problem with waveform
produced with ALSA. Dits and dashes start at correct time, but
they are ended incorrectly - either too soon, or too late.
This results in dots and dashes of incorrect length. The length
differences are small, but audible.
I have ruled out problems with itimer. itimer doesn't produce
perfect time intervals, but error introduced by itimer is way to
small to result in described problem.
The problem is probably related to delay introduced by
snd_pcm_writei().
I'm thinking about following solution: start generating tones (be
it inter-symbol silence, or the symbols (dits and dashes) themselves)
on signal generated by itimer, but stop generating dit/dash/silence
after writing specific number of samples to audio device.
In other words: start generating on timer events, stop generating on
sample counter overflow.
The problem doesn't seem to appear when using OSS output, perhaps
because sound fragment size is much smaller than ALSA period size,
e.g. 128 vs. 940.
2012-04-15 Kamil Ignacak
* build system: Most important change: adding code that handles
--disable-xxx options passed to the script:
--disable-console
--disable-oss
--disable-alsa
--disable-cwcp
--disable-xcwcp
The options allow disabling certain functionalities of unixcw, so
that the package can be built on machines that don't provide some
functions or properties.
Example: unixcw 3.0.1 can't be compiled on hurd-i386 because of
this error from configure script:
"configure: error: Cannot find either sys/kd.h, sys/vtkd.h, or sys/kbio.h"
At lease one of these headers is needed for console buzzer support.
With new code in configure, compilation of code working with console
buzzer can be disabled.
Similarly, user can now disable compilation of OSS-related code on
platforms that no longer provide OSS.
Functionality can be disabled explicitly (with command line option),
or implicitly - if any of tests performed by configure script fails.
Changes described above required some modifications of libcw.c file.
Also added --enable-dev.
Build system now uses Makefile.am and Makefile.in files used/generated
by Automake. Adding two calls to configure: AM_INIT_AUTOMAKE (build
system now uses Automake to handle Makefile files), and
AC_PROG_LIBTOOL (libtool is now used to create libraries).
Build system now supports "make distcheck" target.
Build system now depends on libtool.
|