20 #include "audiocapturemgr_iarm.h"
25 #include <sys/types.h>
26 #include <sys/socket.h>
30 #include "safec_lib.h"
32 using namespace audiocapturemgr;
33 static const char * instance_name = NULL;
36 std::cout<<
"\n--- audio capture test application menu ---\n";
37 std::cout<<
"1. open IPOUT session\n";
38 std::cout<<
"2. print session details\n";
39 std::cout<<
"3. get default props\n";
40 std::cout<<
"4. set audio props\n";
41 std::cout<<
"5. get output props\n";
42 std::cout<<
"6. start\n";
43 std::cout<<
"7. stop\n";
44 std::cout<<
"8. close IPOUT session.\n";
45 std::cout<<
"9. reconnect to known socket.\n";
46 std::cout<<
"10. get audio props.\n";
47 std::cout<<
"11. quit.\n";
52 if(IARM_RESULT_SUCCESS != ret)
54 std::cout<<
"Bus call failed.\n";
59 std::cout<<
"ACM implementation of bus call failed.\n";
65 void * read_thread(
void * data)
67 std::string socket_path = *(
static_cast <std::string *
> (data));
68 if(socket_path.empty())
70 std::cout<<
"read thread returning as socket path is empty.\n";
73 std::cout<<
"Connecting to socket "<<socket_path<<std::endl;
75 struct sockaddr_un addr;
76 addr.sun_family = AF_UNIX;
77 strncpy(addr.sun_path, socket_path.c_str(), (socket_path.size() + 1));
79 int read_fd = socket(AF_UNIX, SOCK_STREAM, 0);
82 std::cout<<
"Couldn't create read socket. Exiting.\n";
86 if(0 != connect(read_fd, (
const struct sockaddr *) &addr,
sizeof(addr)))
88 std::cout<<
"Couldn't connect to the path. Exiting.\n";
89 perror(
"read_thread");
94 std::cout<<
"Connection established.\n";
95 unsigned int recvd_bytes = 0;
97 std::string filename =
"/opt/acm_ipout_dump_";
98 filename += instance_name;
99 std::ofstream file_dump(filename.c_str(), std::ios::binary);
102 int ret = read(read_fd, buffer, 1024);
105 std::cout<<
"Zero bytes read. Exiting.\n";
110 std::cout<<
"Error reading from socket. Exiting.\n";
111 perror(
"read error");
114 if((1024*1024*2) > recvd_bytes)
116 file_dump.write(buffer, ret);
122 std::cout<<
"Number of bytes read: "<<recvd_bytes<<std::endl;
123 file_dump.seekp(0, std::ios_base::end);
124 std::cout<<file_dump.tellp()<<
" bytes written to file.\n";
125 std::cout<<
"Exiting read thread.\n";
129 void connect_and_read_data(std::string &socket_path)
132 int ret = pthread_create(&thread, NULL, read_thread, (
void *) &socket_path);
135 std::cout<<
"Successfully launched read thread.\n";
139 std::cout<<
"Failed to launch read thread.\n";
145 bool keep_running =
true;
146 session_id_t session = -1;
148 std::string socket_path;
153 std::string filename;
158 std::cout<<
"Enter command:\n";
159 if(!(std::cin >> choice))
161 std::cout<<
"Oops!\n";
163 std::cin.ignore(10000,
'\n');
169 param.details.arg_open.source = 0;
170 param.details.arg_open.output_type = REALTIME_SOCKET;
171 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_OPEN, (
void *) ¶m,
sizeof(param));
172 if(!verify_result(ret, param))
176 session = param.session_id;
177 std::cout<<
"Opened new session "<<session<<std::endl;
181 std::cout<<
"Session ID is "<<session<<std::endl;
182 std::cout<<
"Socket path is "<<socket_path<<std::endl;
186 param.session_id = session;
187 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_GET_DEFAULT_AUDIO_PROPS, (
void *) ¶m,
sizeof(param));
188 if(!verify_result(ret, param))
192 INFO(
"Format: 0x%x, delay comp: %dms, fifo size: %d, threshold: %d\n",
193 param.details.arg_audio_properties.format,
194 param.details.arg_audio_properties.delay_compensation_ms,
195 param.details.arg_audio_properties.fifo_size,
196 param.details.arg_audio_properties.threshold);
197 props = param.details.arg_audio_properties;
201 param.session_id = session;
202 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_GET_AUDIO_PROPS, (
void *) ¶m,
sizeof(param));
203 if(!verify_result(ret, param))
207 INFO(
"Format: 0x%x, delay comp: %dms, fifo size: %d, threshold: %d\n",
208 param.details.arg_audio_properties.format,
209 param.details.arg_audio_properties.delay_compensation_ms,
210 param.details.arg_audio_properties.fifo_size,
211 param.details.arg_audio_properties.threshold);
212 props = param.details.arg_audio_properties;
216 param.session_id = session;
217 param.details.arg_audio_properties = props;
218 param.details.arg_audio_properties.delay_compensation_ms = 190;
219 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_SET_AUDIO_PROPERTIES, (
void *) ¶m,
sizeof(param));
220 if(!verify_result(ret, param))
227 param.session_id = session;
228 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_GET_OUTPUT_PROPS, (
void *) ¶m,
sizeof(param));
229 if(!verify_result(ret, param))
233 socket_path = std::string(param.details.arg_output_props.output.file_path);
234 std::cout<<
"Output path is "<<socket_path<<std::endl;
238 if(socket_path.empty())
240 std::cout<<
"No path to socket available.\n";
243 std::cout<<
"Launching read thread.\n";
244 connect_and_read_data(socket_path);
245 param.session_id = session;
246 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_START, (
void *) ¶m,
sizeof(param));
247 if(!verify_result(ret, param))
251 std::cout<<
"Start procedure complete.\n";
255 param.session_id = session;
256 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_STOP, (
void *) ¶m,
sizeof(param));
257 if(!verify_result(ret, param))
261 std::cout<<
"Stop procedure complete.\n";
265 param.session_id = session;
266 ret =
IARM_Bus_Call(IARMBUS_AUDIOCAPTUREMGR_NAME, IARMBUS_AUDIOCAPTUREMGR_CLOSE, (
void *) ¶m,
sizeof(param));
267 if(!verify_result(ret, param))
271 std::cout<<
"Close procedure complete.\n";
277 if(socket_path.empty())
279 std::cout<<
"No path to socket available.\n";
282 std::cout<<
"Launching read thread.\n";
283 connect_and_read_data(socket_path);
287 std::cout<<
"Exiting.\n";
288 keep_running =
false;
292 std::cout<<
"Unknown input!\n";
298 #define ACM_TESTAPP_NAME_PRFIX "acm_testapp_"
299 int main(
int argc,
char *argv[])
303 std::cout<<
"Each exec session needs a name. Invoke it as $<exec name> <session-name>"<<std::endl;
304 std::cout<<
"For instance, $acm_ipout_testapp alpha\n";
308 instance_name = argv[1];
309 char bus_registration_name[100];
310 rc = sprintf_s(bus_registration_name,
sizeof(bus_registration_name),
"%s%s", ACM_TESTAPP_NAME_PRFIX, argv[1]);
319 std::cout<<
"Unable to init IARMBus. Try another session name.\n";
324 std::cout<<
"Unable to connect to IARBus\n";