1.蓝牙业务修改

This commit is contained in:
payton 2023-11-02 09:31:45 +08:00
parent baefeb41c0
commit d62d2d4525
6 changed files with 3928 additions and 177 deletions

View File

@ -21,13 +21,59 @@
#include <unistd.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include "bluetooth.h"
#include "hci.h"
#include "hci_lib.h"
#include "src/util.h"
static struct hci_dev_info di;
static char g_sf_ble_ssid[14] = {0};
static void cmd_lecc(int dev_id, char *addr)
{
int err, dd;
bdaddr_t bdaddr;
uint16_t interval, latency, max_ce_length, max_interval, min_ce_length;
uint16_t min_interval, supervision_timeout, window, handle;
uint8_t initiator_filter, own_bdaddr_type, peer_bdaddr_type;
own_bdaddr_type = LE_RANDOM_ADDRESS;
peer_bdaddr_type = LE_RANDOM_ADDRESS;
initiator_filter = 1; /* Use peer address */
dd = hci_open_dev(dev_id);
if (dd < 0) {
perror("Could not open device");
return ;
}
memset(&bdaddr, 0, sizeof(bdaddr_t));
if (addr)
str2ba(addr, &bdaddr);
printf("Conn_Address: %02x %02x %02x %02x %02x %02x.\n", bdaddr.b[0], bdaddr.b[1], bdaddr.b[2], bdaddr.b[3], bdaddr.b[4], bdaddr.b[5]);
interval = htobs(0x0004);
window = htobs(0x0004);
min_interval = htobs(0x000F);
max_interval = htobs(0x000F);
latency = htobs(0x0000);
supervision_timeout = htobs(0x0C80);
min_ce_length = htobs(0x0001);
max_ce_length = htobs(0x0001);
err = hci_le_create_conn(dd, interval, window, initiator_filter,
peer_bdaddr_type, bdaddr, own_bdaddr_type, min_interval,
max_interval, latency, supervision_timeout,
min_ce_length, max_ce_length, &handle, 25000);
if (err < 0) {
perror("Could not create connection");
return ;
}
printf("Connection handle %d\n", handle);
hci_close_dev(dd);
}
static void cmd_up(int ctl, int hdev)
{
@ -42,48 +88,19 @@ static void cmd_up(int ctl, int hdev)
}
}
static void cmd_piscan(int ctl, int hdev)
static void cmd_down(int ctl, int hdev)
{
struct hci_dev_req dr;
dr.dev_id = hdev;
dr.dev_opt = SCAN_DISABLED;
dr.dev_opt = SCAN_PAGE | SCAN_INQUIRY;
if (ioctl(ctl, HCISETSCAN, (unsigned long) &dr) < 0)
/* Start HCI device */
if (ioctl(ctl, HCIDEVDOWN, hdev) < 0)
{
fprintf(stderr, "Can't set scan mode on hci%d: %s (%d)\n",
if (errno == EALREADY)
return;
fprintf(stderr, "Can't init device hci%d: %s (%d)\n",
hdev, strerror(errno), errno);
return;
}
}
static void cmd_name(int ctl, int hdev, char *name)
{
int dd;
dd = hci_open_dev(hdev);
if (dd < 0)
{
fprintf(stderr, "Can't open device hci%d: %s (%d)\n",
hdev, strerror(errno), errno);
return;
}
char *opt = name;
if (hci_write_local_name(dd, opt, 2000) < 0)
{
fprintf(stderr, "Can't change local name on hci%d: %s (%d)\n",
hdev, strerror(errno), errno);
return;
}
printf("Name: '%s'\n", name);
hci_close_dev(dd);
}
static int sf_ba2str(const bdaddr_t *ba, char *str)
{
return sprintf(str, "%2.2X%2.2X%2.2X",ba->b[2], ba->b[1], ba->b[0]);
}
static void cmd_address(int ctl, int hdev, char *ssid)
{
int dd;
@ -96,115 +113,185 @@ static void cmd_address(int ctl, int hdev, char *ssid)
return;
}
hci_read_bd_addr(dd, &di.bdaddr, 1000);
bdaddr_t bdaddr = {0};
if (hci_read_bd_addr(dd, &bdaddr, 0) < 0)
{
fprintf(stderr, "Get bd address on hci%d: %s (%d)\n",
hdev, strerror(errno), errno);
return;
}
sf_ba2str(&di.bdaddr, ssid);
if (NULL != ssid)
{
ssid[0] = bdaddr.b[5];
ssid[1] = bdaddr.b[4];
ssid[2] = bdaddr.b[3];
ssid[3] = bdaddr.b[2];
ssid[4] = bdaddr.b[1];
ssid[5] = bdaddr.b[0];
printf("BT Address: %s.\n", ssid);
printf("BT_Address: %02x,%02x,%02x,%02x,%02x,%02x.\n", ssid[0], ssid[1], ssid[2], ssid[3], ssid[4], ssid[5]);
}
hci_close_dev(dd);
}
static void cmd_le_adv(int ctl, int hdev)
static void set_random_address(int fd)
{
struct hci_request rq;
le_set_advertise_enable_cp advertise_cp;
le_set_advertising_parameters_cp adv_params_cp;
uint8_t status;
int dd, ret;
le_set_random_address_cp cmd;
if (hdev < 0)
hdev = hci_get_route(NULL);
memset(&cmd, 0, sizeof(cmd));
dd = hci_open_dev(hdev);
if (dd < 0)
{
perror("Could not open device");
return;
int urandom_fd;
urandom_fd = open("/dev/urandom", O_RDONLY);
if (urandom_fd < 0) {
fprintf(stderr, "Failed to open /dev/urandom device\n");
cmd.bdaddr.b[5] = 0xc0;
cmd.bdaddr.b[4] = 0x55;
cmd.bdaddr.b[3] = 0x44;
cmd.bdaddr.b[2] = 0x33;
cmd.bdaddr.b[1] = 0x22;
cmd.bdaddr.b[0] = 0x11;
} else {
ssize_t len;
len = read(urandom_fd, cmd.bdaddr.b, sizeof(cmd.bdaddr.b));
if (len < 0 || len != sizeof(cmd.bdaddr.b)) {
fprintf(stderr, "Failed to read random data\n");
return;
}
cmd.bdaddr.b[5] &= 0x3f;
cmd.bdaddr.b[5] |= 0xc0;
}
memset(&adv_params_cp, 0, sizeof(adv_params_cp));
adv_params_cp.min_interval = htobs(0x0800);
adv_params_cp.max_interval = htobs(0x0800);
adv_params_cp.advtype = 0; //mt set
adv_params_cp.chan_map = 7;
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_LE_CTL;
rq.ocf = OCF_LE_SET_ADVERTISING_PARAMETERS;
rq.cparam = &adv_params_cp;
rq.clen = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE;
rq.rparam = &status;
rq.rlen = 1;
ret = hci_send_req(dd, &rq, 1000);
if (ret < 0)
goto done;
memset(&advertise_cp, 0, sizeof(advertise_cp));
advertise_cp.enable = 0x01;
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_LE_CTL;
rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;
rq.cparam = &advertise_cp;
rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;
rq.rparam = &status;
rq.rlen = 1;
ret = hci_send_req(dd, &rq, 1000);
done:
hci_close_dev(dd);
if (ret < 0)
{
fprintf(stderr, "Can't set advertise mode on hci%d: %s (%d)\n",
hdev, strerror(errno), errno);
return;
}
if (status)
{
fprintf(stderr,
"LE set advertise enable on hci%d returned status %d\n",
hdev, status);
return;
}
if (hci_send_cmd(fd, OGF_LE_CTL, OCF_LE_SET_RANDOM_ADDRESS, sizeof(cmd),
&cmd) < 0)
perror("Send msg for set random address error");
}
int hciconfig_open_piscan(void)
static void set_adv_parameters(int fd)
{
int ctl = -1;
int hdev = 0;
le_set_advertising_parameters_cp cmd;
/* Open HCI socket */
if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0)
cmd.min_interval = cpu_to_le16(0x0001);
cmd.max_interval = cpu_to_le16(0x0001);
//cmd.min_interval = cpu_to_le16(0x0020);
//cmd.max_interval = cpu_to_le16(0x0020);
/* 0x00: Connectable undirected advertising
* 0x03: Non connectable undirected advertising
* */
cmd.advtype = 0x00;
/* 0: public address
* 1: random address */
cmd.own_bdaddr_type = 0x00;
cmd.direct_bdaddr_type = 0x00;
memset(cmd.direct_bdaddr.b, 0, 6);
cmd.chan_map = 0x07;
cmd.filter = 0x00;
if (hci_send_cmd(fd, OGF_LE_CTL, OCF_LE_SET_ADVERTISING_PARAMETERS,
sizeof(cmd), &cmd))
perror("Send msg for set adv params error");
}
static void set_scan_enable(int fd, uint8_t enable, uint8_t filter_dup)
{
le_set_scan_enable_cp scan_cp;
//uint8_t status;
if (enable)
enable = 0x01;
memset(&scan_cp, 0, sizeof(scan_cp));
scan_cp.enable = enable;
scan_cp.filter_dup = filter_dup;
if (hci_send_cmd(fd, OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE, sizeof(scan_cp),
&scan_cp) < 0)
perror("Send cmd for set scan enable error");
}
static void set_adv_enable(int fd, uint8_t enable)
{
if (enable)
enable = 0x01;
if (hci_send_cmd(fd, OGF_LE_CTL, OCF_LE_SET_ADVERTISE_ENABLE, 1,
&enable) < 0)
perror("Send cmd for set adv enable error");
}
static void set_adv_data(int fd, const char* name)
{
le_set_advertising_data_cp cmd;
int i = 0;
int n;
//const char *name = "ADVTEST";
cmd.length = 0;
memset(cmd.data, 0, sizeof(cmd.data));
/* set adv data */
cmd.data[i] = 0x02; /* Field length */
cmd.length += (1 + cmd.data[i++]);
cmd.data[i++] = 0x01; /* Flags */
/* LE General Discoverable Mode, BR/EDR Not Supported */
cmd.data[i++] = (0x02 | 0x04);
cmd.data[i] = 0x03;
cmd.length += (1 + cmd.data[i++]);
cmd.data[i++] = 0x03; /* complete list of 15-bit service class uuids */
cmd.data[i++] = 0xa0;
cmd.data[i++] = 0x0a;
n = strlen(name);
cmd.data[i] = 1 + n;
cmd.length += (1 + cmd.data[i++]);
cmd.data[i++] = 0x09; /* complete local name */
memcpy(&cmd.data[i], name, n);
i += n;
printf("advertise_data, len=%d:\n", i);
for (int k = 0; k < i; k++)
{
perror("Can't open HCI socket.");
return -1;
printf("%02x ", cmd.data);
}
printf("\n");
if (hci_send_cmd(fd, OGF_LE_CTL, OCF_LE_SET_ADVERTISING_DATA,
sizeof(cmd), &cmd))
perror("Send cmd for set adv data error");
}
int hciconfig_start_advertising(const char *ssid)
{
int hci_fd;
//printf("Start advertising\n");
hci_fd = hci_open_dev(0);
if (hci_fd < 0)
{
perror("Failed to open hci dev");
return -1;
}
cmd_up(ctl, hdev);
usleep(100*1000);
//cmd_name(ctl, hdev, g_sf_ble_ssid);
//usleep(100*1000);
cmd_piscan(ctl, hdev);
usleep(100*1000);
set_scan_enable(hci_fd, 0, 1);
set_adv_enable(hci_fd, 0);
set_adv_data(hci_fd, ssid);
set_random_address(hci_fd);
set_adv_parameters(hci_fd);
set_adv_enable(hci_fd, 1);
cmd_le_adv(ctl, hdev);
//usleep(500*1000);
//cmd_le_adv(ctl, hdev);
close(ctl);
printf("blue scan.\n");
hci_close_dev(hci_fd);
return 0;
}
int hciconfig_set_name(char *name)
int hciconfig_open_device(void)
{
snprintf(g_sf_ble_ssid, sizeof(g_sf_ble_ssid), "%s",name);
printf("set bluename:%s\n",g_sf_ble_ssid);
int ctl = -1;
int hdev = 0;
@ -214,11 +301,32 @@ int hciconfig_set_name(char *name)
perror("Can't open HCI socket.");
return -1;
}
cmd_up(ctl, hdev);
cmd_name(ctl, hdev, name);
usleep(100*1000);
close(ctl);
printf("set bluename.\n");
printf("open hci0 device.\n");
return 0;
}
int hciconfig_close_device(void)
{
int ctl = -1;
int hdev = 0;
/* Open HCI socket */
if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0)
{
perror("Can't open HCI socket.");
return -1;
}
cmd_down(ctl, hdev);
close(ctl);
printf("close hci0 device.\n");
return 0;
}
@ -233,15 +341,19 @@ int hciconfig_get_address(char *ssid)
perror("Can't open HCI socket.");
return -1;
}
cmd_up(ctl, hdev);
if (ioctl(ctl, HCIGETDEVINFO, (void *) &di)) {
perror("Can't get device info");
}
cmd_address(ctl, hdev, ssid);
usleep(100*1000);
close(ctl);
printf("get blueaddress.\n");
return 0;
}
int hciconfig_conn_le(char *addr)
{
cmd_lecc(0, addr);
printf("connect le.\n");
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -29,6 +29,8 @@
#include "sf_systemMng.h"
#include <netinet/in.h>
#include <unistd.h> //usleep()
#include "sf_device.h"
#include "sf_message_queue.h"
#define MSG_BLE_PRE_FIX 0x55AA
#define MSG_BLE_END_FIX 0xFFEE
@ -40,6 +42,32 @@
static BLE_APP_PACKET_T gst_msgResult = {0};
static unsigned int gmsgResultLen = 0;
SF_BLE_STATUS_E BleStatus = SF_BLE_BUTT;
SF_BLE_STATUS_E sf_get_ble_status(void)
{
return BleStatus;
}
void sf_set_ble_status(SF_BLE_STATUS_E enStatus)
{
SF_MESSAGE_BUF_S stMessageBuf = {0};
if(enStatus < SF_BLE_BUTT)
{
if(BleStatus != enStatus)
{
stMessageBuf.arg2 = enStatus;
stMessageBuf.arg1 = SF_PARA_CMD_BLE;
stMessageBuf.cmdId = CMD_PARA;
sf_com_message_send_to_cardv(&stMessageBuf);
}
BleStatus = enStatus;
}
else
SLOGE("Type format error\n");
return;
}
static void sf_clear_poweroff_time(void)
{
@ -147,7 +175,7 @@ static void sf_blue_command_get_camera_para(MSG_DEV_BLE_Param_Get_Rsp_T *CamPara
//printf("[sf_app_Get_Camera_Para],snapnum:%d\n",puiPara->snapnum);
CamPara->cmdRet = 0;
CamPara->zoom = puiPara->Zoom;
CamPara->zoom = puiPara->Zoom + 1;
CamPara->cameraMode = (puiPara->CamMode==2)?1:0;
@ -278,7 +306,7 @@ static signed int sf_blue_command_request_process(U8 *val, unsigned int nval, U8
UINT8 paraNeedReboot = 0;
UINT8 SendingFile = 0;
UINT16 tmp = 0;
SF_MESSAGE_BUF_S stMessageBuf = {0};
UIMenuStoreInfo *puiPara = sf_app_ui_para_get();
BLE_APP_PACKET_T msgParse;
BLE_APP_PACKET_T *pMsgStruct = NULL;
@ -288,6 +316,7 @@ static signed int sf_blue_command_request_process(U8 *val, unsigned int nval, U8
UINT16 PreFind=0;
UINT16 uTemp=0;
UINT16 msgTotolLen=0, msgEndVal=0;
SINT8 ret = -1;
for(offset = 0; offset < nval && offset < sizeof(BLE_APP_PACKET_T);)
{
@ -403,7 +432,7 @@ static signed int sf_blue_command_request_process(U8 *val, unsigned int nval, U8
{
SLOGI("[BLE_SET_CAMERA_Zoom],Zoom:%d\n",puiPara->Zoom);
puiPara->Zoom = pMsgStruct->msgBuf.deviceZoomSet.zoom;
puiPara->Zoom = (puiPara->Zoom > 4 ? 1 : puiPara->Zoom);
puiPara->Zoom = (puiPara->Zoom > 4 ? 1 : puiPara->Zoom) - 1;
//forbuild sp5kModeGet(&curMode);
//curMode = 0;//forbuild
@ -447,7 +476,7 @@ static signed int sf_blue_command_request_process(U8 *val, unsigned int nval, U8
}
else if (tmpMode == 1)
{
puiPara->CamMode = SF_CAM_MODE_PHOTO_VIDEO;
puiPara->CamMode = SF_CAM_MODE_VIDEO2;
}
else if (tmpMode == 2)
{
@ -803,6 +832,50 @@ static signed int sf_blue_command_request_process(U8 *val, unsigned int nval, U8
}
break;
case BLE_CONTROL_CAMERA_FormatSDCard:
{
SLOGI("[BLE_CONTROL_CAMERA_FormatSDCard],format:%d\n",pMsgStruct->msgBuf.ctrlFormat.format);
if(pMsgStruct->msgBuf.ctrlFormat.format == 1)
{
if((sf_in_card_exist()) && (sf_is_card()))
{
stMessageBuf.arg1 = CMD_SD_FORMAT;
stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_cardv(&stMessageBuf);
}
sf_set_card_statu(CMD_FORMAT_SD_STA);
// while(CMD_FORMAT_SD_STA == sf_get_card_statu())
// {
// usleep(100*1000);
// }
ret = sf_get_card_statu();
if(ret == CMD_FORMAT_SD_OK)
{
ret = 0;
}
else
{
ret = 0x10;
}
}
msgParse.msgBuf.camreaSetRsp.cmdRet = ret;
msgParse.msgBuf.camreaSetRsp.suffix = htons(MSG_BLE_END_FIX);
msgParse.msglen = htons(sizeof(MSG_DEV_BLE_SET_Rsp_T) + 2*sizeof(UINT16));
respFlag = 1;
}
break;
case BLE_CONTROL_CAMERA_Recovery:
{
SLOGI("[BLE_CONTROL_CAMERA_Recovery]\n");
SF_PDT_PARAM_STATISTICS_S *pSifarPara = sf_statistics_param_get();
sf_statistics_param_reset(pSifarPara);
stMessageBuf.arg1 = SF_PARA_CMD_RESET;
stMessageBuf.cmdId = CMD_PARA;
sf_com_message_send_to_cardv(&stMessageBuf);
paraNeedReboot = 1;
respFlag = 2;
}
break;
default:
{
msgParse.msgBuf.camreaSetRsp.cmdRet = -1;

View File

@ -58,6 +58,10 @@ typedef enum
BLE_SET_CAMERA_timeLapse = 0x23, //设置相机缩时摄影
BLE_SET_CAMERA_PicUponDailyReport = 0x24, //设置DailyReport时是否发送照片.
//*APP待增加项
BLE_CONTROL_CAMERA_FormatSDCard = 0x30,//格式化SD卡
BLE_CONTROL_CAMERA_Recovery = 0x32, //恢复出厂设置
BLE_CMD_MAX = 0x40,
} BLE_CMD_E;
@ -67,6 +71,14 @@ typedef enum
BLE_CMD_ERR = 0x01, //command error
} BLE_ErrCode_t;
typedef enum sfBLE_STATUS_E
{
SF_BLE_OK = 0x01,/*BLE start success*/
SF_BLE_CON, /*BLE has been connected*/
SF_BLE_FAIL, /*BLE start fail*/
SF_BLE_BUTT,
} SF_BLE_STATUS_E;
/*--------------------BLE Module Get CMD-------------------------------*/
typedef struct
{
@ -365,6 +377,44 @@ typedef struct
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_DebugMode_Set_T;
/*******相机控制指令结构体***********/
typedef struct
{
UINT8 format; /* 1format immediately */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_FormatSDCard_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_FormatSDCard_Ctrl_RSP_T;
typedef struct
{
UINT8 reboot; /* 1: Reboot */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_REBOOT_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_REBOOT_Ctrl_RSP_T;
typedef struct
{
UINT8 reset; /* reset */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_Reset_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_BLE_Reset_Ctrl_RSP_T;
/************* APP_MSG_T 数据结构 **************/
typedef struct
{
@ -463,6 +513,19 @@ typedef struct
/*设置调试模式*/
MSG_DEV_BLE_DebugMode_Set_T setDebugMode;
/*******相机控制指令结构体***********/
/*格式化SD卡*/
MSG_DEV_BLE_FormatSDCard_Ctrl_T ctrlFormat;
MSG_DEV_BLE_FormatSDCard_Ctrl_RSP_T rctrlFormat;
/*重启*/
MSG_DEV_BLE_REBOOT_Ctrl_T ctrlReboot;
MSG_DEV_BLE_REBOOT_Ctrl_RSP_T rctrlReboot;
/*恢复出厂设置*/
MSG_DEV_BLE_Reset_Ctrl_T ctrlReset;
MSG_DEV_BLE_Reset_Ctrl_RSP_T rctrlReset;
};
} __attribute__((packed)) BLE_APP_MSG_T;
typedef struct
@ -477,6 +540,8 @@ typedef struct
unsigned int sf_blue_app_start(void);
unsigned int sf_blue_app_stop(void);
int sf_set_ble_name(char *name);
void sf_set_ble_status(SF_BLE_STATUS_E enStatus);
SF_BLE_STATUS_E sf_get_ble_status(void);
#ifdef __cplusplus
}
#endif

View File

@ -31,9 +31,11 @@
#include <net/if.h>
#include "sf_blue_app.h"
extern int hciconfig_start_advertising(const char *ssid);
extern int hciconfig_close_device(void);
extern int hciconfig_open_device(void);
extern int hciconfig_conn_le(char *addr);
extern int hciconfig_get_address(char *ssid);
extern int hciconfig_set_name(char *name);
extern int hciconfig_open_piscan(void);
extern int gatt_service_register(BLE_RD rcb, BLE_WR wcb);
static pthread_t gblue_piscan_task_pid;
@ -42,7 +44,9 @@ static pthread_t gblue_disconnect_pid;
static BLE_RD gst_ble_rcb = NULL;
static BLE_WR gst_ble_wcb = NULL;
static char g_ble_ssid[14] = {0};
static char g_ble_bdaddr[6] = {0};
static char g_ble_ssid[16] = {0};
static char g_ble_connect = 0;
/*************************************************
Function: sf_bluetooth_disconnect_task
@ -54,13 +58,33 @@ static char g_ble_ssid[14] = {0};
*************************************************/
static void *sf_bluetooth_disconnect_task(void *arg)
{
//int count = 0;
while (1)
{
if (access("/tmp/blue_disconnect", F_OK) == 0)
{
remove("/tmp/blue_disconnect");
remove("/tmp/blue_connect");
SLOGI("reset piscan.\n");
hciconfig_open_piscan();
g_ble_connect = 0;
sf_set_ble_status(SF_BLE_OK);
hciconfig_start_advertising(g_ble_ssid);
}
else if (access("/tmp/blue_connect", F_OK) == 0)
{
//SF_BLUE_LOGI("blue_connect.\n");
g_ble_connect = 1;
//sf_clear_poweroff_time();/*reset power off count time*/
sf_set_ble_status(SF_BLE_CON);
}
if (access("/tmp/blue_le", F_OK) == 0)
{
remove("/tmp/blue_le");
//char *addr = "2C:C3:E6:DF:59:C0";
char *addr = "C0:59:DF:E6:C3:2C";
hciconfig_conn_le(addr);
}
usleep(500*1000);
@ -83,36 +107,6 @@ static void sf_bluetooth_power_enable(void)
// system("echo 1 > /sys/class/gpio/gpio44/value");
}
int sf_getb_mac(char *ifName, UINT8 *pbMacAddr)
{
struct ifreq ifreq;
int sock = 0;
int i = 0;
sock = socket(AF_BLUETOOTH, SOCK_STREAM, 0);
if(sock < 0)
{
MLOGE("error sock");
return 2;
}
strcpy(ifreq.ifr_name, ifName);
if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0)
{
MLOGE("error ioctl");
return 3;
}
for(i = 0; i < 6; i++)
{
pbMacAddr[i]=(unsigned char)ifreq.ifr_hwaddr.sa_data[i];
}
MLOGI("MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", pbMacAddr[0],pbMacAddr[1],pbMacAddr[2],pbMacAddr[3],pbMacAddr[4],pbMacAddr[5]);
return 0;
}
/*************************************************
Function: sf_bluetooth_scaning_task
Description: Bluetooth radio on and set to low power mode
@ -156,10 +150,9 @@ static void *sf_bluetooth_piscan_task(void *arg)
}
}
char ssid[14]= {0};
hciconfig_get_address(ssid);
snprintf(g_ble_ssid, sizeof(g_ble_ssid), "X-PRO_%s",ssid);
hciconfig_set_name(g_ble_ssid);
hciconfig_get_address(g_ble_bdaddr);
snprintf(g_ble_ssid, sizeof(g_ble_ssid), "X-PRO_%02X%02X%02X",g_ble_bdaddr[3],g_ble_bdaddr[4],g_ble_bdaddr[5]);
sf_set_ble_name(g_ble_ssid);
system("dbus-daemon --system");
@ -187,11 +180,17 @@ static void *sf_bluetooth_piscan_task(void *arg)
}
}
}
//sleep(15);
printf("%s:%d --------------test blu------------\n",__FUNCTION__,__LINE__);
sleep(2);
hciconfig_open_device();
usleep(200*1000);
hciconfig_open_piscan();
//!< start to advertise
hciconfig_start_advertising(g_ble_ssid);
//!< register gatt callback
gatt_service_register(gst_ble_rcb, gst_ble_wcb);
sf_set_ble_status(SF_BLE_OK);
return NULL;
}

View File

@ -31,6 +31,7 @@ extern "C" {
typedef int (*BLE_RD)(unsigned char **, unsigned int *);
typedef int (*BLE_WR)(unsigned char *, unsigned int, unsigned char **, unsigned int *);
void sf_blue_hal_get_ssid(char *ssid);
unsigned int sf_blue_hal_init(BLE_RD rcb, BLE_WR wcb);
#ifdef __cplusplus