pinebuds/services/bt_profiles_enhanced/inc/map_session.h

213 lines
5.7 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef MAP_SESSION_H_INCLUDED
#define MAP_SESSION_H_INCLUDED
#include "obex_session.h"
#include "map_protocol.h"
#include "map_bmessage_builder.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MAP_SESSION_FOLDER_LEVEL_MAX (32)
#define MAP_MAX_PACKET_LENGTH (512)
#define MAP_OBEX_VERSION (0x10)
typedef enum {
MAP_SESSION_TYPE_MAS = 0,
MAP_SESSION_TYPE_MNS, // 1
} map_session_type_t;
typedef struct {
map_session_type_t type;
obex_session_role_t obex_role;
} map_session_config_t;
typedef enum {
MAP_FUNC_NONE = 0,
MAP_FUNC_SendEvent,
MAP_FUNC_SetNotificationRegistration,
MAP_FUNC_SetFolder,
MAP_FUNC_GetFolderListing,
MAP_FUNC_GetMessagesListing,
MAP_FUNC_GetMessage,
MAP_FUNC_SetMessageStatus,
MAP_FUNC_PushMessage,
MAP_FUNC_UpdateInbox,
} map_session_function_t;
typedef struct {
union {
struct {
uint32 bmsg_offset;
} PushMessage;
struct {
uint8 level;
} SetFolder;
} state;
} map_session_function_state_t;
typedef enum {
MAP_SESSION_ERR_NO_ERROR = 0,
MAP_SESSION_ERR_SDP_REQUEST_FAIL, // 1
MAP_SESSION_ERR_CHANNEL_CLOSE, // 2
} map_session_error_t;
typedef struct {
union {
struct {
map_session_error_t error;
uint8 error_detail;
} close;
struct {
uint8 *packet;
uint32 packet_len;
} data;
struct {
struct bdaddr_t *remote;
} open;
} p;
} map_session_cb_param_t;
typedef enum {
MAP_SESSION_EVENT_OPEN_IND = 0,
MAP_SESSION_EVENT_OPEN, // 1
MAP_SESSION_EVENT_CLOSE, // 2
} map_session_event_t;
typedef enum {
MAP_SESSION_STATE_CLOSE = 0,
MAP_SESSION_STATE_SDP_REQUESTING, // 1
MAP_SESSION_STATE_OPENING, // 2
MAP_SESSION_STATE_CONNECTING, // 3
MAP_SESSION_STATE_OPEN, // 4
MAP_SESSION_STATE_CONNECTED, // 5
} map_session_state_t;
struct _map_session_t;
typedef int32 (*map_session_event_handler_t)(struct _map_session_t *, map_session_event_t event, map_session_cb_param_t *param);
typedef struct {
union {
struct
{
} SendEvent;
struct
{
} SetNotificationRegistration;
struct
{
char *folder[MAP_SESSION_FOLDER_LEVEL_MAX];
uint8 folder_level;
uint8 up_level;
} SetFolder;
struct
{
} GetFolderListing;
struct
{
} GetMessagesListing;
struct
{
} GetMessage;
struct
{
} SetMessageStatus;
struct
{
char *folder;
uint32 folder_len;
char *msg_body;
uint32 msg_body_len;
uint8 retry;
uint8 transparent;
map_bmessage_type_t type;
char *originator_name;
uint32 originator_name_len;
char *originator_tel;
uint32 originator_tel_len;
char *receipt_name;
uint32 receipt_name_len;
char *receipt_tel;
uint32 receipt_tel_len;
} PushMessage;
struct
{
} UpdateInbox;
} p;
} map_session_function_param_t;
typedef enum {
MAP_FUNC_ACTION_NONE = 0,
MAP_FUNC_ACTION_START,
MAP_FUNC_ACTION_STOP,
MAP_FUNC_ACTION_REQUEST,
MAP_FUNC_ACTION_RESPONSE,
MAP_FUNC_ACTION_CONNECTED,
} map_session_function_action_t;
typedef struct {
void *priv;
union {
struct {
uint8 *packet;
uint32 packet_len;
} request;
struct {
uint8 *packet;
uint32 packet_len;
} response;
} p;
} map_session_function_action_param_t;
typedef struct _map_session_t {
map_session_config_t config;
map_session_state_t state;
obex_session_t obex_session;
obex_transmission_t obex_transm;
struct sdp_request sdp_request;
map_sdp_callback_t sdp_callback;
map_sdp_server_property_t remote_server_property;
struct bdaddr_t remote;
map_session_event_handler_t event_handler;
uint8 transm_buffer[MAP_MAX_PACKET_LENGTH];
uint8 tlv_buffer[MAP_MAX_PACKET_LENGTH];
uint8 bmsg_buffer[MAP_MAX_PACKET_LENGTH];
map_bmsg_t bmsg;
map_session_function_t function;
map_session_function_param_t function_param;
map_session_function_state_t function_state;
} map_session_t;
typedef void (*map_callback_t) (obex_session_cb_param_t * param, map_session_t * map_session);
void map_callback_register(map_callback_t callback);
int32 map_session_init(map_session_t *session, map_session_config_t *cfg, map_session_event_handler_t event_handler);
int32 map_session_open(map_session_t *session, struct bdaddr_t *remote);
int32 map_session_close(map_session_t *session);
int32 map_session_exec_function(map_session_t *session, map_session_function_t func, map_session_function_param_t *param);
int32 map_session_restore(map_session_t *session, uint32 conn_id,uint32 server_chnl);
bool map_session_check_is_idle(map_session_t *map_session);
#ifdef __cplusplus
}
#endif
#endif // MAP_SESSION_H_INCLUDED