Files
esp-idf/components/bt/host/bluedroid/stack/goep/include/goep_int.h

104 lines
3.3 KiB
C

/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "common/bt_target.h"
#include "stack/obex_api.h"
#include "stack/goep_common.h"
#include "stack/goepc_api.h"
#if (GOEPC_INCLUDED == TRUE)
/* GOEPC state machine events */
enum {
GOEPC_SM_EVENT_CONNECT = 0,
GOEPC_SM_EVENT_DISCONNECT,
GOEPC_SM_EVENT_REQ,
GOEPC_SM_EVENT_REQ_FB,
GOEPC_SM_EVENT_RSP,
GOEPC_SM_EVENT_RSP_FB,
};
/* GOEPC state machine states */
enum {
GOEPC_STATE_INIT = 0,
GOEPC_STATE_OPENING,
GOEPC_STATE_OPENED_IDLE,
GOEPC_STATE_OPENED_REQ,
GOEPC_STATE_OPENED_RSP,
};
/* GOEPC srm state machine states */
enum {
GOEPC_SRM_STATE_IDLE = 0,
GOEPC_SRM_STATE_REQ,
GOEPC_SRM_STATE_ENABLE_WAIT,
GOEPC_SRM_STATE_ENABLE,
GOEPC_SRM_STATE_DISABLE,
};
/* GOEPC Connection Control block */
typedef struct {
tGOEPC_EVT_CBACK *callback; /* GOEP event callback function */
UINT16 obex_handle; /* OBEX connection handle */
UINT16 peer_mtu; /* lower layer connection peer MTU */
UINT16 our_mtu; /* lower layer connection our MTU */
BOOLEAN congest; /* lower layer connection congestion status */
BT_HDR *pkt; /* packet prepared in this GOEP client */
BOOLEAN pkt_srm_en; /* whether prepared packet had set SRM to enable */
BOOLEAN pkt_srm_wait; /* whether prepared packet had set SRMP to wait */
UINT8 curr_pkt_opcode; /* prepared packet opcode */
UINT8 last_pkt_opcode; /* last sent packet opcode */
BOOLEAN srm_wait; /* whether we had set SRMP to wait */
BOOLEAN srm_peer_wait; /* whether peer had set SRMP to wait */
UINT8 srm_state; /* SRM state machine */
UINT8 state; /* main state machine */
UINT8 allocated; /* 0, not allocated. index+1, otherwise. equal to api handle */
} tGOEPC_CCB;
/* GOEPC Control block */
typedef struct {
tGOEPC_CCB ccb[GOEPC_MAX_CONNECTION]; /* connection control blocks */
UINT8 trace_level; /* trace level */
} tGOEPC_CB;
#if GOEP_DYNAMIC_MEMORY == FALSE
extern tGOEPC_CB goepc_cb;
#else
extern tGOEPC_CB *goepc_cb_ptr;
#define goepc_cb (*goepc_cb_ptr)
#endif
typedef struct {
UINT16 peer_mtu;
UINT16 our_mtu;
} tGOEPC_CONNECTED;
typedef struct {
UINT16 peer_mtu;
UINT16 our_mtu;
} tGOEPC_MTU_CHG;
typedef union {
tGOEPC_CONNECTED connected;
tGOEPC_MTU_CHG mtu_chg;
BT_HDR *pkt;
} tGOEPC_DATA;
tGOEPC_CCB *goepc_allocate_ccb(void);
void goepc_free_ccb(tGOEPC_CCB *p_ccb);
void goepc_obex_callback(UINT16 handle, UINT8 event, tOBEX_MSG *msg);
BOOLEAN goepc_check_obex_req_allow(UINT8 state, BOOLEAN final);
BOOLEAN goepc_check_obex_req_param(tOBEX_PARSE_INFO *info);
void goepc_sm_execute(tGOEPC_CCB *p_ccb, UINT8 event, tGOEPC_DATA *p_data);
void goepc_srm_sm_execute(tGOEPC_CCB *p_ccb, BOOLEAN is_req, BOOLEAN srm_en, BOOLEAN srm_wait);
#endif /* #if (GOEPC_INCLUDED == TRUE) */