mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-01 04:46:51 +08:00
*** empty log message ***
This commit is contained in:
@@ -13,12 +13,18 @@ ml_demod_init(value dev) {
|
|||||||
|
|
||||||
value
|
value
|
||||||
ml_demod_get_data(value unit) {
|
ml_demod_get_data(value unit) {
|
||||||
char **data = pprz_demod_read_data();
|
struct data *data = pprz_demod_read_data();
|
||||||
|
int i;
|
||||||
|
|
||||||
CAMLparam0();
|
CAMLparam0();
|
||||||
CAMLlocal1 (result);
|
CAMLlocal3 (result,l, r);
|
||||||
result = alloc(2, 0);
|
result = alloc(2, 0);
|
||||||
Store_field(result, 0, copy_string(data[0]));
|
l = alloc_string(data->len_left);
|
||||||
Store_field(result, 1, copy_string(data[1]));
|
for(i = 0; i < data->len_left; i++) Byte(l, i) = data->data_left[i];
|
||||||
|
r = alloc_string(data->len_right);
|
||||||
|
for(i = 0; i < data->len_right; i++) Byte(r, i) = data->data_right[i];
|
||||||
|
|
||||||
|
Store_field(result, 0, l);
|
||||||
|
Store_field(result, 1, r);
|
||||||
CAMLreturn (result);
|
CAMLreturn (result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include "multimon.h"
|
#include "multimon.h"
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
#include "pprz.h"
|
#include "pprz.h"
|
||||||
|
#include "pprzlib.h"
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
@@ -80,7 +81,7 @@ static float corr_space_q[CORRLEN];
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define INPUT_BUF_LEN 10
|
#define INPUT_BUF_LEN 1000
|
||||||
|
|
||||||
|
|
||||||
static int verbose_level = 0;
|
static int verbose_level = 0;
|
||||||
@@ -102,9 +103,12 @@ static void
|
|||||||
pprz_tmtc_send(unsigned char *data, unsigned int len, char* data_received)
|
pprz_tmtc_send(unsigned char *data, unsigned int len, char* data_received)
|
||||||
{
|
{
|
||||||
unsigned char i;
|
unsigned char i;
|
||||||
|
/***/printf("%d:", len);
|
||||||
for (i=0; i < len && glob_data_received_len < INPUT_BUF_LEN; i++) {
|
for (i=0; i < len && glob_data_received_len < INPUT_BUF_LEN; i++) {
|
||||||
data_received[glob_data_received_len++] = data[i];
|
data_received[glob_data_received_len++] = data[i];
|
||||||
|
/***/printf("%02x", data[i]);
|
||||||
}
|
}
|
||||||
|
/***/printf("\ngdrl=%d\n", glob_data_received_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -187,8 +191,6 @@ afsk48p_demod(struct demod_state *s, float *buffer, int length, char* data)
|
|||||||
float f;
|
float f;
|
||||||
unsigned char curbit;
|
unsigned char curbit;
|
||||||
|
|
||||||
printf("l=%d\n", length);
|
|
||||||
|
|
||||||
s->l1.afsk48p.sample_count += length;
|
s->l1.afsk48p.sample_count += length;
|
||||||
if (s->l1.afsk48p.sample_count > FREQ_SAMP) {
|
if (s->l1.afsk48p.sample_count > FREQ_SAMP) {
|
||||||
s->l1.afsk48p.sample_count -= FREQ_SAMP;
|
s->l1.afsk48p.sample_count -= FREQ_SAMP;
|
||||||
@@ -234,14 +236,19 @@ union {
|
|||||||
int stereo = 1;
|
int stereo = 1;
|
||||||
unsigned int sample_rate = FREQ_SAMP;
|
unsigned int sample_rate = FREQ_SAMP;
|
||||||
|
|
||||||
|
int fdebug;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
input_init(const char *ifname) {
|
input_init(const char *ifname) {
|
||||||
int sndparam;
|
int sndparam;
|
||||||
|
|
||||||
|
fdebug=open("dump.dsp", O_WRONLY|O_CREAT);
|
||||||
|
|
||||||
if ((fd = open(ifname, O_RDONLY)) < 0) {
|
if ((fd = open(ifname, O_RDONLY)) < 0) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit (10);
|
exit (10);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
sndparam = AFMT_S16_LE; /* we want 16 bits/sample signed */
|
sndparam = AFMT_S16_LE; /* we want 16 bits/sample signed */
|
||||||
/* little endian; works only on little endian systems! */
|
/* little endian; works only on little endian systems! */
|
||||||
if (ioctl(fd, SNDCTL_DSP_SETFMT, &sndparam) == -1) {
|
if (ioctl(fd, SNDCTL_DSP_SETFMT, &sndparam) == -1) {
|
||||||
@@ -288,25 +295,25 @@ input_init(const char *ifname) {
|
|||||||
fprintf(stderr, "Warning: Sampling rate is %u, "
|
fprintf(stderr, "Warning: Sampling rate is %u, "
|
||||||
"requested %u\n", sndparam, sample_rate);
|
"requested %u\n", sndparam, sample_rate);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct demod_state dem_st[2];
|
static struct demod_state dem_st[2];
|
||||||
|
|
||||||
char data_left[INPUT_BUF_LEN];
|
char data_left[INPUT_BUF_LEN+1];
|
||||||
char data_right[INPUT_BUF_LEN];
|
char data_right[INPUT_BUF_LEN+1];
|
||||||
char* data_received[2] = {data_left, data_right};
|
struct data data_received = {data_left, 0, data_right, 0};
|
||||||
unsigned int fbuf_cnt = 0;
|
unsigned int fbuf_cnt = 0;
|
||||||
|
|
||||||
char**
|
struct data*
|
||||||
pprz_demod_read_data(void) {
|
pprz_demod_read_data(void) {
|
||||||
unsigned int overlap = CORRLEN;
|
unsigned int overlap = CORRLEN;
|
||||||
int i;
|
int i;
|
||||||
unsigned char *bp;
|
unsigned char *bp;
|
||||||
short *sp;
|
short *sp;
|
||||||
float fbuf[2][16384];
|
float fbuf[2][16384];
|
||||||
int data_received_len[2];
|
|
||||||
|
|
||||||
if (fmt) {
|
if (fmt) {
|
||||||
perror("FIXME: stereo&fmt missing");
|
perror("FIXME: stereo&fmt missing");
|
||||||
@@ -325,14 +332,16 @@ pprz_demod_read_data(void) {
|
|||||||
fprintf(stderr, "warning: noninteger number of samples read\n");
|
fprintf(stderr, "warning: noninteger number of samples read\n");
|
||||||
if (fbuf_cnt > overlap) {
|
if (fbuf_cnt > overlap) {
|
||||||
glob_data_received_len = 0;
|
glob_data_received_len = 0;
|
||||||
afsk48p_demod(&dem_st[LEFT], fbuf[LEFT], fbuf_cnt-overlap, data_received[LEFT]);
|
afsk48p_demod(&dem_st[LEFT], fbuf[LEFT], fbuf_cnt-overlap, data_received.data_left);
|
||||||
data_received_len[LEFT] = glob_data_received_len;
|
data_received.len_left = glob_data_received_len;
|
||||||
memmove(fbuf[LEFT], fbuf[LEFT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[LEFT][0]));
|
memmove(fbuf[LEFT], fbuf[LEFT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[LEFT][0]));
|
||||||
fbuf_cnt = overlap;
|
fbuf_cnt = overlap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
i = read(fd, sp = b.s, sizeof(b.s));
|
i = read(fd, sp = b.s, sizeof(b.s));
|
||||||
|
// *** int j; for(j=0; j < 10; j++) printf("%04x", *(sp+j)); printf("\n");
|
||||||
|
write(fdebug, sp, i);
|
||||||
if (i < 0 && errno != EAGAIN) {
|
if (i < 0 && errno != EAGAIN) {
|
||||||
perror("read");
|
perror("read");
|
||||||
exit(4);
|
exit(4);
|
||||||
@@ -352,13 +361,18 @@ pprz_demod_read_data(void) {
|
|||||||
if (fbuf_cnt > overlap) {
|
if (fbuf_cnt > overlap) {
|
||||||
|
|
||||||
glob_data_received_len = 0;
|
glob_data_received_len = 0;
|
||||||
afsk48p_demod(&dem_st[LEFT], fbuf[LEFT], fbuf_cnt-overlap, data_received[LEFT]);
|
/***/printf("XXX\n");
|
||||||
data_received_len[LEFT] = glob_data_received_len;
|
afsk48p_demod(&dem_st[LEFT], fbuf[LEFT], fbuf_cnt-overlap, data_received.data_left);
|
||||||
|
|
||||||
|
/***/printf("gl=%d\n", glob_data_received_len);
|
||||||
|
data_received.len_left = glob_data_received_len;
|
||||||
memmove(fbuf[LEFT], fbuf[LEFT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[LEFT][0]));
|
memmove(fbuf[LEFT], fbuf[LEFT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[LEFT][0]));
|
||||||
if (stereo) {
|
if (stereo) {
|
||||||
glob_data_received_len = 0;
|
glob_data_received_len = 0;
|
||||||
afsk48p_demod(&dem_st[RIGHT], fbuf[RIGHT], fbuf_cnt-overlap, data_received[RIGHT]);
|
/***/printf("YYY\n");
|
||||||
data_received_len[RIGHT] = glob_data_received_len;
|
afsk48p_demod(&dem_st[RIGHT], fbuf[RIGHT], fbuf_cnt-overlap, data_received.data_right);
|
||||||
|
/***/printf("gl=%d\n", glob_data_received_len);
|
||||||
|
data_received.len_right = glob_data_received_len;
|
||||||
memmove(fbuf[RIGHT], fbuf[RIGHT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[RIGHT][0]));
|
memmove(fbuf[RIGHT], fbuf[RIGHT]+fbuf_cnt-overlap, overlap*sizeof(fbuf[RIGHT][0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,9 +380,7 @@ pprz_demod_read_data(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data_received[LEFT][data_received_len[LEFT]] = '\0';
|
return &data_received;
|
||||||
data_received[RIGHT][data_received_len[RIGHT]] = '\0';
|
|
||||||
return data_received;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
int pprz_demod_init(char *dev);
|
int pprz_demod_init(char *dev);
|
||||||
char** pprz_demod_read_data(void);
|
|
||||||
|
struct data { char* data_left; int len_left; char* data_right; int len_right;};
|
||||||
|
struct data* pprz_demod_read_data(void);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ let use_pprz_message = fun (msg_id, values) ->
|
|||||||
let msg = Tele_Pprz.message_of_id msg_id in
|
let msg = Tele_Pprz.message_of_id msg_id in
|
||||||
if msg.Pprz.name = "IDENT" then
|
if msg.Pprz.name = "IDENT" then
|
||||||
ac_id := Pprz.string_assoc "id" values;
|
ac_id := Pprz.string_assoc "id" values;
|
||||||
|
(***)prerr_endline msg.Pprz.name;
|
||||||
Tele_Pprz.message_send !ac_id msg.Pprz.name values
|
Tele_Pprz.message_send !ac_id msg.Pprz.name values
|
||||||
|
|
||||||
(** Listen on a dsp device *)
|
(** Listen on a dsp device *)
|
||||||
@@ -66,7 +67,10 @@ let listen_pprz_modem = fun pprz_message_cb devdsp ->
|
|||||||
let cb =
|
let cb =
|
||||||
let buffer = ref "" in
|
let buffer = ref "" in
|
||||||
fun _ ->
|
fun _ ->
|
||||||
|
printf("get_date\n%!");
|
||||||
let (data_left, data_right) = Demod.get_data () in
|
let (data_left, data_right) = Demod.get_data () in
|
||||||
|
(***)printf "left=%s\n%!" (Debug.xprint data_left);
|
||||||
|
(***)printf "right=%s\n%!" (Debug.xprint data_right);
|
||||||
(** Accumulate in a buffer *)
|
(** Accumulate in a buffer *)
|
||||||
let b = !buffer ^ data_left in
|
let b = !buffer ^ data_left in
|
||||||
Debug.call 'M' (fun f -> fprintf f "Pprz buffer: %s\n" (Debug.xprint b));
|
Debug.call 'M' (fun f -> fprintf f "Pprz buffer: %s\n" (Debug.xprint b));
|
||||||
|
|||||||
Reference in New Issue
Block a user