⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spp_uart.c

📁 蓝牙的spp dun ftp 功能的源代码
💻 C
字号:
/********************************************************************************************/
/*
	----------------------通信协议-------------------------------------------
发送协议( MCU )

	第一个字节帧起始字节0x55,
	第二个字节: commad ID,命令的表实 号,表示命令的种类
	第三个字节:蓝牙的地址
	第四个字节: 数据的个数,data_num
	第五个字节:需要发送的数据
	......
	最后一个字节: 校验和

	
	
接收协议(  BT	)

	


ask: 	0x55 +  ID + bd_addr+data_num + data1 +data2+.........+ datan +  verify 
answer:	0x55 +  ID + bd_addr +data_num + data1 +data2+.........+ datan +  verify


*/
/********************************************************************************************/

#include "spp_dev_private.h"
#include "spp_uart.h"
#include <panic.h>
#include <stdio.h>
#include <stream.h>
#include <pio.h>
#include <string.h>
#include <spp.h>
#include <source.h>
#include <ps.h>
#include <bdaddr.h>     
#include <sink.h>
#include "spp_dev_connect.h"
/*
define DLC for communction with the MCU	
*/
typedef	union	DLC_send_tag
{
	struct	DLC_fream_tag
	{
		uint8	StartData;				/* start data        */
		uint8	ID;						/* commmand ID */
		bdaddr  	bd_addr;				/* BT address      */
		uint8	data_num;				/* num of  datas  */
		uint8	dlc_data[Buff_length-10];	/* data detail       */
		uint8 	verify;					/* check data      */
	}DLC_fream;
	
	uint8	data_buff[Buff_length];	/* data list           */
}DCL_send;

/**************************************************************************/  
void UART_Rec_PC(sppTaskData * app, uint8 *data, uint16 len)
{
	uint16 offset;
	offset = SinkClaim(app->uart_sink, len);
	if(app->uart_sink && offset != 0xFFFF)
	{
		memcpy(SinkMap(app->uart_sink)+offset, data, len);	/* pointer to any connects*/
		(void)PanicZero(SinkFlush(app->uart_sink, len));						/*  to UART*/
	}
}

void SPP_UART_SEND_SLAVE( sppTaskData * app, uint8 *data, uint16 len,Sink sink)
{
       uint16 offset;
	offset = SinkClaim(sink, len);
	if( sink && offset != 0xFFFF )
	{
		memcpy(SinkMap(sink)+offset, data, len);	/* pointer to any connects*/
		(void)PanicZero(SinkFlush(sink, len));						/*  to UART*/
	}
}



void UartSendData_MCU(const uint8* s,uint16 length)
{
	Sink uart = StreamUartSink();
	char * data = (char*)s;
	if(uart)
	{
		if (SinkClaim(uart,length) != 0xFFFF) 
		{
			memcpy(SinkMap(uart),(char *)data,length);
			(void)PanicZero(SinkFlush(uart,length));
		}
	}
}
/*
void HeadsetRxUart(uint8* rxData, int rxSize)
{
	uint8* rxPtr;
	int size;

	size = SourceSize(StreamUartSource());



	if (size)
	{
		rxPtr = (uint8*) SourceMap(StreamUartSource());

		if (rxPtr != NULL)
		{
			if (memcpy(rxData, rxPtr, size) == NULL)
			{

			}
		}
		else
		{

		}


		SourceDrop(StreamUartSource(), size);
	}
}


*/





/*************************************
	MCU    -------->MASTER
	MASTER  ------>MCU
**********************************/
void UART_SEND_MCU(sppTaskData * app )
{    		
	uint8	loop ;
	/*uint8*	char_point;*/
	uint16	Tran_length ;
	uint16	packet_size ;
	Source 	req; 	
	DCL_send TranBuff_MCU;	
	
	memset(TranBuff_MCU.data_buff, 0, Buff_length);
	
	req = StreamUartSource(); 
	packet_size = SourceSize(req);  
	if (    packet_size )
	{	
		const uint8 *char_point = SourceMap(req);		
		DEBUG(("HOST_MESSAGE_MORE_DATA_from MCU SEND_NUMBER = 0x%x\n",packet_size));
		/*P_UART_SEND_SLAVE(app,(uint8*)data,packet_size,app->spp_connect_sink[0]);   	*/
		for(loop = 0;loop<packet_size;loop++)
		{
			TranBuff_MCU.data_buff[loop] = (*char_point);
			char_point++;
		} 
		/*char_point = NULL;*/

		SourceDrop(req, packet_size);
		packet_size = SourceSize(req);
		
		DEBUG(("receive_val ->TranBuff_MCU[0] = 0x%x\n",TranBuff_MCU.data_buff[0]));
		DEBUG(("receive_val ->TranBuff_MCU[1] = 0x%x\n",TranBuff_MCU.data_buff[1]));
		DEBUG(("receive_val ->TranBuff_MCU[2] = 0x%x\n",TranBuff_MCU.data_buff[2]));
		DEBUG(("receive_val ->TranBuff_MCU[3] = 0x%x\n",TranBuff_MCU.data_buff[3]));
		DEBUG(("receive_val ->TranBuff_MCU[4] = 0x%x\n",TranBuff_MCU.data_buff[4]));
		DEBUG(("receive_val ->TranBuff_MCU[5] = 0x%x\n",TranBuff_MCU.data_buff[5]));
		DEBUG(("receive_val ->TranBuff_MCU[6] = 0x%x\n",TranBuff_MCU.data_buff[6]));
		
		
/*send to PC*/
		memset(TranBuff_MCU.data_buff, 0, Buff_length);		
		TranBuff_MCU.data_buff[0] = 'p';
		TranBuff_MCU.data_buff[1] = 'q';
		Tran_length = 2;		
		UartSendData_MCU(TranBuff_MCU.data_buff, Tran_length);		
/*send to slave  for test */		
		memset(TranBuff_MCU.data_buff, 0, Buff_length);
		TranBuff_MCU.data_buff[0] = 'q';
		TranBuff_MCU.data_buff[1] = 't';
		TranBuff_MCU.data_buff[2] = 't';
		Tran_length = 3;
		char_point = TranBuff_MCU.data_buff;
		SPP_UART_SEND_SLAVE(app, (uint8*)char_point, Tran_length, app->spp_connect_sink[0]);
		
		/*DEBUG(("HOST_MESSAGE_MORE_DATA_send MCU SEND_NUMBER = 0x%x\n",Tran_length));*/
		
	}
	
}




bdaddr	UART_SearchCorrespondDeviceAddr	(SPP* spp)
{
	bdaddr            	bd_addr;
	switch((uint16)(spp))
	{
		case	spp_1_addr:
					bd_addr = StoredAddr[slave_1st];
					break;
		case	spp_2_addr:
					bd_addr = StoredAddr[slave_2nd];
					break;
		case	spp_3_addr:
					bd_addr = StoredAddr[slave_3th];
					break;
		case	spp_4_addr:
					bd_addr = StoredAddr[slave_4th];
					break;
		case	spp_5_addr:
					bd_addr = StoredAddr[slave_5th];
					break;
		case	spp_6_addr:
					bd_addr = StoredAddr[slave_6th];
					break;					
		case	spp_7_addr:
					bd_addr = StoredAddr[slave_7th];
					break;
		default:		
		
					break;
		
					
	}
	return	bd_addr;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -