2 #include "hpi_internal.h"
3 #include "hpimsginit.h"
8 unsigned int obj_index
:12;
9 unsigned int obj_type
:4;
10 unsigned int adapter_index
:14;
12 unsigned int read_only
:1;
20 u32
hpi_indexes_to_handle(const char c_object
, const u16 adapter_index
,
21 const u16 object_index
)
23 union handle_word handle
;
25 handle
.h
.adapter_index
= adapter_index
;
27 handle
.h
.read_only
= 0;
28 handle
.h
.obj_type
= c_object
;
29 handle
.h
.obj_index
= object_index
;
33 static u16
hpi_handle_indexes(const u32 h
, u16
*p1
, u16
*p2
)
35 union handle_word uhandle
;
37 return HPI_ERROR_INVALID_HANDLE
;
41 *p1
= (u16
)uhandle
.h
.adapter_index
;
43 *p2
= (u16
)uhandle
.h
.obj_index
;
48 void hpi_handle_to_indexes(const u32 handle
, u16
*pw_adapter_index
,
51 hpi_handle_indexes(handle
, pw_adapter_index
, pw_object_index
);
54 char hpi_handle_object(const u32 handle
)
56 union handle_word uhandle
;
58 return (char)uhandle
.h
.obj_type
;
61 void hpi_format_to_msg(struct hpi_msg_format
*pMF
,
62 const struct hpi_format
*pF
)
64 pMF
->sample_rate
= pF
->sample_rate
;
65 pMF
->bit_rate
= pF
->bit_rate
;
66 pMF
->attributes
= pF
->attributes
;
67 pMF
->channels
= pF
->channels
;
68 pMF
->format
= pF
->format
;
71 static void hpi_msg_to_format(struct hpi_format
*pF
,
72 struct hpi_msg_format
*pMF
)
74 pF
->sample_rate
= pMF
->sample_rate
;
75 pF
->bit_rate
= pMF
->bit_rate
;
76 pF
->attributes
= pMF
->attributes
;
77 pF
->channels
= pMF
->channels
;
78 pF
->format
= pMF
->format
;
83 void hpi_stream_response_to_legacy(struct hpi_stream_res
*pSR
)
85 pSR
->u
.legacy_stream_info
.auxiliary_data_available
=
86 pSR
->u
.stream_info
.auxiliary_data_available
;
87 pSR
->u
.legacy_stream_info
.state
= pSR
->u
.stream_info
.state
;
90 static inline void hpi_send_recvV1(struct hpi_message_header
*m
,
91 struct hpi_response_header
*r
)
93 hpi_send_recv((struct hpi_message
*)m
, (struct hpi_response
*)r
);
96 u16
hpi_subsys_get_version_ex(u32
*pversion_ex
)
98 struct hpi_message hm
;
99 struct hpi_response hr
;
101 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
102 HPI_SUBSYS_GET_VERSION
);
103 hpi_send_recv(&hm
, &hr
);
104 *pversion_ex
= hr
.u
.s
.data
;
108 u16
hpi_subsys_get_num_adapters(int *pn_num_adapters
)
110 struct hpi_message hm
;
111 struct hpi_response hr
;
112 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
113 HPI_SUBSYS_GET_NUM_ADAPTERS
);
114 hpi_send_recv(&hm
, &hr
);
115 *pn_num_adapters
= (int)hr
.u
.s
.num_adapters
;
119 u16
hpi_subsys_get_adapter(int iterator
, u32
*padapter_index
,
120 u16
*pw_adapter_type
)
122 struct hpi_message hm
;
123 struct hpi_response hr
;
124 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
125 HPI_SUBSYS_GET_ADAPTER
);
126 hm
.obj_index
= (u16
)iterator
;
127 hpi_send_recv(&hm
, &hr
);
128 *padapter_index
= (int)hr
.u
.s
.adapter_index
;
129 *pw_adapter_type
= hr
.u
.s
.adapter_type
;
134 u16
hpi_adapter_open(u16 adapter_index
)
136 struct hpi_message hm
;
137 struct hpi_response hr
;
138 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
140 hm
.adapter_index
= adapter_index
;
142 hpi_send_recv(&hm
, &hr
);
148 u16
hpi_adapter_close(u16 adapter_index
)
150 struct hpi_message hm
;
151 struct hpi_response hr
;
152 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
154 hm
.adapter_index
= adapter_index
;
156 hpi_send_recv(&hm
, &hr
);
161 u16
hpi_adapter_set_mode(u16 adapter_index
, u32 adapter_mode
)
163 return hpi_adapter_set_mode_ex(adapter_index
, adapter_mode
,
164 HPI_ADAPTER_MODE_SET
);
167 u16
hpi_adapter_set_mode_ex(u16 adapter_index
, u32 adapter_mode
,
170 struct hpi_message hm
;
171 struct hpi_response hr
;
173 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
174 HPI_ADAPTER_SET_MODE
);
175 hm
.adapter_index
= adapter_index
;
176 hm
.u
.ax
.mode
.adapter_mode
= adapter_mode
;
177 hm
.u
.ax
.mode
.query_or_set
= query_or_set
;
178 hpi_send_recv(&hm
, &hr
);
182 u16
hpi_adapter_get_mode(u16 adapter_index
, u32
*padapter_mode
)
184 struct hpi_message hm
;
185 struct hpi_response hr
;
186 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
187 HPI_ADAPTER_GET_MODE
);
188 hm
.adapter_index
= adapter_index
;
189 hpi_send_recv(&hm
, &hr
);
191 *padapter_mode
= hr
.u
.ax
.mode
.adapter_mode
;
195 u16
hpi_adapter_get_info(u16 adapter_index
, u16
*pw_num_outstreams
,
196 u16
*pw_num_instreams
, u16
*pw_version
, u32
*pserial_number
,
197 u16
*pw_adapter_type
)
199 struct hpi_message hm
;
200 struct hpi_response hr
;
201 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
202 HPI_ADAPTER_GET_INFO
);
203 hm
.adapter_index
= adapter_index
;
205 hpi_send_recv(&hm
, &hr
);
207 *pw_adapter_type
= hr
.u
.ax
.info
.adapter_type
;
208 *pw_num_outstreams
= hr
.u
.ax
.info
.num_outstreams
;
209 *pw_num_instreams
= hr
.u
.ax
.info
.num_instreams
;
210 *pw_version
= hr
.u
.ax
.info
.version
;
211 *pserial_number
= hr
.u
.ax
.info
.serial_number
;
215 u16
hpi_adapter_get_module_by_index(u16 adapter_index
, u16 module_index
,
216 u16
*pw_num_outputs
, u16
*pw_num_inputs
, u16
*pw_version
,
217 u32
*pserial_number
, u16
*pw_module_type
, u32
*ph_module
)
219 struct hpi_message hm
;
220 struct hpi_response hr
;
222 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
223 HPI_ADAPTER_MODULE_INFO
);
224 hm
.adapter_index
= adapter_index
;
225 hm
.u
.ax
.module_info
.index
= module_index
;
227 hpi_send_recv(&hm
, &hr
);
229 *pw_module_type
= hr
.u
.ax
.info
.adapter_type
;
230 *pw_num_outputs
= hr
.u
.ax
.info
.num_outstreams
;
231 *pw_num_inputs
= hr
.u
.ax
.info
.num_instreams
;
232 *pw_version
= hr
.u
.ax
.info
.version
;
233 *pserial_number
= hr
.u
.ax
.info
.serial_number
;
239 u16
hpi_adapter_set_property(u16 adapter_index
, u16 property
, u16 parameter1
,
242 struct hpi_message hm
;
243 struct hpi_response hr
;
244 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
245 HPI_ADAPTER_SET_PROPERTY
);
246 hm
.adapter_index
= adapter_index
;
247 hm
.u
.ax
.property_set
.property
= property
;
248 hm
.u
.ax
.property_set
.parameter1
= parameter1
;
249 hm
.u
.ax
.property_set
.parameter2
= parameter2
;
251 hpi_send_recv(&hm
, &hr
);
256 u16
hpi_adapter_get_property(u16 adapter_index
, u16 property
,
257 u16
*pw_parameter1
, u16
*pw_parameter2
)
259 struct hpi_message hm
;
260 struct hpi_response hr
;
261 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
262 HPI_ADAPTER_GET_PROPERTY
);
263 hm
.adapter_index
= adapter_index
;
264 hm
.u
.ax
.property_set
.property
= property
;
266 hpi_send_recv(&hm
, &hr
);
269 *pw_parameter1
= hr
.u
.ax
.property_get
.parameter1
;
271 *pw_parameter2
= hr
.u
.ax
.property_get
.parameter2
;
277 u16
hpi_adapter_enumerate_property(u16 adapter_index
, u16 index
,
278 u16 what_to_enumerate
, u16 property_index
, u32
*psetting
)
283 u16
hpi_format_create(struct hpi_format
*p_format
, u16 channels
, u16 format
,
284 u32 sample_rate
, u32 bit_rate
, u32 attributes
)
287 struct hpi_msg_format fmt
;
298 err
= HPI_ERROR_INVALID_CHANNELS
;
301 fmt
.channels
= channels
;
304 case HPI_FORMAT_PCM16_SIGNED
:
305 case HPI_FORMAT_PCM24_SIGNED
:
306 case HPI_FORMAT_PCM32_SIGNED
:
307 case HPI_FORMAT_PCM32_FLOAT
:
308 case HPI_FORMAT_PCM16_BIGENDIAN
:
309 case HPI_FORMAT_PCM8_UNSIGNED
:
310 case HPI_FORMAT_MPEG_L1
:
311 case HPI_FORMAT_MPEG_L2
:
312 case HPI_FORMAT_MPEG_L3
:
313 case HPI_FORMAT_DOLBY_AC2
:
314 case HPI_FORMAT_AA_TAGIT1_HITS
:
315 case HPI_FORMAT_AA_TAGIT1_INSERTS
:
316 case HPI_FORMAT_RAW_BITSTREAM
:
317 case HPI_FORMAT_AA_TAGIT1_HITS_EX1
:
318 case HPI_FORMAT_OEM1
:
319 case HPI_FORMAT_OEM2
:
322 err
= HPI_ERROR_INVALID_FORMAT
;
327 if (sample_rate
< 8000L) {
328 err
= HPI_ERROR_INCOMPATIBLE_SAMPLERATE
;
331 if (sample_rate
> 200000L) {
332 err
= HPI_ERROR_INCOMPATIBLE_SAMPLERATE
;
333 sample_rate
= 200000L;
335 fmt
.sample_rate
= sample_rate
;
338 case HPI_FORMAT_MPEG_L1
:
339 case HPI_FORMAT_MPEG_L2
:
340 case HPI_FORMAT_MPEG_L3
:
341 fmt
.bit_rate
= bit_rate
;
343 case HPI_FORMAT_PCM16_SIGNED
:
344 case HPI_FORMAT_PCM16_BIGENDIAN
:
345 fmt
.bit_rate
= channels
* sample_rate
* 2;
347 case HPI_FORMAT_PCM32_SIGNED
:
348 case HPI_FORMAT_PCM32_FLOAT
:
349 fmt
.bit_rate
= channels
* sample_rate
* 4;
351 case HPI_FORMAT_PCM8_UNSIGNED
:
352 fmt
.bit_rate
= channels
* sample_rate
;
359 case HPI_FORMAT_MPEG_L2
:
361 && (attributes
!= HPI_MPEG_MODE_DEFAULT
)) {
362 attributes
= HPI_MPEG_MODE_DEFAULT
;
363 err
= HPI_ERROR_INVALID_FORMAT
;
364 } else if (attributes
> HPI_MPEG_MODE_DUALCHANNEL
) {
365 attributes
= HPI_MPEG_MODE_DEFAULT
;
366 err
= HPI_ERROR_INVALID_FORMAT
;
368 fmt
.attributes
= attributes
;
371 fmt
.attributes
= attributes
;
374 hpi_msg_to_format(p_format
, &fmt
);
378 u16
hpi_stream_estimate_buffer_size(struct hpi_format
*p_format
,
379 u32 host_polling_rate_in_milli_seconds
, u32
*recommended_buffer_size
)
382 u32 bytes_per_second
;
385 struct hpi_format
*pF
= p_format
;
387 channels
= pF
->channels
;
389 switch (pF
->format
) {
390 case HPI_FORMAT_PCM16_BIGENDIAN
:
391 case HPI_FORMAT_PCM16_SIGNED
:
392 bytes_per_second
= pF
->sample_rate
* 2L * channels
;
394 case HPI_FORMAT_PCM24_SIGNED
:
395 bytes_per_second
= pF
->sample_rate
* 3L * channels
;
397 case HPI_FORMAT_PCM32_SIGNED
:
398 case HPI_FORMAT_PCM32_FLOAT
:
399 bytes_per_second
= pF
->sample_rate
* 4L * channels
;
401 case HPI_FORMAT_PCM8_UNSIGNED
:
402 bytes_per_second
= pF
->sample_rate
* 1L * channels
;
404 case HPI_FORMAT_MPEG_L1
:
405 case HPI_FORMAT_MPEG_L2
:
406 case HPI_FORMAT_MPEG_L3
:
407 bytes_per_second
= pF
->bit_rate
/ 8L;
409 case HPI_FORMAT_DOLBY_AC2
:
411 bytes_per_second
= 256000L / 8L;
414 return HPI_ERROR_INVALID_FORMAT
;
416 size
= (bytes_per_second
* host_polling_rate_in_milli_seconds
* 2) /
419 *recommended_buffer_size
=
420 roundup_pow_of_two(((size
+ 4095L) & ~4095L));
424 u16
hpi_outstream_open(u16 adapter_index
, u16 outstream_index
,
427 struct hpi_message hm
;
428 struct hpi_response hr
;
429 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
431 hm
.adapter_index
= adapter_index
;
432 hm
.obj_index
= outstream_index
;
434 hpi_send_recv(&hm
, &hr
);
438 hpi_indexes_to_handle(HPI_OBJ_OSTREAM
, adapter_index
,
445 u16
hpi_outstream_close(u32 h_outstream
)
447 struct hpi_message hm
;
448 struct hpi_response hr
;
450 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
451 HPI_OSTREAM_HOSTBUFFER_FREE
);
452 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
453 return HPI_ERROR_INVALID_HANDLE
;
455 hpi_send_recv(&hm
, &hr
);
457 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
458 HPI_OSTREAM_GROUP_RESET
);
459 hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
);
460 hpi_send_recv(&hm
, &hr
);
462 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
464 hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
);
465 hpi_send_recv(&hm
, &hr
);
470 u16
hpi_outstream_get_info_ex(u32 h_outstream
, u16
*pw_state
,
471 u32
*pbuffer_size
, u32
*pdata_to_play
, u32
*psamples_played
,
472 u32
*pauxiliary_data_to_play
)
474 struct hpi_message hm
;
475 struct hpi_response hr
;
476 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
477 HPI_OSTREAM_GET_INFO
);
478 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
479 return HPI_ERROR_INVALID_HANDLE
;
481 hpi_send_recv(&hm
, &hr
);
484 *pw_state
= hr
.u
.d
.u
.stream_info
.state
;
486 *pbuffer_size
= hr
.u
.d
.u
.stream_info
.buffer_size
;
488 *pdata_to_play
= hr
.u
.d
.u
.stream_info
.data_available
;
490 *psamples_played
= hr
.u
.d
.u
.stream_info
.samples_transferred
;
491 if (pauxiliary_data_to_play
)
492 *pauxiliary_data_to_play
=
493 hr
.u
.d
.u
.stream_info
.auxiliary_data_available
;
497 u16
hpi_outstream_write_buf(u32 h_outstream
, const u8
*pb_data
,
498 u32 bytes_to_write
, const struct hpi_format
*p_format
)
500 struct hpi_message hm
;
501 struct hpi_response hr
;
502 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
504 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
505 return HPI_ERROR_INVALID_HANDLE
;
506 hm
.u
.d
.u
.data
.pb_data
= (u8
*)pb_data
;
507 hm
.u
.d
.u
.data
.data_size
= bytes_to_write
;
509 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
511 hpi_send_recv(&hm
, &hr
);
516 u16
hpi_outstream_start(u32 h_outstream
)
518 struct hpi_message hm
;
519 struct hpi_response hr
;
520 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
522 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
523 return HPI_ERROR_INVALID_HANDLE
;
525 hpi_send_recv(&hm
, &hr
);
530 u16
hpi_outstream_wait_start(u32 h_outstream
)
532 struct hpi_message hm
;
533 struct hpi_response hr
;
534 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
535 HPI_OSTREAM_WAIT_START
);
536 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
537 return HPI_ERROR_INVALID_HANDLE
;
539 hpi_send_recv(&hm
, &hr
);
544 u16
hpi_outstream_stop(u32 h_outstream
)
546 struct hpi_message hm
;
547 struct hpi_response hr
;
548 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
550 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
551 return HPI_ERROR_INVALID_HANDLE
;
553 hpi_send_recv(&hm
, &hr
);
558 u16
hpi_outstream_sinegen(u32 h_outstream
)
560 struct hpi_message hm
;
561 struct hpi_response hr
;
562 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
563 HPI_OSTREAM_SINEGEN
);
564 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
565 return HPI_ERROR_INVALID_HANDLE
;
567 hpi_send_recv(&hm
, &hr
);
572 u16
hpi_outstream_reset(u32 h_outstream
)
574 struct hpi_message hm
;
575 struct hpi_response hr
;
576 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
578 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
579 return HPI_ERROR_INVALID_HANDLE
;
581 hpi_send_recv(&hm
, &hr
);
586 u16
hpi_outstream_query_format(u32 h_outstream
, struct hpi_format
*p_format
)
588 struct hpi_message hm
;
589 struct hpi_response hr
;
591 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
592 HPI_OSTREAM_QUERY_FORMAT
);
593 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
594 return HPI_ERROR_INVALID_HANDLE
;
596 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
598 hpi_send_recv(&hm
, &hr
);
603 u16
hpi_outstream_set_format(u32 h_outstream
, struct hpi_format
*p_format
)
605 struct hpi_message hm
;
606 struct hpi_response hr
;
608 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
609 HPI_OSTREAM_SET_FORMAT
);
610 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
611 return HPI_ERROR_INVALID_HANDLE
;
613 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
615 hpi_send_recv(&hm
, &hr
);
620 u16
hpi_outstream_set_velocity(u32 h_outstream
, short velocity
)
622 struct hpi_message hm
;
623 struct hpi_response hr
;
625 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
626 HPI_OSTREAM_SET_VELOCITY
);
627 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
628 return HPI_ERROR_INVALID_HANDLE
;
629 hm
.u
.d
.u
.velocity
= velocity
;
631 hpi_send_recv(&hm
, &hr
);
636 u16
hpi_outstream_set_punch_in_out(u32 h_outstream
, u32 punch_in_sample
,
637 u32 punch_out_sample
)
639 struct hpi_message hm
;
640 struct hpi_response hr
;
642 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
643 HPI_OSTREAM_SET_PUNCHINOUT
);
644 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
645 return HPI_ERROR_INVALID_HANDLE
;
647 hm
.u
.d
.u
.pio
.punch_in_sample
= punch_in_sample
;
648 hm
.u
.d
.u
.pio
.punch_out_sample
= punch_out_sample
;
650 hpi_send_recv(&hm
, &hr
);
655 u16
hpi_outstream_ancillary_reset(u32 h_outstream
, u16 mode
)
657 struct hpi_message hm
;
658 struct hpi_response hr
;
660 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
661 HPI_OSTREAM_ANC_RESET
);
662 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
663 return HPI_ERROR_INVALID_HANDLE
;
664 hm
.u
.d
.u
.data
.format
.channels
= mode
;
665 hpi_send_recv(&hm
, &hr
);
669 u16
hpi_outstream_ancillary_get_info(u32 h_outstream
, u32
*pframes_available
)
671 struct hpi_message hm
;
672 struct hpi_response hr
;
674 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
675 HPI_OSTREAM_ANC_GET_INFO
);
676 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
677 return HPI_ERROR_INVALID_HANDLE
;
678 hpi_send_recv(&hm
, &hr
);
680 if (pframes_available
)
682 hr
.u
.d
.u
.stream_info
.data_available
/
683 sizeof(struct hpi_anc_frame
);
688 u16
hpi_outstream_ancillary_read(u32 h_outstream
,
689 struct hpi_anc_frame
*p_anc_frame_buffer
,
690 u32 anc_frame_buffer_size_in_bytes
,
691 u32 number_of_ancillary_frames_to_read
)
693 struct hpi_message hm
;
694 struct hpi_response hr
;
696 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
697 HPI_OSTREAM_ANC_READ
);
698 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
699 return HPI_ERROR_INVALID_HANDLE
;
700 hm
.u
.d
.u
.data
.pb_data
= (u8
*)p_anc_frame_buffer
;
701 hm
.u
.d
.u
.data
.data_size
=
702 number_of_ancillary_frames_to_read
*
703 sizeof(struct hpi_anc_frame
);
704 if (hm
.u
.d
.u
.data
.data_size
<= anc_frame_buffer_size_in_bytes
)
705 hpi_send_recv(&hm
, &hr
);
707 hr
.error
= HPI_ERROR_INVALID_DATASIZE
;
711 u16
hpi_outstream_set_time_scale(u32 h_outstream
, u32 time_scale
)
713 struct hpi_message hm
;
714 struct hpi_response hr
;
716 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
717 HPI_OSTREAM_SET_TIMESCALE
);
718 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
719 return HPI_ERROR_INVALID_HANDLE
;
721 hm
.u
.d
.u
.time_scale
= time_scale
;
723 hpi_send_recv(&hm
, &hr
);
728 u16
hpi_outstream_host_buffer_allocate(u32 h_outstream
, u32 size_in_bytes
)
730 struct hpi_message hm
;
731 struct hpi_response hr
;
733 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
734 HPI_OSTREAM_HOSTBUFFER_ALLOC
);
735 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
736 return HPI_ERROR_INVALID_HANDLE
;
737 hm
.u
.d
.u
.data
.data_size
= size_in_bytes
;
738 hpi_send_recv(&hm
, &hr
);
742 u16
hpi_outstream_host_buffer_get_info(u32 h_outstream
, u8
**pp_buffer
,
743 struct hpi_hostbuffer_status
**pp_status
)
745 struct hpi_message hm
;
746 struct hpi_response hr
;
748 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
749 HPI_OSTREAM_HOSTBUFFER_GET_INFO
);
750 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
751 return HPI_ERROR_INVALID_HANDLE
;
752 hpi_send_recv(&hm
, &hr
);
756 *pp_buffer
= hr
.u
.d
.u
.hostbuffer_info
.p_buffer
;
758 *pp_status
= hr
.u
.d
.u
.hostbuffer_info
.p_status
;
763 u16
hpi_outstream_host_buffer_free(u32 h_outstream
)
765 struct hpi_message hm
;
766 struct hpi_response hr
;
768 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
769 HPI_OSTREAM_HOSTBUFFER_FREE
);
770 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
771 return HPI_ERROR_INVALID_HANDLE
;
772 hpi_send_recv(&hm
, &hr
);
776 u16
hpi_outstream_group_add(u32 h_outstream
, u32 h_stream
)
778 struct hpi_message hm
;
779 struct hpi_response hr
;
783 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
784 HPI_OSTREAM_GROUP_ADD
);
786 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
787 return HPI_ERROR_INVALID_HANDLE
;
789 if (hpi_handle_indexes(h_stream
, &adapter
,
790 &hm
.u
.d
.u
.stream
.stream_index
))
791 return HPI_ERROR_INVALID_HANDLE
;
793 c_obj_type
= hpi_handle_object(h_stream
);
794 switch (c_obj_type
) {
795 case HPI_OBJ_OSTREAM
:
796 case HPI_OBJ_ISTREAM
:
797 hm
.u
.d
.u
.stream
.object_type
= c_obj_type
;
800 return HPI_ERROR_INVALID_OBJ
;
802 if (adapter
!= hm
.adapter_index
)
803 return HPI_ERROR_NO_INTERADAPTER_GROUPS
;
805 hpi_send_recv(&hm
, &hr
);
809 u16
hpi_outstream_group_get_map(u32 h_outstream
, u32
*poutstream_map
,
812 struct hpi_message hm
;
813 struct hpi_response hr
;
815 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
816 HPI_OSTREAM_GROUP_GETMAP
);
817 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
818 return HPI_ERROR_INVALID_HANDLE
;
819 hpi_send_recv(&hm
, &hr
);
822 *poutstream_map
= hr
.u
.d
.u
.group_info
.outstream_group_map
;
824 *pinstream_map
= hr
.u
.d
.u
.group_info
.instream_group_map
;
829 u16
hpi_outstream_group_reset(u32 h_outstream
)
831 struct hpi_message hm
;
832 struct hpi_response hr
;
834 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
835 HPI_OSTREAM_GROUP_RESET
);
836 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
837 return HPI_ERROR_INVALID_HANDLE
;
838 hpi_send_recv(&hm
, &hr
);
842 u16
hpi_instream_open(u16 adapter_index
, u16 instream_index
, u32
*ph_instream
)
844 struct hpi_message hm
;
845 struct hpi_response hr
;
847 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
849 hm
.adapter_index
= adapter_index
;
850 hm
.obj_index
= instream_index
;
852 hpi_send_recv(&hm
, &hr
);
856 hpi_indexes_to_handle(HPI_OBJ_ISTREAM
, adapter_index
,
864 u16
hpi_instream_close(u32 h_instream
)
866 struct hpi_message hm
;
867 struct hpi_response hr
;
869 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
870 HPI_ISTREAM_HOSTBUFFER_FREE
);
871 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
872 return HPI_ERROR_INVALID_HANDLE
;
873 hpi_send_recv(&hm
, &hr
);
875 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
876 HPI_ISTREAM_GROUP_RESET
);
877 hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
);
878 hpi_send_recv(&hm
, &hr
);
880 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
882 hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
);
883 hpi_send_recv(&hm
, &hr
);
888 u16
hpi_instream_query_format(u32 h_instream
,
889 const struct hpi_format
*p_format
)
891 struct hpi_message hm
;
892 struct hpi_response hr
;
894 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
895 HPI_ISTREAM_QUERY_FORMAT
);
896 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
897 return HPI_ERROR_INVALID_HANDLE
;
898 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
900 hpi_send_recv(&hm
, &hr
);
905 u16
hpi_instream_set_format(u32 h_instream
, const struct hpi_format
*p_format
)
907 struct hpi_message hm
;
908 struct hpi_response hr
;
910 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
911 HPI_ISTREAM_SET_FORMAT
);
912 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
913 return HPI_ERROR_INVALID_HANDLE
;
914 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
916 hpi_send_recv(&hm
, &hr
);
921 u16
hpi_instream_read_buf(u32 h_instream
, u8
*pb_data
, u32 bytes_to_read
)
923 struct hpi_message hm
;
924 struct hpi_response hr
;
926 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
928 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
929 return HPI_ERROR_INVALID_HANDLE
;
930 hm
.u
.d
.u
.data
.data_size
= bytes_to_read
;
931 hm
.u
.d
.u
.data
.pb_data
= pb_data
;
933 hpi_send_recv(&hm
, &hr
);
938 u16
hpi_instream_start(u32 h_instream
)
940 struct hpi_message hm
;
941 struct hpi_response hr
;
943 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
945 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
946 return HPI_ERROR_INVALID_HANDLE
;
948 hpi_send_recv(&hm
, &hr
);
953 u16
hpi_instream_wait_start(u32 h_instream
)
955 struct hpi_message hm
;
956 struct hpi_response hr
;
958 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
959 HPI_ISTREAM_WAIT_START
);
960 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
961 return HPI_ERROR_INVALID_HANDLE
;
963 hpi_send_recv(&hm
, &hr
);
968 u16
hpi_instream_stop(u32 h_instream
)
970 struct hpi_message hm
;
971 struct hpi_response hr
;
973 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
975 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
976 return HPI_ERROR_INVALID_HANDLE
;
978 hpi_send_recv(&hm
, &hr
);
983 u16
hpi_instream_reset(u32 h_instream
)
985 struct hpi_message hm
;
986 struct hpi_response hr
;
988 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
990 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
991 return HPI_ERROR_INVALID_HANDLE
;
993 hpi_send_recv(&hm
, &hr
);
998 u16
hpi_instream_get_info_ex(u32 h_instream
, u16
*pw_state
, u32
*pbuffer_size
,
999 u32
*pdata_recorded
, u32
*psamples_recorded
,
1000 u32
*pauxiliary_data_recorded
)
1002 struct hpi_message hm
;
1003 struct hpi_response hr
;
1004 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1005 HPI_ISTREAM_GET_INFO
);
1006 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1007 return HPI_ERROR_INVALID_HANDLE
;
1009 hpi_send_recv(&hm
, &hr
);
1012 *pw_state
= hr
.u
.d
.u
.stream_info
.state
;
1014 *pbuffer_size
= hr
.u
.d
.u
.stream_info
.buffer_size
;
1016 *pdata_recorded
= hr
.u
.d
.u
.stream_info
.data_available
;
1017 if (psamples_recorded
)
1018 *psamples_recorded
= hr
.u
.d
.u
.stream_info
.samples_transferred
;
1019 if (pauxiliary_data_recorded
)
1020 *pauxiliary_data_recorded
=
1021 hr
.u
.d
.u
.stream_info
.auxiliary_data_available
;
1025 u16
hpi_instream_ancillary_reset(u32 h_instream
, u16 bytes_per_frame
,
1026 u16 mode
, u16 alignment
, u16 idle_bit
)
1028 struct hpi_message hm
;
1029 struct hpi_response hr
;
1030 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1031 HPI_ISTREAM_ANC_RESET
);
1032 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1033 return HPI_ERROR_INVALID_HANDLE
;
1034 hm
.u
.d
.u
.data
.format
.attributes
= bytes_per_frame
;
1035 hm
.u
.d
.u
.data
.format
.format
= (mode
<< 8) | (alignment
& 0xff);
1036 hm
.u
.d
.u
.data
.format
.channels
= idle_bit
;
1037 hpi_send_recv(&hm
, &hr
);
1041 u16
hpi_instream_ancillary_get_info(u32 h_instream
, u32
*pframe_space
)
1043 struct hpi_message hm
;
1044 struct hpi_response hr
;
1045 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1046 HPI_ISTREAM_ANC_GET_INFO
);
1047 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1048 return HPI_ERROR_INVALID_HANDLE
;
1049 hpi_send_recv(&hm
, &hr
);
1052 (hr
.u
.d
.u
.stream_info
.buffer_size
-
1053 hr
.u
.d
.u
.stream_info
.data_available
) /
1054 sizeof(struct hpi_anc_frame
);
1058 u16
hpi_instream_ancillary_write(u32 h_instream
,
1059 const struct hpi_anc_frame
*p_anc_frame_buffer
,
1060 u32 anc_frame_buffer_size_in_bytes
,
1061 u32 number_of_ancillary_frames_to_write
)
1063 struct hpi_message hm
;
1064 struct hpi_response hr
;
1066 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1067 HPI_ISTREAM_ANC_WRITE
);
1068 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1069 return HPI_ERROR_INVALID_HANDLE
;
1070 hm
.u
.d
.u
.data
.pb_data
= (u8
*)p_anc_frame_buffer
;
1071 hm
.u
.d
.u
.data
.data_size
=
1072 number_of_ancillary_frames_to_write
*
1073 sizeof(struct hpi_anc_frame
);
1074 if (hm
.u
.d
.u
.data
.data_size
<= anc_frame_buffer_size_in_bytes
)
1075 hpi_send_recv(&hm
, &hr
);
1077 hr
.error
= HPI_ERROR_INVALID_DATASIZE
;
1081 u16
hpi_instream_host_buffer_allocate(u32 h_instream
, u32 size_in_bytes
)
1084 struct hpi_message hm
;
1085 struct hpi_response hr
;
1087 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1088 HPI_ISTREAM_HOSTBUFFER_ALLOC
);
1089 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1090 return HPI_ERROR_INVALID_HANDLE
;
1091 hm
.u
.d
.u
.data
.data_size
= size_in_bytes
;
1092 hpi_send_recv(&hm
, &hr
);
1096 u16
hpi_instream_host_buffer_get_info(u32 h_instream
, u8
**pp_buffer
,
1097 struct hpi_hostbuffer_status
**pp_status
)
1099 struct hpi_message hm
;
1100 struct hpi_response hr
;
1102 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1103 HPI_ISTREAM_HOSTBUFFER_GET_INFO
);
1104 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1105 return HPI_ERROR_INVALID_HANDLE
;
1106 hpi_send_recv(&hm
, &hr
);
1108 if (hr
.error
== 0) {
1110 *pp_buffer
= hr
.u
.d
.u
.hostbuffer_info
.p_buffer
;
1112 *pp_status
= hr
.u
.d
.u
.hostbuffer_info
.p_status
;
1117 u16
hpi_instream_host_buffer_free(u32 h_instream
)
1120 struct hpi_message hm
;
1121 struct hpi_response hr
;
1123 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1124 HPI_ISTREAM_HOSTBUFFER_FREE
);
1125 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1126 return HPI_ERROR_INVALID_HANDLE
;
1127 hpi_send_recv(&hm
, &hr
);
1131 u16
hpi_instream_group_add(u32 h_instream
, u32 h_stream
)
1133 struct hpi_message hm
;
1134 struct hpi_response hr
;
1138 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1139 HPI_ISTREAM_GROUP_ADD
);
1142 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1143 return HPI_ERROR_INVALID_HANDLE
;
1145 if (hpi_handle_indexes(h_stream
, &adapter
,
1146 &hm
.u
.d
.u
.stream
.stream_index
))
1147 return HPI_ERROR_INVALID_HANDLE
;
1149 c_obj_type
= hpi_handle_object(h_stream
);
1151 switch (c_obj_type
) {
1152 case HPI_OBJ_OSTREAM
:
1153 case HPI_OBJ_ISTREAM
:
1154 hm
.u
.d
.u
.stream
.object_type
= c_obj_type
;
1157 return HPI_ERROR_INVALID_OBJ
;
1160 if (adapter
!= hm
.adapter_index
)
1161 return HPI_ERROR_NO_INTERADAPTER_GROUPS
;
1163 hpi_send_recv(&hm
, &hr
);
1167 u16
hpi_instream_group_get_map(u32 h_instream
, u32
*poutstream_map
,
1170 struct hpi_message hm
;
1171 struct hpi_response hr
;
1173 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1174 HPI_ISTREAM_HOSTBUFFER_FREE
);
1175 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1176 return HPI_ERROR_INVALID_HANDLE
;
1177 hpi_send_recv(&hm
, &hr
);
1180 *poutstream_map
= hr
.u
.d
.u
.group_info
.outstream_group_map
;
1182 *pinstream_map
= hr
.u
.d
.u
.group_info
.instream_group_map
;
1187 u16
hpi_instream_group_reset(u32 h_instream
)
1189 struct hpi_message hm
;
1190 struct hpi_response hr
;
1192 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1193 HPI_ISTREAM_GROUP_RESET
);
1194 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1195 return HPI_ERROR_INVALID_HANDLE
;
1196 hpi_send_recv(&hm
, &hr
);
1200 u16
hpi_mixer_open(u16 adapter_index
, u32
*ph_mixer
)
1202 struct hpi_message hm
;
1203 struct hpi_response hr
;
1204 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_OPEN
);
1205 hm
.adapter_index
= adapter_index
;
1207 hpi_send_recv(&hm
, &hr
);
1211 hpi_indexes_to_handle(HPI_OBJ_MIXER
, adapter_index
,
1218 u16
hpi_mixer_close(u32 h_mixer
)
1220 struct hpi_message hm
;
1221 struct hpi_response hr
;
1223 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_CLOSE
);
1224 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1225 return HPI_ERROR_INVALID_HANDLE
;
1227 hpi_send_recv(&hm
, &hr
);
1231 u16
hpi_mixer_get_control(u32 h_mixer
, u16 src_node_type
,
1232 u16 src_node_type_index
, u16 dst_node_type
, u16 dst_node_type_index
,
1233 u16 control_type
, u32
*ph_control
)
1235 struct hpi_message hm
;
1236 struct hpi_response hr
;
1237 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
,
1238 HPI_MIXER_GET_CONTROL
);
1239 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1240 return HPI_ERROR_INVALID_HANDLE
;
1241 hm
.u
.m
.node_type1
= src_node_type
;
1242 hm
.u
.m
.node_index1
= src_node_type_index
;
1243 hm
.u
.m
.node_type2
= dst_node_type
;
1244 hm
.u
.m
.node_index2
= dst_node_type_index
;
1245 hm
.u
.m
.control_type
= control_type
;
1247 hpi_send_recv(&hm
, &hr
);
1251 hpi_indexes_to_handle(HPI_OBJ_CONTROL
,
1252 hm
.adapter_index
, hr
.u
.m
.control_index
);
1258 u16
hpi_mixer_get_control_by_index(u32 h_mixer
, u16 control_index
,
1259 u16
*pw_src_node_type
, u16
*pw_src_node_index
, u16
*pw_dst_node_type
,
1260 u16
*pw_dst_node_index
, u16
*pw_control_type
, u32
*ph_control
)
1262 struct hpi_message hm
;
1263 struct hpi_response hr
;
1264 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
,
1265 HPI_MIXER_GET_CONTROL_BY_INDEX
);
1266 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1267 return HPI_ERROR_INVALID_HANDLE
;
1268 hm
.u
.m
.control_index
= control_index
;
1269 hpi_send_recv(&hm
, &hr
);
1271 if (pw_src_node_type
) {
1273 hr
.u
.m
.src_node_type
+ HPI_SOURCENODE_NONE
;
1274 *pw_src_node_index
= hr
.u
.m
.src_node_index
;
1275 *pw_dst_node_type
= hr
.u
.m
.dst_node_type
+ HPI_DESTNODE_NONE
;
1276 *pw_dst_node_index
= hr
.u
.m
.dst_node_index
;
1278 if (pw_control_type
)
1279 *pw_control_type
= hr
.u
.m
.control_index
;
1284 hpi_indexes_to_handle(HPI_OBJ_CONTROL
,
1285 hm
.adapter_index
, control_index
);
1292 u16
hpi_mixer_store(u32 h_mixer
, enum HPI_MIXER_STORE_COMMAND command
,
1295 struct hpi_message hm
;
1296 struct hpi_response hr
;
1297 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_STORE
);
1298 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1299 return HPI_ERROR_INVALID_HANDLE
;
1300 hm
.u
.mx
.store
.command
= command
;
1301 hm
.u
.mx
.store
.index
= index
;
1302 hpi_send_recv(&hm
, &hr
);
1307 u16
hpi_control_param_set(const u32 h_control
, const u16 attrib
,
1308 const u32 param1
, const u32 param2
)
1310 struct hpi_message hm
;
1311 struct hpi_response hr
;
1313 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1314 HPI_CONTROL_SET_STATE
);
1315 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1316 return HPI_ERROR_INVALID_HANDLE
;
1317 hm
.u
.c
.attribute
= attrib
;
1318 hm
.u
.c
.param1
= param1
;
1319 hm
.u
.c
.param2
= param2
;
1320 hpi_send_recv(&hm
, &hr
);
1324 static u16
hpi_control_log_set2(u32 h_control
, u16 attrib
, short sv0
,
1327 struct hpi_message hm
;
1328 struct hpi_response hr
;
1330 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1331 HPI_CONTROL_SET_STATE
);
1332 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1333 return HPI_ERROR_INVALID_HANDLE
;
1334 hm
.u
.c
.attribute
= attrib
;
1335 hm
.u
.c
.an_log_value
[0] = sv0
;
1336 hm
.u
.c
.an_log_value
[1] = sv1
;
1337 hpi_send_recv(&hm
, &hr
);
1342 u16
hpi_control_param_get(const u32 h_control
, const u16 attrib
, u32 param1
,
1343 u32 param2
, u32
*pparam1
, u32
*pparam2
)
1345 struct hpi_message hm
;
1346 struct hpi_response hr
;
1348 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1349 HPI_CONTROL_GET_STATE
);
1350 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1351 return HPI_ERROR_INVALID_HANDLE
;
1352 hm
.u
.c
.attribute
= attrib
;
1353 hm
.u
.c
.param1
= param1
;
1354 hm
.u
.c
.param2
= param2
;
1355 hpi_send_recv(&hm
, &hr
);
1357 *pparam1
= hr
.u
.c
.param1
;
1359 *pparam2
= hr
.u
.c
.param2
;
1364 #define hpi_control_param1_get(h, a, p1) \
1365 hpi_control_param_get(h, a, 0, 0, p1, NULL)
1366 #define hpi_control_param2_get(h, a, p1, p2) \
1367 hpi_control_param_get(h, a, 0, 0, p1, p2)
1369 static u16
hpi_control_log_get2(u32 h_control
, u16 attrib
, short *sv0
,
1372 struct hpi_message hm
;
1373 struct hpi_response hr
;
1374 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1375 HPI_CONTROL_GET_STATE
);
1376 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1377 return HPI_ERROR_INVALID_HANDLE
;
1378 hm
.u
.c
.attribute
= attrib
;
1380 hpi_send_recv(&hm
, &hr
);
1381 *sv0
= hr
.u
.c
.an_log_value
[0];
1383 *sv1
= hr
.u
.c
.an_log_value
[1];
1388 u16
hpi_control_query(const u32 h_control
, const u16 attrib
, const u32 index
,
1389 const u32 param
, u32
*psetting
)
1391 struct hpi_message hm
;
1392 struct hpi_response hr
;
1394 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1395 HPI_CONTROL_GET_INFO
);
1396 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1397 return HPI_ERROR_INVALID_HANDLE
;
1399 hm
.u
.c
.attribute
= attrib
;
1400 hm
.u
.c
.param1
= index
;
1401 hm
.u
.c
.param2
= param
;
1403 hpi_send_recv(&hm
, &hr
);
1404 *psetting
= hr
.u
.c
.param1
;
1409 static u16
hpi_control_get_string(const u32 h_control
, const u16 attribute
,
1410 char *psz_string
, const u32 string_length
)
1412 unsigned int sub_string_index
= 0, j
= 0;
1417 if ((string_length
< 1) || (string_length
> 256))
1418 return HPI_ERROR_INVALID_CONTROL_VALUE
;
1419 for (sub_string_index
= 0; sub_string_index
< string_length
;
1420 sub_string_index
+= 8) {
1421 struct hpi_message hm
;
1422 struct hpi_response hr
;
1424 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1425 HPI_CONTROL_GET_STATE
);
1426 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
,
1428 return HPI_ERROR_INVALID_HANDLE
;
1429 hm
.u
.c
.attribute
= attribute
;
1430 hm
.u
.c
.param1
= sub_string_index
;
1432 hpi_send_recv(&hm
, &hr
);
1434 if (sub_string_index
== 0
1435 && (hr
.u
.cu
.chars8
.remaining_chars
+ 8) >
1437 return HPI_ERROR_INVALID_CONTROL_VALUE
;
1443 for (j
= 0; j
< 8; j
++) {
1444 c
= hr
.u
.cu
.chars8
.sz_data
[j
];
1445 psz_string
[sub_string_index
+ j
] = c
;
1447 if (n
>= string_length
) {
1448 psz_string
[string_length
- 1] = 0;
1449 err
= HPI_ERROR_INVALID_CONTROL_VALUE
;
1456 if ((hr
.u
.cu
.chars8
.remaining_chars
== 0)
1457 && ((sub_string_index
+ j
) < string_length
)
1460 psz_string
[sub_string_index
+ j
] = c
;
1468 u16
hpi_aesebu_receiver_query_format(const u32 h_aes_rx
, const u32 index
,
1474 err
= hpi_control_query(h_aes_rx
, HPI_AESEBURX_FORMAT
, index
, 0, &qr
);
1475 *pw_format
= (u16
)qr
;
1479 u16
hpi_aesebu_receiver_set_format(u32 h_control
, u16 format
)
1481 return hpi_control_param_set(h_control
, HPI_AESEBURX_FORMAT
, format
,
1485 u16
hpi_aesebu_receiver_get_format(u32 h_control
, u16
*pw_format
)
1490 err
= hpi_control_param1_get(h_control
, HPI_AESEBURX_FORMAT
, ¶m
);
1491 if (!err
&& pw_format
)
1492 *pw_format
= (u16
)param
;
1497 u16
hpi_aesebu_receiver_get_sample_rate(u32 h_control
, u32
*psample_rate
)
1499 return hpi_control_param1_get(h_control
, HPI_AESEBURX_SAMPLERATE
,
1503 u16
hpi_aesebu_receiver_get_user_data(u32 h_control
, u16 index
, u16
*pw_data
)
1505 struct hpi_message hm
;
1506 struct hpi_response hr
;
1507 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1508 HPI_CONTROL_GET_STATE
);
1509 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1510 return HPI_ERROR_INVALID_HANDLE
;
1511 hm
.u
.c
.attribute
= HPI_AESEBURX_USERDATA
;
1512 hm
.u
.c
.param1
= index
;
1514 hpi_send_recv(&hm
, &hr
);
1517 *pw_data
= (u16
)hr
.u
.c
.param2
;
1521 u16
hpi_aesebu_receiver_get_channel_status(u32 h_control
, u16 index
,
1524 struct hpi_message hm
;
1525 struct hpi_response hr
;
1526 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1527 HPI_CONTROL_GET_STATE
);
1528 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1529 return HPI_ERROR_INVALID_HANDLE
;
1530 hm
.u
.c
.attribute
= HPI_AESEBURX_CHANNELSTATUS
;
1531 hm
.u
.c
.param1
= index
;
1533 hpi_send_recv(&hm
, &hr
);
1536 *pw_data
= (u16
)hr
.u
.c
.param2
;
1540 u16
hpi_aesebu_receiver_get_error_status(u32 h_control
, u16
*pw_error_data
)
1545 err
= hpi_control_param1_get(h_control
, HPI_AESEBURX_ERRORSTATUS
,
1548 *pw_error_data
= (u16
)error_data
;
1552 u16
hpi_aesebu_transmitter_set_sample_rate(u32 h_control
, u32 sample_rate
)
1554 return hpi_control_param_set(h_control
, HPI_AESEBUTX_SAMPLERATE
,
1558 u16
hpi_aesebu_transmitter_set_user_data(u32 h_control
, u16 index
, u16 data
)
1560 return hpi_control_param_set(h_control
, HPI_AESEBUTX_USERDATA
, index
,
1564 u16
hpi_aesebu_transmitter_set_channel_status(u32 h_control
, u16 index
,
1567 return hpi_control_param_set(h_control
, HPI_AESEBUTX_CHANNELSTATUS
,
1571 u16
hpi_aesebu_transmitter_get_channel_status(u32 h_control
, u16 index
,
1574 return HPI_ERROR_INVALID_OPERATION
;
1577 u16
hpi_aesebu_transmitter_query_format(const u32 h_aes_tx
, const u32 index
,
1583 err
= hpi_control_query(h_aes_tx
, HPI_AESEBUTX_FORMAT
, index
, 0, &qr
);
1584 *pw_format
= (u16
)qr
;
1588 u16
hpi_aesebu_transmitter_set_format(u32 h_control
, u16 output_format
)
1590 return hpi_control_param_set(h_control
, HPI_AESEBUTX_FORMAT
,
1594 u16
hpi_aesebu_transmitter_get_format(u32 h_control
, u16
*pw_output_format
)
1599 err
= hpi_control_param1_get(h_control
, HPI_AESEBUTX_FORMAT
, ¶m
);
1600 if (!err
&& pw_output_format
)
1601 *pw_output_format
= (u16
)param
;
1606 u16
hpi_bitstream_set_clock_edge(u32 h_control
, u16 edge_type
)
1608 return hpi_control_param_set(h_control
, HPI_BITSTREAM_CLOCK_EDGE
,
1612 u16
hpi_bitstream_set_data_polarity(u32 h_control
, u16 polarity
)
1614 return hpi_control_param_set(h_control
, HPI_BITSTREAM_DATA_POLARITY
,
1618 u16
hpi_bitstream_get_activity(u32 h_control
, u16
*pw_clk_activity
,
1619 u16
*pw_data_activity
)
1621 struct hpi_message hm
;
1622 struct hpi_response hr
;
1623 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1624 HPI_CONTROL_GET_STATE
);
1625 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1626 return HPI_ERROR_INVALID_HANDLE
;
1627 hm
.u
.c
.attribute
= HPI_BITSTREAM_ACTIVITY
;
1628 hpi_send_recv(&hm
, &hr
);
1629 if (pw_clk_activity
)
1630 *pw_clk_activity
= (u16
)hr
.u
.c
.param1
;
1631 if (pw_data_activity
)
1632 *pw_data_activity
= (u16
)hr
.u
.c
.param2
;
1636 u16
hpi_channel_mode_query_mode(const u32 h_mode
, const u32 index
,
1642 err
= hpi_control_query(h_mode
, HPI_CHANNEL_MODE_MODE
, index
, 0, &qr
);
1647 u16
hpi_channel_mode_set(u32 h_control
, u16 mode
)
1649 return hpi_control_param_set(h_control
, HPI_CHANNEL_MODE_MODE
, mode
,
1653 u16
hpi_channel_mode_get(u32 h_control
, u16
*mode
)
1656 u16 err
= hpi_control_param1_get(h_control
,
1657 HPI_CHANNEL_MODE_MODE
, &mode32
);
1659 *mode
= (u16
)mode32
;
1663 u16
hpi_cobranet_hmi_write(u32 h_control
, u32 hmi_address
, u32 byte_count
,
1666 struct hpi_msg_cobranet_hmiwrite hm
;
1667 struct hpi_response_header hr
;
1669 hpi_init_message_responseV1(&hm
.h
, sizeof(hm
), &hr
, sizeof(hr
),
1670 HPI_OBJ_CONTROL
, HPI_CONTROL_SET_STATE
);
1672 if (hpi_handle_indexes(h_control
, &hm
.h
.adapter_index
,
1674 return HPI_ERROR_INVALID_HANDLE
;
1676 if (byte_count
> sizeof(hm
.bytes
))
1677 return HPI_ERROR_MESSAGE_BUFFER_TOO_SMALL
;
1679 hm
.p
.attribute
= HPI_COBRANET_SET
;
1680 hm
.p
.byte_count
= byte_count
;
1681 hm
.p
.hmi_address
= hmi_address
;
1682 memcpy(hm
.bytes
, pb_data
, byte_count
);
1683 hm
.h
.size
= (u16
)(sizeof(hm
.h
) + sizeof(hm
.p
) + byte_count
);
1685 hpi_send_recvV1(&hm
.h
, &hr
);
1689 u16
hpi_cobranet_hmi_read(u32 h_control
, u32 hmi_address
, u32 max_byte_count
,
1690 u32
*pbyte_count
, u8
*pb_data
)
1692 struct hpi_msg_cobranet_hmiread hm
;
1693 struct hpi_res_cobranet_hmiread hr
;
1695 hpi_init_message_responseV1(&hm
.h
, sizeof(hm
), &hr
.h
, sizeof(hr
),
1696 HPI_OBJ_CONTROL
, HPI_CONTROL_GET_STATE
);
1698 if (hpi_handle_indexes(h_control
, &hm
.h
.adapter_index
,
1700 return HPI_ERROR_INVALID_HANDLE
;
1702 if (max_byte_count
> sizeof(hr
.bytes
))
1703 return HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL
;
1705 hm
.p
.attribute
= HPI_COBRANET_GET
;
1706 hm
.p
.byte_count
= max_byte_count
;
1707 hm
.p
.hmi_address
= hmi_address
;
1709 hpi_send_recvV1(&hm
.h
, &hr
.h
);
1711 if (!hr
.h
.error
&& pb_data
) {
1712 if (hr
.byte_count
> sizeof(hr
.bytes
))
1714 return HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL
;
1716 *pbyte_count
= hr
.byte_count
;
1718 if (hr
.byte_count
< max_byte_count
)
1719 max_byte_count
= *pbyte_count
;
1721 memcpy(pb_data
, hr
.bytes
, max_byte_count
);
1726 u16
hpi_cobranet_hmi_get_status(u32 h_control
, u32
*pstatus
,
1727 u32
*preadable_size
, u32
*pwriteable_size
)
1729 struct hpi_message hm
;
1730 struct hpi_response hr
;
1732 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1733 HPI_CONTROL_GET_STATE
);
1734 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1735 return HPI_ERROR_INVALID_HANDLE
;
1737 hm
.u
.c
.attribute
= HPI_COBRANET_GET_STATUS
;
1739 hpi_send_recv(&hm
, &hr
);
1742 *pstatus
= hr
.u
.cu
.cobranet
.status
.status
;
1745 hr
.u
.cu
.cobranet
.status
.readable_size
;
1746 if (pwriteable_size
)
1748 hr
.u
.cu
.cobranet
.status
.writeable_size
;
1753 u16
hpi_cobranet_get_ip_address(u32 h_control
, u32
*pdw_ip_address
)
1759 err
= hpi_cobranet_hmi_read(h_control
,
1760 HPI_COBRANET_HMI_cobra_ip_mon_currentIP
, 4, &byte_count
,
1764 ((iP
& 0xff000000) >> 8) | ((iP
& 0x00ff0000) << 8) | ((iP
&
1765 0x0000ff00) >> 8) | ((iP
& 0x000000ff) << 8);
1768 *pdw_ip_address
= 0;
1774 u16
hpi_cobranet_set_ip_address(u32 h_control
, u32 dw_ip_address
)
1779 iP
= ((dw_ip_address
& 0xff000000) >> 8) | ((dw_ip_address
&
1780 0x00ff0000) << 8) | ((dw_ip_address
& 0x0000ff00) >>
1781 8) | ((dw_ip_address
& 0x000000ff) << 8);
1783 err
= hpi_cobranet_hmi_write(h_control
,
1784 HPI_COBRANET_HMI_cobra_ip_mon_currentIP
, 4, (u8
*)&iP
);
1790 u16
hpi_cobranet_get_static_ip_address(u32 h_control
, u32
*pdw_ip_address
)
1795 err
= hpi_cobranet_hmi_read(h_control
,
1796 HPI_COBRANET_HMI_cobra_ip_mon_staticIP
, 4, &byte_count
,
1800 ((iP
& 0xff000000) >> 8) | ((iP
& 0x00ff0000) << 8) | ((iP
&
1801 0x0000ff00) >> 8) | ((iP
& 0x000000ff) << 8);
1804 *pdw_ip_address
= 0;
1810 u16
hpi_cobranet_set_static_ip_address(u32 h_control
, u32 dw_ip_address
)
1815 iP
= ((dw_ip_address
& 0xff000000) >> 8) | ((dw_ip_address
&
1816 0x00ff0000) << 8) | ((dw_ip_address
& 0x0000ff00) >>
1817 8) | ((dw_ip_address
& 0x000000ff) << 8);
1819 err
= hpi_cobranet_hmi_write(h_control
,
1820 HPI_COBRANET_HMI_cobra_ip_mon_staticIP
, 4, (u8
*)&iP
);
1826 u16
hpi_cobranet_get_macaddress(u32 h_control
, u32
*p_mac_msbs
,
1833 err
= hpi_cobranet_hmi_read(h_control
,
1834 HPI_COBRANET_HMI_cobra_if_phy_address
, 4, &byte_count
,
1839 ((mac
& 0xff000000) >> 8) | ((mac
& 0x00ff0000) << 8)
1840 | ((mac
& 0x0000ff00) >> 8) | ((mac
& 0x000000ff) <<
1843 err
= hpi_cobranet_hmi_read(h_control
,
1844 HPI_COBRANET_HMI_cobra_if_phy_address
+ 1, 4,
1845 &byte_count
, (u8
*)&mac
);
1850 ((mac
& 0xff000000) >> 8) | ((mac
& 0x00ff0000) << 8)
1851 | ((mac
& 0x0000ff00) >> 8) | ((mac
& 0x000000ff) <<
1861 u16
hpi_compander_set_enable(u32 h_control
, u32 enable
)
1863 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
1867 u16
hpi_compander_get_enable(u32 h_control
, u32
*enable
)
1869 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
1872 u16
hpi_compander_set_makeup_gain(u32 h_control
, short makeup_gain0_01dB
)
1874 return hpi_control_log_set2(h_control
, HPI_COMPANDER_MAKEUPGAIN
,
1875 makeup_gain0_01dB
, 0);
1878 u16
hpi_compander_get_makeup_gain(u32 h_control
, short *makeup_gain0_01dB
)
1880 return hpi_control_log_get2(h_control
, HPI_COMPANDER_MAKEUPGAIN
,
1881 makeup_gain0_01dB
, NULL
);
1884 u16
hpi_compander_set_attack_time_constant(u32 h_control
, unsigned int index
,
1887 return hpi_control_param_set(h_control
, HPI_COMPANDER_ATTACK
, attack
,
1891 u16
hpi_compander_get_attack_time_constant(u32 h_control
, unsigned int index
,
1894 return hpi_control_param_get(h_control
, HPI_COMPANDER_ATTACK
, 0,
1895 index
, attack
, NULL
);
1898 u16
hpi_compander_set_decay_time_constant(u32 h_control
, unsigned int index
,
1901 return hpi_control_param_set(h_control
, HPI_COMPANDER_DECAY
, decay
,
1905 u16
hpi_compander_get_decay_time_constant(u32 h_control
, unsigned int index
,
1908 return hpi_control_param_get(h_control
, HPI_COMPANDER_DECAY
, 0, index
,
1913 u16
hpi_compander_set_threshold(u32 h_control
, unsigned int index
,
1914 short threshold0_01dB
)
1916 struct hpi_message hm
;
1917 struct hpi_response hr
;
1919 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1920 HPI_CONTROL_SET_STATE
);
1921 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1922 return HPI_ERROR_INVALID_HANDLE
;
1923 hm
.u
.c
.attribute
= HPI_COMPANDER_THRESHOLD
;
1924 hm
.u
.c
.param2
= index
;
1925 hm
.u
.c
.an_log_value
[0] = threshold0_01dB
;
1927 hpi_send_recv(&hm
, &hr
);
1932 u16
hpi_compander_get_threshold(u32 h_control
, unsigned int index
,
1933 short *threshold0_01dB
)
1935 struct hpi_message hm
;
1936 struct hpi_response hr
;
1938 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1939 HPI_CONTROL_GET_STATE
);
1940 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1941 return HPI_ERROR_INVALID_HANDLE
;
1942 hm
.u
.c
.attribute
= HPI_COMPANDER_THRESHOLD
;
1943 hm
.u
.c
.param2
= index
;
1945 hpi_send_recv(&hm
, &hr
);
1946 *threshold0_01dB
= hr
.u
.c
.an_log_value
[0];
1951 u16
hpi_compander_set_ratio(u32 h_control
, u32 index
, u32 ratio100
)
1953 return hpi_control_param_set(h_control
, HPI_COMPANDER_RATIO
, ratio100
,
1957 u16
hpi_compander_get_ratio(u32 h_control
, u32 index
, u32
*ratio100
)
1959 return hpi_control_param_get(h_control
, HPI_COMPANDER_RATIO
, 0, index
,
1963 u16
hpi_level_query_range(u32 h_control
, short *min_gain_01dB
,
1964 short *max_gain_01dB
, short *step_gain_01dB
)
1966 struct hpi_message hm
;
1967 struct hpi_response hr
;
1969 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1970 HPI_CONTROL_GET_STATE
);
1971 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1972 return HPI_ERROR_INVALID_HANDLE
;
1973 hm
.u
.c
.attribute
= HPI_LEVEL_RANGE
;
1975 hpi_send_recv(&hm
, &hr
);
1977 hr
.u
.c
.an_log_value
[0] = 0;
1978 hr
.u
.c
.an_log_value
[1] = 0;
1982 *min_gain_01dB
= hr
.u
.c
.an_log_value
[0];
1984 *max_gain_01dB
= hr
.u
.c
.an_log_value
[1];
1986 *step_gain_01dB
= (short)hr
.u
.c
.param1
;
1990 u16
hpi_level_set_gain(u32 h_control
, short an_gain0_01dB
[HPI_MAX_CHANNELS
]
1993 return hpi_control_log_set2(h_control
, HPI_LEVEL_GAIN
,
1994 an_gain0_01dB
[0], an_gain0_01dB
[1]);
1997 u16
hpi_level_get_gain(u32 h_control
, short an_gain0_01dB
[HPI_MAX_CHANNELS
]
2000 return hpi_control_log_get2(h_control
, HPI_LEVEL_GAIN
,
2001 &an_gain0_01dB
[0], &an_gain0_01dB
[1]);
2004 u16
hpi_meter_query_channels(const u32 h_meter
, u32
*p_channels
)
2006 return hpi_control_query(h_meter
, HPI_METER_NUM_CHANNELS
, 0, 0,
2010 u16
hpi_meter_get_peak(u32 h_control
, short an_peakdB
[HPI_MAX_CHANNELS
]
2015 struct hpi_message hm
;
2016 struct hpi_response hr
;
2018 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2019 HPI_CONTROL_GET_STATE
);
2020 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2021 return HPI_ERROR_INVALID_HANDLE
;
2022 hm
.obj_index
= hm
.obj_index
;
2023 hm
.u
.c
.attribute
= HPI_METER_PEAK
;
2025 hpi_send_recv(&hm
, &hr
);
2028 memcpy(an_peakdB
, hr
.u
.c
.an_log_value
,
2029 sizeof(short) * HPI_MAX_CHANNELS
);
2031 for (i
= 0; i
< HPI_MAX_CHANNELS
; i
++)
2032 an_peakdB
[i
] = HPI_METER_MINIMUM
;
2036 u16
hpi_meter_get_rms(u32 h_control
, short an_rmsdB
[HPI_MAX_CHANNELS
]
2041 struct hpi_message hm
;
2042 struct hpi_response hr
;
2044 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2045 HPI_CONTROL_GET_STATE
);
2046 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2047 return HPI_ERROR_INVALID_HANDLE
;
2048 hm
.u
.c
.attribute
= HPI_METER_RMS
;
2050 hpi_send_recv(&hm
, &hr
);
2053 memcpy(an_rmsdB
, hr
.u
.c
.an_log_value
,
2054 sizeof(short) * HPI_MAX_CHANNELS
);
2056 for (i
= 0; i
< HPI_MAX_CHANNELS
; i
++)
2057 an_rmsdB
[i
] = HPI_METER_MINIMUM
;
2062 u16
hpi_meter_set_rms_ballistics(u32 h_control
, u16 attack
, u16 decay
)
2064 return hpi_control_param_set(h_control
, HPI_METER_RMS_BALLISTICS
,
2068 u16
hpi_meter_get_rms_ballistics(u32 h_control
, u16
*pn_attack
, u16
*pn_decay
)
2074 error
= hpi_control_param2_get(h_control
, HPI_METER_RMS_BALLISTICS
,
2078 *pn_attack
= (unsigned short)attack
;
2080 *pn_decay
= (unsigned short)decay
;
2085 u16
hpi_meter_set_peak_ballistics(u32 h_control
, u16 attack
, u16 decay
)
2087 return hpi_control_param_set(h_control
, HPI_METER_PEAK_BALLISTICS
,
2091 u16
hpi_meter_get_peak_ballistics(u32 h_control
, u16
*pn_attack
,
2098 error
= hpi_control_param2_get(h_control
, HPI_METER_PEAK_BALLISTICS
,
2102 *pn_attack
= (short)attack
;
2104 *pn_decay
= (short)decay
;
2109 u16
hpi_microphone_set_phantom_power(u32 h_control
, u16 on_off
)
2111 return hpi_control_param_set(h_control
, HPI_MICROPHONE_PHANTOM_POWER
,
2115 u16
hpi_microphone_get_phantom_power(u32 h_control
, u16
*pw_on_off
)
2119 error
= hpi_control_param1_get(h_control
,
2120 HPI_MICROPHONE_PHANTOM_POWER
, &on_off
);
2122 *pw_on_off
= (u16
)on_off
;
2126 u16
hpi_multiplexer_set_source(u32 h_control
, u16 source_node_type
,
2127 u16 source_node_index
)
2129 return hpi_control_param_set(h_control
, HPI_MULTIPLEXER_SOURCE
,
2130 source_node_type
, source_node_index
);
2133 u16
hpi_multiplexer_get_source(u32 h_control
, u16
*source_node_type
,
2134 u16
*source_node_index
)
2137 u16 err
= hpi_control_param2_get(h_control
,
2138 HPI_MULTIPLEXER_SOURCE
, &node
,
2140 if (source_node_type
)
2141 *source_node_type
= (u16
)node
;
2142 if (source_node_index
)
2143 *source_node_index
= (u16
)index
;
2147 u16
hpi_multiplexer_query_source(u32 h_control
, u16 index
,
2148 u16
*source_node_type
, u16
*source_node_index
)
2150 struct hpi_message hm
;
2151 struct hpi_response hr
;
2152 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2153 HPI_CONTROL_GET_STATE
);
2154 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2155 return HPI_ERROR_INVALID_HANDLE
;
2156 hm
.u
.c
.attribute
= HPI_MULTIPLEXER_QUERYSOURCE
;
2157 hm
.u
.c
.param1
= index
;
2159 hpi_send_recv(&hm
, &hr
);
2161 if (source_node_type
)
2162 *source_node_type
= (u16
)hr
.u
.c
.param1
;
2163 if (source_node_index
)
2164 *source_node_index
= (u16
)hr
.u
.c
.param2
;
2168 u16
hpi_parametric_eq_get_info(u32 h_control
, u16
*pw_number_of_bands
,
2175 error
= hpi_control_param2_get(h_control
, HPI_EQUALIZER_NUM_FILTERS
,
2177 if (pw_number_of_bands
)
2178 *pw_number_of_bands
= (u16
)oB
;
2180 *pw_on_off
= (u16
)oO
;
2184 u16
hpi_parametric_eq_set_state(u32 h_control
, u16 on_off
)
2186 return hpi_control_param_set(h_control
, HPI_EQUALIZER_NUM_FILTERS
,
2190 u16
hpi_parametric_eq_get_band(u32 h_control
, u16 index
, u16
*pn_type
,
2191 u32
*pfrequency_hz
, short *pnQ100
, short *pn_gain0_01dB
)
2193 struct hpi_message hm
;
2194 struct hpi_response hr
;
2196 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2197 HPI_CONTROL_GET_STATE
);
2198 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2199 return HPI_ERROR_INVALID_HANDLE
;
2200 hm
.u
.c
.attribute
= HPI_EQUALIZER_FILTER
;
2201 hm
.u
.c
.param2
= index
;
2203 hpi_send_recv(&hm
, &hr
);
2206 *pfrequency_hz
= hr
.u
.c
.param1
;
2208 *pn_type
= (u16
)(hr
.u
.c
.param2
>> 16);
2210 *pnQ100
= hr
.u
.c
.an_log_value
[1];
2212 *pn_gain0_01dB
= hr
.u
.c
.an_log_value
[0];
2217 u16
hpi_parametric_eq_set_band(u32 h_control
, u16 index
, u16 type
,
2218 u32 frequency_hz
, short q100
, short gain0_01dB
)
2220 struct hpi_message hm
;
2221 struct hpi_response hr
;
2223 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2224 HPI_CONTROL_SET_STATE
);
2225 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2226 return HPI_ERROR_INVALID_HANDLE
;
2228 hm
.u
.c
.param1
= frequency_hz
;
2229 hm
.u
.c
.param2
= (index
& 0xFFFFL
) + ((u32
)type
<< 16);
2230 hm
.u
.c
.an_log_value
[0] = gain0_01dB
;
2231 hm
.u
.c
.an_log_value
[1] = q100
;
2232 hm
.u
.c
.attribute
= HPI_EQUALIZER_FILTER
;
2234 hpi_send_recv(&hm
, &hr
);
2239 u16
hpi_parametric_eq_get_coeffs(u32 h_control
, u16 index
, short coeffs
[5]
2242 struct hpi_message hm
;
2243 struct hpi_response hr
;
2245 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2246 HPI_CONTROL_GET_STATE
);
2247 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2248 return HPI_ERROR_INVALID_HANDLE
;
2249 hm
.u
.c
.attribute
= HPI_EQUALIZER_COEFFICIENTS
;
2250 hm
.u
.c
.param2
= index
;
2252 hpi_send_recv(&hm
, &hr
);
2254 coeffs
[0] = (short)hr
.u
.c
.an_log_value
[0];
2255 coeffs
[1] = (short)hr
.u
.c
.an_log_value
[1];
2256 coeffs
[2] = (short)hr
.u
.c
.param1
;
2257 coeffs
[3] = (short)(hr
.u
.c
.param1
>> 16);
2258 coeffs
[4] = (short)hr
.u
.c
.param2
;
2263 u16
hpi_sample_clock_query_source(const u32 h_clock
, const u32 index
,
2269 err
= hpi_control_query(h_clock
, HPI_SAMPLECLOCK_SOURCE
, index
, 0,
2271 *pw_source
= (u16
)qr
;
2275 u16
hpi_sample_clock_set_source(u32 h_control
, u16 source
)
2277 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_SOURCE
,
2281 u16
hpi_sample_clock_get_source(u32 h_control
, u16
*pw_source
)
2285 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SOURCE
,
2289 *pw_source
= (u16
)source
;
2293 u16
hpi_sample_clock_query_source_index(const u32 h_clock
, const u32 index
,
2294 const u32 source
, u16
*pw_source_index
)
2299 err
= hpi_control_query(h_clock
, HPI_SAMPLECLOCK_SOURCE_INDEX
, index
,
2301 *pw_source_index
= (u16
)qr
;
2305 u16
hpi_sample_clock_set_source_index(u32 h_control
, u16 source_index
)
2307 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_SOURCE_INDEX
,
2311 u16
hpi_sample_clock_get_source_index(u32 h_control
, u16
*pw_source_index
)
2314 u32 source_index
= 0;
2315 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SOURCE_INDEX
,
2318 if (pw_source_index
)
2319 *pw_source_index
= (u16
)source_index
;
2323 u16
hpi_sample_clock_query_local_rate(const u32 h_clock
, const u32 index
,
2327 err
= hpi_control_query(h_clock
, HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
,
2333 u16
hpi_sample_clock_set_local_rate(u32 h_control
, u32 sample_rate
)
2335 return hpi_control_param_set(h_control
,
2336 HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
, sample_rate
, 0);
2339 u16
hpi_sample_clock_get_local_rate(u32 h_control
, u32
*psample_rate
)
2342 u32 sample_rate
= 0;
2343 err
= hpi_control_param1_get(h_control
,
2344 HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
, &sample_rate
);
2347 *psample_rate
= sample_rate
;
2351 u16
hpi_sample_clock_get_sample_rate(u32 h_control
, u32
*psample_rate
)
2354 u32 sample_rate
= 0;
2355 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SAMPLERATE
,
2359 *psample_rate
= sample_rate
;
2363 u16
hpi_sample_clock_set_auto(u32 h_control
, u32 enable
)
2365 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_AUTO
, enable
,
2369 u16
hpi_sample_clock_get_auto(u32 h_control
, u32
*penable
)
2371 return hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_AUTO
,
2375 u16
hpi_sample_clock_set_local_rate_lock(u32 h_control
, u32 lock
)
2377 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_LOCAL_LOCK
,
2381 u16
hpi_sample_clock_get_local_rate_lock(u32 h_control
, u32
*plock
)
2383 return hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_LOCAL_LOCK
,
2387 u16
hpi_tone_detector_get_frequency(u32 h_control
, u32 index
, u32
*frequency
)
2389 return hpi_control_param_get(h_control
, HPI_TONEDETECTOR_FREQUENCY
,
2390 index
, 0, frequency
, NULL
);
2393 u16
hpi_tone_detector_get_state(u32 h_control
, u32
*state
)
2395 return hpi_control_param1_get(h_control
, HPI_TONEDETECTOR_STATE
,
2399 u16
hpi_tone_detector_set_enable(u32 h_control
, u32 enable
)
2401 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
2405 u16
hpi_tone_detector_get_enable(u32 h_control
, u32
*enable
)
2407 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
2410 u16
hpi_tone_detector_set_event_enable(u32 h_control
, u32 event_enable
)
2412 return hpi_control_param_set(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2413 (u32
)event_enable
, 0);
2416 u16
hpi_tone_detector_get_event_enable(u32 h_control
, u32
*event_enable
)
2418 return hpi_control_param1_get(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2422 u16
hpi_tone_detector_set_threshold(u32 h_control
, int threshold
)
2424 return hpi_control_param_set(h_control
, HPI_TONEDETECTOR_THRESHOLD
,
2428 u16
hpi_tone_detector_get_threshold(u32 h_control
, int *threshold
)
2430 return hpi_control_param1_get(h_control
, HPI_TONEDETECTOR_THRESHOLD
,
2434 u16
hpi_silence_detector_get_state(u32 h_control
, u32
*state
)
2436 return hpi_control_param1_get(h_control
, HPI_SILENCEDETECTOR_STATE
,
2440 u16
hpi_silence_detector_set_enable(u32 h_control
, u32 enable
)
2442 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
2446 u16
hpi_silence_detector_get_enable(u32 h_control
, u32
*enable
)
2448 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
2451 u16
hpi_silence_detector_set_event_enable(u32 h_control
, u32 event_enable
)
2453 return hpi_control_param_set(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2457 u16
hpi_silence_detector_get_event_enable(u32 h_control
, u32
*event_enable
)
2459 return hpi_control_param1_get(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2463 u16
hpi_silence_detector_set_delay(u32 h_control
, u32 delay
)
2465 return hpi_control_param_set(h_control
, HPI_SILENCEDETECTOR_DELAY
,
2469 u16
hpi_silence_detector_get_delay(u32 h_control
, u32
*delay
)
2471 return hpi_control_param1_get(h_control
, HPI_SILENCEDETECTOR_DELAY
,
2475 u16
hpi_silence_detector_set_threshold(u32 h_control
, int threshold
)
2477 return hpi_control_param_set(h_control
, HPI_SILENCEDETECTOR_THRESHOLD
,
2481 u16
hpi_silence_detector_get_threshold(u32 h_control
, int *threshold
)
2483 return hpi_control_param1_get(h_control
,
2484 HPI_SILENCEDETECTOR_THRESHOLD
, (u32
*)threshold
);
2487 u16
hpi_tuner_query_band(const u32 h_tuner
, const u32 index
, u16
*pw_band
)
2492 err
= hpi_control_query(h_tuner
, HPI_TUNER_BAND
, index
, 0, &qr
);
2497 u16
hpi_tuner_set_band(u32 h_control
, u16 band
)
2499 return hpi_control_param_set(h_control
, HPI_TUNER_BAND
, band
, 0);
2502 u16
hpi_tuner_get_band(u32 h_control
, u16
*pw_band
)
2507 error
= hpi_control_param1_get(h_control
, HPI_TUNER_BAND
, &band
);
2509 *pw_band
= (u16
)band
;
2513 u16
hpi_tuner_query_frequency(const u32 h_tuner
, const u32 index
,
2514 const u16 band
, u32
*pfreq
)
2516 return hpi_control_query(h_tuner
, HPI_TUNER_FREQ
, index
, band
, pfreq
);
2519 u16
hpi_tuner_set_frequency(u32 h_control
, u32 freq_ink_hz
)
2521 return hpi_control_param_set(h_control
, HPI_TUNER_FREQ
, freq_ink_hz
,
2525 u16
hpi_tuner_get_frequency(u32 h_control
, u32
*pw_freq_ink_hz
)
2527 return hpi_control_param1_get(h_control
, HPI_TUNER_FREQ
,
2531 u16
hpi_tuner_query_gain(const u32 h_tuner
, const u32 index
, u16
*pw_gain
)
2536 err
= hpi_control_query(h_tuner
, HPI_TUNER_BAND
, index
, 0, &qr
);
2541 u16
hpi_tuner_set_gain(u32 h_control
, short gain
)
2543 return hpi_control_param_set(h_control
, HPI_TUNER_GAIN
, gain
, 0);
2546 u16
hpi_tuner_get_gain(u32 h_control
, short *pn_gain
)
2551 error
= hpi_control_param1_get(h_control
, HPI_TUNER_GAIN
, &gain
);
2553 *pn_gain
= (u16
)gain
;
2557 u16
hpi_tuner_get_rf_level(u32 h_control
, short *pw_level
)
2559 struct hpi_message hm
;
2560 struct hpi_response hr
;
2562 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2563 HPI_CONTROL_GET_STATE
);
2564 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2565 return HPI_ERROR_INVALID_HANDLE
;
2566 hm
.u
.cu
.attribute
= HPI_TUNER_LEVEL_AVG
;
2567 hpi_send_recv(&hm
, &hr
);
2569 *pw_level
= hr
.u
.cu
.tuner
.s_level
;
2573 u16
hpi_tuner_get_raw_rf_level(u32 h_control
, short *pw_level
)
2575 struct hpi_message hm
;
2576 struct hpi_response hr
;
2578 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2579 HPI_CONTROL_GET_STATE
);
2580 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2581 return HPI_ERROR_INVALID_HANDLE
;
2582 hm
.u
.cu
.attribute
= HPI_TUNER_LEVEL_RAW
;
2583 hpi_send_recv(&hm
, &hr
);
2585 *pw_level
= hr
.u
.cu
.tuner
.s_level
;
2589 u16
hpi_tuner_query_deemphasis(const u32 h_tuner
, const u32 index
,
2590 const u16 band
, u32
*pdeemphasis
)
2592 return hpi_control_query(h_tuner
, HPI_TUNER_DEEMPHASIS
, index
, band
,
2596 u16
hpi_tuner_set_deemphasis(u32 h_control
, u32 deemphasis
)
2598 return hpi_control_param_set(h_control
, HPI_TUNER_DEEMPHASIS
,
2602 u16
hpi_tuner_get_deemphasis(u32 h_control
, u32
*pdeemphasis
)
2604 return hpi_control_param1_get(h_control
, HPI_TUNER_DEEMPHASIS
,
2608 u16
hpi_tuner_query_program(const u32 h_tuner
, u32
*pbitmap_program
)
2610 return hpi_control_query(h_tuner
, HPI_TUNER_PROGRAM
, 0, 0,
2614 u16
hpi_tuner_set_program(u32 h_control
, u32 program
)
2616 return hpi_control_param_set(h_control
, HPI_TUNER_PROGRAM
, program
,
2620 u16
hpi_tuner_get_program(u32 h_control
, u32
*pprogram
)
2622 return hpi_control_param1_get(h_control
, HPI_TUNER_PROGRAM
, pprogram
);
2625 u16
hpi_tuner_get_hd_radio_dsp_version(u32 h_control
, char *psz_dsp_version
,
2626 const u32 string_size
)
2628 return hpi_control_get_string(h_control
,
2629 HPI_TUNER_HDRADIO_DSP_VERSION
, psz_dsp_version
, string_size
);
2632 u16
hpi_tuner_get_hd_radio_sdk_version(u32 h_control
, char *psz_sdk_version
,
2633 const u32 string_size
)
2635 return hpi_control_get_string(h_control
,
2636 HPI_TUNER_HDRADIO_SDK_VERSION
, psz_sdk_version
, string_size
);
2639 u16
hpi_tuner_get_status(u32 h_control
, u16
*pw_status_mask
, u16
*pw_status
)
2644 error
= hpi_control_param1_get(h_control
, HPI_TUNER_STATUS
, &status
);
2647 *pw_status_mask
= (u16
)(status
>> 16);
2648 *pw_status
= (u16
)(status
& 0xFFFF);
2650 *pw_status_mask
= 0;
2657 u16
hpi_tuner_set_mode(u32 h_control
, u32 mode
, u32 value
)
2659 return hpi_control_param_set(h_control
, HPI_TUNER_MODE
, mode
, value
);
2662 u16
hpi_tuner_get_mode(u32 h_control
, u32 mode
, u32
*pn_value
)
2664 return hpi_control_param_get(h_control
, HPI_TUNER_MODE
, mode
, 0,
2668 u16
hpi_tuner_get_hd_radio_signal_quality(u32 h_control
, u32
*pquality
)
2670 return hpi_control_param1_get(h_control
,
2671 HPI_TUNER_HDRADIO_SIGNAL_QUALITY
, pquality
);
2674 u16
hpi_tuner_get_hd_radio_signal_blend(u32 h_control
, u32
*pblend
)
2676 return hpi_control_param1_get(h_control
, HPI_TUNER_HDRADIO_BLEND
,
2680 u16
hpi_tuner_set_hd_radio_signal_blend(u32 h_control
, const u32 blend
)
2682 return hpi_control_param_set(h_control
, HPI_TUNER_HDRADIO_BLEND
,
2686 u16
hpi_tuner_get_rds(u32 h_control
, char *p_data
)
2688 struct hpi_message hm
;
2689 struct hpi_response hr
;
2691 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2692 HPI_CONTROL_GET_STATE
);
2693 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2694 return HPI_ERROR_INVALID_HANDLE
;
2695 hm
.u
.c
.attribute
= HPI_TUNER_RDS
;
2696 hpi_send_recv(&hm
, &hr
);
2698 *(u32
*)&p_data
[0] = hr
.u
.cu
.tuner
.rds
.data
[0];
2699 *(u32
*)&p_data
[4] = hr
.u
.cu
.tuner
.rds
.data
[1];
2700 *(u32
*)&p_data
[8] = hr
.u
.cu
.tuner
.rds
.bLER
;
2705 u16
hpi_pad_get_channel_name(u32 h_control
, char *psz_string
,
2706 const u32 data_length
)
2708 return hpi_control_get_string(h_control
, HPI_PAD_CHANNEL_NAME
,
2709 psz_string
, data_length
);
2712 u16
hpi_pad_get_artist(u32 h_control
, char *psz_string
, const u32 data_length
)
2714 return hpi_control_get_string(h_control
, HPI_PAD_ARTIST
, psz_string
,
2718 u16
hpi_pad_get_title(u32 h_control
, char *psz_string
, const u32 data_length
)
2720 return hpi_control_get_string(h_control
, HPI_PAD_TITLE
, psz_string
,
2724 u16
hpi_pad_get_comment(u32 h_control
, char *psz_string
,
2725 const u32 data_length
)
2727 return hpi_control_get_string(h_control
, HPI_PAD_COMMENT
, psz_string
,
2731 u16
hpi_pad_get_program_type(u32 h_control
, u32
*ppTY
)
2733 return hpi_control_param1_get(h_control
, HPI_PAD_PROGRAM_TYPE
, ppTY
);
2736 u16
hpi_pad_get_rdsPI(u32 h_control
, u32
*ppI
)
2738 return hpi_control_param1_get(h_control
, HPI_PAD_PROGRAM_ID
, ppI
);
2741 u16
hpi_volume_query_channels(const u32 h_volume
, u32
*p_channels
)
2743 return hpi_control_query(h_volume
, HPI_VOLUME_NUM_CHANNELS
, 0, 0,
2747 u16
hpi_volume_set_gain(u32 h_control
, short an_log_gain
[HPI_MAX_CHANNELS
]
2750 return hpi_control_log_set2(h_control
, HPI_VOLUME_GAIN
,
2751 an_log_gain
[0], an_log_gain
[1]);
2754 u16
hpi_volume_get_gain(u32 h_control
, short an_log_gain
[HPI_MAX_CHANNELS
]
2757 return hpi_control_log_get2(h_control
, HPI_VOLUME_GAIN
,
2758 &an_log_gain
[0], &an_log_gain
[1]);
2761 u16
hpi_volume_set_mute(u32 h_control
, u32 mute
)
2763 return hpi_control_param_set(h_control
, HPI_VOLUME_MUTE
, mute
, 0);
2766 u16
hpi_volume_get_mute(u32 h_control
, u32
*mute
)
2768 return hpi_control_param1_get(h_control
, HPI_VOLUME_MUTE
, mute
);
2771 u16
hpi_volume_query_range(u32 h_control
, short *min_gain_01dB
,
2772 short *max_gain_01dB
, short *step_gain_01dB
)
2774 struct hpi_message hm
;
2775 struct hpi_response hr
;
2777 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2778 HPI_CONTROL_GET_STATE
);
2779 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2780 return HPI_ERROR_INVALID_HANDLE
;
2781 hm
.u
.c
.attribute
= HPI_VOLUME_RANGE
;
2783 hpi_send_recv(&hm
, &hr
);
2785 hr
.u
.c
.an_log_value
[0] = 0;
2786 hr
.u
.c
.an_log_value
[1] = 0;
2790 *min_gain_01dB
= hr
.u
.c
.an_log_value
[0];
2792 *max_gain_01dB
= hr
.u
.c
.an_log_value
[1];
2794 *step_gain_01dB
= (short)hr
.u
.c
.param1
;
2798 u16
hpi_volume_auto_fade_profile(u32 h_control
,
2799 short an_stop_gain0_01dB
[HPI_MAX_CHANNELS
], u32 duration_ms
,
2802 struct hpi_message hm
;
2803 struct hpi_response hr
;
2805 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2806 HPI_CONTROL_SET_STATE
);
2807 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2808 return HPI_ERROR_INVALID_HANDLE
;
2810 memcpy(hm
.u
.c
.an_log_value
, an_stop_gain0_01dB
,
2811 sizeof(short) * HPI_MAX_CHANNELS
);
2813 hm
.u
.c
.attribute
= HPI_VOLUME_AUTOFADE
;
2814 hm
.u
.c
.param1
= duration_ms
;
2815 hm
.u
.c
.param2
= profile
;
2817 hpi_send_recv(&hm
, &hr
);
2822 u16
hpi_volume_auto_fade(u32 h_control
,
2823 short an_stop_gain0_01dB
[HPI_MAX_CHANNELS
], u32 duration_ms
)
2825 return hpi_volume_auto_fade_profile(h_control
, an_stop_gain0_01dB
,
2826 duration_ms
, HPI_VOLUME_AUTOFADE_LOG
);
2829 u16
hpi_volume_query_auto_fade_profile(const u32 h_volume
, const u32 i
,
2834 e
= hpi_control_query(h_volume
, HPI_VOLUME_AUTOFADE
, i
, 0, &u
);
2839 u16
hpi_vox_set_threshold(u32 h_control
, short an_gain0_01dB
)
2841 struct hpi_message hm
;
2842 struct hpi_response hr
;
2843 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2844 HPI_CONTROL_SET_STATE
);
2845 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2846 return HPI_ERROR_INVALID_HANDLE
;
2847 hm
.u
.c
.attribute
= HPI_VOX_THRESHOLD
;
2849 hm
.u
.c
.an_log_value
[0] = an_gain0_01dB
;
2851 hpi_send_recv(&hm
, &hr
);
2856 u16
hpi_vox_get_threshold(u32 h_control
, short *an_gain0_01dB
)
2858 struct hpi_message hm
;
2859 struct hpi_response hr
;
2860 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2861 HPI_CONTROL_GET_STATE
);
2862 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2863 return HPI_ERROR_INVALID_HANDLE
;
2864 hm
.u
.c
.attribute
= HPI_VOX_THRESHOLD
;
2866 hpi_send_recv(&hm
, &hr
);
2868 *an_gain0_01dB
= hr
.u
.c
.an_log_value
[0];