summaryrefslogtreecommitdiffstats
path: root/MOST_UNICENS/hal_most_unicens.c
diff options
context:
space:
mode:
Diffstat (limited to 'MOST_UNICENS/hal_most_unicens.c')
-rw-r--r--MOST_UNICENS/hal_most_unicens.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/MOST_UNICENS/hal_most_unicens.c b/MOST_UNICENS/hal_most_unicens.c
index b853d86..775f2c4 100644
--- a/MOST_UNICENS/hal_most_unicens.c
+++ b/MOST_UNICENS/hal_most_unicens.c
@@ -34,44 +34,48 @@ static int master_volume;
static json_bool master_switch;
static int pcm_volume[PCM_MAX_CHANNELS];
-static void unicens_request_card_values_cb(void *closure, int status, struct json_object *j_response) {
+static void unicens_apply_card_value(void *closure, struct json_object *j_obj){
- json_object *j_obj;
- int num_id;
+ int num_id = 0;
int values[6];
- AFB_INFO("unicens_request_card_values_cb: closure=%p status=%d, res=%s", closure, status, json_object_to_json_string(j_response));
-
- json_object_object_get_ex(j_response, "response", &j_obj);
-
- if (json_object_is_type(j_obj, json_type_object)) {
-
- }
- else if (json_object_is_type(j_obj, json_type_array)) {
- AFB_ERROR("unicens_request_card_values_cb: array not handled yet");
- return;
- }
- else {
- AFB_ERROR("unicens_request_card_values_cb: unknown response type");
- return;
+ /* apply master volume */
+ if (wrap_json_unpack(j_obj, "{s:i, s:[i!]}", "id", &num_id, "val",
+ &values[0])
+ == 0) {
+ if (num_id == 1) {
+ AFB_NOTICE("unicens_apply_card_value: num_id: %d, value: %d",
+ num_id,
+ values[0]);
+ wrap_volume_master(values[0]);
+ return;
+ }
}
-
+
if (wrap_json_unpack(j_obj, "{s:i, s:[iiiiii!]}", "id", &num_id, "val",
&values[0], &values[1], &values[2], &values[3], &values[4], &values[5])
== 0) {
- AFB_NOTICE("unicens_request_card_values_cb: success, num id:%d", num_id);
- }
- else {
- AFB_ERROR("unicens_request_card_values_cb: unpack failure");
- return;
+ if (num_id == 2) {
+ AFB_NOTICE("unicens_apply_card_value: success, num_id: %d", num_id);
+ wrap_volume_pcm(&values[0], 6);
+ return;
+ }
}
-#if 0
- if (num_id == 2) {
- wrap_volume_pcm(&values[0], 6);
- }
-#endif
+ AFB_ERROR("unicens_apply_card_value: no card value applied");
+}
+
+
+static void unicens_request_card_values_cb(void *closure, int status, struct json_object *j_response) {
+
+ json_object *j_obj;
+ AFB_INFO("unicens_request_card_values_cb: closure=%p status=%d, res=%s", closure, status, json_object_to_json_string(j_response));
+
+ if (json_object_object_get_ex(j_response, "response", &j_obj)) {
+
+ wrap_json_optarray_for_all(j_obj, &unicens_apply_card_value, NULL);
+ }
}
__attribute__ ((unused)) static void unicens_request_card_values(const char* dev_id) {
@@ -209,7 +213,7 @@ STATIC int unicens_service_init() {
}
/* request of initial card values */
- /* unicens_request_card_values(ALSA_DEVICE_ID); */
+ unicens_request_card_values(ALSA_DEVICE_ID);
OnErrorExit:
AFB_NOTICE("Initializing HAL-MOST-UNICENS-BINDING done..");