+ RFCOMM_ProcessControlCommand((const RFCOMM_Command_t*)FrameData, Channel);
+ return;
+ }
+
+ // TODO: Handle regular channel data here
+}
+
+static void RFCOMM_ProcessControlCommand(const RFCOMM_Command_t* CommandHeader, Bluetooth_Channel_t* const Channel)
+{
+ switch (CommandHeader->Command)
+ {
+ case RFCOMM_Control_Test:
+ BT_RFCOMM_DEBUG(1, "<< TEST Command");
+ break;
+ case RFCOMM_Control_FlowControlEnable:
+ BT_RFCOMM_DEBUG(1, "<< FCE Command");
+ break;
+ case RFCOMM_Control_FlowControlDisable:
+ BT_RFCOMM_DEBUG(1, "<< FCD Command");
+ break;
+ case RFCOMM_Control_ModemStatus:
+ BT_RFCOMM_DEBUG(1, "<< MS Command");
+ break;
+ case RFCOMM_Control_RemotePortNegotiation:
+ BT_RFCOMM_DEBUG(1, "<< RPN Command");
+ break;
+ case RFCOMM_Control_RemoteLineStatus:
+ BT_RFCOMM_DEBUG(1, "<< RLS Command");
+ break;
+ case RFCOMM_Control_DLCParameterNegotiation:
+ BT_RFCOMM_DEBUG(1, "<< DPN Command");
+
+ struct
+ {
+ RFCOMM_Command_t Header;
+ RFCOMM_Command_t Command;
+ } Response =
+ {
+ .Header = (RFCOMM_Command_t)
+ {
+ .Command = RFCOMM_Control_NonSupportedCommand,
+ .CR = true,
+ .EA = true,
+ },
+
+ .Command = *CommandHeader,
+ };
+
+ RFCOMM_SendFrame(RFCOMM_CONTROL_DLCI, false, RFCOMM_Frame_UIH, sizeof(RFCOMM_Command_t), &Response, Channel);
+ break;