linuxOS_AP05/buildroot/package/bluez5_utils/0005-Adapt-to-base-and-dueros-ble-wifi-config.patch
2025-06-02 13:59:07 +08:00

766 lines
21 KiB
Diff

From 2adf71eaeec389498ea01115897c3b123b682eed Mon Sep 17 00:00:00 2001
From: ctf <ctf@rock-chips.com>
Date: Tue, 7 Aug 2018 16:58:12 +0800
Subject: [PATCH 05/19] Adapt to base and dueros ble wifi config
Signed-off-by: ctf <ctf@rock-chips.com>
---
src/main.c | 40 +++-
tools/gatt-service.c | 553 ++++++++++++++++++++++++++++++++++++++-----
2 files changed, 527 insertions(+), 66 deletions(-)
diff --git a/src/main.c b/src/main.c
index 7e6af42..8116104 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,7 +37,9 @@
#include <sys/signalfd.h>
#include <sys/types.h>
#include <sys/stat.h>
-
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <arpa/inet.h>
#include <glib.h>
#include <dbus/dbus.h>
@@ -421,13 +423,49 @@ static void parse_config(GKeyFile *config)
}
}
+static int get_mac_address(char* mac, size_t len, const char* inter)
+{
+ int sock_mac;
+ struct ifreq ifr_mac;
+ char mac_addr[30] = {0};
+
+ sock_mac = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock_mac == -1) {
+ printf("create mac socket failed.\n");
+ return -1;
+ }
+ memset(&ifr_mac,0,sizeof(ifr_mac));
+ strncpy(ifr_mac.ifr_name, inter, sizeof(ifr_mac.ifr_name)-1);
+
+ if ((ioctl( sock_mac, SIOCGIFHWADDR, &ifr_mac)) < 0) {
+ printf("Mac socket ioctl failed.\n");
+ close(sock_mac);
+ return -1;
+ }
+ sprintf(mac_addr,"%02X%02X",
+ (unsigned char)ifr_mac.ifr_hwaddr.sa_data[4],
+ (unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]);
+ snprintf(mac, len, "%s", mac_addr);
+ printf("bluez5 %s mac:%s\n", inter, mac);
+ close(sock_mac);
+
+ return 0;
+}
+
static void init_defaults(void)
{
uint8_t major, minor;
/* Default HCId settings */
memset(&main_opts, 0, sizeof(main_opts));
+
+#ifdef DUEROS
+ main_opts.name = g_strdup_printf("DUEROS_1234");
+ get_mac_address(main_opts.name + sizeof("DUEROS_") - 1, 5, "wlan0");
+#else
main_opts.name = g_strdup_printf("BlueZ %s", VERSION);
+#endif
+
main_opts.class = 0x000000;
main_opts.pairto = DEFAULT_PAIRABLE_TIMEOUT;
main_opts.discovto = DEFAULT_DISCOVERABLE_TIMEOUT;
diff --git a/tools/gatt-service.c b/tools/gatt-service.c
index 2ce8a1f..3cce6e2 100644
--- a/tools/gatt-service.c
+++ b/tools/gatt-service.c
@@ -26,11 +26,17 @@
#endif
#include <errno.h>
+#include <fcntl.h>
#include <stdio.h>
+#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <sys/signalfd.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/un.h>
+#include <time.h>
#include <glib.h>
#include <dbus/dbus.h>
@@ -44,25 +50,57 @@
#define GATT_CHR_IFACE "org.bluez.GattCharacteristic1"
#define GATT_DESCRIPTOR_IFACE "org.bluez.GattDescriptor1"
-/* Immediate Alert Service UUID */
-#define IAS_UUID "00001802-0000-1000-8000-00805f9b34fb"
-#define ALERT_LEVEL_CHR_UUID "00002a06-0000-1000-8000-00805f9b34fb"
-#define IAS_UUID1 "A00B"
-#define IAS_UUID2 "A00C"
-#define IAS_UUID3 "A00D"
-#define ALERT_LEVEL_CHR_UUID1 "00002b06-0000-1000-8000-00805f9b34fb"
-#define ALERT_LEVEL_CHR_UUID2 "00002c07-0000-1000-8000-00805f9b34fb"
-/* Random UUID for testing purpose */
-
-/* Random UUID for testing purpose */
-#define READ_WRITE_DESCRIPTOR_UUID "8260c653-1a54-426b-9e36-e84c238bc669"
-#define READ_WRITE_DESCRIPTOR_UUID1 "0260c653-1a54-426b-9e36-e84c238bc669"
-#define READ_WRITE_DESCRIPTOR_UUID2 "FFFF"
+/* Immediate wifi Service UUID */
+#define WIFI_SERVICES_UUID "1B7E8251-2877-41C3-B46E-CF057C562023"
+#define SECURITY_UUID "CAC2ABA4-EDBB-4C4A-BBAF-0A84A5CD93A1"
+#define SSID_UUID "ACA0EF7C-EEAA-48AD-9508-19A6CEF6B356"
+#define PASSWORD_UUID "40B7DE33-93E4-4C8B-A876-D833B415A6CE"
+#define CONFIG_NOTIFY_UUID "8AC32D3f-5CB9-4D44-BEC2-EE689169F626"
+#define CONFIG_UUID "00002902-0000-1000-8000-00805f9b34fb"
+
+#ifdef DUEROS
+#define DUEROS_WIFI_SERVICES_UUID "00001111-0000-1000-8000-00805f9b34fb"
+#define DUEROS_CHARACTERISTIC_UUID "00002222-0000-1000-8000-00805f9b34fb"
+
+#define DUEROS_SOCKET_RECV_LEN 20
+
+static pthread_t dueros_tid = 0;
+static int dueros_socket_done = 0;
+static int dueros_socket_fd = -1;
+static char dueros_socket_path[] = "/data/bluez5_utils/socket_dueros";
+
+struct characteristic *dueros_chr;
+
+typedef struct{
+ int server_sockfd;
+ int client_sockfd;
+ int server_len;
+ int client_len;
+ struct sockaddr_un server_address;
+ struct sockaddr_un client_address;
+ char sock_path[512];
+} tAPP_SOCKET;
+
+#define CMD_ADV "hcitool -i hci0 cmd 0x08 0x0008 15 02 01 06 11 07 fb 34 9b 5f 80 00 00 80 00 10 00 00 11 11 00 00"
+#else
+#define CMD_ADV "hcitool -i hci0 cmd 0x08 0x0008 15 02 01 06 11 07 23 20 56 7c 05 cf 6e b4 c3 41 77 28 51 82 7e 1b"
+#endif
+
+#define CMD_EN "hcitool -i hci0 cmd 0x08 0x000a 1"
+
+#define ADV_IRK "\x69\x30\xde\xc3\x8f\x84\x74\x14" \
+
+const char *WIFI_CONFIG_FORMAT = "ctrl_interface=/var/run/wpa_supplicant\n"
+ "ap_scan=1\n\nnetwork={\nssid=\"%s\"\n"
+ "psk=\"%s\"\npriority=1\n}\n";
static GMainLoop *main_loop;
static GSList *services;
static DBusConnection *connection;
+char wifi_ssid[256];
+char wifi_password[256];
+
struct characteristic {
char *service;
char *uuid;
@@ -82,13 +120,181 @@ struct descriptor {
};
/*
- * Alert Level support Write Without Response only. Supported
- * properties are defined at doc/gatt-api.txt. See "Flags"
+ * Supported properties are defined at doc/gatt-api.txt. See "Flags"
* property of the GattCharacteristic1.
*/
-static const char *ias_alert_level_props[] = { "write-without-response", NULL };
+//static const char *chr_props[] = { "read", "write", "notify", "indicate", NULL };
+static const char *chr_props[] = { "read", "write", "notify", NULL };
static const char *desc_props[] = { "read", "write", NULL };
+static void chr_write(struct characteristic *chr, const uint8_t *value, int len);
+static void chr_iface_destroy(gpointer user_data);
+
+#ifdef DUEROS
+/********************SERVER API***************************/
+static int setup_socket_server(tAPP_SOCKET *app_socket)
+{
+ unlink (app_socket->sock_path);
+ if ((app_socket->server_sockfd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) {
+ printf("fail to create socket\n");
+ perror("socket");
+ return -1;
+ }
+ app_socket->server_address.sun_family = AF_UNIX;
+ strcpy (app_socket->server_address.sun_path, app_socket->sock_path);
+ app_socket->server_len = sizeof (app_socket->server_address);
+ app_socket->client_len = sizeof (app_socket->client_address);
+ if ((bind (app_socket->server_sockfd, (struct sockaddr *)&app_socket->server_address, app_socket->server_len)) < 0) {
+ perror("bind");
+ return -1;
+
+ }
+ if (listen (app_socket->server_sockfd, 10) < 0) {
+ perror("listen");
+ return -1;
+ }
+ printf ("Server is ready for client connect...\n");
+
+ return 0;
+}
+
+static int accpet_client(tAPP_SOCKET *app_socket)
+{
+ app_socket->client_sockfd = accept (app_socket->server_sockfd, (struct sockaddr *)&app_socket->server_address, (socklen_t *)&app_socket->client_len);
+ if (app_socket->client_sockfd == -1) {
+ perror ("accept");
+ return -1;
+ }
+ return 0;
+}
+
+static void teardown_socket_server(tAPP_SOCKET *app_socket)
+{
+ unlink (app_socket->sock_path);
+ app_socket->server_sockfd = 0;
+ app_socket->client_sockfd = 0;
+}
+
+/********************CLIENT API***************************/
+static int setup_socket_client(char *socket_path)
+{
+ struct sockaddr_un address;
+ int sockfd, len;
+
+ if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+ printf("%s: can not creat socket\n", __func__);
+ return -1;
+ }
+
+ address.sun_family = AF_UNIX;
+ strcpy (address.sun_path, socket_path);
+ len = sizeof (address);
+
+ if (connect (sockfd, (struct sockaddr *)&address, len) == -1) {
+ printf("%s: can not connect to socket\n", __func__);;
+ return -1;
+ }
+
+ return sockfd;
+
+}
+
+static void teardown_socket_client(int sockfd)
+{
+ close(sockfd);
+}
+
+/********************COMMON API***************************/
+static int socket_send(int sockfd, char *msg, int len)
+{
+ int bytes;
+ if (sockfd < 0) {
+ printf("%s: invalid sockfd\n",__func__);
+ return -1;
+ }
+ if ((bytes = send(sockfd, msg, len, 0)) < 0) {
+ perror ("send");
+ }
+ return bytes;
+}
+
+static int socket_recieve(int sockfd, char *msg, int len)
+{
+ int bytes;
+
+ if (sockfd < 0) {
+ printf("%s: invalid sockfd\n",__func__);
+ return -1;
+ }
+
+ if ((bytes = recv(sockfd, msg, len, 0)) < 0)
+ {
+ perror ("recv");
+ }
+ return bytes;
+
+}
+
+static int dueros_socket_send(char *msg, int len) {
+ return socket_send(dueros_socket_fd, msg, len);
+}
+
+static void *dueros_socket_recieve(void *arg) {
+ int bytes = 0;
+ char data[DUEROS_SOCKET_RECV_LEN];
+
+ dueros_socket_fd = setup_socket_client(dueros_socket_path);
+ if (dueros_socket_fd < 0) {
+ printf("Fail to connect server socket\n");
+ goto exit;
+ }
+
+ while (dueros_socket_done) {
+ memset(data, 0, sizeof(data));
+ bytes = socket_recieve(dueros_socket_fd, data, sizeof(data));
+ if (bytes <= 0) {
+ printf("Server leaved, break\n");
+ break;
+ }
+
+ printf("dueros_socket_recieve, len: %d\n", bytes);
+ for(int i = 0; i < bytes; i++)
+ printf("%02x ", data[i]);
+ printf("\n\n");
+
+ //send to apk
+ chr_write(dueros_chr, (uint8_t *) data, bytes);
+ usleep(1000000); //sleep 1s
+ }
+
+exit:
+ printf("Exit dueros socket thread\n");
+ pthread_exit(0);
+}
+
+static int dueros_socket_thread_create(void) {
+ dueros_socket_done = 1;
+ if (pthread_create(&dueros_tid, NULL, dueros_socket_recieve, NULL)) {
+ printf("Create dueros socket thread failed\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static void dueros_socket_thread_delete(void) {
+ dueros_socket_done = 0;
+
+ teardown_socket_client(dueros_socket_fd);
+
+ if (dueros_tid) {
+ pthread_join(dueros_tid, NULL);
+ dueros_tid = 0;
+ }
+}
+
+#endif
+
static gboolean desc_get_uuid(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *user_data)
{
@@ -380,8 +586,14 @@ static gboolean service_exist_includes(const GDBusPropertyTable *property,
const char *uuid = user_data;
printf("Exist Includes: %s\n", uuid);
- if (strncmp(uuid, "00001802", 8) == 0)
+
+#ifdef DUEROS
+ if (strncmp(uuid, "00001111", 8) == 0)
+ return TRUE;
+#else
+ if (strncmp(uuid, "1B7E8251", 8) == 0)
return TRUE;
+#endif
return FALSE;
}
@@ -449,6 +661,143 @@ static int parse_options(DBusMessageIter *iter, const char **device)
return 0;
}
+void execute(const char cmdline[],char recv_buff[]){
+ printf("consule_run: %s\n",cmdline);
+
+ FILE *stream = NULL;
+ char buff[1024];
+
+ memset(recv_buff, 0, sizeof(recv_buff));
+
+ if((stream = popen(cmdline,"r"))!=NULL){
+ while(fgets(buff,1024,stream)){
+ strcat(recv_buff,buff);
+ }
+ }
+
+ pclose(stream);
+}
+
+//wpa_supplicant
+static int wpa_supplicant_config_wifi() {
+ FILE *fp = NULL;
+
+ if ((fp = fopen("/data/cfg/wpa_supplicant.conf", "w+")) == NULL)
+ {
+ printf("open cfg wpa_supplicant.conf failed");
+ return -1;
+ }
+
+ fprintf(fp, "%s\n", "ctrl_interface=/var/run/wpa_supplicant");
+ fprintf(fp, "%s\n", "ap_scan=1");
+ fprintf(fp, "%s\n", "network={");
+ fprintf(fp, "%s%s%s\n", "ssid=\"", wifi_ssid, "\"");
+ fprintf(fp, "%s%s%s\n", "psk=\"", wifi_password, "\"");
+ fprintf(fp, "%s\n", "key_mgmt=WPA-PSK");
+ fprintf(fp, "%s\n", "}");
+
+ fclose(fp);
+
+ if (-1 == system("killall wpa_supplicant; dhcpcd -k wlan0; killall dhcpcd;"
+ "ifconfig wlan0 0.0.0.0")) {
+ printf("killall wpa_supplicant dhcpcd failed");
+ return -1;
+ }
+
+ if (-1 == system("wpa_supplicant -Dnl80211 -i wlan0 "
+ "-c /data/cfg/wpa_supplicant.conf &")) {
+ printf("start wpa_supplicant failed");
+ return -1;
+ }
+
+ if (-1 == system("dhcpcd wlan0 -t 0 &")) {
+ printf("dhcpcd failed");
+ return -1;
+ }
+
+ return 0;
+}
+
+//wpa_cli
+static gboolean wpa_cli_config_wifi(){
+ printf("start config_wifi\n");
+ char buff[256] = {0};
+ char cmdline[256] = {0};
+ int id = -1;
+ bool execute_result = false;
+
+ // 1. add network
+ execute("wpa_cli -iwlan0 add_network",buff);
+ id = atoi(buff);
+ if(id < 0){
+ perror("add_network failed.\n");
+ return FALSE;
+ }
+
+ // 2. setNetWorkSSID
+ memset(cmdline, 0, sizeof(cmdline));
+ sprintf(cmdline,"wpa_cli -iwlan0 set_network %d ssid \\\"%s\\\"",id, wifi_ssid);
+ printf("%s\n", cmdline);
+ execute(cmdline,buff);
+ execute_result = !strncmp(buff,"OK",2);
+
+ if(!execute_result){
+ perror("setNetWorkSSID failed.\n");
+ return FALSE;
+ }
+
+ // 3. setNetWorkPWD
+ memset(cmdline, 0, sizeof(cmdline));
+ sprintf(cmdline,"wpa_cli -iwlan0 set_network %d psk \\\"%s\\\"", id,wifi_password);
+ printf("%s\n", cmdline);
+ execute(cmdline,buff);
+ execute_result = !strncmp(buff,"OK",2);
+
+ if(!execute_result){
+ perror("setNetWorkPWD failed.\n");
+ return FALSE;
+ }
+
+ // 4. selectNetWork
+ memset(cmdline, 0, sizeof(cmdline));
+ sprintf(cmdline,"wpa_cli -iwlan0 select_network %d", id);
+ printf("%s\n", cmdline);
+ execute(cmdline,buff);
+ execute_result = !strncmp(buff,"OK",2);
+
+ if(!execute_result){
+ perror("setNetWorkPWD failed.\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool save_wifi_config(const char* name, const char* pwd)
+{
+ FILE *fp;
+ char body[256];
+ int fd;
+ fp = fopen("/data/cfg/wpa_supplicant.conf", "w");
+
+ if (fp == NULL)
+ {
+ return -1;
+ }
+
+ snprintf(body, sizeof(body), WIFI_CONFIG_FORMAT, name, pwd);
+ fputs(body, fp);
+ fflush(fp);
+ fd = fileno(fp);
+ if (fd >= 0) {
+ fsync(fd);
+ printf("save wpa_supplicant.conf sucecees.\n");
+ }
+ fclose(fp);
+
+ return 0;
+}
+
static DBusMessage *chr_read_value(DBusConnection *conn, DBusMessage *msg,
void *user_data)
{
@@ -496,7 +845,32 @@ static DBusMessage *chr_write_value(DBusConnection *conn, DBusMessage *msg,
return g_dbus_create_error(msg, DBUS_ERROR_INVALID_ARGS,
"Invalid arguments");
- chr_write(chr, value, len);
+#ifdef DUEROS
+ printf("chr_write_value, len: %d\n", len);
+ for(int i = 0; i < len; i++)
+ printf("%02x ", value[i]);
+ printf("\n\n");
+
+ if (!strcmp(DUEROS_CHARACTERISTIC_UUID, chr->uuid)) {
+ dueros_socket_send((char *) value, len);
+ }
+
+#else
+ if (!strcmp(SSID_UUID, chr->uuid)) {
+ strcpy(wifi_ssid, value);
+ printf("wifi ssid is %s\n", wifi_ssid);
+ }
+ if (!strcmp(PASSWORD_UUID, chr->uuid)) {
+ strcpy(wifi_password, value);
+ printf("wifi pwd is %s\n", wifi_password);
+ #if 1
+ wpa_cli_config_wifi();
+ save_wifi_config(wifi_ssid, wifi_password);
+ #else
+ wpa_supplicant_config_wifi();
+ #endif
+ }
+#endif
return dbus_message_new_method_return(msg);
}
@@ -639,6 +1013,13 @@ static gboolean register_characteristic(const char *chr_uuid,
return FALSE;
}
+#ifdef DUEROS
+ if (strcmp(chr_uuid, DUEROS_CHARACTERISTIC_UUID) == 0) {
+ printf("save dueros characteristic\n");
+ dueros_chr = chr;
+ }
+#endif
+
return TRUE;
}
@@ -659,23 +1040,26 @@ static char *register_service(const char *uuid)
return path;
}
-static void create_services_one(void)
+#ifdef DUEROS
+static void create_wifi_services(void)
{
char *service_path;
- uint8_t level = 0;
+ uint8_t level = 20;
- service_path = register_service(IAS_UUID);
+ service_path = register_service(DUEROS_WIFI_SERVICES_UUID);
if (!service_path)
return;
- /* Add Alert Level Characteristic to Immediate Alert Service */
- if (!register_characteristic(ALERT_LEVEL_CHR_UUID,
+ gboolean mSsidPassword = register_characteristic(DUEROS_CHARACTERISTIC_UUID,
&level, sizeof(level),
- ias_alert_level_props,
- READ_WRITE_DESCRIPTOR_UUID,
+ chr_props,
+ CONFIG_UUID, /*NULL*/
desc_props,
- service_path)) {
- printf("Couldn't register Alert Level characteristic (IAS)\n");
+ service_path);
+
+ /* Add Wifi Config Characteristic to Immediate Wifi Config Service */
+ if (!mSsidPassword) {
+ printf("Couldn't register wifi config characteristic (IAS)\n");
g_dbus_unregister_interface(connection, service_path,
GATT_SERVICE_IFACE);
g_free(service_path);
@@ -685,62 +1069,93 @@ static void create_services_one(void)
services = g_slist_prepend(services, service_path);
printf("Registered service: %s\n", service_path);
}
-
-
-static void create_services_two(void)
+#else
+static void create_wifi_services(void)
{
char *service_path;
- uint8_t level = 0;
+ uint8_t level = 20;
- service_path = register_service(IAS_UUID2);
+ service_path = register_service(WIFI_SERVICES_UUID);
if (!service_path)
return;
- if (!register_characteristic(ALERT_LEVEL_CHR_UUID2,
+ gboolean mSecure = register_characteristic(SECURITY_UUID,
&level, sizeof(level),
- ias_alert_level_props,
- READ_WRITE_DESCRIPTOR_UUID2,
+ chr_props,
+ NULL,
desc_props,
- service_path)) {
- printf("Couldn't register Alert Level characteristic (IAS)\n");
- g_dbus_unregister_interface(connection, service_path,
- GATT_SERVICE_IFACE);
- g_free(service_path);
- return;
- }
- services = g_slist_prepend(services, service_path);
- printf("Registered service: %s\n", service_path);
-}
-
-static void create_services_three(void)
-{
- char *service_path;
- uint8_t level = 0;
-
- service_path = register_service(IAS_UUID3);
- if (!service_path)
- return;
-
- if (!register_characteristic(ALERT_LEVEL_CHR_UUID1,
+ service_path);
+ gboolean mSsid = register_characteristic(SSID_UUID,
+ &level, sizeof(level),
+ chr_props,
+ NULL,
+ desc_props,
+ service_path);
+ gboolean mPassword = register_characteristic(PASSWORD_UUID,
&level, sizeof(level),
- ias_alert_level_props,
- READ_WRITE_DESCRIPTOR_UUID1,
+ chr_props,
+ NULL,
desc_props,
- service_path)) {
- printf("Couldn't register Alert Level characteristic (IAS)\n");
+ service_path);
+ gboolean mConfigCharNotify = register_characteristic(CONFIG_NOTIFY_UUID,
+ &level, sizeof(level),
+ chr_props,
+ CONFIG_UUID,
+ desc_props,
+ service_path);
+
+ /* Add Wifi Config Characteristic to Immediate Wifi Config Service */
+ if (!mSecure || !mSsid || !mPassword || !mConfigCharNotify) {
+ printf("Couldn't register Wifi Config characteristic (IAS)\n");
g_dbus_unregister_interface(connection, service_path,
GATT_SERVICE_IFACE);
g_free(service_path);
return;
}
-
services = g_slist_prepend(services, service_path);
printf("Registered service: %s\n", service_path);
}
+#endif
+
+static void send_advertise(){
+ printf("send_advertise\n");
+ char buff[256] = {0};
+ char addr[6];
+ char CMD_RA[256] = "hcitool -i hci0 cmd 0x08 0x0005 ";
+ char temp[256];
+
+ //creat random address
+ int i;
+ srand(time(NULL));
+ for(i = 0; i < 6;i++)
+ addr[i]=rand()&0xFF;
+
+ addr[0] &= 0x3f; /* Clear two most significant bits */
+ addr[0] |= 0x40; /* Set second most significant bit */
+
+ for(i = 0; i < 6;i++) {
+ sprintf(temp,"%02x", addr[i]);
+ strcat(CMD_RA, temp);
+ strcat(CMD_RA, " ");
+ }
+ printf ("%s\n", CMD_RA);
+
+ //LE Set Random Address Command
+ execute(CMD_RA, buff);
+ sleep(1);
+
+ // LE Set Advertising Data Command
+ execute(CMD_ADV, buff);
+ sleep(1);
+
+ // LE Set Advertise Enable Command
+ execute(CMD_EN, buff);
+}
static void register_app_reply(DBusMessage *reply, void *user_data)
{
+ printf("register_app_reply\n");
DBusError derr;
dbus_error_init(&derr);
@@ -751,6 +1166,8 @@ static void register_app_reply(DBusMessage *reply, void *user_data)
else
printf("RegisterApplication: OK\n");
+ send_advertise();
+
dbus_error_free(&derr);
}
@@ -877,9 +1294,11 @@ int main(int argc, char *argv[])
printf("gatt-service unique name: %s\n",
dbus_bus_get_unique_name(connection));
- create_services_one();
- create_services_two();
- create_services_three();
+#ifdef DUEROS
+ dueros_socket_thread_create();
+#endif
+
+ create_wifi_services();
client = g_dbus_client_new(connection, "org.bluez", "/");
@@ -888,6 +1307,10 @@ int main(int argc, char *argv[])
g_main_loop_run(main_loop);
+#ifdef DUEROS
+ dueros_socket_thread_delete();
+#endif
+
g_dbus_client_unref(client);
g_source_remove(signal);
--
2.20.1