/* 
 | 
 * BlueALSA - rfcomm.h 
 | 
 * Copyright (c) 2016-2018 Arkadiusz Bokowy 
 | 
 * 
 | 
 * This file is a part of bluez-alsa. 
 | 
 * 
 | 
 * This project is licensed under the terms of the MIT license. 
 | 
 * 
 | 
 */ 
 | 
  
 | 
#ifndef BLUEALSA_RFCOMM_H_ 
 | 
#define BLUEALSA_RFCOMM_H_ 
 | 
  
 | 
#include "at.h" 
 | 
#include "hfp.h" 
 | 
#include "transport.h" 
 | 
  
 | 
/* Number of retries during the SLC stage. */ 
 | 
#define RFCOMM_SLC_RETRIES 10 
 | 
/* Timeout for the command acknowledgment. */ 
 | 
#define RFCOMM_SLC_TIMEOUT 1000 
 | 
  
 | 
/** 
 | 
 * Structure used for RFCOMM state synchronization. */ 
 | 
struct rfcomm_conn { 
 | 
  
 | 
    /* service level connection state */ 
 | 
    enum hfp_state state; 
 | 
    enum hfp_state state_prev; 
 | 
  
 | 
    /* handler used for sync response dispatching */ 
 | 
    const struct rfcomm_handler *handler; 
 | 
  
 | 
    /* number of failed communication attempts */ 
 | 
    int retries; 
 | 
  
 | 
    /* 0-based indicators index */ 
 | 
    enum hfp_ind hfp_ind_map[20]; 
 | 
  
 | 
    /* variables used for AG<->HF sync */ 
 | 
    uint8_t spk_gain; 
 | 
    uint8_t mic_gain; 
 | 
  
 | 
    /* associated transport */ 
 | 
    struct ba_transport *t; 
 | 
  
 | 
}; 
 | 
  
 | 
/** 
 | 
 * Callback function used for RFCOMM AT message dispatching. */ 
 | 
typedef int rfcomm_callback(struct rfcomm_conn *c, const struct bt_at *at); 
 | 
  
 | 
/** 
 | 
 * AT message dispatching handler. */ 
 | 
struct rfcomm_handler { 
 | 
    enum bt_at_type type; 
 | 
    const char *command; 
 | 
    rfcomm_callback *callback; 
 | 
}; 
 | 
  
 | 
void *rfcomm_thread(void *arg); 
 | 
  
 | 
#endif 
 |