mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-02 13:27:32 +08:00
*** empty log message ***
This commit is contained in:
@@ -14,6 +14,7 @@ ml_demod_init(value dev) {
|
||||
value
|
||||
ml_demod_get_data(value unit) {
|
||||
struct data *data = pprz_demod_read_data();
|
||||
if (data) {
|
||||
int i;
|
||||
|
||||
CAMLparam0();
|
||||
@@ -27,4 +28,7 @@ ml_demod_get_data(value unit) {
|
||||
Store_field(result, 0, l);
|
||||
Store_field(result, 1, r);
|
||||
CAMLreturn (result);
|
||||
} else {
|
||||
failwith("End of file");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +225,6 @@ afsk48p_demod(struct demod_state *s, float *buffer, int length, char* data)
|
||||
}
|
||||
}
|
||||
|
||||
int fmt = 0;
|
||||
int fd;
|
||||
union {
|
||||
short s[8192];
|
||||
@@ -250,17 +249,9 @@ input_init(const char *ifname) {
|
||||
exit (10);
|
||||
}
|
||||
if (sndparam != AFMT_S16_LE) {
|
||||
fmt = 1;
|
||||
sndparam = AFMT_U8;
|
||||
if (ioctl(fd, SNDCTL_DSP_SETFMT, &sndparam) == -1) {
|
||||
perror("ioctl: SNDCTL_DSP_SETFMT");
|
||||
perror("ioctl: AFMT_S16_LE");
|
||||
exit (10);
|
||||
}
|
||||
if (sndparam != AFMT_U8) {
|
||||
perror("ioctl: SNDCTL_DSP_SETFMT");
|
||||
exit (10);
|
||||
}
|
||||
}
|
||||
stereo = TRUE;
|
||||
sndparam = 1; /* we want 2 channels */
|
||||
if (ioctl(fd, SNDCTL_DSP_STEREO, &sndparam) == -1) {
|
||||
@@ -300,45 +291,22 @@ char data_left[OUTPUT_BUF_LEN+1];
|
||||
char data_right[OUTPUT_BUF_LEN+1];
|
||||
struct data data_received = {data_left, 0, data_right, 0};
|
||||
unsigned int fbuf_cnt = 0;
|
||||
float fbuf[2][16384];
|
||||
|
||||
struct data*
|
||||
pprz_demod_read_data(void) {
|
||||
unsigned int overlap = CORRLEN;
|
||||
int i;
|
||||
unsigned char *bp;
|
||||
short *sp;
|
||||
float fbuf[2][16384];
|
||||
|
||||
if (fmt) {
|
||||
perror("FIXME: stereo&fmt missing");
|
||||
exit(1);
|
||||
|
||||
|
||||
i = read(fd, bp = b.b, sizeof(b.b));
|
||||
if (i < 0 && errno != EAGAIN) {
|
||||
perror("read");
|
||||
exit(4);
|
||||
}
|
||||
if (i > 0) {
|
||||
for (; i >= sizeof(b.b[0]); i -= sizeof(b.b[0]), sp++)
|
||||
fbuf[LEFT][fbuf_cnt++] = ((int)(*bp)-0x80) * (1.0/128.0);
|
||||
if (i)
|
||||
fprintf(stderr, "warning: noninteger number of samples read\n");
|
||||
if (fbuf_cnt > overlap) {
|
||||
glob_data_received_len = 0;
|
||||
afsk48p_demod(&dem_st[LEFT], fbuf[LEFT], fbuf_cnt-overlap, data_received.data_left);
|
||||
data_received.len_left = glob_data_received_len;
|
||||
memmove(fbuf[LEFT], fbuf[LEFT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[LEFT][0]));
|
||||
fbuf_cnt = overlap;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
i = read(fd, sp = b.s, sizeof(b.s));
|
||||
if (i < 0 && errno != EAGAIN) {
|
||||
perror("read");
|
||||
exit(4);
|
||||
}
|
||||
if (i > 0) {
|
||||
data_received.len_left = 0;
|
||||
data_received.len_right = 0;
|
||||
if (stereo) {
|
||||
for (; i >= sizeof(b.s[0]); i -= (sizeof(b.s[0])*2), sp+=2) {
|
||||
fbuf[LEFT][fbuf_cnt] = (*sp) * (1.0/32768.0);
|
||||
@@ -363,17 +331,16 @@ pprz_demod_read_data(void) {
|
||||
data_received.len_right = glob_data_received_len;
|
||||
memmove(fbuf[RIGHT], fbuf[RIGHT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[RIGHT][0]));
|
||||
}
|
||||
|
||||
fbuf_cnt = overlap;
|
||||
}
|
||||
}
|
||||
}
|
||||
return &data_received;
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int pprz_demod_init(char *dev) {
|
||||
memset(&dem_st, 0, sizeof(dem_st));
|
||||
memset(dem_st, 0, 2*sizeof(struct demod_state));
|
||||
afsk48p_init(&dem_st[LEFT]);
|
||||
afsk48p_init(&dem_st[RIGHT]);
|
||||
return input_init(dev);
|
||||
|
||||
@@ -2,3 +2,4 @@ int pprz_demod_init(char *dev);
|
||||
|
||||
struct data { char* data_left; int len_left; char* data_right; int len_right;};
|
||||
struct data* pprz_demod_read_data(void);
|
||||
/** Returns NULL if no characters are available on the device */
|
||||
|
||||
@@ -42,7 +42,7 @@ let functions = [
|
||||
"RcRoll";
|
||||
"RcEvent1";
|
||||
"RcEvent2";
|
||||
"RadOfDeg"] (*@ binary_operators @ unary_operators*)
|
||||
"RadOfDeg"]
|
||||
|
||||
(* Valid identifiers *)
|
||||
let variables = [
|
||||
|
||||
Reference in New Issue
Block a user