Add TEST RFCOMM command handler. Remove the RFCOMM channel UseUIFrame element, as the Bluetooth adaptions to RFCOMM only allow UIH frames to be used.
This commit is contained in:
		
							parent
							
								
									559af02204
								
							
						
					
					
						commit
						2eff731ecf
					
				
					 7 changed files with 29 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -235,7 +235,6 @@ static void RFCOMM_ProcessSABM(const RFCOMM_Address_t* const FrameAddress, Bluet
 | 
			
		|||
			CurrRFCOMMChannel->DLCI         = FrameAddress->DLCI;
 | 
			
		||||
			CurrRFCOMMChannel->State        = RFCOMM_Channel_Open;
 | 
			
		||||
			CurrRFCOMMChannel->Priority     = 7 + (CurrRFCOMMChannel->DLCI >> 3) + ((CurrRFCOMMChannel->DLCI >> 3) * 7);
 | 
			
		||||
			CurrRFCOMMChannel->UseUIFrames  = false;
 | 
			
		||||
			CurrRFCOMMChannel->MTU          = 0xFFFF;
 | 
			
		||||
			CurrRFCOMMChannel->Signals      = 0;
 | 
			
		||||
			CurrRFCOMMChannel->BreakSignals = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,6 @@
 | 
			
		|||
			uint8_t  DLCI;
 | 
			
		||||
			uint8_t  State;
 | 
			
		||||
			uint8_t  Priority;
 | 
			
		||||
			bool     UseUIFrames;
 | 
			
		||||
			uint16_t MTU;
 | 
			
		||||
			uint8_t  StatusFlags;
 | 
			
		||||
			uint8_t  Signals;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ void RFCOMM_ProcessControlCommand(const uint8_t* Command, Bluetooth_Channel_t* c
 | 
			
		|||
	switch (CommandHeader->Command)
 | 
			
		||||
	{
 | 
			
		||||
		case RFCOMM_Control_Test:
 | 
			
		||||
			RFCOMM_ProcessTestCommand(CommandHeader, CommandData, Channel);
 | 
			
		||||
			RFCOMM_ProcessTestCommand(CommandHeader, CommandDataLen, CommandData, Channel);
 | 
			
		||||
			break;
 | 
			
		||||
		case RFCOMM_Control_FlowControlEnable:
 | 
			
		||||
			RFCOMM_ProcessFCECommand(CommandHeader, CommandData, Channel);
 | 
			
		||||
| 
						 | 
				
			
			@ -73,10 +73,29 @@ void RFCOMM_ProcessControlCommand(const uint8_t* Command, Bluetooth_Channel_t* c
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void RFCOMM_ProcessTestCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
 | 
			
		||||
			                          Bluetooth_Channel_t* const Channel)
 | 
			
		||||
static void RFCOMM_ProcessTestCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t CommandDataLen,
 | 
			
		||||
                                      const uint8_t* CommandData, Bluetooth_Channel_t* const Channel)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t* Params = (const uint8_t*)CommandData;
 | 
			
		||||
 | 
			
		||||
	BT_RFCOMM_DEBUG(1, "<< TEST Command");
 | 
			
		||||
	
 | 
			
		||||
	struct
 | 
			
		||||
	{
 | 
			
		||||
		RFCOMM_Command_t CommandHeader;
 | 
			
		||||
		uint8_t          Length;
 | 
			
		||||
		uint8_t          TestData[CommandDataLen];
 | 
			
		||||
	} TestResponse;
 | 
			
		||||
 | 
			
		||||
	/* Fill out the Test response data */
 | 
			
		||||
	TestResponse.CommandHeader = (RFCOMM_Command_t){.Command = RFCOMM_Control_Test, .EA = true};
 | 
			
		||||
	TestResponse.Length        = (CommandDataLen << 1) | 0x01;
 | 
			
		||||
	memcpy(TestResponse.TestData, Params, CommandDataLen);
 | 
			
		||||
	
 | 
			
		||||
	BT_RFCOMM_DEBUG(1, ">> TEST Response");
 | 
			
		||||
 | 
			
		||||
	/* Send the PDN response to acknowledge the command */
 | 
			
		||||
	RFCOMM_SendFrame(RFCOMM_CONTROL_DLCI, false, RFCOMM_Frame_UIH, sizeof(TestResponse), &TestResponse, Channel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void RFCOMM_ProcessFCECommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +209,6 @@ static void RFCOMM_ProcessDPNCommand(const RFCOMM_Command_t* const CommandHeader
 | 
			
		|||
	/* Save the new channel configuration */
 | 
			
		||||
	RFCOMMChannel->State       = RFCOMM_Channel_Open;
 | 
			
		||||
	RFCOMMChannel->Priority    = Params->Priority;
 | 
			
		||||
	RFCOMMChannel->UseUIFrames = (Params->FrameType != 0);
 | 
			
		||||
	RFCOMMChannel->MTU         = Params->MaximumFrameSize;
 | 
			
		||||
	
 | 
			
		||||
	struct
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,8 +113,8 @@
 | 
			
		|||
		void RFCOMM_ProcessControlCommand(const uint8_t* Command, Bluetooth_Channel_t* const Channel);
 | 
			
		||||
 | 
			
		||||
		#if defined(INCLUDE_FROM_RFCOMM_CONTROL_C)
 | 
			
		||||
			static void RFCOMM_ProcessTestCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
 | 
			
		||||
			                                      Bluetooth_Channel_t* const Channel);
 | 
			
		||||
			static void RFCOMM_ProcessTestCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t CommandDataLen, 
 | 
			
		||||
			                                      const uint8_t* CommandData, Bluetooth_Channel_t* const Channel);
 | 
			
		||||
			static void RFCOMM_ProcessFCECommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
 | 
			
		||||
			                                     Bluetooth_Channel_t* const Channel);
 | 
			
		||||
			static void RFCOMM_ProcessFCDCommand(const RFCOMM_Command_t* const CommandHeader, const uint8_t* CommandData,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -487,8 +487,8 @@ static bool SDP_SearchServiceTable(uint8_t UUIDList[][UUID_SIZE_BYTES], const ui
 | 
			
		|||
 *
 | 
			
		||||
 *  \return True if all the UUIDs given in the UUID list appear in the given attribute table, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
static void SDP_CheckUUIDMatch(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs, uint16_t* UUIDMatchFlags,
 | 
			
		||||
                               const void* CurrAttribute)
 | 
			
		||||
static void SDP_CheckUUIDMatch(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs,
 | 
			
		||||
                               uint16_t* const UUIDMatchFlags, const void* CurrAttribute)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t CurrAttributeType = (pgm_read_byte(CurrAttribute) & ~0x07);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -218,8 +218,8 @@
 | 
			
		|||
 | 
			
		||||
			static bool     SDP_SearchServiceTable(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs,
 | 
			
		||||
			                                       const ServiceAttributeTable_t* CurrAttributeTable);
 | 
			
		||||
			static void     SDP_CheckUUIDMatch(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs, uint16_t* UUIDMatchFlags,
 | 
			
		||||
			                                   const void* CurrAttribute);
 | 
			
		||||
			static void     SDP_CheckUUIDMatch(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs,
 | 
			
		||||
			                                   uint16_t* const UUIDMatchFlags, const void* CurrAttribute);
 | 
			
		||||
 | 
			
		||||
			static uint8_t  SDP_GetAttributeList(uint16_t AttributeList[][2], const void** const CurrentParameter);
 | 
			
		||||
			static uint8_t  SDP_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES], const void** const CurrentParameter);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue