Files
examples/cc25xx-8051-example/ti/BLE-CC254x/Projects/ble/SimpleBLEPeripheral-IREXT/Source/simpleBLE.c
2019-07-25 18:12:39 +08:00

1088 lines
30 KiB
C

#include "bcomdef.h"
#include "OSAL.h"
#include "OSAL_PwrMgr.h"
#include "OnBoard.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_lcd.h"
#include "gatt.h"
#include "ll.h"
#include "hci.h"
#include "gapgattserver.h"
#include "gattservapp.h"
#include "central.h"
#include "peripheral.h"
#include "gapbondmgr.h"
#include "simpleGATTprofile.h"
#include "npi.h"
#include "osal_snv.h"
#include "simpleBLE.h"
#include "stdio.h"
SYS_CONFIG sys_config;
static bool g_bToConnect = FALSE;
extern gaprole_States_t gapProfileState;
static void simpleBLE_NpiSerialCallback( uint8 port, uint8 events );
static void simpleBLE_UartDataMain(uint8 *buf, uint8 numBytes);
static bool simpleBLE_AT_CMD_Handle(uint8 *pBuffer, uint16 length);
#if defined (AUTO_UART2UART)
static void simpleBLE_SendMyData_ForTest();
#endif
void Serial_Delay(int times)
{
while(times--)
{
int i=0;
for(i=6000; i>0; i--)
{
asm("nop");
}
}
}
static uint8 str_cmp(uint8 *p1,uint8 *p2,uint8 len)
{
uint8 i=0;
while(i<len)
{
if(p1[i]!=p2[i])
return 0;
i++;
}
return 1;
}
uint32 str2Num(uint8* numStr, uint8 iLength)
{
uint8 i = 0;
int32 rtnInt = 0;
for(; i < iLength && numStr[i] != '\0'; ++i)
rtnInt = rtnInt * 10 + (numStr[i] - '0');
return rtnInt;
}
/*********************************************************************
* @fn bdAddr2Str
*
* @brief Convert Bluetooth address to string
*
* @return none
*/
char *bdAddr2Str( uint8 *pAddr )
{
#define B_ADDR_STR_LEN 15
uint8 i;
char hex[] = "0123456789ABCDEF";
static char str[B_ADDR_STR_LEN];
char *pStr = str;
*pStr++ = '0';
*pStr++ = 'x';
// Start from end of addr
pAddr += B_ADDR_LEN;
for ( i = B_ADDR_LEN; i > 0; i-- )
{
*pStr++ = hex[*--pAddr >> 4];
*pStr++ = hex[*pAddr & 0x0F];
}
*pStr = 0;
return str;
}
void simpleBLE_SaveAllDataToFlash()
{
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
}
void simpleBLE_SetAllParaDefault(PARA_SET_FACTORY flag)
{
if(flag == PARA_ALL_FACTORY)
{
sys_config.baudrate = HAL_UART_BR_9600;
// sys_config.baudrate = HAL_UART_BR_115200;
sys_config.parity = 0;
sys_config.stopbit = 0;
sys_config.mode = BLE_MODE_SERIAL;
sprintf((char*)sys_config.name, "VMI_TEST");
sys_config.role = BLE_ROLE_PERIPHERAL;
// sys_config.role = BLE_ROLE_CENTRAL;
sprintf((char*)sys_config.pass, "000000");
sys_config.type = 0;
// sys_config.mac_addr[16];
sys_config.connl_status = 0;
sys_config.connect_mac_status = 0;
// sys_config.ever_connect_mac_status[MAX_PERIPHERAL_MAC_ADDR][13];
osal_memset(sys_config.ever_connect_mac_status, 0, MAX_PERIPHERAL_MAC_ADDR*13);
sprintf((char*)sys_config.verion, "%s", VERSION);
sys_config.try_connect_time_ms = 0;
sys_config.rssi = 0;
sys_config.rxGain = HCI_EXT_RX_GAIN_STD;
sys_config.txPower = 0;
sys_config.ibeacon_adver_time_ms = 500;
sys_config.workMode = 0;
}
else if(flag == PARA_PARI_FACTORY)
{
osal_memset(sys_config.ever_connect_mac_status, 0, MAX_PERIPHERAL_MAC_ADDR*13);
sprintf((char*)sys_config.verion, "%s", VERSION);
}
}
void PrintAllPara(void)
{
#define SERIAL_DELAY Serial_Delay(10)
char strTemp[32];
uint8 i;
sprintf(strTemp, "sys_config.baudrate = %d\r\n", sys_config.baudrate);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.parity = %d\r\n", sys_config.parity);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.stopbit = %d\r\n", sys_config.stopbit);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.mode = %d\r\n", sys_config.mode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.name = %s\r\n", sys_config.name);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.role = %d\r\n", sys_config.role);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.pass = %s\r\n", sys_config.pass);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.type = %d\r\n", sys_config.type);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.mac_addr = %s\r\n", sys_config.mac_addr);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.connl_status = %d\r\n", sys_config.connl_status);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.connect_mac_status = %d\r\n", sys_config.connect_mac_status);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
//sys_config.ever_connect_mac_status[MAX_PERIPHERAL_MAC_ADDR][13];
for(i = 0; i<MAX_PERIPHERAL_MAC_ADDR && sys_config.ever_connect_mac_status[i][0] != 0; i++)
{
sprintf(strTemp, "sys_config.ever_connect_mac_status[%d] = %s\r\n", i, sys_config.ever_connect_mac_status[i]);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
}
sprintf(strTemp, "sys_config.verion = %s\r\n", sys_config.verion);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.try_connect_time_ms = %d\r\n", sys_config.try_connect_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.rssi = %d\r\n", sys_config.rssi);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.txPower = %d\r\n", sys_config.txPower);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.ibeacon_adver_time_ms = %d\r\n", sys_config.ibeacon_adver_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
sprintf(strTemp, "sys_config.workMode = %d\r\n", sys_config.workMode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
SERIAL_DELAY;
}
BLE_ROLE GetBleRole()
{
return sys_config.role;
}
bool simpleBLE_IfConnected()
{
if(GetBleRole() == BLE_ROLE_CENTRAL)
{
//LCD_WRITE_STRING_VALUE( "simpleBLECharHd6=", simpleBLECharHd6, 10, HAL_LCD_LINE_1 );
//return ( ( simpleBLEState == BLE_STATE_CONNECTED ) && ( simpleBLECharHd6 != 0 ) );
return ( simpleBLEState == BLE_STATE_CONNECTED );
}
else
{
return (gapProfileState == GAPROLE_CONNECTED);
}
}
void simpleBLE_SetPeripheralMacAddr(uint8 *pAddr)
{
if(GetBleRole() == BLE_ROLE_CENTRAL)
{
osal_memcpy(sys_config.ever_connect_mac_status[0], pAddr, MAC_ADDR_CHAR_LEN);
}
}
bool simpleBLE_GetPeripheralMacAddr(uint8 *pAddr)
{
if(GetBleRole() == BLE_ROLE_CENTRAL)
{
if(sys_config.ever_connect_mac_status[0][0] != 0)
{
osal_memcpy(pAddr, sys_config.ever_connect_mac_status[0], MAC_ADDR_CHAR_LEN);
return TRUE;
}
}
return FALSE;
}
void CheckKeyForSetAllParaDefault(void)
{
#if 1
return;
#else
uint8 i;
uint32 old_time = 75;
while(--old_time)
{
if(P0_1 == 1)
{
LedSetState(HAL_LED_MODE_ON);
Serial_Delay(10);
}
else
{
LedSetState(HAL_LED_MODE_OFF);
return;
}
}
if(old_time == 0)
{
simpleBLE_SetAllParaDefault(PARA_ALL_FACTORY);
for(i = 0; i < 6; i++)
{
LedSetState(HAL_LED_MODE_ON);
Serial_Delay(30);
LedSetState(HAL_LED_MODE_OFF);
Serial_Delay(30);
}
HAL_SYSTEM_RESET();
}
#endif
}
void simpleBLE_NPI_init(void)
{
#if 1
NPI_InitTransportEx(simpleBLE_NpiSerialCallback, sys_config.baudrate,
sys_config.parity, sys_config.stopbit );
#else
NPI_InitTransport(simpleBLE_NpiSerialCallback);
#endif
if(GetBleRole() == BLE_ROLE_CENTRAL)
{
NPI_WriteTransport("Hello World Central\r\n",21);
}
else
{
NPI_WriteTransport("Hello World Peripheral\r\n",24);
}
}
void UpdateRxGain(void)
{
// rxGain - HCI_EXT_RX_GAIN_STD, HCI_EXT_RX_GAIN_HIGH
HCI_EXT_SetRxGainCmd( HCI_EXT_RX_GAIN_STD );
}
void UpdateTxPower(void)
{
/*
#define LL_EXT_TX_POWER_MINUS_23_DBM 0
#define LL_EXT_TX_POWER_MINUS_6_DBM 1
#define LL_EXT_TX_POWER_0_DBM 2
#define LL_EXT_TX_POWER_4_DBM 3
*/
// HCI_EXT_SetTxPowerCmd();
HCI_EXT_SetTxPowerCmd(sys_config.txPower);
}
void LedSetState(uint8 onoff)
{
HalLedSet( HAL_LED_1, onoff);
}
void simpleBle_SetRssi(int8 rssi)
{
sys_config.rssi = rssi;
}
void simpleBle_PrintPassword()
{
char strTemp[24] = {0};
sprintf(strTemp, "Password:%s\r\n", sys_config.pass);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
Serial_Delay(10);
}
uint8* GetAttDeviceName()
{
return sys_config.name;
}
bool IFfHavePeripheralMacAddr( void )
{
if(sys_config.ever_connect_mac_status[0][0] == 0)
{
return TRUE;
}
else
{
return TRUE;
}
}
void performPeriodicTask( void )
{
static uint8 count = 0;
if(CheckIfUse_iBeacon())
{
static attHandleValueNoti_t pReport;
pReport.len = 2;
pReport.handle = 0x2E;
osal_memcpy(pReport.value, "ab", 2);
GATT_Notification( 0, &pReport, FALSE );
LedSetState(HAL_LED_MODE_TOGGLE);
return;
}
if(!simpleBLE_IfConnected())
{
if(GetBleRole() == BLE_ROLE_CENTRAL)
{
if(IFfHavePeripheralMacAddr() == FALSE)
{
if(count == 0)
{
LedSetState(HAL_LED_MODE_ON);
}
else if(count == 1)
{
LedSetState(HAL_LED_MODE_OFF);
}
}
else
{
if(count == 0)
{
LedSetState(HAL_LED_MODE_ON);
}
else if(count == 9)
{
LedSetState(HAL_LED_MODE_OFF);
}
}
count++;
count %= 10;
}
else//´Ó»ú
{
if(count == 0)
{
LedSetState(HAL_LED_MODE_OFF);
}
else if(count == 10)
{
LedSetState(HAL_LED_MODE_ON);
}
count++;
count %= 20;
}
}
else
{
if(count == 0)
{
LedSetState(HAL_LED_MODE_ON);
}
else if(count == 1)
{
LedSetState(HAL_LED_MODE_OFF);
}
count++;
count %= 50;
#if defined (AUTO_UART2UART)
simpleBLE_SendMyData_ForTest();
#endif
}
}
bool simpleBle_GetIfNeedPassword()
{
return sys_config.type;
}
bool CheckIfUse_iBeacon()
{
return (sys_config.mode == BLE_MODE_iBeacon);
}
void simpleBLE_SetToConnectFlag(bool bToConnect)
{
g_bToConnect = bToConnect;
}
bool simpleBLE_GetToConnectFlag(uint8 *Addr)
{
osal_memcpy(Addr, sys_config.connect_mac_addr, MAC_ADDR_CHAR_LEN);
if(sys_config.workMode == 0)
{
g_bToConnect = TRUE;
}
return g_bToConnect;
}
uint32 Get_iBeaconAdvertisingInterral()
{
return sys_config.ibeacon_adver_time_ms;
}
#if 1
static void simpleBLE_NpiSerialCallback( uint8 port, uint8 events )
{
(void)port;
static uint32 old_time;
static uint32 old_time_data_len = 0;
uint32 new_time;
bool ret;
uint8 readMaxBytes = SIMPLEPROFILE_CHAR6_LEN;
if (events & HAL_UART_RX_TIMEOUT)
{
(void)port;
uint8 numBytes = 0;
numBytes = NPI_RxBufLen();
if(numBytes == 0)
{
LCD_WRITE_STRING_VALUE( "ERROR: numBytes=", numBytes, 10, HAL_LCD_LINE_1 );
old_time_data_len = 0;
return;
}
if(old_time_data_len == 0)
{
old_time = osal_GetSystemClock();
old_time_data_len = numBytes;
}
else
{
if(!simpleBLE_IfConnected())
{
readMaxBytes = 22;
}
else
{
readMaxBytes = SIMPLEPROFILE_CHAR6_LEN;
}
new_time = osal_GetSystemClock();
if( (numBytes >= readMaxBytes)
|| ( (new_time - old_time) > 20/*ms*/))
{
uint8 sendBytes = 0;
uint8 *buffer = osal_mem_alloc(readMaxBytes);
if(!buffer)
{
NPI_WriteTransport("FAIL", 4);
return;
}
//
if(numBytes > readMaxBytes)
{
sendBytes = readMaxBytes;
}
else
{
sendBytes = numBytes;
}
if(!simpleBLE_IfConnected())
{
//numBytes = NpiReadBuffer(buf, sizeof(buf));
//NpiClearBuffer();
NPI_ReadTransport(buffer,sendBytes);
if(sendBytes > 2
&& buffer[sendBytes-2] == '\r'
&& buffer[sendBytes-1] == '\n')
{
ret = simpleBLE_AT_CMD_Handle(buffer, sendBytes);
}
else
{
ret = FALSE;
}
if(ret == FALSE)
{
char strTemp[12];
sprintf(strTemp, "ERROR\r\n");
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
}
else
{
if((GetBleRole() == BLE_ROLE_CENTRAL) && simpleBLEChar6DoWrite && simpleBLECentralCanSend )
{
char strTemp[24];
NPI_ReadTransport(buffer,sendBytes);
if((sendBytes == 10) && str_cmp(buffer, "AT+RSSI?\r\n", 10))//AT+RSSI\r\n
{
sprintf(strTemp, "OK+RSSI:%d\r\n", sys_config.rssi);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else
{
//LCD_WRITE_STRING_VALUE( "sendBytes=", sendBytes, 10, HAL_LCD_LINE_1 );
simpleBLE_UartDataMain(buffer,sendBytes);
}
}
else if((GetBleRole() == BLE_ROLE_PERIPHERAL) && simpleBLEChar6DoWrite2)
{
//LCD_WRITE_STRING_VALUE( "sendBytes=", sendBytes, 10, HAL_LCD_LINE_1 );
NPI_ReadTransport(buffer,sendBytes);
simpleBLE_UartDataMain(buffer,sendBytes);
}
else
{
NPI_ReadTransport(buffer,sendBytes);
}
}
old_time = new_time;
old_time_data_len = numBytes - sendBytes;
osal_mem_free(buffer);
}
}
}
}
void simpleBLE_UartDataMain(uint8 *buf, uint8 numBytes)
{
if(GetBleRole() == BLE_ROLE_CENTRAL )
{
if(simpleBLEChar6DoWrite
&& ( simpleBLECharHd6 != 0)
&& simpleBLECentralCanSend)
{
attWriteReq_t AttReq;
LCD_WRITE_STRING_VALUE( "s=", numBytes, 10, HAL_LCD_LINE_1 );
simpleBLEChar6DoWrite = FALSE;
AttReq.handle = simpleBLECharHd6;
AttReq.len = numBytes;
AttReq.sig = 0;
AttReq.cmd = 0;
osal_memcpy(AttReq.value,buf,numBytes);
GATT_WriteCharValue( 0, &AttReq, simpleBLETaskId );
}
else
{
LCD_WRITE_STRING_VALUE( "simpleBLEChar6DoWrite=", simpleBLEChar6DoWrite, 10, HAL_LCD_LINE_1 );
LCD_WRITE_STRING_VALUE( "simpleBLECharHd6=", simpleBLECharHd6, 10, HAL_LCD_LINE_1 );
}
}
else
{
if(simpleBLEChar6DoWrite2)
{
#if 0
simpleBLEChar6DoWrite2 = FALSE;
SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR6,numBytes, buf );
#else
static attHandleValueNoti_t pReport;
pReport.len = numBytes;
pReport.handle = 0x0035;
osal_memcpy(pReport.value, buf, numBytes);
GATT_Notification( 0, &pReport, FALSE );
#endif
}
else
{
LCD_WRITE_STRING_VALUE( "simpleBLEChar6DoWrite=", simpleBLEChar6DoWrite2, 10, HAL_LCD_LINE_1 );
}
}
}
#endif
#if 1
bool simpleBLE_AT_CMD_Handle(uint8 *pBuffer, uint16 length)
{
bool ret = TRUE;
char strTemp[64];
uint8 i;
uint8 temp8;
bool restart = FALSE;
//NPI_WriteTransport((uint8*)pBuffer, length);
if((length == 4) && str_cmp(pBuffer, "AT\r\n", 4))//AT
{
sprintf(strTemp, "OK\r\n");
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 8) && str_cmp(pBuffer, "AT+ALL\r\n", 8))//AT
{
PrintAllPara();
}
else if((length == 10) && str_cmp(pBuffer, "AT+BAUD", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.baudrate);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
case '2':
case '3':
case '4':
sys_config.baudrate = pBuffer[7] - '0';
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.baudrate);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+PARI", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.parity);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
case '2':
sys_config.parity = pBuffer[7] - '0';
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.parity);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+STOP", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.stopbit);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
sys_config.stopbit = pBuffer[7] - '0';
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.stopbit);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+MODE", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.mode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
case '2':
sys_config.mode = pBuffer[7] - '0';
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.mode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if((length >=10 && length <= 20) && str_cmp(pBuffer, "AT+NAME", 7))
{
//int nameLen = length - 7;
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%s\r\n", sys_config.name);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
default:
osal_memset(sys_config.name, 0, sizeof(sys_config.name));
osal_memcpy(sys_config.name, pBuffer + 7, length - 7);
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%s\r\n", sys_config.name);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+RENEW", 8))
{
sprintf(strTemp, "OK+RENEW\r\n");
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
simpleBLE_SetAllParaDefault(PARA_ALL_FACTORY);
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
restart = TRUE;
}
else if((length == 10) && str_cmp(pBuffer, "AT+RESET", 8))
{
restart = TRUE;
}
else if((length == 10) && str_cmp(pBuffer, "AT+ROLE", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.role);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
temp8 = pBuffer[7] - '0';
if(temp8 == 0)
{
sys_config.role = BLE_ROLE_PERIPHERAL;
}
else
{
sys_config.role = BLE_ROLE_CENTRAL;
}
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.role);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if(((length == 10) && str_cmp(pBuffer, "AT+PASS?", 8))
|| ((length == 15) && str_cmp(pBuffer, "AT+PASS", 7)))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+PASS:%s\r\n", sys_config.pass);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
default:
osal_memcpy(sys_config.pass, pBuffer + 7, 6);
sys_config.pass[6] = 0;
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%s\r\n", sys_config.pass);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+TYPE", 7))
{
switch(pBuffer[7])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.type);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
break;
case '0':
case '1':
sys_config.type = pBuffer[7] - '0';
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.type);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
break;
default:
ret = FALSE;
break;
}
}
else if((length >= 10) && str_cmp(pBuffer, "AT+ADDR?", 8))
{
sprintf(strTemp, "OK+LADD:%s\r\n", sys_config.mac_addr);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 10) && str_cmp(pBuffer, "AT+CONNL", 8))
{
uint8 para[4] = {'L','N','E','F'};
int8 id = 0;
if(sys_config.connect_mac_addr[0] != 0)
{
id = 0;
simpleBLE_SetToConnectFlag(TRUE);
}
else
{
id = 3;
}
sprintf(strTemp, "AT+CONN%c\r\n", para[id]);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 20) && str_cmp(pBuffer, "AT+CON", 6))
{
uint8 para[3] = {'A','E','F'};
uint8 id = 0;
osal_memcpy(sys_config.connect_mac_addr, pBuffer+6, MAC_ADDR_CHAR_LEN);
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
//if(simpleBLE_GetToConnectFlag == FALSE)
{
simpleBLE_SetToConnectFlag(TRUE);
id = 0;
}
//if(sys_config.connect_mac_status > 2)
// sys_config.connect_mac_status = 2;
sprintf(strTemp, "AT+CONN%c\r\n", para[id]);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 10) && str_cmp(pBuffer, "AT+CLEAR", 8))
{
simpleBLE_SetAllParaDefault(PARA_PARI_FACTORY);
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
//PrintAllPara();
sprintf(strTemp, "OK+CLEAR\r\n");
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 10) && str_cmp(pBuffer, "AT+RADD?", 8))
{
for(i = 0; i<MAX_PERIPHERAL_MAC_ADDR; i++)
{
if(sys_config.ever_connect_mac_status[i][0] != 0)
{
sprintf(strTemp, "OK+RADD:%s\r\n", sys_config.ever_connect_mac_status[i]);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+VERS?", 8))
{
sprintf(strTemp, "%s\r\n", sys_config.verion);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 10) && str_cmp(pBuffer, "AT+TCON", 7))
{
if(pBuffer[7] == '?')
{
sprintf(strTemp, "%06d\r\n", sys_config.try_connect_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else
{
sys_config.try_connect_time_ms = 10000;//_atoi(pBuffer+7);
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%06d\r\n", sys_config.try_connect_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+RSSI?", 10))
{
sprintf(strTemp, "OK+RSSI:%d\r\n", sys_config.rssi);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else if((length == 10) && str_cmp(pBuffer, "AT+TXPW", 7))
{
if(pBuffer[7] == '?')
{
sprintf(strTemp, "AT+TXPW:%d\r\n", sys_config.txPower);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else
{
sys_config.txPower = pBuffer[7] - '0';
if(sys_config.txPower > 3)
sys_config.txPower = 0;
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.txPower);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
HCI_EXT_SetTxPowerCmd(sys_config.txPower);
restart = TRUE;
}
}
else if((length == 10 || length == 15) && str_cmp(pBuffer, "AT+TIBE", 7))
{
if(pBuffer[7] == '?')
{
sprintf(strTemp, "AT+TIBE:%06d\r\n", sys_config.ibeacon_adver_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else
{
sys_config.ibeacon_adver_time_ms = str2Num(pBuffer+7, 6);
if(sys_config.ibeacon_adver_time_ms <= 9999)
{
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%06d\r\n", sys_config.ibeacon_adver_time_ms);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
restart = TRUE;
}
}
}
else if((length == 10) && str_cmp(pBuffer, "AT+IMME", 7))
{
if(pBuffer[7] == '?')
{
sprintf(strTemp, "OK+Get:%d\r\n", sys_config.workMode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
else
{
sys_config.workMode = str2Num(pBuffer+7, 1);
if(sys_config.workMode <= 1)
{
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
sprintf(strTemp, "OK+Set:%d\r\n", sys_config.workMode);
NPI_WriteTransport((uint8*)strTemp, osal_strlen(strTemp));
}
restart = TRUE;
}
}
else
{
ret = FALSE;
}
if(restart)
{
Serial_Delay(100);
HAL_SYSTEM_RESET();
}
return ret;
}
#endif
#if defined (AUTO_UART2UART)
void simpleBLE_SendMyData_ForTest()
{
static uint8 count_100ms = 0;
uint8 numBytes;
count_100ms++;
if(count_100ms == 10)
{
char strTemp[24] = {0};
if((GetBleRole() == BLE_ROLE_CENTRAL) && simpleBLEChar6DoWrite && simpleBLECentralCanSend)
{
sprintf(strTemp, "[%8ldms]Amo1\r\n", osal_GetSystemClock());
numBytes = (osal_strlen(strTemp) > SIMPLEPROFILE_CHAR6_LEN) ? SIMPLEPROFILE_CHAR6_LEN : osal_strlen(strTemp);
simpleBLE_UartDataMain((uint8*)strTemp, numBytes);
}
else if((GetBleRole() == BLE_ROLE_PERIPHERAL) && simpleBLEChar6DoWrite2)
{
sprintf(strTemp, "[%8ldms]Amo2\r\n", osal_GetSystemClock());
simpleBLE_UartDataMain((uint8*)strTemp, numBytes);
}
count_100ms = 0;
}
}
#endif