Add delay to the Connection Request signal processing routine - without this, the host will not create the RFCOMM channel correctly. Need to investigate why this delay is needed.
break;
default:
/* Unknown Protocol packet */
- printf_P(PSTR("Unknown Packet Received (Channel 0x%04X, PSM: 0x%02X):\r\n"), Channel->LocalNumber, Channel->PSM);
+ printf_P(PSTR("Unknown Packet Received (Channel 0x%04X, PSM: 0x%02X, Len: 0x%04X):\r\n"),
+ Channel->LocalNumber, Channel->PSM, DataLen);
break;
}
}
TODO: Make SendPacket respect receiver's MTU
TODO: Make ReceivePacket stitch together MTU fragments (?)
TODO: Add channel opened/closed callbacks
+ TODO: Figure out why delay is needed in connection for services
*/
#define INCLUDE_FROM_BLUETOOTH_ACLPACKETS_C
Pipe_ClearIN();
Pipe_Freeze();
-
+
BT_ACL_DEBUG(1, "<< L2CAP Connection Request");
BT_ACL_DEBUG(2, "-- PSM: 0x%04X", ConnectionRequest.PSM);
BT_ACL_DEBUG(2, "-- Source Channel: 0x%04X", ConnectionRequest.SourceChannel);
+
+ _delay_ms(15); // TODO - Determine why this is needed
/* Try to retrieve the existing channel's information structure if it exists */
Bluetooth_Channel_t* ChannelData = Bluetooth_GetChannelData(ConnectionRequest.SourceChannel, CHANNEL_SEARCH_REMOTENUMBER);
\r
const struct\r
{\r
- uint8_t Header;\r
- uint8_t Size;\r
+ uint8_t Header;\r
+ uint8_t Size;\r
\r
- ItemProtocol_t L2CAP;\r
- ItemProtocolPSM_t RFCOMM;\r
+ ItemProtocol_t L2CAP;\r
+ ItemProtocolChannel_t RFCOMM;\r
} PROGMEM SerialPort_Attribute_ProtocolDescriptor =\r
{\r
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
- (sizeof(ItemProtocol_t) + sizeof(ItemProtocolPSM_t)),\r
+ (sizeof(ItemProtocol_t) + sizeof(ItemProtocolChannel_t)),\r
{\r
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
sizeof(ItemUUID_t),\r
},\r
{\r
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
- (sizeof(ItemUUID_t) + sizeof(Item16Bit_t)),\r
+ (sizeof(ItemUUID_t) + sizeof(Item8Bit_t)),\r
{\r
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
- {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(CHANNEL_PSM_RFCOMM)},\r
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_8Bit), 0x03},\r
},\r
},\r
};\r
} Protocol;\r
} ItemProtocol_t;\r
\r
- /** Structure for a list of Data Elements Sequences containing UUID Data Elements and 16-bit PSM values, for service\r
+ /** Structure for a list of Data Elements Sequences containing UUID Data Elements and 8-bit channel values, for service\r
* attributes requiring extended protocol lists.\r
*/\r
typedef struct\r
{\r
- uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
- uint8_t Size; /**< Size of the inner Data Element sequence */\r
+ uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
+ uint8_t Size; /**< Size of the inner Data Element sequence */\r
\r
struct\r
{\r
- ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */\r
- Item16Bit_t PSM; /**< PSM that is to be used to access the service on created channels */\r
+ ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */\r
+ Item8Bit_t Channel; /**< Channel that is to be used to access the service */\r
} Protocol;\r
- } ItemProtocolPSM_t;\r
+ } ItemProtocolChannel_t;\r
\r
/** Structure for a list of Data Elements containing language encodings, including the language ID, Encoding ID and\r
* Attribute base offset.\r
\r
/* External Variables: */\r
extern const ServiceAttributeTable_t SerialPort_Attribute_Table[];\r
+ extern const ServiceAttributeTable_t PnP_Attribute_Table[];\r
\r
#endif\r