1/****************************************************************************** 2 * 3 * Copyright (C) 1999-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19/****************************************************************************** 20 * 21 * this file contains the PORT API definitions 22 * 23 ******************************************************************************/ 24#ifndef PORT_API_H 25#define PORT_API_H 26 27#include "bt_target.h" 28 29/***************************************************************************** 30** Constants and Types 31*****************************************************************************/ 32 33/* 34** Define port settings structure send from the application in the 35** set settings request, or to the application in the set settings indication. 36*/ 37typedef struct 38{ 39 40#define PORT_BAUD_RATE_2400 0x00 41#define PORT_BAUD_RATE_4800 0x01 42#define PORT_BAUD_RATE_7200 0x02 43#define PORT_BAUD_RATE_9600 0x03 44#define PORT_BAUD_RATE_19200 0x04 45#define PORT_BAUD_RATE_38400 0x05 46#define PORT_BAUD_RATE_57600 0x06 47#define PORT_BAUD_RATE_115200 0x07 48#define PORT_BAUD_RATE_230400 0x08 49 50 UINT8 baud_rate; 51 52#define PORT_5_BITS 0x00 53#define PORT_6_BITS 0x01 54#define PORT_7_BITS 0x02 55#define PORT_8_BITS 0x03 56 57 UINT8 byte_size; 58 59#define PORT_ONESTOPBIT 0x00 60#define PORT_ONE5STOPBITS 0x01 61 UINT8 stop_bits; 62 63#define PORT_PARITY_NO 0x00 64#define PORT_PARITY_YES 0x01 65 UINT8 parity; 66 67#define PORT_ODD_PARITY 0x00 68#define PORT_EVEN_PARITY 0x01 69#define PORT_MARK_PARITY 0x02 70#define PORT_SPACE_PARITY 0x03 71 72 UINT8 parity_type; 73 74#define PORT_FC_OFF 0x00 75#define PORT_FC_XONXOFF_ON_INPUT 0x01 76#define PORT_FC_XONXOFF_ON_OUTPUT 0x02 77#define PORT_FC_CTS_ON_INPUT 0x04 78#define PORT_FC_CTS_ON_OUTPUT 0x08 79#define PORT_FC_DSR_ON_INPUT 0x10 80#define PORT_FC_DSR_ON_OUTPUT 0x20 81 82 UINT8 fc_type; 83 84 UINT8 rx_char1; 85 86#define PORT_XON_DC1 0x11 87 UINT8 xon_char; 88 89#define PORT_XOFF_DC3 0x13 90 UINT8 xoff_char; 91 92} tPORT_STATE; 93 94 95/* 96** Define the callback function prototypes. Parameters are specific 97** to each event and are described bellow 98*/ 99typedef int (tPORT_DATA_CALLBACK) (UINT16 port_handle, void *p_data, UINT16 len); 100 101#define DATA_CO_CALLBACK_TYPE_INCOMING 1 102#define DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE 2 103#define DATA_CO_CALLBACK_TYPE_OUTGOING 3 104typedef int (tPORT_DATA_CO_CALLBACK) (UINT16 port_handle, UINT8* p_buf, UINT16 len, int type); 105 106typedef void (tPORT_CALLBACK) (UINT32 code, UINT16 port_handle); 107 108/* 109** Define events that registered application can receive in the callback 110*/ 111 112#define PORT_EV_RXCHAR 0x00000001 /* Any Character received */ 113#define PORT_EV_RXFLAG 0x00000002 /* Received certain character */ 114#define PORT_EV_TXEMPTY 0x00000004 /* Transmitt Queue Empty */ 115#define PORT_EV_CTS 0x00000008 /* CTS changed state */ 116#define PORT_EV_DSR 0x00000010 /* DSR changed state */ 117#define PORT_EV_RLSD 0x00000020 /* RLSD changed state */ 118#define PORT_EV_BREAK 0x00000040 /* BREAK received */ 119#define PORT_EV_ERR 0x00000080 /* Line status error occurred */ 120#define PORT_EV_RING 0x00000100 /* Ring signal detected */ 121#define PORT_EV_CTSS 0x00000400 /* CTS state */ 122#define PORT_EV_DSRS 0x00000800 /* DSR state */ 123#define PORT_EV_RLSDS 0x00001000 /* RLSD state */ 124#define PORT_EV_OVERRUN 0x00002000 /* receiver buffer overrun */ 125#define PORT_EV_TXCHAR 0x00004000 /* Any character transmitted */ 126 127#define PORT_EV_CONNECTED 0x00000200 /* RFCOMM connection established */ 128#define PORT_EV_CONNECT_ERR 0x00008000 /* Was not able to establish connection */ 129 /* or disconnected */ 130#define PORT_EV_FC 0x00010000 /* data flow enabled flag changed by remote */ 131#define PORT_EV_FCS 0x00020000 /* data flow enable status true = enabled */ 132 133/* 134** To register for events application should provide bitmask with 135** corresponding bit set 136*/ 137 138#define PORT_MASK_ALL (PORT_EV_RXCHAR | PORT_EV_TXEMPTY | PORT_EV_CTS | \ 139 PORT_EV_DSR | PORT_EV_RLSD | PORT_EV_BREAK | \ 140 PORT_EV_ERR | PORT_EV_RING | PORT_EV_CONNECT_ERR | \ 141 PORT_EV_DSRS | PORT_EV_CTSS | PORT_EV_RLSDS | \ 142 PORT_EV_RXFLAG | PORT_EV_TXCHAR | PORT_EV_OVERRUN | \ 143 PORT_EV_FC | PORT_EV_FCS | PORT_EV_CONNECTED) 144 145 146/* 147** Define port result codes 148*/ 149#define PORT_SUCCESS 0 150 151#define PORT_ERR_BASE 0 152 153#define PORT_UNKNOWN_ERROR (PORT_ERR_BASE + 1) 154#define PORT_ALREADY_OPENED (PORT_ERR_BASE + 2) 155#define PORT_CMD_PENDING (PORT_ERR_BASE + 3) 156#define PORT_APP_NOT_REGISTERED (PORT_ERR_BASE + 4) 157#define PORT_NO_MEM (PORT_ERR_BASE + 5) 158#define PORT_NO_RESOURCES (PORT_ERR_BASE + 6) 159#define PORT_BAD_BD_ADDR (PORT_ERR_BASE + 7) 160#define PORT_BAD_HANDLE (PORT_ERR_BASE + 9) 161#define PORT_NOT_OPENED (PORT_ERR_BASE + 10) 162#define PORT_LINE_ERR (PORT_ERR_BASE + 11) 163#define PORT_START_FAILED (PORT_ERR_BASE + 12) 164#define PORT_PAR_NEG_FAILED (PORT_ERR_BASE + 13) 165#define PORT_PORT_NEG_FAILED (PORT_ERR_BASE + 14) 166#define PORT_SEC_FAILED (PORT_ERR_BASE + 15) 167#define PORT_PEER_CONNECTION_FAILED (PORT_ERR_BASE + 16) 168#define PORT_PEER_FAILED (PORT_ERR_BASE + 17) 169#define PORT_PEER_TIMEOUT (PORT_ERR_BASE + 18) 170#define PORT_CLOSED (PORT_ERR_BASE + 19) 171#define PORT_TX_FULL (PORT_ERR_BASE + 20) 172#define PORT_LOCAL_CLOSED (PORT_ERR_BASE + 21) 173#define PORT_LOCAL_TIMEOUT (PORT_ERR_BASE + 22) 174#define PORT_TX_QUEUE_DISABLED (PORT_ERR_BASE + 23) 175#define PORT_PAGE_TIMEOUT (PORT_ERR_BASE + 24) 176#define PORT_INVALID_SCN (PORT_ERR_BASE + 25) 177 178#define PORT_ERR_MAX (PORT_ERR_BASE + 26) 179 180/***************************************************************************** 181** External Function Declarations 182*****************************************************************************/ 183#ifdef __cplusplus 184extern "C" 185{ 186#endif 187 188/******************************************************************************* 189** 190** Function RFCOMM_CreateConnection 191** 192** Description RFCOMM_CreateConnection function is used from the application 193** to establish serial port connection to the peer device, 194** or allow RFCOMM to accept a connection from the peer 195** application. 196** 197** Parameters: scn - Service Channel Number as registered with 198** the SDP (server) or obtained using SDP from 199** the peer device (client). 200** is_server - TRUE if requesting application is a server 201** mtu - Maximum frame size the application can accept 202** bd_addr - BD_ADDR of the peer (client) 203** mask - specifies events to be enabled. A value 204** of zero disables all events. 205** p_handle - OUT pointer to the handle. 206** p_mgmt_cb - pointer to callback function to receive 207** connection up/down events. 208** Notes: 209** 210** Server can call this function with the same scn parameter multiple times if 211** it is ready to accept multiple simulteneous connections. 212** 213** DLCI for the connection is (scn * 2 + 1) if client originates connection on 214** existing none initiator multiplexer channel. Otherwise it is (scn * 2). 215** For the server DLCI can be changed later if client will be calling it using 216** (scn * 2 + 1) dlci. 217** 218*******************************************************************************/ 219extern int RFCOMM_CreateConnection (UINT16 uuid, UINT8 scn, 220 BOOLEAN is_server, UINT16 mtu, 221 BD_ADDR bd_addr, UINT16 *p_handle, 222 tPORT_CALLBACK *p_mgmt_cb); 223 224 225/******************************************************************************* 226** 227** Function RFCOMM_RemoveConnection 228** 229** Description This function is called to close the specified connection. 230** 231** Parameters: handle - Handle of the port returned in the Open 232** 233*******************************************************************************/ 234extern int RFCOMM_RemoveConnection (UINT16 handle); 235 236 237/******************************************************************************* 238** 239** Function RFCOMM_RemoveServer 240** 241** Description This function is called to close the server port. 242** 243** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 244** 245*******************************************************************************/ 246extern int RFCOMM_RemoveServer (UINT16 handle); 247 248 249/******************************************************************************* 250** 251** Function PORT_SetEventCallback 252** 253** Description Set event callback the specified connection. 254** 255** Parameters: handle - Handle of the port returned in the Open 256** p_callback - address of the callback function which should 257** be called from the RFCOMM when an event 258** specified in the mask occurs. 259** 260*******************************************************************************/ 261extern int PORT_SetEventCallback (UINT16 port_handle, 262 tPORT_CALLBACK *p_port_cb); 263 264/******************************************************************************* 265** 266** Function PORT_ClearKeepHandleFlag 267** 268** Description This function is called to clear the keep handle flag 269** which will cause not to keep the port handle open when closed 270** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 271** 272*******************************************************************************/ 273int PORT_ClearKeepHandleFlag (UINT16 port_handle); 274 275/******************************************************************************* 276** 277** Function PORT_SetEventCallback 278** 279** Description Set event data callback the specified connection. 280** 281** Parameters: handle - Handle of the port returned in the Open 282** p_callback - address of the callback function which should 283** be called from the RFCOMM when a data 284** packet is received. 285** 286*******************************************************************************/ 287extern int PORT_SetDataCallback (UINT16 port_handle, 288 tPORT_DATA_CALLBACK *p_cb); 289 290extern int PORT_SetDataCOCallback (UINT16 port_handle, tPORT_DATA_CO_CALLBACK *p_port_cb); 291/******************************************************************************* 292** 293** Function PORT_SetEventMask 294** 295** Description This function is called to close the specified connection. 296** 297** Parameters: handle - Handle of the port returned in the Open 298** mask - specifies events to be enabled. A value 299** of zero disables all events. 300** 301*******************************************************************************/ 302extern int PORT_SetEventMask (UINT16 port_handle, UINT32 mask); 303 304 305/******************************************************************************* 306** 307** Function PORT_CheckConnection 308** 309** Description This function returns PORT_SUCCESS if connection referenced 310** by handle is up and running 311** 312** Parameters: handle - Handle of the port returned in the Open 313** bd_addr - OUT bd_addr of the peer 314** p_lcid - OUT L2CAP's LCID 315** 316*******************************************************************************/ 317extern int PORT_CheckConnection (UINT16 handle, BD_ADDR bd_addr, 318 UINT16 *p_lcid); 319 320/******************************************************************************* 321** 322** Function PORT_IsOpening 323** 324** Description This function returns TRUE if there is any RFCOMM connection 325** opening in process. 326** 327** Parameters: TRUE if any connection opening is found 328** bd_addr - bd_addr of the peer 329** 330*******************************************************************************/ 331extern BOOLEAN PORT_IsOpening (BD_ADDR bd_addr); 332 333/******************************************************************************* 334** 335** Function PORT_SetState 336** 337** Description This function configures connection according to the 338** specifications in the tPORT_STATE structure. 339** 340** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 341** p_settings - Pointer to a tPORT_STATE structure containing 342** configuration information for the connection. 343** 344*******************************************************************************/ 345extern int PORT_SetState (UINT16 handle, tPORT_STATE *p_settings); 346 347/******************************************************************************* 348** 349** Function PORT_GetRxQueueCnt 350** 351** Description This function return number of buffers on the rx queue. 352** 353** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 354** p_rx_queue_count - Pointer to return queue count in. 355** 356*******************************************************************************/ 357extern int PORT_GetRxQueueCnt (UINT16 handle, UINT16 *p_rx_queue_count); 358 359/******************************************************************************* 360** 361** Function PORT_GetState 362** 363** Description This function is called to fill tPORT_STATE structure 364** with the current control settings for the port 365** 366** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 367** p_settings - Pointer to a tPORT_STATE structure in which 368** configuration information is returned. 369** 370*******************************************************************************/ 371extern int PORT_GetState (UINT16 handle, tPORT_STATE *p_settings); 372 373 374/******************************************************************************* 375** 376** Function PORT_Control 377** 378** Description This function directs a specified connection to pass control 379** control information to the peer device. 380** 381** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 382** signal - specify the function to be passed 383** 384*******************************************************************************/ 385#define PORT_SET_DTRDSR 0x01 386#define PORT_CLR_DTRDSR 0x02 387#define PORT_SET_CTSRTS 0x03 388#define PORT_CLR_CTSRTS 0x04 389#define PORT_SET_RI 0x05 /* DCE only */ 390#define PORT_CLR_RI 0x06 /* DCE only */ 391#define PORT_SET_DCD 0x07 /* DCE only */ 392#define PORT_CLR_DCD 0x08 /* DCE only */ 393#define PORT_BREAK 0x09 /* Break event */ 394 395extern int PORT_Control (UINT16 handle, UINT8 signal); 396 397 398/******************************************************************************* 399** 400** Function PORT_FlowControl 401** 402** Description This function directs a specified connection to pass 403** flow control message to the peer device. Enable flag passed 404** shows if port can accept more data. 405** 406** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 407** enable - enables data flow 408** 409*******************************************************************************/ 410extern int PORT_FlowControl (UINT16 handle, BOOLEAN enable); 411 412 413/******************************************************************************* 414** 415** Function PORT_GetModemStatus 416** 417** Description This function retrieves modem control signals. Normally 418** application will call this function after a callback 419** function is called with notification that one of signals 420** has been changed. 421** 422** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 423** callback. 424** p_signal - specify the pointer to control signals info 425** 426*******************************************************************************/ 427#define PORT_DTRDSR_ON 0x01 428#define PORT_CTSRTS_ON 0x02 429#define PORT_RING_ON 0x04 430#define PORT_DCD_ON 0x08 431 432/* 433** Define default initial local modem signals state set after connection established 434*/ 435#define PORT_OBEX_DEFAULT_SIGNAL_STATE (PORT_DTRDSR_ON | PORT_CTSRTS_ON | PORT_DCD_ON) 436#define PORT_SPP_DEFAULT_SIGNAL_STATE (PORT_DTRDSR_ON | PORT_CTSRTS_ON | PORT_DCD_ON) 437#define PORT_PPP_DEFAULT_SIGNAL_STATE (PORT_DTRDSR_ON | PORT_CTSRTS_ON | PORT_DCD_ON) 438#define PORT_DUN_DEFAULT_SIGNAL_STATE (PORT_DTRDSR_ON | PORT_CTSRTS_ON) 439 440extern int PORT_GetModemStatus (UINT16 handle, UINT8 *p_control_signal); 441 442 443/******************************************************************************* 444** 445** Function PORT_ClearError 446** 447** Description This function retreives information about a communications 448** error and reports current status of a connection. The 449** function should be called when an error occures to clear 450** the connection error flag and to enable additional read 451** and write operations. 452** 453** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 454** p_errors - pointer of the variable to receive error codes 455** p_status - pointer to the tPORT_STATUS structur to receive 456** connection status 457** 458*******************************************************************************/ 459 460#define PORT_ERR_BREAK 0x01 /* Break condition occured on the peer device */ 461#define PORT_ERR_OVERRUN 0x02 /* Overrun is reported by peer device */ 462#define PORT_ERR_FRAME 0x04 /* Framing error reported by peer device */ 463#define PORT_ERR_RXOVER 0x08 /* Input queue overflow occured */ 464#define PORT_ERR_TXFULL 0x10 /* Output queue overflow occured */ 465 466typedef struct 467{ 468#define PORT_FLAG_CTS_HOLD 0x01 /* Tx is waiting for CTS signal */ 469#define PORT_FLAG_DSR_HOLD 0x02 /* Tx is waiting for DSR signal */ 470#define PORT_FLAG_RLSD_HOLD 0x04 /* Tx is waiting for RLSD signal */ 471 472 UINT16 flags; 473 UINT16 in_queue_size; /* Number of bytes in the input queue */ 474 UINT16 out_queue_size; /* Number of bytes in the output queue */ 475 UINT16 mtu_size; /* peer MTU size */ 476} tPORT_STATUS; 477 478 479extern int PORT_ClearError (UINT16 handle, UINT16 *p_errors, 480 tPORT_STATUS *p_status); 481 482 483/******************************************************************************* 484** 485** Function PORT_SendError 486** 487** Description This function send a communications error to the peer device 488** 489** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 490** errors - receive error codes 491** 492*******************************************************************************/ 493extern int PORT_SendError (UINT16 handle, UINT8 errors); 494 495 496/******************************************************************************* 497** 498** Function PORT_GetQueueStatus 499** 500** Description This function reports current status of a connection. 501** 502** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 503** p_status - pointer to the tPORT_STATUS structur to receive 504** connection status 505** 506*******************************************************************************/ 507extern int PORT_GetQueueStatus (UINT16 handle, tPORT_STATUS *p_status); 508 509 510/******************************************************************************* 511** 512** Function PORT_Purge 513** 514** Description This function discards all the data from the output or 515** input queues of the specified connection. 516** 517** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 518** purge_flags - specify the action to take. 519** 520*******************************************************************************/ 521#define PORT_PURGE_TXCLEAR 0x01 522#define PORT_PURGE_RXCLEAR 0x02 523 524extern int PORT_Purge (UINT16 handle, UINT8 purge_flags); 525 526 527/******************************************************************************* 528** 529** Function PORT_Read 530** 531** Description This function returns the pointer to the buffer received 532** from the peer device. Normally application will call this 533** function after receiving PORT_EVT_RXCHAR event. 534** Application calling this function is responsible to free 535** buffer returned. 536** 537** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 538** callback. 539** pp_buf - pointer to address of buffer with data, 540** 541*******************************************************************************/ 542extern int PORT_Read (UINT16 handle, BT_HDR **pp_buf); 543 544 545/******************************************************************************* 546** 547** Function PORT_ReadData 548** 549** Description Normally application will call this function after receiving 550** PORT_EVT_RXCHAR event. 551** 552** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 553** callback. 554** p_data - Data area 555** max_len - Byte count requested 556** p_len - Byte count received 557** 558*******************************************************************************/ 559extern int PORT_ReadData (UINT16 handle, char *p_data, UINT16 max_len, 560 UINT16 *p_len); 561 562 563/******************************************************************************* 564** 565** Function PORT_Write 566** 567** Description This function to send BT buffer to the peer device. 568** Application should not free the buffer. 569** 570** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 571** p_buf - pointer to the buffer with data, 572** 573*******************************************************************************/ 574extern int PORT_Write (UINT16 handle, BT_HDR *p_buf); 575 576 577/******************************************************************************* 578** 579** Function PORT_WriteData 580** 581** Description This function is called from the legacy application to 582** send data. 583** 584** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 585** p_data - Data area 586** max_len - Byte count to write 587** p_len - Bytes written 588** 589*******************************************************************************/ 590extern int PORT_WriteData (UINT16 handle, char *p_data, UINT16 max_len, 591 UINT16 *p_len); 592 593/******************************************************************************* 594** 595** Function PORT_WriteDataCO 596** 597** Description Normally not GKI aware application will call this function 598** to send data to the port by callout functions. 599** 600** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 601** 602*******************************************************************************/ 603extern int PORT_WriteDataCO (UINT16 handle, int* p_len); 604 605/******************************************************************************* 606** 607** Function PORT_Test 608** 609** Description Application can call this function to send RFCOMM Test frame 610** 611** Parameters: handle - Handle returned in the RFCOMM_CreateConnection 612** p_data - Data area 613** max_len - Byte count requested 614** 615*******************************************************************************/ 616extern int PORT_Test (UINT16 handle, UINT8 *p_data, UINT16 len); 617 618 619/******************************************************************************* 620** 621** Function RFCOMM_Init 622** 623** Description This function is called to initialize RFCOMM layer 624** 625*******************************************************************************/ 626extern void RFCOMM_Init (void); 627 628 629/******************************************************************************* 630** 631** Function PORT_SetTraceLevel 632** 633** Description This function sets the trace level for RFCOMM. If called with 634** a value of 0xFF, it simply reads the current trace level. 635** 636** Returns the new (current) trace level 637** 638*******************************************************************************/ 639extern UINT8 PORT_SetTraceLevel (UINT8 new_level); 640 641 642/******************************************************************************* 643** 644** Function PORT_GetResultString 645** 646** Description This function returns the human-readable string for a given 647** result code. 648** 649** Returns a pointer to the human-readable string for the given 650** result. Note that the string returned must not be freed. 651** 652*******************************************************************************/ 653extern const char *PORT_GetResultString (const uint8_t result_code); 654 655#ifdef __cplusplus 656} 657#endif 658 659#endif /* PORT_API_H */ 660