USB_Host_Shield_2.0/SPPClient.h

93 lines
No EOL
3.7 KiB
C++
Executable file

/* 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
*/
#ifndef _sppclient_h_
#define _sppclient_h_
#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
#ifndef GCC_VERSION
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#endif
/**
* 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.
*/
class SPPClient : public SPPBase {
public:
/**
* Constructor for the SPPClient class.
* @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.
*/
SPPClient(BTD *p, const char *name = "Arduino", const char *pin = "0000", bool pair = false, uint8_t *addr = NULL);
#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) // Check if C++11 is supported
SPPClient(BTD *p, bool pair = false, uint8_t *addr = NULL) : SPPClient(p, "Arduino", "0000", pair, addr) {}; // Use a delegating constructor
#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