summaryrefslogtreecommitdiff
path: root/util/spkmodem_recv
AgeCommit message (Collapse)Author
22 hoursutil/spkmodem-recv: add a usage functionLeah Rowe
replace the err call in getopt Signed-off-by: Leah Rowe <leah@libreboot.org>
22 hoursutil/spkmodem-recv: tidy up the getopt loopLeah Rowe
more knf-compliant Signed-off-by: Leah Rowe <leah@libreboot.org>
22 hoursutil/spkmodem-recv: allow short sample readsLeah Rowe
fread() may return short reads, whereas the current code assumes either EOF or a full read. change if to a while. really, it's that simple. just loop until it's done. i probably b0rked this myself when refactoring the GNU code. Signed-off-by: Leah Rowe <leah@libreboot.org>
22 hoursutil/spkmodem-recv: don't exit in print_statsLeah Rowe
i treated ftell errors as fatal, but if fttell fails with ESPIPE, and someone's using -d, the program may exit immediately, even though there's no problem. instead, skip printing the offset (basically no debug). this fixes a bug that i introduced myself, when i forked this code, because i added that error check; the GNU code didn't have any check whatsoever. Signed-off-by: Leah Rowe <leah@libreboot.org>
22 hoursutil/spkmodem-recv: buffer calls to fread()Leah Rowe
we currently read small amounts of data with fread, repeatedly, which is quite taxing on the CPU, on very old systems. 48khz audio. 48000 calls to fread() per second? yeah. let's optimise this. performance now should be roughly O(1) in practise. this and the other recent changes means no modulo or division, reduced branching, memory memory roads, and lots of buffering. the buffering here is quite conservative, so the human won't notice any difference. we're cutting the number of times we call fread by a factor of several thousand, but you'll still see text scrolling down pretty quick, with minimal lag. the old GNU code i forked was terrible at this. Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: make new pulse calculation clearerLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: tidy up pulse decodingLeah Rowe
make it clearer about next/old, in the loop. this also improves performance on older systems (cache the values first, don't re-calculate) again, this is GNU code. but you wouldn't know it, in my current version. i forked this from GRUB several years ago and started cleaning it for fun. Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: split up handle_audio()Leah Rowe
the signal check should be its own function, for clearer understanding Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: tidy up handle_audioLeah Rowe
frame handling, error checks, pulse decoding and character decoding are all jumbled up. this patch separates them a bit, making it clearer. should also help codegen. this tool is dealing with high bandwidth text, which on slower computers may be cumbersome. every optimisation counts. not really relevant on newer systems. Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: optimise ring buffer pos calcLeah Rowe
instead of computing next every time, just advance two indexes. another performance optimisation on older machines, especially old compilers, because it reduces the amount of logical branching. the old code was pretty much just advancing two indexes in lockstep, when getting the next pulse, but recalculating one of them based on the other, each time. this is yet another hangover from the old GNU code that i forked three years ago. Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: don't use modulus on decodeLeah Rowe
it's slow on older compilers/systems that don't optimise. instead, we branch (cheaper) and just do an above or equal comparison), resetting appropriately or subtracting. should yield an actually useful performance gain, on older systems. a bit theoretical on modern systems, which optimise well (modern compilers will produce assembly code much like what the new C code is doing) Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursspkmodemrecv makefile: add -c to installLeah Rowe
a bit pedantic. but that's my intention. for backwards compatibility with older systems. this flag means: create the directory. on modern versions on all systems, it's the default behaviour. Signed-off-by: Leah Rowe <leah@libreboot.org>
23 hoursutil/spkmodem-recv: further portability / cleanupLeah Rowe
i used a bunch of global variables. that's gone. added proper externs, including for errno. lots of old unix systems require this. this version should be perfectly polished and portable now. all status is now handled in a struct, making the code a bit easier to understand, because the variables now are clearly pertinent to the state of the decoder, rather than being seemingly random. some indentation reduced. also cleaned up ftell/feof usage again. the new code is a bit more robust when dealing with piped input(which is literally what this program takes, exclusively) i started my cleanup of this tool from GNU GRUB in 2023. i finished it today. also the Openbsd pledge is more portable now (code made to compile on pre-pledge openbsd as well) Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursutil/nvmutil: further clean up decode_pulse()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursutil/spkmodem-recv: tidy up frame decodingLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursutil/spkmodem-recv: handle fread errorsLeah Rowe
also handle EOF condition and exit cleanly. don't use dirty feof. Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursutil/spkmodem-recv: fix getopt prototypeLeah Rowe
i use -pedantic and std=c90 also add the define Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursremoved some unnecessary thingsLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hoursanother fixLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
28 hourstiny fixLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
29 hoursutil/spkmodem-recv: portability and code cleanupLeah Rowe
borrowing recent improvements from nvmutil Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-02-19util/spkmodem_recv: general code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2025-01-03util/spkmodem-recv: More correct MakefileLeah Rowe
Set up the DESTDIR variable properly. Otherwise, this is just style changes. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-17util/spkmodem-recv: detailed copyright historyLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-25util/: use SPDX license and copyright headersLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-14util/spkmodem-recv: rename function for clarityLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: remove unnecessary error checkLeah Rowe
the loop in main() already checks EOF, and errno is properly handled at the end of main() we only need to call ferror(), to check error state this fixes a bogus error message when pressing ctrl+D to terminate the program, *which is the intended way to terminate this program* (that, or EOF is reached in any other another way) do not treat intended behaviour as an error condition! Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: say cc, not gcc, in commentLeah Rowe
i've build-tested this code with clang and that also works. in practise, a user is going to have clang or gcc Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: fix bad commentLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: remove unnecessary assignmentLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: simplify getopt handlingLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13util/spkmodem-recv: cleaner ring buffer handlingLeah Rowe
make it more obvious that this *is* a ring buffer being handled, and make it more obvious when checking a pulse in the next frame Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-13remove errant fileLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-12util/spkmodem-recv: re-add full license headerLeah Rowe
i forked spkmodem-recv from coreboot, who forked it from gnu grub. gnu grub's version has the full header, with copyright declared as belonging to the fsf coreboot made changes after forking it, and later replaced the license declaration with an equivalent SPDX header, but they also removed the FSF's copyright declaration, which by itself does not void the declaration anyway, i just feel better re-adding the full declaration. make it so! Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-08util/spkmodem-recv: fix regressionLeah Rowe
The last bit wasn't being handled, *and* ascii_bit wasn't being reduced at all. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: make ringpos a global variableLeah Rowe
there's no point passing it as argument to a function. it's used across more than one function, so make it global Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: simplify sample_cnt/char resetLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: print stats in other functionLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: only print unhandled err on -dLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: make debug a runtime optionLeah Rowe
it's currently a build-time option make it a runtime option instead, so that every user can optionally make use of it, on all builds Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: always disable line bufferingLeah Rowe
thus, there's no need to handle flushing of stdout whatsoever, and the code can be greatly simplified ascii bits are still reset, when no input on stdin is given Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: simplify stdout flush logicLeah Rowe
when spkmodem-recv doesn't receive anything (via stdout) after a few frames, it's assumed that the console is dead and the buffered output is flushed this logic is assumed superfluous when -u is set Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-05util/spkmodem-recv: rename variables for clarityLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: split print_char() upLeah Rowe
the logic for *setting* a character, and the logic for outputting it, ought to be separate. do that. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: reduce indent in print_char()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: squash a few code linesLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: bsd-style indentLeah Rowe
my style was: 2 tabs. bsd-style, for extending a line, is 4 spaces. this style has grown on me, so let's do it here Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: order prototypes per functionLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: warn on unhandled exit errorLeah Rowe
my style of C programming is this: always return errno upon exit from the program, or from a thread. handle errno in the calling/forking function. returning errno at the end of main has this intention: if an unhandled error occured, the program exits with non-zero status. a correctly written program should *never* return non-zero at the end of main, and if it does, this indicates a bug in the code (per my code style / philosophy). so, warn the user with a message if this occurs. the intention is that this message should never be printed. do not use assert() for this. i don't believe in that. such a test should always be present, for everyone. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: another minor code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>