/*
LUFA Library
- Copyright (C) Dean Camera, 2010.
-
+ Copyright (C) Dean Camera, 2011.
+
dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
+ www.lufa-lib.org
*/
/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
- Permission to use, copy, modify, distribute, and sell this
+ Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
+ without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
#include <stdio.h>
#include <LUFA/Common/Common.h>
- #include <LUFA/Drivers/Peripheral/SerialStream.h>
+ #include <LUFA/Drivers/Peripheral/Serial.h>
#include "BluetoothStack.h"
#include "RFCOMMControl.h"
-
+
/* Macros: */
#define BT_RFCOMM_DEBUG(l, s, ...) do { if (RFCOMM_DEBUG_LEVEL >= l) printf_P(PSTR("(RFCOMM) " s "\r\n"), ##__VA_ARGS__); } while (0)
- #define RFCOMM_DEBUG_LEVEL 2
-
+ #define RFCOMM_DEBUG_LEVEL 0
+
#define FRAME_POLL_FINAL (1 << 4)
-
+
#define RFCOMM_CONTROL_DLCI 0
#define RFCOMM_MAX_OPEN_CHANNELS 5
RFCOMM_Frame_UA = 0x63, /**< Unnumbered Acknowledgement Field */
RFCOMM_Frame_UIH = 0xEF, /**< Unnumbered Information with Header check Field */
};
-
- /* Type Defines: */
- typedef struct
- {
- unsigned char EA : 1;
- unsigned char CR : 1;
- unsigned char DLCI : 6;
- } RFCOMM_Address_t;
-
- typedef struct
+
+ enum RFCOMM_Channel_States_t
{
- RFCOMM_Address_t Address;
- uint8_t Control;
- } RFCOMM_Header_t;
-
+ RFCOMM_Channel_Closed = 0,
+ RFCOMM_Channel_Configure = 1,
+ RFCOMM_Channel_Open = 2,
+ };
+
+ /* Type Defines: */
typedef struct
{
- uint8_t DLCI;
- bool Configured;
+ uint8_t DLCI;
+ uint8_t State;
+ uint8_t Priority;
+ uint16_t MTU;
+ uint8_t ConfigFlags;
+ struct
+ {
+ uint8_t Signals;
+ uint8_t BreakSignal;
+ } Remote;
+ struct
+ {
+ uint8_t Signals;
+ uint8_t BreakSignal;
+ } Local;
} RFCOMM_Channel_t;
-
+
/* External Variables: */
extern RFCOMM_Channel_t RFCOMM_Channels[RFCOMM_MAX_OPEN_CHANNELS];
/* Function Prototypes: */
void RFCOMM_Initialize(void);
- void RFCOMM_ProcessPacket(void* Data, Bluetooth_Channel_t* const Channel);
-
+ void RFCOMM_ServiceChannels(Bluetooth_Channel_t* const ACLChannel);
+ void RFCOMM_ProcessPacket(void* Data,
+ Bluetooth_Channel_t* const ACLChannel);
+
+ void RFCOMM_SendChannelSignals(const RFCOMM_Channel_t* const RFCOMMChannel,
+ Bluetooth_Channel_t* const ACLChannel);
+ void RFCOMM_SendData(const uint16_t DataLen,
+ const uint8_t* Data,
+ const RFCOMM_Channel_t* const RFCOMMChannel,
+ Bluetooth_Channel_t* const ACLChannel);
+
+ void RFCOMM_ChannelOpened(RFCOMM_Channel_t* const RFCOMMChannel);
+ void RFCOMM_DataReceived(RFCOMM_Channel_t* const RFCOMMChannel,
+ uint16_t DataLen,
+ const uint8_t* Data);
+ void RFCOMM_ChannelSignalsReceived(RFCOMM_Channel_t* const RFCOMMChannel);
+
+ RFCOMM_Channel_t* RFCOMM_GetFreeChannelEntry(const uint8_t DLCI);
RFCOMM_Channel_t* RFCOMM_GetChannelData(const uint8_t DLCI);
- uint16_t RFCOMM_GetFrameDataLength(const uint8_t* const BufferPos);
- void RFCOMM_SendFrame(const uint8_t DLCI, const bool CommandResponse, const uint8_t Control,
- const uint16_t DataLen, const void* Data, Bluetooth_Channel_t* const Channel);
+ uint16_t RFCOMM_GetVariableFieldValue(const uint8_t** BufferPos);
+ void RFCOMM_SendFrame(const uint8_t DLCI,
+ const bool CommandResponse,
+ const uint8_t Control,
+ const uint16_t DataLen,
+ const void* Data,
+ Bluetooth_Channel_t* const ACLChannel);
#if defined(INCLUDE_FROM_RFCOMM_C)
- static void RFCOMM_ProcessDM(const RFCOMM_Address_t* const FrameAddress, Bluetooth_Channel_t* const Channel);
- static void RFCOMM_ProcessDISC(const RFCOMM_Address_t* const FrameAddress, Bluetooth_Channel_t* const Channel);
- static void RFCOMM_ProcessSABM(const RFCOMM_Address_t* const FrameAddress, Bluetooth_Channel_t* const Channel);
- static void RFCOMM_ProcessUA(const RFCOMM_Address_t* const FrameAddress, Bluetooth_Channel_t* const Channel);
- static void RFCOMM_ProcessUIH(const RFCOMM_Address_t* const FrameAddress, const uint16_t FrameLength,
- const uint8_t* FrameData, Bluetooth_Channel_t* const Channel);
-
- static uint8_t RFCOMM_GetFCSValue(const void* FrameStart, uint8_t Length);
+ static uint8_t RFCOMM_GetFCSValue(const void* FrameStart,
+ uint8_t Length);
+
+ static void RFCOMM_ProcessDM(const RFCOMM_Address_t* const FrameAddress,
+ Bluetooth_Channel_t* const ACLChannel);
+ static void RFCOMM_ProcessDISC(const RFCOMM_Address_t* const FrameAddress,
+ Bluetooth_Channel_t* const ACLChannel);
+ static void RFCOMM_ProcessSABM(const RFCOMM_Address_t* const FrameAddress,
+ Bluetooth_Channel_t* const ACLChannel);
+ static void RFCOMM_ProcessUA(const RFCOMM_Address_t* const FrameAddress,
+ Bluetooth_Channel_t* const ACLChannel);
+ static void RFCOMM_ProcessUIH(const RFCOMM_Address_t* const FrameAddress,
+ const uint16_t FrameLength,
+ const uint8_t* FrameData,
+ Bluetooth_Channel_t* const ACLChannel);
#endif
-
+
#endif
+