1 // SPDX-License-Identifier: GPL-2.0
3 #include "hpi_internal.h"
4 #include "hpimsginit.h"
9 unsigned int obj_index
:12;
10 unsigned int obj_type
:4;
11 unsigned int adapter_index
:14;
13 unsigned int read_only
:1;
21 u32
hpi_indexes_to_handle(const char c_object
, const u16 adapter_index
,
22 const u16 object_index
)
24 union handle_word handle
;
26 handle
.h
.adapter_index
= adapter_index
;
28 handle
.h
.read_only
= 0;
29 handle
.h
.obj_type
= c_object
;
30 handle
.h
.obj_index
= object_index
;
34 static u16
hpi_handle_indexes(const u32 h
, u16
*p1
, u16
*p2
)
36 union handle_word uhandle
;
38 return HPI_ERROR_INVALID_HANDLE
;
42 *p1
= (u16
)uhandle
.h
.adapter_index
;
44 *p2
= (u16
)uhandle
.h
.obj_index
;
49 void hpi_handle_to_indexes(const u32 handle
, u16
*pw_adapter_index
,
52 hpi_handle_indexes(handle
, pw_adapter_index
, pw_object_index
);
55 char hpi_handle_object(const u32 handle
)
57 union handle_word uhandle
;
59 return (char)uhandle
.h
.obj_type
;
62 void hpi_format_to_msg(struct hpi_msg_format
*pMF
,
63 const struct hpi_format
*pF
)
65 pMF
->sample_rate
= pF
->sample_rate
;
66 pMF
->bit_rate
= pF
->bit_rate
;
67 pMF
->attributes
= pF
->attributes
;
68 pMF
->channels
= pF
->channels
;
69 pMF
->format
= pF
->format
;
72 static void hpi_msg_to_format(struct hpi_format
*pF
,
73 struct hpi_msg_format
*pMF
)
75 pF
->sample_rate
= pMF
->sample_rate
;
76 pF
->bit_rate
= pMF
->bit_rate
;
77 pF
->attributes
= pMF
->attributes
;
78 pF
->channels
= pMF
->channels
;
79 pF
->format
= pMF
->format
;
84 void hpi_stream_response_to_legacy(struct hpi_stream_res
*pSR
)
86 pSR
->u
.legacy_stream_info
.auxiliary_data_available
=
87 pSR
->u
.stream_info
.auxiliary_data_available
;
88 pSR
->u
.legacy_stream_info
.state
= pSR
->u
.stream_info
.state
;
91 static inline void hpi_send_recvV1(struct hpi_message_header
*m
,
92 struct hpi_response_header
*r
)
94 hpi_send_recv((struct hpi_message
*)m
, (struct hpi_response
*)r
);
97 u16
hpi_subsys_get_version_ex(u32
*pversion_ex
)
99 struct hpi_message hm
;
100 struct hpi_response hr
;
102 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
103 HPI_SUBSYS_GET_VERSION
);
104 hpi_send_recv(&hm
, &hr
);
105 *pversion_ex
= hr
.u
.s
.data
;
109 u16
hpi_subsys_get_num_adapters(int *pn_num_adapters
)
111 struct hpi_message hm
;
112 struct hpi_response hr
;
113 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
114 HPI_SUBSYS_GET_NUM_ADAPTERS
);
115 hpi_send_recv(&hm
, &hr
);
116 *pn_num_adapters
= (int)hr
.u
.s
.num_adapters
;
120 u16
hpi_subsys_get_adapter(int iterator
, u32
*padapter_index
,
121 u16
*pw_adapter_type
)
123 struct hpi_message hm
;
124 struct hpi_response hr
;
125 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_SUBSYSTEM
,
126 HPI_SUBSYS_GET_ADAPTER
);
127 hm
.obj_index
= (u16
)iterator
;
128 hpi_send_recv(&hm
, &hr
);
129 *padapter_index
= (int)hr
.u
.s
.adapter_index
;
130 *pw_adapter_type
= hr
.u
.s
.adapter_type
;
135 u16
hpi_adapter_open(u16 adapter_index
)
137 struct hpi_message hm
;
138 struct hpi_response hr
;
139 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
141 hm
.adapter_index
= adapter_index
;
143 hpi_send_recv(&hm
, &hr
);
149 u16
hpi_adapter_close(u16 adapter_index
)
151 struct hpi_message hm
;
152 struct hpi_response hr
;
153 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
155 hm
.adapter_index
= adapter_index
;
157 hpi_send_recv(&hm
, &hr
);
162 u16
hpi_adapter_set_mode(u16 adapter_index
, u32 adapter_mode
)
164 return hpi_adapter_set_mode_ex(adapter_index
, adapter_mode
,
165 HPI_ADAPTER_MODE_SET
);
168 u16
hpi_adapter_set_mode_ex(u16 adapter_index
, u32 adapter_mode
,
171 struct hpi_message hm
;
172 struct hpi_response hr
;
174 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
175 HPI_ADAPTER_SET_MODE
);
176 hm
.adapter_index
= adapter_index
;
177 hm
.u
.ax
.mode
.adapter_mode
= adapter_mode
;
178 hm
.u
.ax
.mode
.query_or_set
= query_or_set
;
179 hpi_send_recv(&hm
, &hr
);
183 u16
hpi_adapter_get_mode(u16 adapter_index
, u32
*padapter_mode
)
185 struct hpi_message hm
;
186 struct hpi_response hr
;
187 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
188 HPI_ADAPTER_GET_MODE
);
189 hm
.adapter_index
= adapter_index
;
190 hpi_send_recv(&hm
, &hr
);
192 *padapter_mode
= hr
.u
.ax
.mode
.adapter_mode
;
196 u16
hpi_adapter_get_info(u16 adapter_index
, u16
*pw_num_outstreams
,
197 u16
*pw_num_instreams
, u16
*pw_version
, u32
*pserial_number
,
198 u16
*pw_adapter_type
)
200 struct hpi_message hm
;
201 struct hpi_response hr
;
202 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
203 HPI_ADAPTER_GET_INFO
);
204 hm
.adapter_index
= adapter_index
;
206 hpi_send_recv(&hm
, &hr
);
208 *pw_adapter_type
= hr
.u
.ax
.info
.adapter_type
;
209 *pw_num_outstreams
= hr
.u
.ax
.info
.num_outstreams
;
210 *pw_num_instreams
= hr
.u
.ax
.info
.num_instreams
;
211 *pw_version
= hr
.u
.ax
.info
.version
;
212 *pserial_number
= hr
.u
.ax
.info
.serial_number
;
216 u16
hpi_adapter_get_module_by_index(u16 adapter_index
, u16 module_index
,
217 u16
*pw_num_outputs
, u16
*pw_num_inputs
, u16
*pw_version
,
218 u32
*pserial_number
, u16
*pw_module_type
, u32
*ph_module
)
220 struct hpi_message hm
;
221 struct hpi_response hr
;
223 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
224 HPI_ADAPTER_MODULE_INFO
);
225 hm
.adapter_index
= adapter_index
;
226 hm
.u
.ax
.module_info
.index
= module_index
;
228 hpi_send_recv(&hm
, &hr
);
230 *pw_module_type
= hr
.u
.ax
.info
.adapter_type
;
231 *pw_num_outputs
= hr
.u
.ax
.info
.num_outstreams
;
232 *pw_num_inputs
= hr
.u
.ax
.info
.num_instreams
;
233 *pw_version
= hr
.u
.ax
.info
.version
;
234 *pserial_number
= hr
.u
.ax
.info
.serial_number
;
240 u16
hpi_adapter_set_property(u16 adapter_index
, u16 property
, u16 parameter1
,
243 struct hpi_message hm
;
244 struct hpi_response hr
;
245 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
246 HPI_ADAPTER_SET_PROPERTY
);
247 hm
.adapter_index
= adapter_index
;
248 hm
.u
.ax
.property_set
.property
= property
;
249 hm
.u
.ax
.property_set
.parameter1
= parameter1
;
250 hm
.u
.ax
.property_set
.parameter2
= parameter2
;
252 hpi_send_recv(&hm
, &hr
);
257 u16
hpi_adapter_get_property(u16 adapter_index
, u16 property
,
258 u16
*pw_parameter1
, u16
*pw_parameter2
)
260 struct hpi_message hm
;
261 struct hpi_response hr
;
262 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ADAPTER
,
263 HPI_ADAPTER_GET_PROPERTY
);
264 hm
.adapter_index
= adapter_index
;
265 hm
.u
.ax
.property_set
.property
= property
;
267 hpi_send_recv(&hm
, &hr
);
270 *pw_parameter1
= hr
.u
.ax
.property_get
.parameter1
;
272 *pw_parameter2
= hr
.u
.ax
.property_get
.parameter2
;
278 u16
hpi_adapter_enumerate_property(u16 adapter_index
, u16 index
,
279 u16 what_to_enumerate
, u16 property_index
, u32
*psetting
)
284 u16
hpi_format_create(struct hpi_format
*p_format
, u16 channels
, u16 format
,
285 u32 sample_rate
, u32 bit_rate
, u32 attributes
)
288 struct hpi_msg_format fmt
;
299 err
= HPI_ERROR_INVALID_CHANNELS
;
302 fmt
.channels
= channels
;
305 case HPI_FORMAT_PCM16_SIGNED
:
306 case HPI_FORMAT_PCM24_SIGNED
:
307 case HPI_FORMAT_PCM32_SIGNED
:
308 case HPI_FORMAT_PCM32_FLOAT
:
309 case HPI_FORMAT_PCM16_BIGENDIAN
:
310 case HPI_FORMAT_PCM8_UNSIGNED
:
311 case HPI_FORMAT_MPEG_L1
:
312 case HPI_FORMAT_MPEG_L2
:
313 case HPI_FORMAT_MPEG_L3
:
314 case HPI_FORMAT_DOLBY_AC2
:
315 case HPI_FORMAT_AA_TAGIT1_HITS
:
316 case HPI_FORMAT_AA_TAGIT1_INSERTS
:
317 case HPI_FORMAT_RAW_BITSTREAM
:
318 case HPI_FORMAT_AA_TAGIT1_HITS_EX1
:
319 case HPI_FORMAT_OEM1
:
320 case HPI_FORMAT_OEM2
:
323 err
= HPI_ERROR_INVALID_FORMAT
;
328 if (sample_rate
< 8000L) {
329 err
= HPI_ERROR_INCOMPATIBLE_SAMPLERATE
;
332 if (sample_rate
> 200000L) {
333 err
= HPI_ERROR_INCOMPATIBLE_SAMPLERATE
;
334 sample_rate
= 200000L;
336 fmt
.sample_rate
= sample_rate
;
339 case HPI_FORMAT_MPEG_L1
:
340 case HPI_FORMAT_MPEG_L2
:
341 case HPI_FORMAT_MPEG_L3
:
342 fmt
.bit_rate
= bit_rate
;
344 case HPI_FORMAT_PCM16_SIGNED
:
345 case HPI_FORMAT_PCM16_BIGENDIAN
:
346 fmt
.bit_rate
= channels
* sample_rate
* 2;
348 case HPI_FORMAT_PCM32_SIGNED
:
349 case HPI_FORMAT_PCM32_FLOAT
:
350 fmt
.bit_rate
= channels
* sample_rate
* 4;
352 case HPI_FORMAT_PCM8_UNSIGNED
:
353 fmt
.bit_rate
= channels
* sample_rate
;
360 case HPI_FORMAT_MPEG_L2
:
362 && (attributes
!= HPI_MPEG_MODE_DEFAULT
)) {
363 attributes
= HPI_MPEG_MODE_DEFAULT
;
364 err
= HPI_ERROR_INVALID_FORMAT
;
365 } else if (attributes
> HPI_MPEG_MODE_DUALCHANNEL
) {
366 attributes
= HPI_MPEG_MODE_DEFAULT
;
367 err
= HPI_ERROR_INVALID_FORMAT
;
369 fmt
.attributes
= attributes
;
372 fmt
.attributes
= attributes
;
375 hpi_msg_to_format(p_format
, &fmt
);
379 u16
hpi_stream_estimate_buffer_size(struct hpi_format
*p_format
,
380 u32 host_polling_rate_in_milli_seconds
, u32
*recommended_buffer_size
)
383 u32 bytes_per_second
;
386 struct hpi_format
*pF
= p_format
;
388 channels
= pF
->channels
;
390 switch (pF
->format
) {
391 case HPI_FORMAT_PCM16_BIGENDIAN
:
392 case HPI_FORMAT_PCM16_SIGNED
:
393 bytes_per_second
= pF
->sample_rate
* 2L * channels
;
395 case HPI_FORMAT_PCM24_SIGNED
:
396 bytes_per_second
= pF
->sample_rate
* 3L * channels
;
398 case HPI_FORMAT_PCM32_SIGNED
:
399 case HPI_FORMAT_PCM32_FLOAT
:
400 bytes_per_second
= pF
->sample_rate
* 4L * channels
;
402 case HPI_FORMAT_PCM8_UNSIGNED
:
403 bytes_per_second
= pF
->sample_rate
* 1L * channels
;
405 case HPI_FORMAT_MPEG_L1
:
406 case HPI_FORMAT_MPEG_L2
:
407 case HPI_FORMAT_MPEG_L3
:
408 bytes_per_second
= pF
->bit_rate
/ 8L;
410 case HPI_FORMAT_DOLBY_AC2
:
412 bytes_per_second
= 256000L / 8L;
415 return HPI_ERROR_INVALID_FORMAT
;
417 size
= (bytes_per_second
* host_polling_rate_in_milli_seconds
* 2) /
420 *recommended_buffer_size
=
421 roundup_pow_of_two(((size
+ 4095L) & ~4095L));
425 u16
hpi_outstream_open(u16 adapter_index
, u16 outstream_index
,
428 struct hpi_message hm
;
429 struct hpi_response hr
;
430 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
432 hm
.adapter_index
= adapter_index
;
433 hm
.obj_index
= outstream_index
;
435 hpi_send_recv(&hm
, &hr
);
439 hpi_indexes_to_handle(HPI_OBJ_OSTREAM
, adapter_index
,
446 u16
hpi_outstream_close(u32 h_outstream
)
448 struct hpi_message hm
;
449 struct hpi_response hr
;
451 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
452 HPI_OSTREAM_HOSTBUFFER_FREE
);
453 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
454 return HPI_ERROR_INVALID_HANDLE
;
456 hpi_send_recv(&hm
, &hr
);
458 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
459 HPI_OSTREAM_GROUP_RESET
);
460 hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
);
461 hpi_send_recv(&hm
, &hr
);
463 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
465 hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
);
466 hpi_send_recv(&hm
, &hr
);
471 u16
hpi_outstream_get_info_ex(u32 h_outstream
, u16
*pw_state
,
472 u32
*pbuffer_size
, u32
*pdata_to_play
, u32
*psamples_played
,
473 u32
*pauxiliary_data_to_play
)
475 struct hpi_message hm
;
476 struct hpi_response hr
;
477 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
478 HPI_OSTREAM_GET_INFO
);
479 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
480 return HPI_ERROR_INVALID_HANDLE
;
482 hpi_send_recv(&hm
, &hr
);
485 *pw_state
= hr
.u
.d
.u
.stream_info
.state
;
487 *pbuffer_size
= hr
.u
.d
.u
.stream_info
.buffer_size
;
489 *pdata_to_play
= hr
.u
.d
.u
.stream_info
.data_available
;
491 *psamples_played
= hr
.u
.d
.u
.stream_info
.samples_transferred
;
492 if (pauxiliary_data_to_play
)
493 *pauxiliary_data_to_play
=
494 hr
.u
.d
.u
.stream_info
.auxiliary_data_available
;
498 u16
hpi_outstream_write_buf(u32 h_outstream
, const u8
*pb_data
,
499 u32 bytes_to_write
, const struct hpi_format
*p_format
)
501 struct hpi_message hm
;
502 struct hpi_response hr
;
503 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
505 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
506 return HPI_ERROR_INVALID_HANDLE
;
507 hm
.u
.d
.u
.data
.pb_data
= (u8
*)pb_data
;
508 hm
.u
.d
.u
.data
.data_size
= bytes_to_write
;
510 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
512 hpi_send_recv(&hm
, &hr
);
517 u16
hpi_outstream_start(u32 h_outstream
)
519 struct hpi_message hm
;
520 struct hpi_response hr
;
521 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
523 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
524 return HPI_ERROR_INVALID_HANDLE
;
526 hpi_send_recv(&hm
, &hr
);
531 u16
hpi_outstream_wait_start(u32 h_outstream
)
533 struct hpi_message hm
;
534 struct hpi_response hr
;
535 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
536 HPI_OSTREAM_WAIT_START
);
537 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
538 return HPI_ERROR_INVALID_HANDLE
;
540 hpi_send_recv(&hm
, &hr
);
545 u16
hpi_outstream_stop(u32 h_outstream
)
547 struct hpi_message hm
;
548 struct hpi_response hr
;
549 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
551 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
552 return HPI_ERROR_INVALID_HANDLE
;
554 hpi_send_recv(&hm
, &hr
);
559 u16
hpi_outstream_sinegen(u32 h_outstream
)
561 struct hpi_message hm
;
562 struct hpi_response hr
;
563 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
564 HPI_OSTREAM_SINEGEN
);
565 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
566 return HPI_ERROR_INVALID_HANDLE
;
568 hpi_send_recv(&hm
, &hr
);
573 u16
hpi_outstream_reset(u32 h_outstream
)
575 struct hpi_message hm
;
576 struct hpi_response hr
;
577 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
579 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
580 return HPI_ERROR_INVALID_HANDLE
;
582 hpi_send_recv(&hm
, &hr
);
587 u16
hpi_outstream_query_format(u32 h_outstream
, struct hpi_format
*p_format
)
589 struct hpi_message hm
;
590 struct hpi_response hr
;
592 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
593 HPI_OSTREAM_QUERY_FORMAT
);
594 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
595 return HPI_ERROR_INVALID_HANDLE
;
597 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
599 hpi_send_recv(&hm
, &hr
);
604 u16
hpi_outstream_set_format(u32 h_outstream
, struct hpi_format
*p_format
)
606 struct hpi_message hm
;
607 struct hpi_response hr
;
609 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
610 HPI_OSTREAM_SET_FORMAT
);
611 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
612 return HPI_ERROR_INVALID_HANDLE
;
614 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
616 hpi_send_recv(&hm
, &hr
);
621 u16
hpi_outstream_set_velocity(u32 h_outstream
, short velocity
)
623 struct hpi_message hm
;
624 struct hpi_response hr
;
626 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
627 HPI_OSTREAM_SET_VELOCITY
);
628 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
629 return HPI_ERROR_INVALID_HANDLE
;
630 hm
.u
.d
.u
.velocity
= velocity
;
632 hpi_send_recv(&hm
, &hr
);
637 u16
hpi_outstream_set_punch_in_out(u32 h_outstream
, u32 punch_in_sample
,
638 u32 punch_out_sample
)
640 struct hpi_message hm
;
641 struct hpi_response hr
;
643 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
644 HPI_OSTREAM_SET_PUNCHINOUT
);
645 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
646 return HPI_ERROR_INVALID_HANDLE
;
648 hm
.u
.d
.u
.pio
.punch_in_sample
= punch_in_sample
;
649 hm
.u
.d
.u
.pio
.punch_out_sample
= punch_out_sample
;
651 hpi_send_recv(&hm
, &hr
);
656 u16
hpi_outstream_ancillary_reset(u32 h_outstream
, u16 mode
)
658 struct hpi_message hm
;
659 struct hpi_response hr
;
661 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
662 HPI_OSTREAM_ANC_RESET
);
663 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
664 return HPI_ERROR_INVALID_HANDLE
;
665 hm
.u
.d
.u
.data
.format
.channels
= mode
;
666 hpi_send_recv(&hm
, &hr
);
670 u16
hpi_outstream_ancillary_get_info(u32 h_outstream
, u32
*pframes_available
)
672 struct hpi_message hm
;
673 struct hpi_response hr
;
675 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
676 HPI_OSTREAM_ANC_GET_INFO
);
677 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
678 return HPI_ERROR_INVALID_HANDLE
;
679 hpi_send_recv(&hm
, &hr
);
681 if (pframes_available
)
683 hr
.u
.d
.u
.stream_info
.data_available
/
684 sizeof(struct hpi_anc_frame
);
689 u16
hpi_outstream_ancillary_read(u32 h_outstream
,
690 struct hpi_anc_frame
*p_anc_frame_buffer
,
691 u32 anc_frame_buffer_size_in_bytes
,
692 u32 number_of_ancillary_frames_to_read
)
694 struct hpi_message hm
;
695 struct hpi_response hr
;
697 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
698 HPI_OSTREAM_ANC_READ
);
699 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
700 return HPI_ERROR_INVALID_HANDLE
;
701 hm
.u
.d
.u
.data
.pb_data
= (u8
*)p_anc_frame_buffer
;
702 hm
.u
.d
.u
.data
.data_size
=
703 number_of_ancillary_frames_to_read
*
704 sizeof(struct hpi_anc_frame
);
705 if (hm
.u
.d
.u
.data
.data_size
<= anc_frame_buffer_size_in_bytes
)
706 hpi_send_recv(&hm
, &hr
);
708 hr
.error
= HPI_ERROR_INVALID_DATASIZE
;
712 u16
hpi_outstream_set_time_scale(u32 h_outstream
, u32 time_scale
)
714 struct hpi_message hm
;
715 struct hpi_response hr
;
717 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
718 HPI_OSTREAM_SET_TIMESCALE
);
719 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
720 return HPI_ERROR_INVALID_HANDLE
;
722 hm
.u
.d
.u
.time_scale
= time_scale
;
724 hpi_send_recv(&hm
, &hr
);
729 u16
hpi_outstream_host_buffer_allocate(u32 h_outstream
, u32 size_in_bytes
)
731 struct hpi_message hm
;
732 struct hpi_response hr
;
734 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
735 HPI_OSTREAM_HOSTBUFFER_ALLOC
);
736 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
737 return HPI_ERROR_INVALID_HANDLE
;
738 hm
.u
.d
.u
.data
.data_size
= size_in_bytes
;
739 hpi_send_recv(&hm
, &hr
);
743 u16
hpi_outstream_host_buffer_get_info(u32 h_outstream
, u8
**pp_buffer
,
744 struct hpi_hostbuffer_status
**pp_status
)
746 struct hpi_message hm
;
747 struct hpi_response hr
;
749 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
750 HPI_OSTREAM_HOSTBUFFER_GET_INFO
);
751 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
752 return HPI_ERROR_INVALID_HANDLE
;
753 hpi_send_recv(&hm
, &hr
);
757 *pp_buffer
= hr
.u
.d
.u
.hostbuffer_info
.p_buffer
;
759 *pp_status
= hr
.u
.d
.u
.hostbuffer_info
.p_status
;
764 u16
hpi_outstream_host_buffer_free(u32 h_outstream
)
766 struct hpi_message hm
;
767 struct hpi_response hr
;
769 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
770 HPI_OSTREAM_HOSTBUFFER_FREE
);
771 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
772 return HPI_ERROR_INVALID_HANDLE
;
773 hpi_send_recv(&hm
, &hr
);
777 u16
hpi_outstream_group_add(u32 h_outstream
, u32 h_stream
)
779 struct hpi_message hm
;
780 struct hpi_response hr
;
784 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
785 HPI_OSTREAM_GROUP_ADD
);
787 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
788 return HPI_ERROR_INVALID_HANDLE
;
790 if (hpi_handle_indexes(h_stream
, &adapter
,
791 &hm
.u
.d
.u
.stream
.stream_index
))
792 return HPI_ERROR_INVALID_HANDLE
;
794 c_obj_type
= hpi_handle_object(h_stream
);
795 switch (c_obj_type
) {
796 case HPI_OBJ_OSTREAM
:
797 case HPI_OBJ_ISTREAM
:
798 hm
.u
.d
.u
.stream
.object_type
= c_obj_type
;
801 return HPI_ERROR_INVALID_OBJ
;
803 if (adapter
!= hm
.adapter_index
)
804 return HPI_ERROR_NO_INTERADAPTER_GROUPS
;
806 hpi_send_recv(&hm
, &hr
);
810 u16
hpi_outstream_group_get_map(u32 h_outstream
, u32
*poutstream_map
,
813 struct hpi_message hm
;
814 struct hpi_response hr
;
816 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
817 HPI_OSTREAM_GROUP_GETMAP
);
818 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
819 return HPI_ERROR_INVALID_HANDLE
;
820 hpi_send_recv(&hm
, &hr
);
823 *poutstream_map
= hr
.u
.d
.u
.group_info
.outstream_group_map
;
825 *pinstream_map
= hr
.u
.d
.u
.group_info
.instream_group_map
;
830 u16
hpi_outstream_group_reset(u32 h_outstream
)
832 struct hpi_message hm
;
833 struct hpi_response hr
;
835 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_OSTREAM
,
836 HPI_OSTREAM_GROUP_RESET
);
837 if (hpi_handle_indexes(h_outstream
, &hm
.adapter_index
, &hm
.obj_index
))
838 return HPI_ERROR_INVALID_HANDLE
;
839 hpi_send_recv(&hm
, &hr
);
843 u16
hpi_instream_open(u16 adapter_index
, u16 instream_index
, u32
*ph_instream
)
845 struct hpi_message hm
;
846 struct hpi_response hr
;
848 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
850 hm
.adapter_index
= adapter_index
;
851 hm
.obj_index
= instream_index
;
853 hpi_send_recv(&hm
, &hr
);
857 hpi_indexes_to_handle(HPI_OBJ_ISTREAM
, adapter_index
,
865 u16
hpi_instream_close(u32 h_instream
)
867 struct hpi_message hm
;
868 struct hpi_response hr
;
870 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
871 HPI_ISTREAM_HOSTBUFFER_FREE
);
872 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
873 return HPI_ERROR_INVALID_HANDLE
;
874 hpi_send_recv(&hm
, &hr
);
876 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
877 HPI_ISTREAM_GROUP_RESET
);
878 hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
);
879 hpi_send_recv(&hm
, &hr
);
881 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
883 hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
);
884 hpi_send_recv(&hm
, &hr
);
889 u16
hpi_instream_query_format(u32 h_instream
,
890 const struct hpi_format
*p_format
)
892 struct hpi_message hm
;
893 struct hpi_response hr
;
895 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
896 HPI_ISTREAM_QUERY_FORMAT
);
897 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
898 return HPI_ERROR_INVALID_HANDLE
;
899 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
901 hpi_send_recv(&hm
, &hr
);
906 u16
hpi_instream_set_format(u32 h_instream
, const struct hpi_format
*p_format
)
908 struct hpi_message hm
;
909 struct hpi_response hr
;
911 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
912 HPI_ISTREAM_SET_FORMAT
);
913 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
914 return HPI_ERROR_INVALID_HANDLE
;
915 hpi_format_to_msg(&hm
.u
.d
.u
.data
.format
, p_format
);
917 hpi_send_recv(&hm
, &hr
);
922 u16
hpi_instream_read_buf(u32 h_instream
, u8
*pb_data
, u32 bytes_to_read
)
924 struct hpi_message hm
;
925 struct hpi_response hr
;
927 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
929 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
930 return HPI_ERROR_INVALID_HANDLE
;
931 hm
.u
.d
.u
.data
.data_size
= bytes_to_read
;
932 hm
.u
.d
.u
.data
.pb_data
= pb_data
;
934 hpi_send_recv(&hm
, &hr
);
939 u16
hpi_instream_start(u32 h_instream
)
941 struct hpi_message hm
;
942 struct hpi_response hr
;
944 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
946 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
947 return HPI_ERROR_INVALID_HANDLE
;
949 hpi_send_recv(&hm
, &hr
);
954 u16
hpi_instream_wait_start(u32 h_instream
)
956 struct hpi_message hm
;
957 struct hpi_response hr
;
959 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
960 HPI_ISTREAM_WAIT_START
);
961 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
962 return HPI_ERROR_INVALID_HANDLE
;
964 hpi_send_recv(&hm
, &hr
);
969 u16
hpi_instream_stop(u32 h_instream
)
971 struct hpi_message hm
;
972 struct hpi_response hr
;
974 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
976 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
977 return HPI_ERROR_INVALID_HANDLE
;
979 hpi_send_recv(&hm
, &hr
);
984 u16
hpi_instream_reset(u32 h_instream
)
986 struct hpi_message hm
;
987 struct hpi_response hr
;
989 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
991 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
992 return HPI_ERROR_INVALID_HANDLE
;
994 hpi_send_recv(&hm
, &hr
);
999 u16
hpi_instream_get_info_ex(u32 h_instream
, u16
*pw_state
, u32
*pbuffer_size
,
1000 u32
*pdata_recorded
, u32
*psamples_recorded
,
1001 u32
*pauxiliary_data_recorded
)
1003 struct hpi_message hm
;
1004 struct hpi_response hr
;
1005 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1006 HPI_ISTREAM_GET_INFO
);
1007 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1008 return HPI_ERROR_INVALID_HANDLE
;
1010 hpi_send_recv(&hm
, &hr
);
1013 *pw_state
= hr
.u
.d
.u
.stream_info
.state
;
1015 *pbuffer_size
= hr
.u
.d
.u
.stream_info
.buffer_size
;
1017 *pdata_recorded
= hr
.u
.d
.u
.stream_info
.data_available
;
1018 if (psamples_recorded
)
1019 *psamples_recorded
= hr
.u
.d
.u
.stream_info
.samples_transferred
;
1020 if (pauxiliary_data_recorded
)
1021 *pauxiliary_data_recorded
=
1022 hr
.u
.d
.u
.stream_info
.auxiliary_data_available
;
1026 u16
hpi_instream_ancillary_reset(u32 h_instream
, u16 bytes_per_frame
,
1027 u16 mode
, u16 alignment
, u16 idle_bit
)
1029 struct hpi_message hm
;
1030 struct hpi_response hr
;
1031 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1032 HPI_ISTREAM_ANC_RESET
);
1033 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1034 return HPI_ERROR_INVALID_HANDLE
;
1035 hm
.u
.d
.u
.data
.format
.attributes
= bytes_per_frame
;
1036 hm
.u
.d
.u
.data
.format
.format
= (mode
<< 8) | (alignment
& 0xff);
1037 hm
.u
.d
.u
.data
.format
.channels
= idle_bit
;
1038 hpi_send_recv(&hm
, &hr
);
1042 u16
hpi_instream_ancillary_get_info(u32 h_instream
, u32
*pframe_space
)
1044 struct hpi_message hm
;
1045 struct hpi_response hr
;
1046 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1047 HPI_ISTREAM_ANC_GET_INFO
);
1048 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1049 return HPI_ERROR_INVALID_HANDLE
;
1050 hpi_send_recv(&hm
, &hr
);
1053 (hr
.u
.d
.u
.stream_info
.buffer_size
-
1054 hr
.u
.d
.u
.stream_info
.data_available
) /
1055 sizeof(struct hpi_anc_frame
);
1059 u16
hpi_instream_ancillary_write(u32 h_instream
,
1060 const struct hpi_anc_frame
*p_anc_frame_buffer
,
1061 u32 anc_frame_buffer_size_in_bytes
,
1062 u32 number_of_ancillary_frames_to_write
)
1064 struct hpi_message hm
;
1065 struct hpi_response hr
;
1067 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1068 HPI_ISTREAM_ANC_WRITE
);
1069 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1070 return HPI_ERROR_INVALID_HANDLE
;
1071 hm
.u
.d
.u
.data
.pb_data
= (u8
*)p_anc_frame_buffer
;
1072 hm
.u
.d
.u
.data
.data_size
=
1073 number_of_ancillary_frames_to_write
*
1074 sizeof(struct hpi_anc_frame
);
1075 if (hm
.u
.d
.u
.data
.data_size
<= anc_frame_buffer_size_in_bytes
)
1076 hpi_send_recv(&hm
, &hr
);
1078 hr
.error
= HPI_ERROR_INVALID_DATASIZE
;
1082 u16
hpi_instream_host_buffer_allocate(u32 h_instream
, u32 size_in_bytes
)
1085 struct hpi_message hm
;
1086 struct hpi_response hr
;
1088 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1089 HPI_ISTREAM_HOSTBUFFER_ALLOC
);
1090 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1091 return HPI_ERROR_INVALID_HANDLE
;
1092 hm
.u
.d
.u
.data
.data_size
= size_in_bytes
;
1093 hpi_send_recv(&hm
, &hr
);
1097 u16
hpi_instream_host_buffer_get_info(u32 h_instream
, u8
**pp_buffer
,
1098 struct hpi_hostbuffer_status
**pp_status
)
1100 struct hpi_message hm
;
1101 struct hpi_response hr
;
1103 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1104 HPI_ISTREAM_HOSTBUFFER_GET_INFO
);
1105 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1106 return HPI_ERROR_INVALID_HANDLE
;
1107 hpi_send_recv(&hm
, &hr
);
1109 if (hr
.error
== 0) {
1111 *pp_buffer
= hr
.u
.d
.u
.hostbuffer_info
.p_buffer
;
1113 *pp_status
= hr
.u
.d
.u
.hostbuffer_info
.p_status
;
1118 u16
hpi_instream_host_buffer_free(u32 h_instream
)
1121 struct hpi_message hm
;
1122 struct hpi_response hr
;
1124 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1125 HPI_ISTREAM_HOSTBUFFER_FREE
);
1126 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1127 return HPI_ERROR_INVALID_HANDLE
;
1128 hpi_send_recv(&hm
, &hr
);
1132 u16
hpi_instream_group_add(u32 h_instream
, u32 h_stream
)
1134 struct hpi_message hm
;
1135 struct hpi_response hr
;
1139 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1140 HPI_ISTREAM_GROUP_ADD
);
1143 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1144 return HPI_ERROR_INVALID_HANDLE
;
1146 if (hpi_handle_indexes(h_stream
, &adapter
,
1147 &hm
.u
.d
.u
.stream
.stream_index
))
1148 return HPI_ERROR_INVALID_HANDLE
;
1150 c_obj_type
= hpi_handle_object(h_stream
);
1152 switch (c_obj_type
) {
1153 case HPI_OBJ_OSTREAM
:
1154 case HPI_OBJ_ISTREAM
:
1155 hm
.u
.d
.u
.stream
.object_type
= c_obj_type
;
1158 return HPI_ERROR_INVALID_OBJ
;
1161 if (adapter
!= hm
.adapter_index
)
1162 return HPI_ERROR_NO_INTERADAPTER_GROUPS
;
1164 hpi_send_recv(&hm
, &hr
);
1168 u16
hpi_instream_group_get_map(u32 h_instream
, u32
*poutstream_map
,
1171 struct hpi_message hm
;
1172 struct hpi_response hr
;
1174 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1175 HPI_ISTREAM_HOSTBUFFER_FREE
);
1176 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1177 return HPI_ERROR_INVALID_HANDLE
;
1178 hpi_send_recv(&hm
, &hr
);
1181 *poutstream_map
= hr
.u
.d
.u
.group_info
.outstream_group_map
;
1183 *pinstream_map
= hr
.u
.d
.u
.group_info
.instream_group_map
;
1188 u16
hpi_instream_group_reset(u32 h_instream
)
1190 struct hpi_message hm
;
1191 struct hpi_response hr
;
1193 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_ISTREAM
,
1194 HPI_ISTREAM_GROUP_RESET
);
1195 if (hpi_handle_indexes(h_instream
, &hm
.adapter_index
, &hm
.obj_index
))
1196 return HPI_ERROR_INVALID_HANDLE
;
1197 hpi_send_recv(&hm
, &hr
);
1201 u16
hpi_mixer_open(u16 adapter_index
, u32
*ph_mixer
)
1203 struct hpi_message hm
;
1204 struct hpi_response hr
;
1205 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_OPEN
);
1206 hm
.adapter_index
= adapter_index
;
1208 hpi_send_recv(&hm
, &hr
);
1212 hpi_indexes_to_handle(HPI_OBJ_MIXER
, adapter_index
,
1219 u16
hpi_mixer_close(u32 h_mixer
)
1221 struct hpi_message hm
;
1222 struct hpi_response hr
;
1224 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_CLOSE
);
1225 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1226 return HPI_ERROR_INVALID_HANDLE
;
1228 hpi_send_recv(&hm
, &hr
);
1232 u16
hpi_mixer_get_control(u32 h_mixer
, u16 src_node_type
,
1233 u16 src_node_type_index
, u16 dst_node_type
, u16 dst_node_type_index
,
1234 u16 control_type
, u32
*ph_control
)
1236 struct hpi_message hm
;
1237 struct hpi_response hr
;
1238 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
,
1239 HPI_MIXER_GET_CONTROL
);
1240 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1241 return HPI_ERROR_INVALID_HANDLE
;
1242 hm
.u
.m
.node_type1
= src_node_type
;
1243 hm
.u
.m
.node_index1
= src_node_type_index
;
1244 hm
.u
.m
.node_type2
= dst_node_type
;
1245 hm
.u
.m
.node_index2
= dst_node_type_index
;
1246 hm
.u
.m
.control_type
= control_type
;
1248 hpi_send_recv(&hm
, &hr
);
1252 hpi_indexes_to_handle(HPI_OBJ_CONTROL
,
1253 hm
.adapter_index
, hr
.u
.m
.control_index
);
1259 u16
hpi_mixer_get_control_by_index(u32 h_mixer
, u16 control_index
,
1260 u16
*pw_src_node_type
, u16
*pw_src_node_index
, u16
*pw_dst_node_type
,
1261 u16
*pw_dst_node_index
, u16
*pw_control_type
, u32
*ph_control
)
1263 struct hpi_message hm
;
1264 struct hpi_response hr
;
1265 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
,
1266 HPI_MIXER_GET_CONTROL_BY_INDEX
);
1267 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1268 return HPI_ERROR_INVALID_HANDLE
;
1269 hm
.u
.m
.control_index
= control_index
;
1270 hpi_send_recv(&hm
, &hr
);
1272 if (pw_src_node_type
) {
1274 hr
.u
.m
.src_node_type
+ HPI_SOURCENODE_NONE
;
1275 *pw_src_node_index
= hr
.u
.m
.src_node_index
;
1276 *pw_dst_node_type
= hr
.u
.m
.dst_node_type
+ HPI_DESTNODE_NONE
;
1277 *pw_dst_node_index
= hr
.u
.m
.dst_node_index
;
1279 if (pw_control_type
)
1280 *pw_control_type
= hr
.u
.m
.control_index
;
1285 hpi_indexes_to_handle(HPI_OBJ_CONTROL
,
1286 hm
.adapter_index
, control_index
);
1293 u16
hpi_mixer_store(u32 h_mixer
, enum HPI_MIXER_STORE_COMMAND command
,
1296 struct hpi_message hm
;
1297 struct hpi_response hr
;
1298 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_MIXER
, HPI_MIXER_STORE
);
1299 if (hpi_handle_indexes(h_mixer
, &hm
.adapter_index
, NULL
))
1300 return HPI_ERROR_INVALID_HANDLE
;
1301 hm
.u
.mx
.store
.command
= command
;
1302 hm
.u
.mx
.store
.index
= index
;
1303 hpi_send_recv(&hm
, &hr
);
1308 u16
hpi_control_param_set(const u32 h_control
, const u16 attrib
,
1309 const u32 param1
, const u32 param2
)
1311 struct hpi_message hm
;
1312 struct hpi_response hr
;
1314 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1315 HPI_CONTROL_SET_STATE
);
1316 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1317 return HPI_ERROR_INVALID_HANDLE
;
1318 hm
.u
.c
.attribute
= attrib
;
1319 hm
.u
.c
.param1
= param1
;
1320 hm
.u
.c
.param2
= param2
;
1321 hpi_send_recv(&hm
, &hr
);
1325 static u16
hpi_control_log_set2(u32 h_control
, u16 attrib
, short sv0
,
1328 struct hpi_message hm
;
1329 struct hpi_response hr
;
1331 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1332 HPI_CONTROL_SET_STATE
);
1333 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1334 return HPI_ERROR_INVALID_HANDLE
;
1335 hm
.u
.c
.attribute
= attrib
;
1336 hm
.u
.c
.an_log_value
[0] = sv0
;
1337 hm
.u
.c
.an_log_value
[1] = sv1
;
1338 hpi_send_recv(&hm
, &hr
);
1343 u16
hpi_control_param_get(const u32 h_control
, const u16 attrib
, u32 param1
,
1344 u32 param2
, u32
*pparam1
, u32
*pparam2
)
1346 struct hpi_message hm
;
1347 struct hpi_response hr
;
1349 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1350 HPI_CONTROL_GET_STATE
);
1351 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1352 return HPI_ERROR_INVALID_HANDLE
;
1353 hm
.u
.c
.attribute
= attrib
;
1354 hm
.u
.c
.param1
= param1
;
1355 hm
.u
.c
.param2
= param2
;
1356 hpi_send_recv(&hm
, &hr
);
1358 *pparam1
= hr
.u
.c
.param1
;
1360 *pparam2
= hr
.u
.c
.param2
;
1365 #define hpi_control_param1_get(h, a, p1) \
1366 hpi_control_param_get(h, a, 0, 0, p1, NULL)
1367 #define hpi_control_param2_get(h, a, p1, p2) \
1368 hpi_control_param_get(h, a, 0, 0, p1, p2)
1370 static u16
hpi_control_log_get2(u32 h_control
, u16 attrib
, short *sv0
,
1373 struct hpi_message hm
;
1374 struct hpi_response hr
;
1375 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1376 HPI_CONTROL_GET_STATE
);
1377 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1378 return HPI_ERROR_INVALID_HANDLE
;
1379 hm
.u
.c
.attribute
= attrib
;
1381 hpi_send_recv(&hm
, &hr
);
1382 *sv0
= hr
.u
.c
.an_log_value
[0];
1384 *sv1
= hr
.u
.c
.an_log_value
[1];
1389 u16
hpi_control_query(const u32 h_control
, const u16 attrib
, const u32 index
,
1390 const u32 param
, u32
*psetting
)
1392 struct hpi_message hm
;
1393 struct hpi_response hr
;
1395 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1396 HPI_CONTROL_GET_INFO
);
1397 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1398 return HPI_ERROR_INVALID_HANDLE
;
1400 hm
.u
.c
.attribute
= attrib
;
1401 hm
.u
.c
.param1
= index
;
1402 hm
.u
.c
.param2
= param
;
1404 hpi_send_recv(&hm
, &hr
);
1405 *psetting
= hr
.u
.c
.param1
;
1410 static u16
hpi_control_get_string(const u32 h_control
, const u16 attribute
,
1411 char *psz_string
, const u32 string_length
)
1413 unsigned int sub_string_index
= 0, j
= 0;
1418 if ((string_length
< 1) || (string_length
> 256))
1419 return HPI_ERROR_INVALID_CONTROL_VALUE
;
1420 for (sub_string_index
= 0; sub_string_index
< string_length
;
1421 sub_string_index
+= 8) {
1422 struct hpi_message hm
;
1423 struct hpi_response hr
;
1425 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1426 HPI_CONTROL_GET_STATE
);
1427 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
,
1429 return HPI_ERROR_INVALID_HANDLE
;
1430 hm
.u
.c
.attribute
= attribute
;
1431 hm
.u
.c
.param1
= sub_string_index
;
1433 hpi_send_recv(&hm
, &hr
);
1435 if (sub_string_index
== 0
1436 && (hr
.u
.cu
.chars8
.remaining_chars
+ 8) >
1438 return HPI_ERROR_INVALID_CONTROL_VALUE
;
1444 for (j
= 0; j
< 8; j
++) {
1445 c
= hr
.u
.cu
.chars8
.sz_data
[j
];
1446 psz_string
[sub_string_index
+ j
] = c
;
1448 if (n
>= string_length
) {
1449 psz_string
[string_length
- 1] = 0;
1450 err
= HPI_ERROR_INVALID_CONTROL_VALUE
;
1457 if ((hr
.u
.cu
.chars8
.remaining_chars
== 0)
1458 && ((sub_string_index
+ j
) < string_length
)
1461 psz_string
[sub_string_index
+ j
] = c
;
1469 u16
hpi_aesebu_receiver_query_format(const u32 h_aes_rx
, const u32 index
,
1475 err
= hpi_control_query(h_aes_rx
, HPI_AESEBURX_FORMAT
, index
, 0, &qr
);
1476 *pw_format
= (u16
)qr
;
1480 u16
hpi_aesebu_receiver_set_format(u32 h_control
, u16 format
)
1482 return hpi_control_param_set(h_control
, HPI_AESEBURX_FORMAT
, format
,
1486 u16
hpi_aesebu_receiver_get_format(u32 h_control
, u16
*pw_format
)
1491 err
= hpi_control_param1_get(h_control
, HPI_AESEBURX_FORMAT
, ¶m
);
1492 if (!err
&& pw_format
)
1493 *pw_format
= (u16
)param
;
1498 u16
hpi_aesebu_receiver_get_sample_rate(u32 h_control
, u32
*psample_rate
)
1500 return hpi_control_param1_get(h_control
, HPI_AESEBURX_SAMPLERATE
,
1504 u16
hpi_aesebu_receiver_get_user_data(u32 h_control
, u16 index
, u16
*pw_data
)
1506 struct hpi_message hm
;
1507 struct hpi_response hr
;
1508 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1509 HPI_CONTROL_GET_STATE
);
1510 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1511 return HPI_ERROR_INVALID_HANDLE
;
1512 hm
.u
.c
.attribute
= HPI_AESEBURX_USERDATA
;
1513 hm
.u
.c
.param1
= index
;
1515 hpi_send_recv(&hm
, &hr
);
1518 *pw_data
= (u16
)hr
.u
.c
.param2
;
1522 u16
hpi_aesebu_receiver_get_channel_status(u32 h_control
, u16 index
,
1525 struct hpi_message hm
;
1526 struct hpi_response hr
;
1527 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1528 HPI_CONTROL_GET_STATE
);
1529 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1530 return HPI_ERROR_INVALID_HANDLE
;
1531 hm
.u
.c
.attribute
= HPI_AESEBURX_CHANNELSTATUS
;
1532 hm
.u
.c
.param1
= index
;
1534 hpi_send_recv(&hm
, &hr
);
1537 *pw_data
= (u16
)hr
.u
.c
.param2
;
1541 u16
hpi_aesebu_receiver_get_error_status(u32 h_control
, u16
*pw_error_data
)
1546 err
= hpi_control_param1_get(h_control
, HPI_AESEBURX_ERRORSTATUS
,
1549 *pw_error_data
= (u16
)error_data
;
1553 u16
hpi_aesebu_transmitter_set_sample_rate(u32 h_control
, u32 sample_rate
)
1555 return hpi_control_param_set(h_control
, HPI_AESEBUTX_SAMPLERATE
,
1559 u16
hpi_aesebu_transmitter_set_user_data(u32 h_control
, u16 index
, u16 data
)
1561 return hpi_control_param_set(h_control
, HPI_AESEBUTX_USERDATA
, index
,
1565 u16
hpi_aesebu_transmitter_set_channel_status(u32 h_control
, u16 index
,
1568 return hpi_control_param_set(h_control
, HPI_AESEBUTX_CHANNELSTATUS
,
1572 u16
hpi_aesebu_transmitter_get_channel_status(u32 h_control
, u16 index
,
1575 return HPI_ERROR_INVALID_OPERATION
;
1578 u16
hpi_aesebu_transmitter_query_format(const u32 h_aes_tx
, const u32 index
,
1584 err
= hpi_control_query(h_aes_tx
, HPI_AESEBUTX_FORMAT
, index
, 0, &qr
);
1585 *pw_format
= (u16
)qr
;
1589 u16
hpi_aesebu_transmitter_set_format(u32 h_control
, u16 output_format
)
1591 return hpi_control_param_set(h_control
, HPI_AESEBUTX_FORMAT
,
1595 u16
hpi_aesebu_transmitter_get_format(u32 h_control
, u16
*pw_output_format
)
1600 err
= hpi_control_param1_get(h_control
, HPI_AESEBUTX_FORMAT
, ¶m
);
1601 if (!err
&& pw_output_format
)
1602 *pw_output_format
= (u16
)param
;
1607 u16
hpi_bitstream_set_clock_edge(u32 h_control
, u16 edge_type
)
1609 return hpi_control_param_set(h_control
, HPI_BITSTREAM_CLOCK_EDGE
,
1613 u16
hpi_bitstream_set_data_polarity(u32 h_control
, u16 polarity
)
1615 return hpi_control_param_set(h_control
, HPI_BITSTREAM_DATA_POLARITY
,
1619 u16
hpi_bitstream_get_activity(u32 h_control
, u16
*pw_clk_activity
,
1620 u16
*pw_data_activity
)
1622 struct hpi_message hm
;
1623 struct hpi_response hr
;
1624 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1625 HPI_CONTROL_GET_STATE
);
1626 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1627 return HPI_ERROR_INVALID_HANDLE
;
1628 hm
.u
.c
.attribute
= HPI_BITSTREAM_ACTIVITY
;
1629 hpi_send_recv(&hm
, &hr
);
1630 if (pw_clk_activity
)
1631 *pw_clk_activity
= (u16
)hr
.u
.c
.param1
;
1632 if (pw_data_activity
)
1633 *pw_data_activity
= (u16
)hr
.u
.c
.param2
;
1637 u16
hpi_channel_mode_query_mode(const u32 h_mode
, const u32 index
,
1643 err
= hpi_control_query(h_mode
, HPI_CHANNEL_MODE_MODE
, index
, 0, &qr
);
1648 u16
hpi_channel_mode_set(u32 h_control
, u16 mode
)
1650 return hpi_control_param_set(h_control
, HPI_CHANNEL_MODE_MODE
, mode
,
1654 u16
hpi_channel_mode_get(u32 h_control
, u16
*mode
)
1657 u16 err
= hpi_control_param1_get(h_control
,
1658 HPI_CHANNEL_MODE_MODE
, &mode32
);
1660 *mode
= (u16
)mode32
;
1664 u16
hpi_cobranet_hmi_write(u32 h_control
, u32 hmi_address
, u32 byte_count
,
1667 struct hpi_msg_cobranet_hmiwrite hm
;
1668 struct hpi_response_header hr
;
1670 hpi_init_message_responseV1(&hm
.h
, sizeof(hm
), &hr
, sizeof(hr
),
1671 HPI_OBJ_CONTROL
, HPI_CONTROL_SET_STATE
);
1673 if (hpi_handle_indexes(h_control
, &hm
.h
.adapter_index
,
1675 return HPI_ERROR_INVALID_HANDLE
;
1677 if (byte_count
> sizeof(hm
.bytes
))
1678 return HPI_ERROR_MESSAGE_BUFFER_TOO_SMALL
;
1680 hm
.p
.attribute
= HPI_COBRANET_SET
;
1681 hm
.p
.byte_count
= byte_count
;
1682 hm
.p
.hmi_address
= hmi_address
;
1683 memcpy(hm
.bytes
, pb_data
, byte_count
);
1684 hm
.h
.size
= (u16
)(sizeof(hm
.h
) + sizeof(hm
.p
) + byte_count
);
1686 hpi_send_recvV1(&hm
.h
, &hr
);
1690 u16
hpi_cobranet_hmi_read(u32 h_control
, u32 hmi_address
, u32 max_byte_count
,
1691 u32
*pbyte_count
, u8
*pb_data
)
1693 struct hpi_msg_cobranet_hmiread hm
;
1694 struct hpi_res_cobranet_hmiread hr
;
1696 hpi_init_message_responseV1(&hm
.h
, sizeof(hm
), &hr
.h
, sizeof(hr
),
1697 HPI_OBJ_CONTROL
, HPI_CONTROL_GET_STATE
);
1699 if (hpi_handle_indexes(h_control
, &hm
.h
.adapter_index
,
1701 return HPI_ERROR_INVALID_HANDLE
;
1703 if (max_byte_count
> sizeof(hr
.bytes
))
1704 return HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL
;
1706 hm
.p
.attribute
= HPI_COBRANET_GET
;
1707 hm
.p
.byte_count
= max_byte_count
;
1708 hm
.p
.hmi_address
= hmi_address
;
1710 hpi_send_recvV1(&hm
.h
, &hr
.h
);
1712 if (!hr
.h
.error
&& pb_data
) {
1713 if (hr
.byte_count
> sizeof(hr
.bytes
))
1715 return HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL
;
1717 *pbyte_count
= hr
.byte_count
;
1719 if (hr
.byte_count
< max_byte_count
)
1720 max_byte_count
= *pbyte_count
;
1722 memcpy(pb_data
, hr
.bytes
, max_byte_count
);
1727 u16
hpi_cobranet_hmi_get_status(u32 h_control
, u32
*pstatus
,
1728 u32
*preadable_size
, u32
*pwriteable_size
)
1730 struct hpi_message hm
;
1731 struct hpi_response hr
;
1733 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1734 HPI_CONTROL_GET_STATE
);
1735 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1736 return HPI_ERROR_INVALID_HANDLE
;
1738 hm
.u
.c
.attribute
= HPI_COBRANET_GET_STATUS
;
1740 hpi_send_recv(&hm
, &hr
);
1743 *pstatus
= hr
.u
.cu
.cobranet
.status
.status
;
1746 hr
.u
.cu
.cobranet
.status
.readable_size
;
1747 if (pwriteable_size
)
1749 hr
.u
.cu
.cobranet
.status
.writeable_size
;
1754 u16
hpi_cobranet_get_ip_address(u32 h_control
, u32
*pdw_ip_address
)
1760 err
= hpi_cobranet_hmi_read(h_control
,
1761 HPI_COBRANET_HMI_cobra_ip_mon_currentIP
, 4, &byte_count
,
1765 ((iP
& 0xff000000) >> 8) | ((iP
& 0x00ff0000) << 8) | ((iP
&
1766 0x0000ff00) >> 8) | ((iP
& 0x000000ff) << 8);
1769 *pdw_ip_address
= 0;
1775 u16
hpi_cobranet_set_ip_address(u32 h_control
, u32 dw_ip_address
)
1780 iP
= ((dw_ip_address
& 0xff000000) >> 8) | ((dw_ip_address
&
1781 0x00ff0000) << 8) | ((dw_ip_address
& 0x0000ff00) >>
1782 8) | ((dw_ip_address
& 0x000000ff) << 8);
1784 err
= hpi_cobranet_hmi_write(h_control
,
1785 HPI_COBRANET_HMI_cobra_ip_mon_currentIP
, 4, (u8
*)&iP
);
1791 u16
hpi_cobranet_get_static_ip_address(u32 h_control
, u32
*pdw_ip_address
)
1796 err
= hpi_cobranet_hmi_read(h_control
,
1797 HPI_COBRANET_HMI_cobra_ip_mon_staticIP
, 4, &byte_count
,
1801 ((iP
& 0xff000000) >> 8) | ((iP
& 0x00ff0000) << 8) | ((iP
&
1802 0x0000ff00) >> 8) | ((iP
& 0x000000ff) << 8);
1805 *pdw_ip_address
= 0;
1811 u16
hpi_cobranet_set_static_ip_address(u32 h_control
, u32 dw_ip_address
)
1816 iP
= ((dw_ip_address
& 0xff000000) >> 8) | ((dw_ip_address
&
1817 0x00ff0000) << 8) | ((dw_ip_address
& 0x0000ff00) >>
1818 8) | ((dw_ip_address
& 0x000000ff) << 8);
1820 err
= hpi_cobranet_hmi_write(h_control
,
1821 HPI_COBRANET_HMI_cobra_ip_mon_staticIP
, 4, (u8
*)&iP
);
1827 u16
hpi_cobranet_get_macaddress(u32 h_control
, u32
*p_mac_msbs
,
1834 err
= hpi_cobranet_hmi_read(h_control
,
1835 HPI_COBRANET_HMI_cobra_if_phy_address
, 4, &byte_count
,
1840 ((mac
& 0xff000000) >> 8) | ((mac
& 0x00ff0000) << 8)
1841 | ((mac
& 0x0000ff00) >> 8) | ((mac
& 0x000000ff) <<
1844 err
= hpi_cobranet_hmi_read(h_control
,
1845 HPI_COBRANET_HMI_cobra_if_phy_address
+ 1, 4,
1846 &byte_count
, (u8
*)&mac
);
1851 ((mac
& 0xff000000) >> 8) | ((mac
& 0x00ff0000) << 8)
1852 | ((mac
& 0x0000ff00) >> 8) | ((mac
& 0x000000ff) <<
1862 u16
hpi_compander_set_enable(u32 h_control
, u32 enable
)
1864 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
1868 u16
hpi_compander_get_enable(u32 h_control
, u32
*enable
)
1870 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
1873 u16
hpi_compander_set_makeup_gain(u32 h_control
, short makeup_gain0_01dB
)
1875 return hpi_control_log_set2(h_control
, HPI_COMPANDER_MAKEUPGAIN
,
1876 makeup_gain0_01dB
, 0);
1879 u16
hpi_compander_get_makeup_gain(u32 h_control
, short *makeup_gain0_01dB
)
1881 return hpi_control_log_get2(h_control
, HPI_COMPANDER_MAKEUPGAIN
,
1882 makeup_gain0_01dB
, NULL
);
1885 u16
hpi_compander_set_attack_time_constant(u32 h_control
, unsigned int index
,
1888 return hpi_control_param_set(h_control
, HPI_COMPANDER_ATTACK
, attack
,
1892 u16
hpi_compander_get_attack_time_constant(u32 h_control
, unsigned int index
,
1895 return hpi_control_param_get(h_control
, HPI_COMPANDER_ATTACK
, 0,
1896 index
, attack
, NULL
);
1899 u16
hpi_compander_set_decay_time_constant(u32 h_control
, unsigned int index
,
1902 return hpi_control_param_set(h_control
, HPI_COMPANDER_DECAY
, decay
,
1906 u16
hpi_compander_get_decay_time_constant(u32 h_control
, unsigned int index
,
1909 return hpi_control_param_get(h_control
, HPI_COMPANDER_DECAY
, 0, index
,
1914 u16
hpi_compander_set_threshold(u32 h_control
, unsigned int index
,
1915 short threshold0_01dB
)
1917 struct hpi_message hm
;
1918 struct hpi_response hr
;
1920 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1921 HPI_CONTROL_SET_STATE
);
1922 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1923 return HPI_ERROR_INVALID_HANDLE
;
1924 hm
.u
.c
.attribute
= HPI_COMPANDER_THRESHOLD
;
1925 hm
.u
.c
.param2
= index
;
1926 hm
.u
.c
.an_log_value
[0] = threshold0_01dB
;
1928 hpi_send_recv(&hm
, &hr
);
1933 u16
hpi_compander_get_threshold(u32 h_control
, unsigned int index
,
1934 short *threshold0_01dB
)
1936 struct hpi_message hm
;
1937 struct hpi_response hr
;
1939 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1940 HPI_CONTROL_GET_STATE
);
1941 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1942 return HPI_ERROR_INVALID_HANDLE
;
1943 hm
.u
.c
.attribute
= HPI_COMPANDER_THRESHOLD
;
1944 hm
.u
.c
.param2
= index
;
1946 hpi_send_recv(&hm
, &hr
);
1947 *threshold0_01dB
= hr
.u
.c
.an_log_value
[0];
1952 u16
hpi_compander_set_ratio(u32 h_control
, u32 index
, u32 ratio100
)
1954 return hpi_control_param_set(h_control
, HPI_COMPANDER_RATIO
, ratio100
,
1958 u16
hpi_compander_get_ratio(u32 h_control
, u32 index
, u32
*ratio100
)
1960 return hpi_control_param_get(h_control
, HPI_COMPANDER_RATIO
, 0, index
,
1964 u16
hpi_level_query_range(u32 h_control
, short *min_gain_01dB
,
1965 short *max_gain_01dB
, short *step_gain_01dB
)
1967 struct hpi_message hm
;
1968 struct hpi_response hr
;
1970 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
1971 HPI_CONTROL_GET_STATE
);
1972 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
1973 return HPI_ERROR_INVALID_HANDLE
;
1974 hm
.u
.c
.attribute
= HPI_LEVEL_RANGE
;
1976 hpi_send_recv(&hm
, &hr
);
1978 hr
.u
.c
.an_log_value
[0] = 0;
1979 hr
.u
.c
.an_log_value
[1] = 0;
1983 *min_gain_01dB
= hr
.u
.c
.an_log_value
[0];
1985 *max_gain_01dB
= hr
.u
.c
.an_log_value
[1];
1987 *step_gain_01dB
= (short)hr
.u
.c
.param1
;
1991 u16
hpi_level_set_gain(u32 h_control
, short an_gain0_01dB
[HPI_MAX_CHANNELS
]
1994 return hpi_control_log_set2(h_control
, HPI_LEVEL_GAIN
,
1995 an_gain0_01dB
[0], an_gain0_01dB
[1]);
1998 u16
hpi_level_get_gain(u32 h_control
, short an_gain0_01dB
[HPI_MAX_CHANNELS
]
2001 return hpi_control_log_get2(h_control
, HPI_LEVEL_GAIN
,
2002 &an_gain0_01dB
[0], &an_gain0_01dB
[1]);
2005 u16
hpi_meter_query_channels(const u32 h_meter
, u32
*p_channels
)
2007 return hpi_control_query(h_meter
, HPI_METER_NUM_CHANNELS
, 0, 0,
2011 u16
hpi_meter_get_peak(u32 h_control
, short an_peakdB
[HPI_MAX_CHANNELS
]
2016 struct hpi_message hm
;
2017 struct hpi_response hr
;
2019 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2020 HPI_CONTROL_GET_STATE
);
2021 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2022 return HPI_ERROR_INVALID_HANDLE
;
2023 hm
.obj_index
= hm
.obj_index
;
2024 hm
.u
.c
.attribute
= HPI_METER_PEAK
;
2026 hpi_send_recv(&hm
, &hr
);
2029 memcpy(an_peakdB
, hr
.u
.c
.an_log_value
,
2030 sizeof(short) * HPI_MAX_CHANNELS
);
2032 for (i
= 0; i
< HPI_MAX_CHANNELS
; i
++)
2033 an_peakdB
[i
] = HPI_METER_MINIMUM
;
2037 u16
hpi_meter_get_rms(u32 h_control
, short an_rmsdB
[HPI_MAX_CHANNELS
]
2042 struct hpi_message hm
;
2043 struct hpi_response hr
;
2045 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2046 HPI_CONTROL_GET_STATE
);
2047 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2048 return HPI_ERROR_INVALID_HANDLE
;
2049 hm
.u
.c
.attribute
= HPI_METER_RMS
;
2051 hpi_send_recv(&hm
, &hr
);
2054 memcpy(an_rmsdB
, hr
.u
.c
.an_log_value
,
2055 sizeof(short) * HPI_MAX_CHANNELS
);
2057 for (i
= 0; i
< HPI_MAX_CHANNELS
; i
++)
2058 an_rmsdB
[i
] = HPI_METER_MINIMUM
;
2063 u16
hpi_meter_set_rms_ballistics(u32 h_control
, u16 attack
, u16 decay
)
2065 return hpi_control_param_set(h_control
, HPI_METER_RMS_BALLISTICS
,
2069 u16
hpi_meter_get_rms_ballistics(u32 h_control
, u16
*pn_attack
, u16
*pn_decay
)
2075 error
= hpi_control_param2_get(h_control
, HPI_METER_RMS_BALLISTICS
,
2079 *pn_attack
= (unsigned short)attack
;
2081 *pn_decay
= (unsigned short)decay
;
2086 u16
hpi_meter_set_peak_ballistics(u32 h_control
, u16 attack
, u16 decay
)
2088 return hpi_control_param_set(h_control
, HPI_METER_PEAK_BALLISTICS
,
2092 u16
hpi_meter_get_peak_ballistics(u32 h_control
, u16
*pn_attack
,
2099 error
= hpi_control_param2_get(h_control
, HPI_METER_PEAK_BALLISTICS
,
2103 *pn_attack
= (short)attack
;
2105 *pn_decay
= (short)decay
;
2110 u16
hpi_microphone_set_phantom_power(u32 h_control
, u16 on_off
)
2112 return hpi_control_param_set(h_control
, HPI_MICROPHONE_PHANTOM_POWER
,
2116 u16
hpi_microphone_get_phantom_power(u32 h_control
, u16
*pw_on_off
)
2120 error
= hpi_control_param1_get(h_control
,
2121 HPI_MICROPHONE_PHANTOM_POWER
, &on_off
);
2123 *pw_on_off
= (u16
)on_off
;
2127 u16
hpi_multiplexer_set_source(u32 h_control
, u16 source_node_type
,
2128 u16 source_node_index
)
2130 return hpi_control_param_set(h_control
, HPI_MULTIPLEXER_SOURCE
,
2131 source_node_type
, source_node_index
);
2134 u16
hpi_multiplexer_get_source(u32 h_control
, u16
*source_node_type
,
2135 u16
*source_node_index
)
2138 u16 err
= hpi_control_param2_get(h_control
,
2139 HPI_MULTIPLEXER_SOURCE
, &node
,
2141 if (source_node_type
)
2142 *source_node_type
= (u16
)node
;
2143 if (source_node_index
)
2144 *source_node_index
= (u16
)index
;
2148 u16
hpi_multiplexer_query_source(u32 h_control
, u16 index
,
2149 u16
*source_node_type
, u16
*source_node_index
)
2151 struct hpi_message hm
;
2152 struct hpi_response hr
;
2153 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2154 HPI_CONTROL_GET_STATE
);
2155 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2156 return HPI_ERROR_INVALID_HANDLE
;
2157 hm
.u
.c
.attribute
= HPI_MULTIPLEXER_QUERYSOURCE
;
2158 hm
.u
.c
.param1
= index
;
2160 hpi_send_recv(&hm
, &hr
);
2162 if (source_node_type
)
2163 *source_node_type
= (u16
)hr
.u
.c
.param1
;
2164 if (source_node_index
)
2165 *source_node_index
= (u16
)hr
.u
.c
.param2
;
2169 u16
hpi_parametric_eq_get_info(u32 h_control
, u16
*pw_number_of_bands
,
2176 error
= hpi_control_param2_get(h_control
, HPI_EQUALIZER_NUM_FILTERS
,
2178 if (pw_number_of_bands
)
2179 *pw_number_of_bands
= (u16
)oB
;
2181 *pw_on_off
= (u16
)oO
;
2185 u16
hpi_parametric_eq_set_state(u32 h_control
, u16 on_off
)
2187 return hpi_control_param_set(h_control
, HPI_EQUALIZER_NUM_FILTERS
,
2191 u16
hpi_parametric_eq_get_band(u32 h_control
, u16 index
, u16
*pn_type
,
2192 u32
*pfrequency_hz
, short *pnQ100
, short *pn_gain0_01dB
)
2194 struct hpi_message hm
;
2195 struct hpi_response hr
;
2197 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2198 HPI_CONTROL_GET_STATE
);
2199 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2200 return HPI_ERROR_INVALID_HANDLE
;
2201 hm
.u
.c
.attribute
= HPI_EQUALIZER_FILTER
;
2202 hm
.u
.c
.param2
= index
;
2204 hpi_send_recv(&hm
, &hr
);
2207 *pfrequency_hz
= hr
.u
.c
.param1
;
2209 *pn_type
= (u16
)(hr
.u
.c
.param2
>> 16);
2211 *pnQ100
= hr
.u
.c
.an_log_value
[1];
2213 *pn_gain0_01dB
= hr
.u
.c
.an_log_value
[0];
2218 u16
hpi_parametric_eq_set_band(u32 h_control
, u16 index
, u16 type
,
2219 u32 frequency_hz
, short q100
, short gain0_01dB
)
2221 struct hpi_message hm
;
2222 struct hpi_response hr
;
2224 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2225 HPI_CONTROL_SET_STATE
);
2226 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2227 return HPI_ERROR_INVALID_HANDLE
;
2229 hm
.u
.c
.param1
= frequency_hz
;
2230 hm
.u
.c
.param2
= (index
& 0xFFFFL
) + ((u32
)type
<< 16);
2231 hm
.u
.c
.an_log_value
[0] = gain0_01dB
;
2232 hm
.u
.c
.an_log_value
[1] = q100
;
2233 hm
.u
.c
.attribute
= HPI_EQUALIZER_FILTER
;
2235 hpi_send_recv(&hm
, &hr
);
2240 u16
hpi_parametric_eq_get_coeffs(u32 h_control
, u16 index
, short coeffs
[5]
2243 struct hpi_message hm
;
2244 struct hpi_response hr
;
2246 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2247 HPI_CONTROL_GET_STATE
);
2248 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2249 return HPI_ERROR_INVALID_HANDLE
;
2250 hm
.u
.c
.attribute
= HPI_EQUALIZER_COEFFICIENTS
;
2251 hm
.u
.c
.param2
= index
;
2253 hpi_send_recv(&hm
, &hr
);
2255 coeffs
[0] = (short)hr
.u
.c
.an_log_value
[0];
2256 coeffs
[1] = (short)hr
.u
.c
.an_log_value
[1];
2257 coeffs
[2] = (short)hr
.u
.c
.param1
;
2258 coeffs
[3] = (short)(hr
.u
.c
.param1
>> 16);
2259 coeffs
[4] = (short)hr
.u
.c
.param2
;
2264 u16
hpi_sample_clock_query_source(const u32 h_clock
, const u32 index
,
2270 err
= hpi_control_query(h_clock
, HPI_SAMPLECLOCK_SOURCE
, index
, 0,
2272 *pw_source
= (u16
)qr
;
2276 u16
hpi_sample_clock_set_source(u32 h_control
, u16 source
)
2278 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_SOURCE
,
2282 u16
hpi_sample_clock_get_source(u32 h_control
, u16
*pw_source
)
2286 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SOURCE
,
2290 *pw_source
= (u16
)source
;
2294 u16
hpi_sample_clock_query_source_index(const u32 h_clock
, const u32 index
,
2295 const u32 source
, u16
*pw_source_index
)
2300 err
= hpi_control_query(h_clock
, HPI_SAMPLECLOCK_SOURCE_INDEX
, index
,
2302 *pw_source_index
= (u16
)qr
;
2306 u16
hpi_sample_clock_set_source_index(u32 h_control
, u16 source_index
)
2308 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_SOURCE_INDEX
,
2312 u16
hpi_sample_clock_get_source_index(u32 h_control
, u16
*pw_source_index
)
2315 u32 source_index
= 0;
2316 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SOURCE_INDEX
,
2319 if (pw_source_index
)
2320 *pw_source_index
= (u16
)source_index
;
2324 u16
hpi_sample_clock_query_local_rate(const u32 h_clock
, const u32 index
,
2327 return hpi_control_query(h_clock
, HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
,
2331 u16
hpi_sample_clock_set_local_rate(u32 h_control
, u32 sample_rate
)
2333 return hpi_control_param_set(h_control
,
2334 HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
, sample_rate
, 0);
2337 u16
hpi_sample_clock_get_local_rate(u32 h_control
, u32
*psample_rate
)
2340 u32 sample_rate
= 0;
2341 err
= hpi_control_param1_get(h_control
,
2342 HPI_SAMPLECLOCK_LOCAL_SAMPLERATE
, &sample_rate
);
2345 *psample_rate
= sample_rate
;
2349 u16
hpi_sample_clock_get_sample_rate(u32 h_control
, u32
*psample_rate
)
2352 u32 sample_rate
= 0;
2353 err
= hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_SAMPLERATE
,
2357 *psample_rate
= sample_rate
;
2361 u16
hpi_sample_clock_set_auto(u32 h_control
, u32 enable
)
2363 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_AUTO
, enable
,
2367 u16
hpi_sample_clock_get_auto(u32 h_control
, u32
*penable
)
2369 return hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_AUTO
,
2373 u16
hpi_sample_clock_set_local_rate_lock(u32 h_control
, u32 lock
)
2375 return hpi_control_param_set(h_control
, HPI_SAMPLECLOCK_LOCAL_LOCK
,
2379 u16
hpi_sample_clock_get_local_rate_lock(u32 h_control
, u32
*plock
)
2381 return hpi_control_param1_get(h_control
, HPI_SAMPLECLOCK_LOCAL_LOCK
,
2385 u16
hpi_tone_detector_get_frequency(u32 h_control
, u32 index
, u32
*frequency
)
2387 return hpi_control_param_get(h_control
, HPI_TONEDETECTOR_FREQUENCY
,
2388 index
, 0, frequency
, NULL
);
2391 u16
hpi_tone_detector_get_state(u32 h_control
, u32
*state
)
2393 return hpi_control_param1_get(h_control
, HPI_TONEDETECTOR_STATE
,
2397 u16
hpi_tone_detector_set_enable(u32 h_control
, u32 enable
)
2399 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
2403 u16
hpi_tone_detector_get_enable(u32 h_control
, u32
*enable
)
2405 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
2408 u16
hpi_tone_detector_set_event_enable(u32 h_control
, u32 event_enable
)
2410 return hpi_control_param_set(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2411 (u32
)event_enable
, 0);
2414 u16
hpi_tone_detector_get_event_enable(u32 h_control
, u32
*event_enable
)
2416 return hpi_control_param1_get(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2420 u16
hpi_tone_detector_set_threshold(u32 h_control
, int threshold
)
2422 return hpi_control_param_set(h_control
, HPI_TONEDETECTOR_THRESHOLD
,
2426 u16
hpi_tone_detector_get_threshold(u32 h_control
, int *threshold
)
2428 return hpi_control_param1_get(h_control
, HPI_TONEDETECTOR_THRESHOLD
,
2432 u16
hpi_silence_detector_get_state(u32 h_control
, u32
*state
)
2434 return hpi_control_param1_get(h_control
, HPI_SILENCEDETECTOR_STATE
,
2438 u16
hpi_silence_detector_set_enable(u32 h_control
, u32 enable
)
2440 return hpi_control_param_set(h_control
, HPI_GENERIC_ENABLE
, enable
,
2444 u16
hpi_silence_detector_get_enable(u32 h_control
, u32
*enable
)
2446 return hpi_control_param1_get(h_control
, HPI_GENERIC_ENABLE
, enable
);
2449 u16
hpi_silence_detector_set_event_enable(u32 h_control
, u32 event_enable
)
2451 return hpi_control_param_set(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2455 u16
hpi_silence_detector_get_event_enable(u32 h_control
, u32
*event_enable
)
2457 return hpi_control_param1_get(h_control
, HPI_GENERIC_EVENT_ENABLE
,
2461 u16
hpi_silence_detector_set_delay(u32 h_control
, u32 delay
)
2463 return hpi_control_param_set(h_control
, HPI_SILENCEDETECTOR_DELAY
,
2467 u16
hpi_silence_detector_get_delay(u32 h_control
, u32
*delay
)
2469 return hpi_control_param1_get(h_control
, HPI_SILENCEDETECTOR_DELAY
,
2473 u16
hpi_silence_detector_set_threshold(u32 h_control
, int threshold
)
2475 return hpi_control_param_set(h_control
, HPI_SILENCEDETECTOR_THRESHOLD
,
2479 u16
hpi_silence_detector_get_threshold(u32 h_control
, int *threshold
)
2481 return hpi_control_param1_get(h_control
,
2482 HPI_SILENCEDETECTOR_THRESHOLD
, (u32
*)threshold
);
2485 u16
hpi_tuner_query_band(const u32 h_tuner
, const u32 index
, u16
*pw_band
)
2490 err
= hpi_control_query(h_tuner
, HPI_TUNER_BAND
, index
, 0, &qr
);
2495 u16
hpi_tuner_set_band(u32 h_control
, u16 band
)
2497 return hpi_control_param_set(h_control
, HPI_TUNER_BAND
, band
, 0);
2500 u16
hpi_tuner_get_band(u32 h_control
, u16
*pw_band
)
2505 error
= hpi_control_param1_get(h_control
, HPI_TUNER_BAND
, &band
);
2507 *pw_band
= (u16
)band
;
2511 u16
hpi_tuner_query_frequency(const u32 h_tuner
, const u32 index
,
2512 const u16 band
, u32
*pfreq
)
2514 return hpi_control_query(h_tuner
, HPI_TUNER_FREQ
, index
, band
, pfreq
);
2517 u16
hpi_tuner_set_frequency(u32 h_control
, u32 freq_ink_hz
)
2519 return hpi_control_param_set(h_control
, HPI_TUNER_FREQ
, freq_ink_hz
,
2523 u16
hpi_tuner_get_frequency(u32 h_control
, u32
*pw_freq_ink_hz
)
2525 return hpi_control_param1_get(h_control
, HPI_TUNER_FREQ
,
2529 u16
hpi_tuner_query_gain(const u32 h_tuner
, const u32 index
, u16
*pw_gain
)
2534 err
= hpi_control_query(h_tuner
, HPI_TUNER_BAND
, index
, 0, &qr
);
2539 u16
hpi_tuner_set_gain(u32 h_control
, short gain
)
2541 return hpi_control_param_set(h_control
, HPI_TUNER_GAIN
, gain
, 0);
2544 u16
hpi_tuner_get_gain(u32 h_control
, short *pn_gain
)
2549 error
= hpi_control_param1_get(h_control
, HPI_TUNER_GAIN
, &gain
);
2551 *pn_gain
= (u16
)gain
;
2555 u16
hpi_tuner_get_rf_level(u32 h_control
, short *pw_level
)
2557 struct hpi_message hm
;
2558 struct hpi_response hr
;
2560 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2561 HPI_CONTROL_GET_STATE
);
2562 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2563 return HPI_ERROR_INVALID_HANDLE
;
2564 hm
.u
.cu
.attribute
= HPI_TUNER_LEVEL_AVG
;
2565 hpi_send_recv(&hm
, &hr
);
2567 *pw_level
= hr
.u
.cu
.tuner
.s_level
;
2571 u16
hpi_tuner_get_raw_rf_level(u32 h_control
, short *pw_level
)
2573 struct hpi_message hm
;
2574 struct hpi_response hr
;
2576 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2577 HPI_CONTROL_GET_STATE
);
2578 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2579 return HPI_ERROR_INVALID_HANDLE
;
2580 hm
.u
.cu
.attribute
= HPI_TUNER_LEVEL_RAW
;
2581 hpi_send_recv(&hm
, &hr
);
2583 *pw_level
= hr
.u
.cu
.tuner
.s_level
;
2587 u16
hpi_tuner_query_deemphasis(const u32 h_tuner
, const u32 index
,
2588 const u16 band
, u32
*pdeemphasis
)
2590 return hpi_control_query(h_tuner
, HPI_TUNER_DEEMPHASIS
, index
, band
,
2594 u16
hpi_tuner_set_deemphasis(u32 h_control
, u32 deemphasis
)
2596 return hpi_control_param_set(h_control
, HPI_TUNER_DEEMPHASIS
,
2600 u16
hpi_tuner_get_deemphasis(u32 h_control
, u32
*pdeemphasis
)
2602 return hpi_control_param1_get(h_control
, HPI_TUNER_DEEMPHASIS
,
2606 u16
hpi_tuner_query_program(const u32 h_tuner
, u32
*pbitmap_program
)
2608 return hpi_control_query(h_tuner
, HPI_TUNER_PROGRAM
, 0, 0,
2612 u16
hpi_tuner_set_program(u32 h_control
, u32 program
)
2614 return hpi_control_param_set(h_control
, HPI_TUNER_PROGRAM
, program
,
2618 u16
hpi_tuner_get_program(u32 h_control
, u32
*pprogram
)
2620 return hpi_control_param1_get(h_control
, HPI_TUNER_PROGRAM
, pprogram
);
2623 u16
hpi_tuner_get_hd_radio_dsp_version(u32 h_control
, char *psz_dsp_version
,
2624 const u32 string_size
)
2626 return hpi_control_get_string(h_control
,
2627 HPI_TUNER_HDRADIO_DSP_VERSION
, psz_dsp_version
, string_size
);
2630 u16
hpi_tuner_get_hd_radio_sdk_version(u32 h_control
, char *psz_sdk_version
,
2631 const u32 string_size
)
2633 return hpi_control_get_string(h_control
,
2634 HPI_TUNER_HDRADIO_SDK_VERSION
, psz_sdk_version
, string_size
);
2637 u16
hpi_tuner_get_status(u32 h_control
, u16
*pw_status_mask
, u16
*pw_status
)
2642 error
= hpi_control_param1_get(h_control
, HPI_TUNER_STATUS
, &status
);
2645 *pw_status_mask
= (u16
)(status
>> 16);
2646 *pw_status
= (u16
)(status
& 0xFFFF);
2648 *pw_status_mask
= 0;
2655 u16
hpi_tuner_set_mode(u32 h_control
, u32 mode
, u32 value
)
2657 return hpi_control_param_set(h_control
, HPI_TUNER_MODE
, mode
, value
);
2660 u16
hpi_tuner_get_mode(u32 h_control
, u32 mode
, u32
*pn_value
)
2662 return hpi_control_param_get(h_control
, HPI_TUNER_MODE
, mode
, 0,
2666 u16
hpi_tuner_get_hd_radio_signal_quality(u32 h_control
, u32
*pquality
)
2668 return hpi_control_param1_get(h_control
,
2669 HPI_TUNER_HDRADIO_SIGNAL_QUALITY
, pquality
);
2672 u16
hpi_tuner_get_hd_radio_signal_blend(u32 h_control
, u32
*pblend
)
2674 return hpi_control_param1_get(h_control
, HPI_TUNER_HDRADIO_BLEND
,
2678 u16
hpi_tuner_set_hd_radio_signal_blend(u32 h_control
, const u32 blend
)
2680 return hpi_control_param_set(h_control
, HPI_TUNER_HDRADIO_BLEND
,
2684 u16
hpi_tuner_get_rds(u32 h_control
, char *p_data
)
2686 struct hpi_message hm
;
2687 struct hpi_response hr
;
2689 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2690 HPI_CONTROL_GET_STATE
);
2691 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2692 return HPI_ERROR_INVALID_HANDLE
;
2693 hm
.u
.c
.attribute
= HPI_TUNER_RDS
;
2694 hpi_send_recv(&hm
, &hr
);
2696 *(u32
*)&p_data
[0] = hr
.u
.cu
.tuner
.rds
.data
[0];
2697 *(u32
*)&p_data
[4] = hr
.u
.cu
.tuner
.rds
.data
[1];
2698 *(u32
*)&p_data
[8] = hr
.u
.cu
.tuner
.rds
.bLER
;
2703 u16
hpi_pad_get_channel_name(u32 h_control
, char *psz_string
,
2704 const u32 data_length
)
2706 return hpi_control_get_string(h_control
, HPI_PAD_CHANNEL_NAME
,
2707 psz_string
, data_length
);
2710 u16
hpi_pad_get_artist(u32 h_control
, char *psz_string
, const u32 data_length
)
2712 return hpi_control_get_string(h_control
, HPI_PAD_ARTIST
, psz_string
,
2716 u16
hpi_pad_get_title(u32 h_control
, char *psz_string
, const u32 data_length
)
2718 return hpi_control_get_string(h_control
, HPI_PAD_TITLE
, psz_string
,
2722 u16
hpi_pad_get_comment(u32 h_control
, char *psz_string
,
2723 const u32 data_length
)
2725 return hpi_control_get_string(h_control
, HPI_PAD_COMMENT
, psz_string
,
2729 u16
hpi_pad_get_program_type(u32 h_control
, u32
*ppTY
)
2731 return hpi_control_param1_get(h_control
, HPI_PAD_PROGRAM_TYPE
, ppTY
);
2734 u16
hpi_pad_get_rdsPI(u32 h_control
, u32
*ppI
)
2736 return hpi_control_param1_get(h_control
, HPI_PAD_PROGRAM_ID
, ppI
);
2739 u16
hpi_volume_query_channels(const u32 h_volume
, u32
*p_channels
)
2741 return hpi_control_query(h_volume
, HPI_VOLUME_NUM_CHANNELS
, 0, 0,
2745 u16
hpi_volume_set_gain(u32 h_control
, short an_log_gain
[HPI_MAX_CHANNELS
]
2748 return hpi_control_log_set2(h_control
, HPI_VOLUME_GAIN
,
2749 an_log_gain
[0], an_log_gain
[1]);
2752 u16
hpi_volume_get_gain(u32 h_control
, short an_log_gain
[HPI_MAX_CHANNELS
]
2755 return hpi_control_log_get2(h_control
, HPI_VOLUME_GAIN
,
2756 &an_log_gain
[0], &an_log_gain
[1]);
2759 u16
hpi_volume_set_mute(u32 h_control
, u32 mute
)
2761 return hpi_control_param_set(h_control
, HPI_VOLUME_MUTE
, mute
, 0);
2764 u16
hpi_volume_get_mute(u32 h_control
, u32
*mute
)
2766 return hpi_control_param1_get(h_control
, HPI_VOLUME_MUTE
, mute
);
2769 u16
hpi_volume_query_range(u32 h_control
, short *min_gain_01dB
,
2770 short *max_gain_01dB
, short *step_gain_01dB
)
2772 struct hpi_message hm
;
2773 struct hpi_response hr
;
2775 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2776 HPI_CONTROL_GET_STATE
);
2777 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2778 return HPI_ERROR_INVALID_HANDLE
;
2779 hm
.u
.c
.attribute
= HPI_VOLUME_RANGE
;
2781 hpi_send_recv(&hm
, &hr
);
2783 hr
.u
.c
.an_log_value
[0] = 0;
2784 hr
.u
.c
.an_log_value
[1] = 0;
2788 *min_gain_01dB
= hr
.u
.c
.an_log_value
[0];
2790 *max_gain_01dB
= hr
.u
.c
.an_log_value
[1];
2792 *step_gain_01dB
= (short)hr
.u
.c
.param1
;
2796 u16
hpi_volume_auto_fade_profile(u32 h_control
,
2797 short an_stop_gain0_01dB
[HPI_MAX_CHANNELS
], u32 duration_ms
,
2800 struct hpi_message hm
;
2801 struct hpi_response hr
;
2803 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2804 HPI_CONTROL_SET_STATE
);
2805 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2806 return HPI_ERROR_INVALID_HANDLE
;
2808 memcpy(hm
.u
.c
.an_log_value
, an_stop_gain0_01dB
,
2809 sizeof(short) * HPI_MAX_CHANNELS
);
2811 hm
.u
.c
.attribute
= HPI_VOLUME_AUTOFADE
;
2812 hm
.u
.c
.param1
= duration_ms
;
2813 hm
.u
.c
.param2
= profile
;
2815 hpi_send_recv(&hm
, &hr
);
2820 u16
hpi_volume_auto_fade(u32 h_control
,
2821 short an_stop_gain0_01dB
[HPI_MAX_CHANNELS
], u32 duration_ms
)
2823 return hpi_volume_auto_fade_profile(h_control
, an_stop_gain0_01dB
,
2824 duration_ms
, HPI_VOLUME_AUTOFADE_LOG
);
2827 u16
hpi_volume_query_auto_fade_profile(const u32 h_volume
, const u32 i
,
2832 e
= hpi_control_query(h_volume
, HPI_VOLUME_AUTOFADE
, i
, 0, &u
);
2837 u16
hpi_vox_set_threshold(u32 h_control
, short an_gain0_01dB
)
2839 struct hpi_message hm
;
2840 struct hpi_response hr
;
2841 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2842 HPI_CONTROL_SET_STATE
);
2843 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2844 return HPI_ERROR_INVALID_HANDLE
;
2845 hm
.u
.c
.attribute
= HPI_VOX_THRESHOLD
;
2847 hm
.u
.c
.an_log_value
[0] = an_gain0_01dB
;
2849 hpi_send_recv(&hm
, &hr
);
2854 u16
hpi_vox_get_threshold(u32 h_control
, short *an_gain0_01dB
)
2856 struct hpi_message hm
;
2857 struct hpi_response hr
;
2858 hpi_init_message_response(&hm
, &hr
, HPI_OBJ_CONTROL
,
2859 HPI_CONTROL_GET_STATE
);
2860 if (hpi_handle_indexes(h_control
, &hm
.adapter_index
, &hm
.obj_index
))
2861 return HPI_ERROR_INVALID_HANDLE
;
2862 hm
.u
.c
.attribute
= HPI_VOX_THRESHOLD
;
2864 hpi_send_recv(&hm
, &hr
);
2866 *an_gain0_01dB
= hr
.u
.c
.an_log_value
[0];