From 29aaea2d80a9eb1715b6cddfac2d2aacf76358bd Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 11 Feb 2016 23:55:16 +0100 Subject: launchpad ~mzanetti/rockwork/trunk r87 --- rockworkd/libpebble/phonecallendpoint.cpp | 71 +++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 rockworkd/libpebble/phonecallendpoint.cpp (limited to 'rockworkd/libpebble/phonecallendpoint.cpp') diff --git a/rockworkd/libpebble/phonecallendpoint.cpp b/rockworkd/libpebble/phonecallendpoint.cpp new file mode 100644 index 0000000..afd869d --- /dev/null +++ b/rockworkd/libpebble/phonecallendpoint.cpp @@ -0,0 +1,71 @@ +#include "phonecallendpoint.h" + +#include "pebble.h" +#include "watchconnection.h" +#include "watchdatareader.h" + +PhoneCallEndpoint::PhoneCallEndpoint(Pebble *pebble, WatchConnection *connection): + QObject(pebble), + m_pebble(pebble), + m_connection(connection) +{ + m_connection->registerEndpointHandler(WatchConnection::EndpointPhoneControl, this, "handlePhoneEvent"); +} + +void PhoneCallEndpoint::incomingCall(uint cookie, const QString &number, const QString &name) +{ + QStringList tmp; + tmp.append(number); + tmp.append(name); + + char act = CallActionIncoming; + // FIXME: Outgoing calls don't seem to work... Maybe something wrong in the enum? +// if (!incoming) { +// act = CallActionOutgoing; +// } + + phoneControl(act, cookie, tmp); + +} + +void PhoneCallEndpoint::callStarted(uint cookie) +{ + phoneControl(CallActionStart, cookie, QStringList()); +} + +void PhoneCallEndpoint::callEnded(uint cookie, bool missed) +{ + Q_UNUSED(missed) + // FIXME: The watch doesn't seem to react on Missed... So let's always "End" it for now +// phoneControl(missed ? CallActionMissed : CallActionEnd, cookie, QStringList()); + phoneControl(CallActionEnd, cookie, QStringList()); +} + +void PhoneCallEndpoint::phoneControl(char act, uint cookie, QStringList datas) +{ + QByteArray head; + head.append((char)act); + head.append((cookie >> 24)& 0xFF); + head.append((cookie >> 16)& 0xFF); + head.append((cookie >> 8)& 0xFF); + head.append(cookie & 0xFF); + if (datas.length()>0) { + head.append(m_connection->buildData(datas)); + } + + m_connection->writeToPebble(WatchConnection::EndpointPhoneControl, head); +} + +void PhoneCallEndpoint::handlePhoneEvent(const QByteArray &data) +{ + + WatchDataReader reader(data); + reader.skip(1); + uint cookie = reader.read(); + + if (data.at(0) == CallActionHangup) { + emit hangupCall(cookie); + } else { + qWarning() << "received an unhandled phone event" << data.toHex(); + } +} -- cgit v1.2.3