📄 bluetooth.c
字号:
F2M_GetResponse(); // Get Response from the F2M Bluetooth Plug
F2M_SetMspUartBR(F2M_USART_COMM); // Back to the communication freq!
return F2M_RSP_BUFFER[2]; // Return Status Byte
}
unsigned char F2M_Decode()
{
unsigned char dByte;
static unsigned char state = F2M_S_INIT;
static unsigned char sType = 0;
static unsigned int sVal = 0;
static unsigned char ECG_Sampling = 0;
while( !F2M_GetBufferFlag(F2M_RENEW_FLAG) );// Waiting for new data
dByte = F2M_ReadBuffer(); // Read buffer
switch (state) {
case F2M_S_INIT:
state = (dByte == 0xaa) ? F2M_S_AA1 : F2M_S_INIT;
break;
case F2M_S_AA1:
state = (dByte == 0xaa) ? F2M_S_AA2 : F2M_S_INIT;
break;
case F2M_S_AA2:
state = (dByte == 0xaa) ? F2M_S_AA3 : F2M_S_INIT;
break;
case F2M_S_AA3:
state = (dByte == 0xaa) ? F2M_S_AA4 : F2M_S_INIT;
break;
case F2M_S_AA4:
if (dByte != 0xaa) // remember type
{
sType = dByte;
state = F2M_S_TYPE;
}
// else stay in this state
break;
case F2M_S_TYPE: // remember low
sVal = dByte;
state = F2M_S_LOW;
break;
case F2M_S_LOW:
// remember high
sVal |= (((int)dByte) << 8);
//decoderListener_.insertElement(sType, sVal);
if(sType == 0x11)
{
if(ECG_Sampling == 0)
LCD_PlotLine(((sVal>1200)?(sVal-1200):0));
if((++ECG_Sampling)==F2M_ECG_SAMPLING)ECG_Sampling = 0;
}
if(sType == 0x21)LCD_PlotAcc(((sVal>1700)?(sVal-1700):0),0);
if(sType == 0x22)LCD_PlotAcc(((sVal>1700)?(sVal-1700):0),1);
if(sType == 0x32)LCD_PrintStrapPara(sVal,0x32);
if(sType == 0x42)LCD_PrintStrapPara(sVal,0x42);
state = F2M_S_HIGH;
break;
case F2M_S_HIGH:
if (dByte == 0xaa)
state = F2M_S_AA1;
else {
// remember type
sType = dByte;
state = F2M_S_TYPE;
}
break;
}
return 0;
}
void F2M_EKG_Measuring()
{
unsigned char Tchar;
vTaskSuspendAll();
// vTaskSuspend(Timer_Handle);
//ClearLCD();
/*
F2M_ClrBufferFlag(F2M_PAIRSEL_FLAG);
LCD_RollingDisplay("Entering HCM...");
Tchar = F2M_EnterCommandMode();
if( Tchar == 0x01) // Enter HCM
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
while(!F2M_GetBufferFlag(F2M_PAIRSEL_FLAG))
{
LCD_RollingDisplay("Inquiry...");
LCD_RollingDisplay("Waiting..."); vTaskDelay(10);
Tchar = F2M_Inquiry();
if(Tchar == 0x01) // Set Baudrate
LCD_RollingDisplay("Inquiry finished!");
else
{
if (Tchar == 0xfc)
{
//num[0]++;
//LCD_RollingDisplay(num);
}
else
{
LCD_RollingDisplay("Failed No Idea");
}
}
LCD_RollingDisplay("Inquiry again...");
}
LCD_RollingDisplay("Connecting...");
if(F2M_SetConnectRule(F2M_PAIR._.ADDRESS) == 0x01) // Set Connect rule
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
_F2M_CLR_PIO2();
LCD_RollingDisplay("Exit HCM...");
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
*/
F2M_SetBufferFlag(F2M_COMMUNICATION_MODE_FLAG);
F2M_SetMspUartBR(F2M_USART_COMM); // Back to the communication freq!
ClearLCD();
_F2M_CLR_PIO2();
while(_F2M_CHK_PIO3()==0);
/*
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
*/
_LCD_SET_DISPLINE(0);
LCD_PrintStrapPara(0);
KeyboardStatus = 0;
while(KeyboardStatus==0)
{
F2M_Decode();
}
//KeyboardStatus = 0;
_F2M_SET_PIO2();
//vTaskResume(Timer_Handle);
//Menu_Refresh();
Go2Menu(CurrentMenu);
xTaskResumeAll();
}
static portTASK_FUNCTION_PROTO( vF2MBTTask, pvParameters );
void vStartF2MBTTasks( unsigned portBASE_TYPE uxPriority )
{
xTaskCreate( vF2MBTTask, ( const signed portCHAR * const ) "F2MBT", F2MBT_STACK_SIZE, NULL, uxPriority, &F2MBT_Handle );
}
static portTASK_FUNCTION( vF2MBTTask, pvParameters )
{
char Tchar;
char i,j,k;
char num[] = "0 Failed 0xFC";
portCHAR CM_Message;
( void ) pvParameters;
/*
LCD_RollingDisplay("Exit HCM...");
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
LCD_Delay(60000);
LCD_RollingDisplay("Entering HCM...");
if(F2M_EnterCommandMode() == 0x01) // Enter HCM
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
LCD_Delay(60000);
*/
//LCD_Delay(60000);
/*
LCD_RollingDisplay("Connecting...");
if(F2M_SetConnectRule(F2M_PAIR._.ADDRESS) == 0x01) // Set Connect rule
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
F2M_Command(0x67,0x03,(unsigned char*)PairingSetting); // Set Pairing Parameters
F2M_GetResponse();
LCD_RollingDisplay("Exit HCM...");
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
F2M_SetBufferFlag(F2M_COMMUNICATION_MODE_FLAG);
ClearLCD();
_LCD_SET_DISPLINE(0);
LCD_PrintStrapPara(0);
while(_F2M_CHK_PIO3()==0);
vTaskSuspendAll();
*/
Tchar = 0xfc;
xQueueSend( F2MBT_CM_Queue, ( void * ) &Tchar, ( portTickType ) 10 );
for(;;)
{
if( xQueueReceive( F2MBT_CM_Queue, &CM_Message, ( portTickType ) F2M_TASK_WAIT_MSG_TICKS ) )
{
switch(CM_Message)
{
case 0xfc:
{
ClearLCD();
_LCD_SET_DISPLINE(0);
/*
k = 0;
for(;;)
{
for(j = 0 ; j< NUM_TEST.height;j++)
{
LCD_Cursor2yx(NUM_TEST.y+j,NUM_TEST.x);
for(i = 0 ; i< NUM_TEST.length;i++)
{
LCD_WRT_DAT(NUM_TEST.content[k*NUM_TEST.height*NUM_TEST.length+j*NUM_TEST.length+i]);
}
}
i = 5;
}*/
for(i=0;i<8;i++)
{
LCD_Cursor2yx(i,5);
for(j=0;j<128;j++)
{
LCD_WRT_DAT(LOGO_CHAR[i*128+j]);
}
}
break;
}
case F2M_TASK_INIT:
{
_F2M_CLR_RESET();
vTaskDelay(1);
_F2M_SET_RESET();
vTaskDelay(9); //Delay 900ms for preparation entering the Command Mode
LCD_DISPLAY_MODE(LCD_DISPLAY_MODE_1);
ClearLCD();
F2M_InitUART(); // Init Bluetooth UART
LCD_RollingDisplay("Entering HCM...");
if(F2M_EnterCommandMode() == 0x01) // Enter HCM
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
LCD_Delay(60000);
LCD_RollingDisplay("Setting BM...");
if(F2M_SetOperationMode(0x01) == 0x01) // Set Bluetooth Slave
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
LCD_Delay(60000);
LCD_RollingDisplay("Setting BR...");
if(F2M_SetF2MBaudrate() == 0x01) // Set Baudrate
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
F2M_Command(0x67,0x03,(unsigned char*)PairingSetting); // Set Pairing Parameters
F2M_GetResponse();
LCD_RollingDisplay("Exit HCM...");
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
break;
}
case F2M_TASK_INQUIRY:
{
F2M_ClrBufferFlag(F2M_PAIRSEL_FLAG);
LCD_RollingDisplay("Entering HCM...");
Tchar = F2M_EnterCommandMode();
if( Tchar == 0x01) // Enter HCM
LCD_RollingDisplay(" Succeed!");
else
LCD_RollingDisplay(" Failed!");
while(!F2M_GetBufferFlag(F2M_PAIRSEL_FLAG))
{
LCD_RollingDisplay("Inquiry...");
LCD_RollingDisplay("Waiting..."); vTaskDelay(10);
Tchar = F2M_Inquiry();
if(Tchar == 0x01) // Set Baudrate
LCD_RollingDisplay("Inquiry finished!");
else
{
if (Tchar == 0xfc)
{
num[0]++;
LCD_RollingDisplay(num);
}
else
{
LCD_RollingDisplay("Failed No Idea");
}
}
LCD_RollingDisplay("Inquiry again...");
}
LCD_RollingDisplay("Connecting...");
if(F2M_SetConnectRule(F2M_PAIR._.ADDRESS) == 0x01) // Set Connect rule
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
_F2M_CLR_PIO2();
LCD_RollingDisplay("Exit HCM...");
if(F2M_ExitCommandMode() == 0x01) // exit HCM
LCD_RollingDisplay("Succeed!");
else
LCD_RollingDisplay("Failed!");
break;
}
}
// suspend itself
}
vTaskSuspend(NULL);
}
}
__interrupt void usart1_rx (void);
USART1RX_ISR(usart1_rx)
__interrupt void usart1_rx (void)
{
//while (!(IFG2 & UTXIFG1)); // USART0 TX buffer ready?
//TXBUF1 = RXBUF1; // RXBUF0 to TXBUF0
portDISABLE_INTERRUPTS();
_F2M_SET_CTS(); // Flow Control
UART_BUFFER[pBUF_WRT] = RXBUF1; // Buffer Writing
BUFFER_FLAG |= F2M_RENEW_FLAG; // Set Buffer Renew flag
pBUF_WRT++;
if(pBUF_WRT == F2M_BUFFER_LENGTH)
{
pBUF_WRT = 0; // Rewriting the Buffer
BUFFER_FLAG |= F2M_LOOP_FLAG; // Set Rewirting flag
}
if( (pBUF_WRT >= pBUF_RED) && (BUFFER_FLAG & F2M_LOOP_FLAG) )
BUFFER_FLAG |= F2M_OVERFLOW_FLAG; // Overflow...
else // If overflow, the CTS keep high to avoid new data from the serial port
_F2M_CLR_CTS(); // Flow Control
portENABLE_INTERRUPTS();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -