2014-04-21 18:27:04 +02:00
/* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
This software may be distributed and modified under the terms of the GNU
General Public License version 2 ( GPL2 ) as published by the Free Software
Foundation and appearing in the file GPL2 . TXT included in the packaging of
this file . Please note that GPL2 Section 2 [ b ] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ( " Copyleft " ) .
Contact information
- - - - - - - - - - - - - - - - - - -
Kristian Lauszus , TKJ Electronics
Web : http : //www.tkjelectronics.com
e - mail : kristianl @ tkjelectronics . com
Enhanced by Dmitry Pakhomenko to initiate connection with remote SPP - aware device
04.04 .2014 , Magictale Electronics
*/
2014-04-21 18:41:39 +02:00
# ifndef _sppclient_h_
# define _sppclient_h_
2014-04-21 18:27:04 +02:00
# include "SPPBase.h"
/* Bluetooth L2CAP states for SDP_task() */
# define L2CAP_SDP_WAIT 0
# define L2CAP_SDP_REQUEST 1
# define L2CAP_SDP_DONE 2
# define L2CAP_DISCONNECT_RESPONSE 3
# define L2CAP_SDP_CONN_RESPONSE 4
# define L2CAP_SDP_CONFIG_REQUEST 5
# define L2CAP_SDP_SERVICE_SEARCH_ATTR1 6
# define L2CAP_SDP_SERVICE_SEARCH_ATTR2 7
/* Bluetooth L2CAP states for RFCOMM_task() */
# define L2CAP_RFCOMM_WAIT 0
# define L2CAP_RFCOMM_REQUEST 1
# define L2CAP_RFCOMM_DONE 3
# define L2CAP_RFCOMM_CONN_RESPONSE 4
# define L2CAP_RFCOMM_CONFIG_REQUEST 6
# define L2CAP_RFCOMM_CONFIG_RESPONSE 7
2014-04-22 01:50:28 +02:00
# ifndef GCC_VERSION
# define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
# endif
2014-04-21 18:27:04 +02:00
/**
* This BluetoothService class a Serial Port Protocol ( SPP ) client .
* It inherits the Arduino Stream class . This allows it to use all the standard Arduino print functions .
*/
2014-04-21 18:41:39 +02:00
class SPPClient : public SPPBase {
2014-04-21 18:27:04 +02:00
public :
/**
2014-04-21 18:41:39 +02:00
* Constructor for the SPPClient class .
2014-04-21 18:27:04 +02:00
* @ param p Pointer to BTD class instance .
* @ param name Set the name to BTD # btdName . If argument is omitted , then " Arduino " will be used .
* @ param pin Write the pin to BTD # btdPin . If argument is omitted , then " 0000 " will be used .
* @ param pair Set this to true if you want to pair with a device .
* @ param addr Set this to the address you want to connect to .
*/
2014-04-21 18:41:39 +02:00
SPPClient ( BTD * p , const char * name = " Arduino " , const char * pin = " 0000 " , bool pair = false , uint8_t * addr = NULL ) ;
2014-04-21 18:27:04 +02:00
2014-09-11 01:40:07 +02:00
# if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) // Check if C++11 is supported
2014-04-21 18:41:39 +02:00
SPPClient ( BTD * p , bool pair = false , uint8_t * addr = NULL ) : SPPClient ( p , " Arduino " , " 0000 " , pair , addr ) { } ; // Use a delegating constructor
2014-04-21 18:27:04 +02:00
# endif
/** @name SPPBase implementation */
/**
* Used to pass acldata to the services .
* @ param ACLData Incoming acldata .
*/
virtual void ACLData ( uint8_t * ACLData ) ;
/** Used to establish the connection automatically. */
virtual void Run ( ) ;
/** Use this to reset the service. */
virtual void Reset ( ) ;
/**@}*/
private :
uint8_t remainingBytes ;
uint8_t rfcomm_uuid_sign_idx ; // A progressing index while searching for "RFCOMM UUID" signature, starts from 0 (nothing found) and ends with 5 (found full sequence)
uint8_t rfcomm_found ;
/* SDP Commands */
virtual void SDP_Command ( uint8_t * data , uint8_t nbytes ) ;
void SDP_Service_Search_Attr ( uint8_t transactionIDHigh , uint8_t transactionIDLow , uint8_t remainingLen = 0 ) ;
/* RFCOMM Commands */
virtual void RFCOMM_Command ( uint8_t * data , uint8_t nbytes ) ; // Used for RFCOMM commands
void parseAttrReply ( uint8_t * l2capinbuf ) ;
} ;
# endif