From cf09fe42b1e9fe1986ffd7307d418ab948d92b1a Mon Sep 17 00:00:00 2001 From: Peter Allan Date: Sun, 8 Mar 2015 14:41:25 -0400 Subject: [PATCH] added host_linux files --- host_linux/Makefile | 22 +++ host_linux/README.md | 7 + host_linux/doubledown.c | 317 ++++++++++++++++++++++++++++++++++++++++ host_linux/oddbits.c | 29 ++++ images/Thumbs.db | Bin 46592 -> 0 bytes 5 files changed, 375 insertions(+) create mode 100644 host_linux/Makefile create mode 100644 host_linux/README.md create mode 100644 host_linux/doubledown.c create mode 100644 host_linux/oddbits.c delete mode 100644 images/Thumbs.db diff --git a/host_linux/Makefile b/host_linux/Makefile new file mode 100644 index 0000000..fff84d4 --- /dev/null +++ b/host_linux/Makefile @@ -0,0 +1,22 @@ +TARGETS = doubledown oddbits evenbits +BINDIR = /usr/local/bin +all: $(TARGETS) + +doubledown: doubledown.c + gcc -Wall doubledown.c -lasound -o doubledown + +oddbits: oddbits.c + gcc -Wall oddbits.c -o oddbits + +evenbits: oddbits + ln -f oddbits evenbits + +install: all + install -m 0755 $(TARGETS) $(BINDIR) +.PHONY: install + +clean: + -rm -f *.o + -rm -f $(TARGETS) + -rm -f *~ + diff --git a/host_linux/README.md b/host_linux/README.md new file mode 100644 index 0000000..4bae860 --- /dev/null +++ b/host_linux/README.md @@ -0,0 +1,7 @@ +This software needs the Debian packages + libasound2-dev + libasound2-doc (usefull for development) + +$ make +$ sudo make install +$ make clean diff --git a/host_linux/doubledown.c b/host_linux/doubledown.c new file mode 100644 index 0000000..5725e4a --- /dev/null +++ b/host_linux/doubledown.c @@ -0,0 +1,317 @@ +#include +#include +#include // for getopt() & nice() +//#include "sound.h" + +#define BUF_SIZE 1024 // alter the kilobytes logic if this changes +//#define ID_STRING "Cypress_Digital_Audio_DVK" // Bill has one of these +#define ID_STRING "REDOUBLER_Random_Number_Generator" +#define FALSE 0 +#define TRUE 1 + +#define DEFAULT_HW_DEVICE "hw:0" +#define DEFAULT_HW_ITEM "capture" +#define DEFAULT_SAMPLE_RATE 48000 +#define DEFAULT_SKIP_BYTES (48000 * 4 * 1) +#define PAGE_SIZE 4096 + + +/******************** start of sound.c, in-lined so just one .c file ****************/ + +/* + * (c) 2008-2014 Nicholas J. Kain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +// Peter Allan modified for use with REDOUBLER +// Original found in snd-egd package on Github + +#include +#include +//#include "nk/log.h" not needed, APA +//#include "defines.h" needed parts brought in above +//#include "sound.h" needed parts brought in above + +static char *cdevice = DEFAULT_HW_DEVICE; +static const char *cdev_id = DEFAULT_HW_ITEM; +static unsigned int sample_rate = DEFAULT_SAMPLE_RATE; +static snd_pcm_t *pcm_handle = NULL; +static size_t pcm_bytes_per_frame; +static int snd_format = -1; +static unsigned int skip_bytes = DEFAULT_SKIP_BYTES; +static int pcm_can_pause; + +void suicide(const char * fmt, ...) // APA guess +{ + va_list args; + + va_start(args,fmt); + vfprintf(stderr,fmt, args); + fprintf(stderr,"\n"); + exit(1); +} + +int sound_read(void *buf, size_t size) +{ + snd_pcm_sframes_t fr; + + fr = snd_pcm_readi(pcm_handle, buf, size / pcm_bytes_per_frame); + /* Make sure we aren't hitting a disconnect/suspend case */ + if (fr < 0) + fr = snd_pcm_recover(pcm_handle, fr, 0); + /* Nope, something else is wrong. Bail. */ + if (fr < 0 || (fr == -1 && errno != EINTR)) + suicide("sound_read(): Read error: %m"); + return fr*pcm_bytes_per_frame; +} + +void sound_stop(void) +{ + if (pcm_can_pause) + snd_pcm_pause(pcm_handle, 1); +} + +void sound_open(void) +{ + char buf[PAGE_SIZE]; + int err, i; + snd_pcm_hw_params_t *ct_params; + + if ((err = snd_pcm_open(&pcm_handle, cdevice, SND_PCM_STREAM_CAPTURE, 0)) < 0) + suicide("Error opening PCM device %s: %s", cdevice, snd_strerror(err)); + + snd_pcm_hw_params_alloca(&ct_params); + + err = snd_pcm_hw_params_any(pcm_handle, ct_params); + if (err < 0) + suicide("Broken configuration for %s PCM: no configurations available: %s", + cdev_id, snd_strerror(err)); + + /* Disable rate resampling */ + err = snd_pcm_hw_params_set_rate_resample(pcm_handle, ct_params, 0); + if (err < 0) + suicide("Could not disable rate resampling: %s", snd_strerror(err)); + + /* Set access to SND_PCM_ACCESS_RW_INTERLEAVED -- NONINTERLEAVED would + * be preferable, but it's uncommon on sound cards.*/ + err = snd_pcm_hw_params_set_access(pcm_handle, ct_params, + SND_PCM_ACCESS_RW_INTERLEAVED); + if (err < 0) + suicide("Could not set access to SND_PCM_ACCESS_RW_INTERLEAVED: %s", + snd_strerror(err)); + + /* Choose rate nearest to our target rate */ + err = snd_pcm_hw_params_set_rate_near(pcm_handle, ct_params, &sample_rate, 0); + if (err < 0) + suicide("Rate %iHz not available for %s: %s", + sample_rate, cdev_id, snd_strerror(err)); + + /* Set sample format -- prefer endianness equal to that of the CPU */ +#ifdef HOST_ENDIAN_BE + snd_format = SND_PCM_FORMAT_S16_BE; +#else + snd_format = SND_PCM_FORMAT_S16_LE; +#endif + err = snd_pcm_hw_params_set_format(pcm_handle, ct_params, snd_format); + if (err < 0) { +#ifdef HOST_ENDIAN_BE + snd_format = SND_PCM_FORMAT_S16_LE; +#else + snd_format = SND_PCM_FORMAT_S16_BE; +#endif + err = snd_pcm_hw_params_set_format(pcm_handle, ct_params, snd_format); + } + if (err < 0) + suicide("Sample format (SND_PCM_FORMAT_S16_BE and _LE) not available for %s: %s", + cdev_id, snd_strerror(err)); + + /* Set stereo for faster sampling. */ + err = snd_pcm_hw_params_set_channels(pcm_handle, ct_params, 2); + if (err < 0) + suicide("Channels count (%i) not available for %s: %s", + 2, cdev_id, snd_strerror(err)); + + /* Apply settings to sound device */ + err = snd_pcm_hw_params(pcm_handle, ct_params); + if (err < 0) + suicide("Could not apply settings to sound device!"); + + pcm_bytes_per_frame = snd_pcm_frames_to_bytes(pcm_handle, 1); + //fprintf(stderr,"bytes-per-frame: %d\n", pcm_bytes_per_frame); + pcm_can_pause = snd_pcm_hw_params_can_pause(ct_params); + + /* Discard the initial data; it may be a click or something else odd. */ + for (i = skip_bytes; i > 0; i -= (sizeof buf)) + sound_read(buf, sizeof buf); + //fprintf(stderr,"skipped %d bytes of pcm input\n", skip_bytes); + + if (pcm_can_pause) { + sound_stop(); + //fprintf(stderr,"alsa device supports pcm pause\n"); + } +} + +int sound_bytes_per_frame(void) +{ + return pcm_bytes_per_frame; +} + +void sound_start(void) +{ + if (pcm_can_pause) + snd_pcm_pause(pcm_handle, 0); +} + +void sound_close(void) +{ + snd_pcm_close(pcm_handle); + pcm_handle = NULL; +} + +int sound_is_le(void) +{ + if (snd_format == SND_PCM_FORMAT_S16_BE) + return 0; + return 1; +} + +int sound_is_be(void) +{ + if (snd_format == SND_PCM_FORMAT_S16_LE) + return 0; + return 1; +} + +void sound_set_device(char *str) +{ + cdevice = strdup(str); +} + +void sound_set_port(char *str) +{ + cdev_id = strdup(str); +} + +void sound_set_sample_rate(int rate) +{ + if (rate > 0) + sample_rate = rate; + else + sample_rate = DEFAULT_SAMPLE_RATE; +} + +void sound_set_skip_bytes(int sb) +{ + if (sb > -1) + skip_bytes = sb; + else + skip_bytes = DEFAULT_SKIP_BYTES; +} +/********************************* end of original sound.c *******************************************/ + +int default_card(const int list) +{ + char buf[BUF_SIZE]; + char serial[80]; + int card_num; + int first=-1; + FILE *fp; + + sprintf(buf,"ls -l /dev/snd/by-id | grep %s | sed -e 's/^.*%s_//' -e 's|-00 -> ../controlC|\t|'",ID_STRING,ID_STRING); + fp=popen(buf,"r"); + if(fp==NULL){ + fprintf(stderr,"Could not open command: %s\n",buf); + exit(9); + } + if(list) fprintf(stderr,"%-20s\t%-10s\t%-20s\n","Available REDOUBLERs:","Card #","Serial Number"); + while(fgets(buf,BUF_SIZE,fp)){ + sscanf(buf,"%s\t%d",serial,&card_num); + if(list) fprintf(stderr,"%-20s\t%-10d\t%-20s\n","",card_num,serial); + if(first==-1) first=card_num; + } + pclose(fp); + return(first); +} + +int main(int argc, char *argv[]) +{ + unsigned char buf[BUF_SIZE]; + char device[80]; + int c, card_num,kilobytes=0,kb_out=0,n_opt=0; + int actual_bytes; + FILE *fo; + + card_num=default_card(FALSE); + + while((c=getopt(argc,argv,"lc:k:n"))!=-1){ + switch(c){ + case 'l': + default_card(TRUE); + exit(0); + case 'c': + card_num=atoi(optarg); + break; + case 'k': + kilobytes=atoi(optarg)+1; // extra to account for the skipped bytes + break; + case 'n': + n_opt=1; + break; + default: + fprintf(stderr,"Usage: %s [-l] [-c card_num] [-k kilobytes]\n",argv[0]); + exit(3); + } + } + + if(card_num<0) { + fprintf(stderr,"%s: Valid REDOUBLER card_num neither found nor specified.\n",argv[0]); + exit(9); + } + sprintf(device,"hw:%d",card_num); + sound_set_device(device); + sound_set_skip_bytes(960); + sound_open(); + atexit(sound_close); + + fo=popen("cat | cat","w"); // quick-and-dirty double buffering, done before nice() + if(n_opt) if(nice(-10)==-1) fprintf(stderr,"%s: Only root can increase priority.\n",argv[0]); + if(fo == NULL){ + fprintf(stderr,"%s: Could not open ouput buffering process.\n",argv[0]); + exit(11); + } + sound_start(); + while((kilobytes <= 0) || (kb_out < kilobytes)){ + actual_bytes=sound_read(buf,BUF_SIZE); + if(actual_bytes==BUF_SIZE){ + fwrite(buf,1,BUF_SIZE,fo); + kb_out++; + } + else fprintf(stderr,"%s: Read glitch, actual_bytes = %d\n",argv[0],actual_bytes); + } + sound_stop(); + pclose(fo); + + exit(0); // shoud trigger atexit() +} diff --git a/host_linux/oddbits.c b/host_linux/oddbits.c new file mode 100644 index 0000000..2c52cba --- /dev/null +++ b/host_linux/oddbits.c @@ -0,0 +1,29 @@ +// oddbits.c - takes bitstream on stdin and sends just the odd (or even) bits to stdout +// Peter Allan 2015, public domain +// After compile 'ln oddbits evenbits' +#include +#include +#include +#include // for non-GNU basename() + +int main(int argc, char **argv) +{ + int odd, i, j, c1, c2; + uint8_t lut[65536]; + + if(!strcmp(basename(argv[0]),"oddbits")) odd=1; + else if(!strcmp(basename(argv[0]),"evenbits")) odd=0; + else{ + fprintf(stderr,"%s: Should be named oddbits or evenbits.\n",basename(argv[0])); + return 1; + } + + // note convention: byte is bits b7,b6,b5,b4,b3,b2,b1,b0 and oddbits are b7,b5,b3,b1 + for(i=0;i<65536;i++) for(lut[i]=0,j=0;j<8;j++) if((i>>(j*2+odd))&1) lut[i] |= 1<=0 && (c2=getchar())>=0) putchar(lut[c1|(c2<<8)]); + if(c1>=0) putchar(lut[c1]); // last byte, zero-padded + + return 0; +} diff --git a/images/Thumbs.db b/images/Thumbs.db deleted file mode 100644 index 8a8b8e6153057750e587abb1ad578bf03c51e51b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46592 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 s?XJ9|XrU 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