📄 spp_uart.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 + -