summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/Settings.qml1
-rw-r--r--app/app.pro4
-rw-r--r--app/bluetooth/Bluetooth.qml429
-rw-r--r--app/main.cpp9
4 files changed, 126 insertions, 317 deletions
diff --git a/app/Settings.qml b/app/Settings.qml
index 56767f3..0d74c3b 100644
--- a/app/Settings.qml
+++ b/app/Settings.qml
@@ -50,7 +50,6 @@ ApplicationWindow {
settingsModel.append({'icon': app.icon, 'title': app.title, 'checkable': app.checkable, 'app': app})
app.visible = false
- if (app.isBluetooth) app.checkBluetooth()
if (app.isWifi) app.activateWifi()
}
}
diff --git a/app/app.pro b/app/app.pro
index 36a71f0..23dce89 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -1,10 +1,10 @@
TARGET = settings
-QT = quickcontrols2 dbus
+QT = quickcontrols2 websockets dbus
SOURCES = main.cpp
CONFIG += link_pkgconfig
-PKGCONFIG += libhomescreen qlibwindowmanager
+PKGCONFIG += libhomescreen qlibwindowmanager qtappfw
RESOURCES += \
settings.qrc \
diff --git a/app/bluetooth/Bluetooth.qml b/app/bluetooth/Bluetooth.qml
index cef0578..46aee81 100644
--- a/app/bluetooth/Bluetooth.qml
+++ b/app/bluetooth/Bluetooth.qml
@@ -26,111 +26,83 @@ SettingPage {
title: 'Bluetooth'
checkable: true
readonly property bool isBluetooth: true
+ property int pairedDeviceCount: 0
- property string btAPIpath: bindingAddress + '/Bluetooth-manager/'
- property var jsonObjectBT: []
- property string currentState: 'idle'
- property string btState: 'off' //add property to indicate the bt status
- property string initDevice: 'N'
-
- property string address_str: bindingAddressWS
- property string token_str: ""
- property string api_str: "Bluetooth-Manager"
- property string verb_str: ""
- property var parameterJson: 'None'
- property string payloadLength: "9999"
- property var msgid_enu: {
- "call": 2,
- "retok": 3,
- "reterr": 4,
- "event": 5
- }
- property string request_str: ""
- property string status_str: ""
- property int pairedDeviceCount
- property bool btOn:false
-
- WebSocket {
- id: websocket
- url: address_str
- onTextMessageReceived: {
- var message_json = JSON.parse(message);
- //console.log("Raw response: " + message)
- //console.log("JSON response: " + message_json)
- if (message_json[0] === msgid_enu.reterr) {
- console.log("Return value is not OK!")
- return
- }
- else if ((message_json[0] === msgid_enu.event)){
- var eventContent = JSON.parse(JSON.stringify(message_json[2]))
- if (eventContent.event === "Bluetooth-Manager/device_added"){
- //jsonObjectBT.add(eventContent.data)
- //btDeviceList.clear()
- console.log("BT list refreshed")
- initDevice = 'Y'
- if(eventContent.data.Paired==="True"){
- pairedDeviceList.append({
- deviceAddress: eventContent.data.Address,
- deviceName: eventContent.data.Name,
- devicePairable:eventContent.data.Paired,
- deviceConnect: eventContent.data.Connected,
- connectAVP: eventContent.data.AVPConnected,
- connectHFP: eventContent.data.HFPConnected,
- textToShow: ""
- })
- pairedDeviceCount=pairedDeviceCount+1
- }
- else
- btDeviceList.append({
- deviceAddress: eventContent.data.Address,
- deviceName: eventContent.data.Name,
- devicePairable:eventContent.data.Paired,
- deviceConnect: eventContent.data.Connected,
- connectAVP: eventContent.data.AVPConnected,
- connectHFP: eventContent.data.HFPConnected,
- textToShow: ""
- })
- } else if(eventContent.event === "Bluetooth-Manager/device_removed"){
- if (findDevice(eventContent.data.Address) >= 0){
- btDeviceList.remove(findDevice(eventContent.data.Address))
- }
- else if(findPairDevice(eventContent.data.Address) >= 0){
- pairedDeviceList.remove(findPairDevice(eventContent.data.Address))
- pairedDeviceCount=pairedDeviceCount-1
- }
- } else if(eventContent.event === "Bluetooth-Manager/device_updated"){
- updateDeviceAttribute(eventContent.data)
- } else if(eventContent.event === "Bluetooth-Manager/request_confirmation"){
- request(btAPIpath + "send_confirmation?value=yes", function (o) {
- console.log(o.responseText)
- })
- }
+ Connections {
+ target: bluetooth
+ onRequestConfirmationEvent: {
+ bluetooth.send_confirmation()
+ }
+
+ onDeviceAddedEvent: {
+ if (data.Paired === "True") {
+ pairedDeviceList.append({
+ deviceAddress: data.Address,
+ deviceName: data.Name,
+ devicePairable: data.Paired,
+ deviceConnect: data.Connected,
+ connectAVP: data.AVPConnected,
+ connectHFP: data.HFPConnected,
+ textToShow: ""
+ })
+ pairedDeviceCount = pairedDeviceCount + 1
+ } else {
+ btDeviceList.append({
+ deviceAddress: data.Address,
+ deviceName: data.Name,
+ devicePairable: data.Paired,
+ deviceConnect: data.Connected,
+ connectAVP: data.AVPConnected,
+ connectHFP: data.HFPConnected,
+ textToShow: ""
+ })
}
- if ((verb_str == "connect") || (verb_str == "refresh")) {
- token_str = message_json[3]
- } else if (verb_str == "logout") {
- token_str = ""
- websocket.active = false
- console.log("close socket")
+ }
+
+ onDeviceRemovedEvent: {
+ if (findDevice(data.Address) >= 0) {
+ btDeviceList.remove(findDevice(data.Address))
+ } else if(findPairDevice(data.Address) >= 0) {
+ pairedDeviceList.remove(findPairDevice(data.Address))
+ pairedDeviceCount = pairedDeviceCount - 1
}
}
- onStatusChanged: {
- if (websocket.status == WebSocket.Error) {
- status_str = "Error: " + websocket.errorString
- } else if (websocket.status == WebSocket.Open) {
- status_str = "Socket opened; sending message..."
- if (verb_str == "connect"){
- WebSocket.sendTextMessage (request_str)
- }
- sendSocketMesage("subscribe", { value: "device_updated" })
- sendSocketMesage("subscribe", { value: "device_added" })
- sendSocketMesage("subscribe", { value: "device_removed" })
- sendSocketMesage("subscribe", { value: "request_confirmation" })
- } else if (websocket.status == WebSocket.Closed) {
- status_str = "Socket closed"
+
+ onDeviceUpdatedEvent: {
+ updateDeviceAttribute(data)
+ }
+
+ onDeviceListEvent: {
+ for (var i = 0; i < data.list.length; i++) {
+ var value = data.list[i]
+ if (value.Paired==="True") {
+ pairedDeviceList.append({
+ deviceAddress: value.Address,
+ deviceName: value.Name,
+ devicePairable:value.Paired,
+ deviceConnect: value.Connected,
+ connectAVP: value.AVPConnected,
+ connectHFP: value.HFPConnected,
+ textToShow: ""
+ })
+ pairedDeviceCount = pairedDeviceCount + 1
+ }
+ else
+ btDeviceList.append({
+ deviceAddress: value.Address,
+ deviceName: value.Name,
+ devicePairable:value.Paired,
+ deviceConnect: value.Connected,
+ connectAVP: value.AVPConnected,
+ connectHFP: value.HFPConnected,
+ textToShow: ""
+ })
}
}
- active: false
+
+ onPowerChanged: {
+ root.checked = bluetooth.power
+ }
}
Text {
@@ -143,53 +115,20 @@ SettingPage {
onCheckedChanged: {
console.log("Bluetooth set to", checked)
- if (checked == true) {
- pairedDeviceCount=0
- initBTlist()
- btOn=true
- request(btAPIpath + 'power?value=1', function (o) {
- // log the json response
- console.log(o.responseText)
- websocket.active = true
- })
- request(btAPIpath + 'set_property?Property=Discoverable\&value=true', function (o) {
- console.log(o.responseText)
- })
- request(btAPIpath + 'set_property?Property=Pairable\&value=true', function (o) {
- console.log(o.responseText)
- })
- request(btAPIpath + 'start_discovery', function (o) {
- console.log(o.responseText)
- })
- buttonScan.text = "STOP" //when power on and after send the discovery command, button set to STOP
- currentState = 'discovering'
- btState = 'on' //bt is on
+ pairedDeviceCount = 0
+ bluetooth.power = checked;
+ bluetooth.discoverable = checked;
+
+ if (checked == true) {
+ bluetooth.start_discovery()
} else {
btDeviceList.clear()
pairedDeviceList.clear()
- pairedDeviceCount=0
- btOn=false
- request(btAPIpath + 'stop_discovery', function (o) {
- // log the json response
- console.log(o.responseText)
- })
- request(btAPIpath + 'power?value=0', function (o) {
- // log the json response
- console.log(o.responseText)
- })
- buttonScan.text = "SEARCH" //when power off the button should be set to SEARCH
- currentState = 'idle'
- btState = 'off' //bt off
- websocket.active = false
+ bluetooth.stop_discovery()
}
}
- function sendSocketMesage(verb, parameter) {
- var requestJson = [msgid_enu.call, payloadLength, api_str + '/'
- + verb, parameter]
- websocket.sendTextMessage(JSON.stringify(requestJson))
- }
ListModel {
id: pairedDeviceList
}
@@ -211,49 +150,25 @@ SettingPage {
id: buttonScan
anchors.centerIn: parent
width: 100
- text: "SEARCH" //default value is SEARCH
+ text: bluetooth.discoverable ? "STOP" :"SEARCH"
MouseArea {
//id: mouseArea
anchors.fill: parent
onClicked: {
- if (buttonScan.text == "SEARCH"){
- if (btState == 'on'){ //only response to the requirement when bt is on
- request(btAPIpath + 'start_discovery', function (o) {
-
- // log the json response
- console.log(o.responseText)
- })
- buttonScan.text = "STOP"
- currentState = 'discovering'
- }
- }else{
- request(btAPIpath + 'stop_discovery', function (o) {
- // log the json response
- console.log(o.responseText)
- })
- buttonScan.text = "SEARCH"
- currentState = 'idle'
+ if (bluetooth.discoverable === false && bluetooth.power === true) {
+ bluetooth.start_discovery()
+ bluetooth.discoverable = true;
+ } else {
+ bluetooth.stop_discovery()
+ bluetooth.discoverable = false;
}
}
}
}
}
- function request(url, callback) {
- var xhr = new XMLHttpRequest()
- xhr.onreadystatechange = (function (myxhr) {
- return function () {
- if (xhr.readyState == 4 && xhr.status == 200){
- callback(myxhr)
- }
- }
- })(xhr)
- xhr.open('GET', url, false)
- xhr.send('')
- }
-
Component {
id:blueToothDevice
Rectangle {
@@ -282,33 +197,25 @@ SettingPage {
id: btStatus
property string connectionState:""
text: {
- if ((devicePairable === "True")
+ if ((devicePairable === "True")
&& (deviceConnect === "True")
&& (connectAVP === "True")
&& (connectHFP === "False"))
text = " AV Connection, "
- else if ((devicePairable === "True")
- && (deviceConnect === "True")
- && (connectHFP === "True")
- && (connectAVP === "False"))
- text = " Handsfree Connection, "
- else if ((devicePairable === "True")
+ else if ((devicePairable === "True")
+ && (deviceConnect === "True")
+ && (connectHFP === "True")
+ && (connectAVP === "False"))
+ text = " Handsfree Connection, "
+ else if ((devicePairable === "True")
&& (deviceConnect === "True")
&& (connectHFP === "True")
&& (connectAVP === "True"))
text = " Handsfree & AV Connection, "
- else
- text = connectionState
- if (initDevice === "Y")
- {
- textToShow = text
- text = deviceAddress + text
- initDevice = 'N'
- }
- else
- {
- text = deviceAddress + textToShow
- }
+ else
+ text = connectionState
+
+ text = deviceAddress + text
}
font.pixelSize: 18
color: "#ffffff"
@@ -337,15 +244,13 @@ SettingPage {
MouseArea {
anchors.fill: parent
onClicked: {
- request(btAPIpath + 'remove_device?value=' + deviceAddress, function (o) {
- console.log(o.responseText)
- })
- if (findDevice(deviceAddress) >= 0)
+ bluetooth.remove_device(deviceAddress);
+ if (findDevice(deviceAddress) != -1) {
btDeviceList.remove(findDevice(deviceAddress))
- else if (findPairDevice(deviceAddress) >= 0){
- pairedDeviceList.remove(findPairDevice(deviceAddress))
- pairedDeviceCount=pairedDeviceCount-1
- }
+ } else if (findPairDevice(deviceAddress) != -1) {
+ pairedDeviceList.remove(findPairDevice(deviceAddress))
+ pairedDeviceCount = pairedDeviceCount - 1
+ }
}
}
}
@@ -357,52 +262,28 @@ SettingPage {
anchors.right: removeButton.left
anchors.rightMargin: 10
- text:(deviceConnect == "True")? "Disconnect":((btPairable.text == "True")? "Connect":"Pair")
+ text: (deviceConnect == "True") ? "Disconnect" : ((btPairable.text == "True") ? "Connect" : "Pair")
// only when HFP or AVP is connected, button will be shown as Disconnect
MouseArea {
anchors.fill: parent
onClicked: {
- if (currentState == 'discovering'){
- request(btAPIpath + 'stop_discovery', function (o) {
- currentState = "idle"
- console.log(o.responseText)
- })
- }
if (connectButton.text == "Pair"){
connectButton.text = "Connect"
- request(btAPIpath + 'pair?value=' + deviceAddress, function (o) {
+ bluetooth.pair(deviceAddress)
btPairable.text = "True"
- console.log(o.responseText)
- })
- request(btAPIpath + 'set_device_property?Address=' + deviceAddress + '\&Property=Trusted\&value=true', function (o) {
- console.log(o.responseText)
- })
}
else if (connectButton.text == "Connect"){
connectButton.text = "Disconnect"
- request(btAPIpath + 'connect?value=' + deviceAddress, function (o) {
- console.log(o.responseText)
- })
+ bluetooth.connect(deviceAddress)
}
else if (connectButton.text == "Disconnect"){
- request(btAPIpath + 'disconnect?value=' + deviceAddress, function (o) {
- console.log(o.responseText)
- })
+ bluetooth.disconnect(deviceAddress)
connectButton.text = "Connect"
}
}
}
}
}
-
- /* Image {
- source: '../images/HMI_Settings_DividingLine.svg'
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.top: parent.top
- anchors.topMargin: -15
-
- visible: model.index > 0
- }*/
}
}
Text {
@@ -416,10 +297,10 @@ SettingPage {
color:'grey'
font.pixelSize: 30
text:{
- if(btOn == true && pairedDeviceCount!=0)
- "LIST OF PAIRED DEVICES"
+ if (bluetooth.power == true && pairedDeviceCount != 0)
+ "LIST OF PAIRED DEVICES"
else
- ""
+ ""
}
}
ListView{
@@ -437,20 +318,20 @@ SettingPage {
anchors.left: parent.left
anchors.leftMargin: 80
height: 5
- source: (btOn == true && pairedDeviceCount!=0)?'../images/HMI_Settings_DividingLine.svg':''
+ source: (bluetooth.power === true && pairedDeviceCount != 0) ? '../images/HMI_Settings_DividingLine.svg':''
}
Text {
id: detectedlabel
width: parent.width
anchors.top: pairedListView.bottom
- anchors.topMargin: (pairedDeviceCount!=0)? 80:-80
+ anchors.topMargin: (pairedDeviceCount != 0) ? 80:-80
anchors.left: parent.left
anchors.leftMargin: 80
height: 80
color:'grey'
font.pixelSize: 30
text: {
- if (btOn == true)
+ if (bluetooth.power === true)
"LIST OF DETECTED DEVICES"
else
""
@@ -467,29 +348,18 @@ SettingPage {
clip: true
}
- function checkBluetooth() {
- request(btAPIpath + 'power', function (o) {
- // log the json response
- var msg = JSON.parse(o.responseText)
- console.log(o.responseText)
- checked = msg.response.power == "on"
- })
- }
-
- function findDevice(address){
+ function findDevice(address) {
for (var i = 0; i < btDeviceList.count; i++) {
- if (address === btDeviceList.get(i).deviceAddress){
+ if (address === btDeviceList.get(i).deviceAddress)
return i
- }
- }
+ }
return -1
}
function findPairDevice(address){
for (var i = 0; i < pairedDeviceList.count; i++) {
- if (address === pairedDeviceList.get(i).deviceAddress){
+ if (address === pairedDeviceList.get(i).deviceAddress)
return i
- }
- }
+ }
return -1
}
@@ -500,8 +370,6 @@ SettingPage {
btDeviceList.get(i).devicePairable = data.Paired
if (data.Paired === "True")
{
- //console.log("connectButton " + btDeviceList.get(i).btStatus)
- //ALCZbtDeviceList.get(i).connectButton.text = "Connect"
pairedDeviceList.append({
deviceAddress: btDeviceList.get(i).deviceAddress,
deviceName: btDeviceList.get(i).deviceName,
@@ -511,8 +379,8 @@ SettingPage {
connectHFP: btDeviceList.get(i).connectHFP,
textToShow: ""
})
- pairedDeviceCount=pairedDeviceCount+1
- btDeviceList.remove(i,1)
+ pairedDeviceCount = pairedDeviceCount + 1
+ btDeviceList.remove(i, 1)
btDeviceList.layoutChanged()
}
else{
@@ -520,9 +388,7 @@ SettingPage {
btDeviceList.set(i, {
textToShow: " " + text
})
- console.log("iamhere" + btDeviceList.get(i).deviceAddress + data.Paired)
- //btDeviceList.get(i).btStatus = text + btDeviceList.get(i).deviceAddress //btDeviceList.get(i).textToShow
btDeviceList.layoutChanged()
btDeviceList.get(i).deviceConnect = data.Connected
@@ -536,22 +402,17 @@ SettingPage {
pairedDeviceList.get(i).devicePairable = data.Paired
text=deviceConnectionAttribute(data)
- pairedDeviceList.set(i, {
- textToShow: " " + text
- })
- // console.log("iamhere" + btDeviceList.get(i).deviceAddress + data.Paired)
+ pairedDeviceList.set(i, { textToShow: " " + text })
- //btDeviceList.get(i).btStatus = text + btDeviceList.get(i).deviceAddress //btDeviceList.get(i).textToShow
pairedDeviceList.layoutChanged()
pairedDeviceList.get(i).deviceConnect = data.Connected
- // console.log(data.Connected)
}
}
}
function deviceConnectionAttribute(data){
- var text=""
+ var text = ""
if ((data.Paired === "True")
&& (data.Connected === "True")
&& (data.AVPConnected === "True")
@@ -572,50 +433,4 @@ SettingPage {
text = ""
return text
}
-
- function initBTlist(){
- pairedDeviceCount=0
- request(btAPIpath + 'discovery_result', function (o) {
-
- // log the json response
- console.log(o.responseText)
-
- // translate response into object
- var jsonObject = eval('(' + o.responseText + ')')
-
- jsonObjectBT = eval('(' + JSON.stringify(
- jsonObject.response) + ')')
-
- console.log("BT list refreshed")
-
- //console.log(jsonObject.response)
- for (var i = 0; i < jsonObjectBT.length; i++) {
- initDevice = 'Y'
- console.log(jsonObjectBT[i].Paired)
- if(jsonObjectBT[i].Paired==="True"){
- pairedDeviceList.append({
- deviceAddress: jsonObjectBT[i].Address,
- deviceName: jsonObjectBT[i].Name,
- devicePairable:jsonObjectBT[i].Paired,
- deviceConnect: jsonObjectBT[i].Connected,
- connectAVP: jsonObjectBT[i].AVPConnected,
- connectHFP: jsonObjectBT[i].HFPConnected,
- textToShow: ""
- })
- pairedDeviceCount=pairedDeviceCount+1
- }
- else
- btDeviceList.append({
- deviceAddress: jsonObjectBT[i].Address,
- deviceName: jsonObjectBT[i].Name,
- devicePairable:jsonObjectBT[i].Paired,
- deviceConnect: jsonObjectBT[i].Connected,
- connectAVP: jsonObjectBT[i].AVPConnected,
- connectHFP: jsonObjectBT[i].HFPConnected,
- textToShow: ""
- })
- }
- })
- }
- }
-
+}
diff --git a/app/main.cpp b/app/main.cpp
index 3b0d1e9..7ad569f 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -27,6 +27,7 @@
#include <QtQuickControls2/QQuickStyle>
#include <QQuickWindow>
#include <libhomescreen.hpp>
+#include <bluetooth.h>
#include <qlibwindowmanager.h>
class DBus : public QObject
@@ -72,14 +73,8 @@ int main(int argc, char *argv[])
}
int port = positionalArguments.takeFirst().toInt();
QString secret = positionalArguments.takeFirst();
- QUrl bindingAddress;
- bindingAddress.setScheme(QStringLiteral("http"));
- bindingAddress.setHost(QStringLiteral("localhost"));
- bindingAddress.setPort(port);
- bindingAddress.setPath(QStringLiteral("/api"));
QUrlQuery query;
query.addQueryItem(QStringLiteral("token"), secret);
- //bindingAddress.setQuery(query);
QUrl bindingAddressWS;
bindingAddressWS.setScheme(QStringLiteral("ws"));
@@ -88,7 +83,6 @@ int main(int argc, char *argv[])
bindingAddressWS.setPath(QStringLiteral("/api"));
bindingAddressWS.setQuery(query);
QQmlContext *context = engine.rootContext();
- context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress);
context->setContextProperty(QStringLiteral("bindingAddressWS"), bindingAddressWS);
std::string token = secret.toStdString();
@@ -146,6 +140,7 @@ int main(int argc, char *argv[])
DBus dbus;
engine.rootContext()->setContextProperty("dbus", &dbus);
+ engine.rootContext()->setContextProperty("bluetooth", new Bluetooth(bindingAddressWS));
engine.load(QUrl(QStringLiteral("qrc:/Settings.qml")));
QObject *root = engine.rootObjects().first();
QQuickWindow *window = qobject_cast<QQuickWindow *>(root);