Skip to content

Commit ab88495

Browse files
jsarhalgirdwood
authored andcommitted
tools/probe: Add routing FW logs to stdout and dma data from stdin
To get dma data from std in, just leav out the -p flag, and to get logs from stdout, use -l flag. Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
1 parent 7438070 commit ab88495

3 files changed

Lines changed: 64 additions & 38 deletions

File tree

tools/probes/probes_demux.c

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ enum p_state {
4242
};
4343

4444
struct dma_frame_parser {
45+
bool log_to_stdout;
4546
enum p_state state;
4647
struct probe_data_packet *packet;
4748
size_t packet_size;
@@ -85,51 +86,55 @@ bool is_audio_format(uint32_t format)
8586
return (format & PROBE_MASK_FMT_TYPE) != 0 && (format & PROBE_MASK_AUDIO_FMT) == 0;
8687
}
8788

88-
int init_wave(struct wave_files *files, uint32_t buffer_id, uint32_t format)
89+
int init_wave(struct dma_frame_parser *p, uint32_t buffer_id, uint32_t format)
8990
{
9091
bool audio = is_audio_format(format);
9192
char path[FILE_PATH_LIMIT];
9293
int i;
9394

94-
i = get_buffer_file_free(files);
95+
i = get_buffer_file_free(p->files);
9596
if (i == -1) {
9697
fprintf(stderr, "error: too many buffers\n");
9798
exit(0);
9899
}
99100

100101
sprintf(path, "buffer_%d.%s", buffer_id, audio ? "wav" : "bin");
101102

102-
fprintf(stdout, "%s:\t Creating file %s\n", APP_NAME, path);
103+
fprintf(stderr, "%s:\t Creating file %s\n", APP_NAME, path);
103104

104-
files[i].fd = fopen(path, "wb");
105-
if (!files[i].fd) {
106-
fprintf(stderr, "error: unable to create file %s, error %d\n",
107-
path, errno);
108-
exit(0);
105+
if (!audio && p->log_to_stdout) {
106+
p->files[i].fd = stdout;
107+
} else {
108+
p->files[i].fd = fopen(path, "wb");
109+
if (!p->files[i].fd) {
110+
fprintf(stderr, "error: unable to create file %s, error %d\n",
111+
path, errno);
112+
exit(0);
113+
}
109114
}
110115

111-
files[i].buffer_id = buffer_id;
112-
files[i].fmt = format;
116+
p->files[i].buffer_id = buffer_id;
117+
p->files[i].fmt = format;
113118

114119
if (!audio)
115120
return i;
116121

117-
files[i].header.riff.chunk_id = HEADER_RIFF;
118-
files[i].header.riff.format = HEADER_WAVE;
119-
files[i].header.fmt.subchunk_id = HEADER_FMT;
120-
files[i].header.fmt.subchunk_size = 16;
121-
files[i].header.fmt.audio_format = 1;
122-
files[i].header.fmt.num_channels = ((format & PROBE_MASK_NB_CHANNELS) >> PROBE_SHIFT_NB_CHANNELS) + 1;
123-
files[i].header.fmt.sample_rate = sample_rate[(format & PROBE_MASK_SAMPLE_RATE) >> PROBE_SHIFT_SAMPLE_RATE];
124-
files[i].header.fmt.bits_per_sample = (((format & PROBE_MASK_CONTAINER_SIZE) >> PROBE_SHIFT_CONTAINER_SIZE) + 1) * 8;
125-
files[i].header.fmt.byte_rate = files[i].header.fmt.sample_rate *
126-
files[i].header.fmt.num_channels *
127-
files[i].header.fmt.bits_per_sample / 8;
128-
files[i].header.fmt.block_align = files[i].header.fmt.num_channels *
129-
files[i].header.fmt.bits_per_sample / 8;
130-
files[i].header.data.subchunk_id = HEADER_DATA;
131-
132-
fwrite(&files[i].header, sizeof(struct wave), 1, files[i].fd);
122+
p->files[i].header.riff.chunk_id = HEADER_RIFF;
123+
p->files[i].header.riff.format = HEADER_WAVE;
124+
p->files[i].header.fmt.subchunk_id = HEADER_FMT;
125+
p->files[i].header.fmt.subchunk_size = 16;
126+
p->files[i].header.fmt.audio_format = 1;
127+
p->files[i].header.fmt.num_channels = ((format & PROBE_MASK_NB_CHANNELS) >> PROBE_SHIFT_NB_CHANNELS) + 1;
128+
p->files[i].header.fmt.sample_rate = sample_rate[(format & PROBE_MASK_SAMPLE_RATE) >> PROBE_SHIFT_SAMPLE_RATE];
129+
p->files[i].header.fmt.bits_per_sample = (((format & PROBE_MASK_CONTAINER_SIZE) >> PROBE_SHIFT_CONTAINER_SIZE) + 1) * 8;
130+
p->files[i].header.fmt.byte_rate = p->files[i].header.fmt.sample_rate *
131+
p->files[i].header.fmt.num_channels *
132+
p->files[i].header.fmt.bits_per_sample / 8;
133+
p->files[i].header.fmt.block_align = p->files[i].header.fmt.num_channels *
134+
p->files[i].header.fmt.bits_per_sample / 8;
135+
p->files[i].header.data.subchunk_id = HEADER_DATA;
136+
137+
fwrite(&p->files[i].header, sizeof(struct wave), 1, p->files[i].fd);
133138

134139
return i;
135140
}
@@ -236,6 +241,11 @@ void parser_free(struct dma_frame_parser *p)
236241
free(p);
237242
}
238243

244+
void parser_log_to_stdout(struct dma_frame_parser *p)
245+
{
246+
p->log_to_stdout = true;
247+
}
248+
239249
void parser_fetch_free_buffer(struct dma_frame_parser *p, uint8_t **d, size_t *len)
240250
{
241251
*d = &p->data[p->start];
@@ -286,8 +296,7 @@ int parser_parse_data(struct dma_frame_parser *p, size_t d_len)
286296
p->packet->buffer_id);
287297

288298
if (file < 0)
289-
file = init_wave(p->files,
290-
p->packet->buffer_id,
299+
file = init_wave(p, p->packet->buffer_id,
291300
p->packet->format);
292301

293302
if (file < 0) {
@@ -326,4 +335,3 @@ int parser_parse_data(struct dma_frame_parser *p, size_t d_len)
326335
}
327336
return 0;
328337
}
329-

tools/probes/probes_demux.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
// Copyright(c) 2022 Intel Corporation. All rights reserved.
44
//
55
// Author: Jyri Sarha <jyri.sarha@intel.com>
6-
//
6+
//
77

88
#ifndef _PROBES_DEMUX_H_
99
#define _PROBES_DEMUX_H_
1010

1111
#include <stdlib.h>
1212
#include <stdint.h>
13+
#include <stdbool.h>
1314

1415
struct dma_frame_parser;
1516

1617
struct dma_frame_parser *parser_init(void);
1718

19+
void parser_log_to_stdout(struct dma_frame_parser *p);
20+
1821
void parser_free(struct dma_frame_parser *p);
1922

2023
void parser_fetch_free_buffer(struct dma_frame_parser *p, uint8_t **d, size_t *len);

tools/probes/probes_main.c

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ static void usage(void)
2929
{
3030
fprintf(stdout, "Usage %s <option(s)> <buffer_id/file>\n\n", APP_NAME);
3131
fprintf(stdout, "%s:\t -p file\tParse extracted file\n\n", APP_NAME);
32+
fprintf(stdout, "%s:\t -l \t\tLog to stdout\n\n", APP_NAME);
3233
fprintf(stdout, "%s:\t -h \t\tHelp, usage info\n", APP_NAME);
3334
exit(0);
3435
}
3536

36-
void parse_data(char *file_in)
37+
void parse_data(const char *file_in, bool log_to_stdout)
3738
{
3839
struct dma_frame_parser *p = parser_init();
3940
FILE *fd_in;
@@ -46,11 +47,18 @@ void parse_data(char *file_in)
4647
exit(1);
4748
}
4849

49-
fd_in = fopen(file_in, "rb");
50-
if (!fd_in) {
51-
fprintf(stderr, "error: unable to open file %s, error %d\n",
52-
file_in, errno);
53-
exit(0);
50+
if (log_to_stdout)
51+
parser_log_to_stdout(p);
52+
53+
if (file_in) {
54+
fd_in = fopen(file_in, "rb");
55+
if (!fd_in) {
56+
fprintf(stderr, "error: unable to open file %s, error %d\n",
57+
file_in, errno);
58+
exit(0);
59+
}
60+
} else {
61+
fd_in = stdin;
5462
}
5563

5664
do {
@@ -62,18 +70,25 @@ void parse_data(char *file_in)
6270

6371
int main(int argc, char *argv[])
6472
{
73+
const char *fname = NULL;
74+
bool log_to_stdout = false;
6575
int opt;
6676

67-
while ((opt = getopt(argc, argv, "hp:")) != -1) {
77+
while ((opt = getopt(argc, argv, "lhp:")) != -1) {
6878
switch (opt) {
6979
case 'p':
70-
parse_data(optarg);
80+
fname = optarg;
81+
break;
82+
case 'l':
83+
log_to_stdout = true;
7184
break;
7285
case 'h':
7386
default:
7487
usage();
88+
return 0;
7589
}
7690
}
91+
parse_data(fname, log_to_stdout);
7792

7893
return 0;
7994
}

0 commit comments

Comments
 (0)