From e66516d57caf47eb8b7986c9ce51a2d56c03cf2e Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 16 Dec 2015 10:59:38 +0100 Subject: send a signal if cancelled, and at end of transmission MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/send.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/send.c b/src/send.c index 27dec1d..80a9192 100644 --- a/src/send.c +++ b/src/send.c @@ -29,6 +29,10 @@ #define DURATION 100 /* ms */ /* 100 ms → 10 Bd → 5 B/s */ #define LATENCY 100000 /* µs */ +#define CHAR_ESCAPE 0x10 /* Data link escape */ +#define CHAR_CANCEL 0x18 /* Cancel */ +#define CHAR_END 0x04 /* End of transmission */ + #define N(buf) (sizeof(buf) / sizeof(*buf)) @@ -92,6 +96,7 @@ int main(int argc, char* argv[]) { int r; char buf[1024]; + int c; ssize_t n, i; (void) argc; @@ -124,17 +129,27 @@ int main(int argc, char* argv[]) if (n == 0) break; for (i = 0; i < n; i++) - if (send_byte(buf[i])) - goto snd_fail; + { + c = buf[i]; + if ((c == CHAR_ESCAPE) || (c == CHAR_CANCEL) || (c == CHAR_END)) + if (send_byte(CHAR_ESCAPE)) + goto snd_fail; + if (send_byte(c)) + goto snd_fail; + } } + if (send_byte(CHAR_END)) + goto snd_fail; snd_pcm_close(sound_handle); return 0; fail: perror(argv0); + send_byte(CHAR_CANCEL); return 1; snd_fail: snd_pcm_close(sound_handle); + send_byte(CHAR_CANCEL); return 1; } -- cgit v1.2.3-70-g09d2