1 /* Copyright (c) 2015 The Chromium OS Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 #ifndef CRAS_MAIN_MESSAGE_H_ 7 #define CRAS_MAIN_MESSAGE_H_ 8 9 #include <stdio.h> 10 11 #include "utlist.h" 12 13 /* The types of message main thread can handle. */ 14 enum CRAS_MAIN_MESSAGE_TYPE { 15 /* Audio thread -> main thread */ 16 CRAS_MAIN_A2DP, 17 CRAS_MAIN_BT, 18 CRAS_MAIN_METRICS, 19 CRAS_MAIN_MONITOR_DEVICE, 20 }; 21 22 /* Structure of the header of the message handled by main thread. 23 * Args: 24 * length - Size of the whole message. 25 * type - Type of the message. 26 */ 27 struct cras_main_message { 28 size_t length; 29 enum CRAS_MAIN_MESSAGE_TYPE type; 30 }; 31 32 /* Callback function to handle main thread message. */ 33 typedef void (*cras_message_callback)(struct cras_main_message *msg, 34 void *arg); 35 36 /* Sends a message to main thread. */ 37 int cras_main_message_send(struct cras_main_message *msg); 38 39 /* Registers the handler function for specific type of message. */ 40 int cras_main_message_add_handler(enum CRAS_MAIN_MESSAGE_TYPE type, 41 cras_message_callback callback, 42 void *callback_data); 43 44 /* Initialize the message handling mechanism in main thread. */ 45 void cras_main_message_init(); 46 47 #endif /* CRAS_MAIN_MESSAGE_H_ */ 48