diff options
Diffstat (limited to 'metawatch')
| -rw-r--r-- | metawatch/metawatch.cpp | 60 | ||||
| -rw-r--r-- | metawatch/metawatch.h | 46 | ||||
| -rw-r--r-- | metawatch/metawatchdigital.cpp | 32 | ||||
| -rw-r--r-- | metawatch/metawatchdigital.h | 1 | 
4 files changed, 58 insertions, 81 deletions
diff --git a/metawatch/metawatch.cpp b/metawatch/metawatch.cpp index 4a57174..8c246aa 100644 --- a/metawatch/metawatch.cpp +++ b/metawatch/metawatch.cpp @@ -90,12 +90,9 @@ MetaWatch::MetaWatch(const QBluetoothAddress& address, QSettings* settings, QObj  	_sendTimer(new QTimer(this))  {  	if (settings) { +		_notificationTimeout = settings->value("NotificationTimeout", 15).toInt();  		_24hMode = settings->value("24hMode", false).toBool();  		_dayMonthOrder = settings->value("DayMonthOrder", false).toBool(); -		_notificationTimeout = settings->value("NotificationTimeout", 15).toInt(); -		_invertedIdle = settings->value("InvertedIdleScreen", false).toBool(); -		_invertedNotifications = settings->value("InvertedNotifications", false).toBool(); -		_invertedApplications = settings->value("InvertedApplications", false).toBool();  	}  	_buttonNames << "A" << "B" << "C" << "D" << "E" << "F"; @@ -161,7 +158,7 @@ QDateTime MetaWatch::dateTime()  void MetaWatch::setDateTime(const QDateTime &dateTime)  { -	Message msg(SetRealTimeClock, QByteArray(10, 0)); +	Message msg(SetRealTimeClock, QByteArray(8, 0));  	const QDate& date = dateTime.date();  	const QTime& time = dateTime.time(); @@ -174,8 +171,6 @@ void MetaWatch::setDateTime(const QDateTime &dateTime)  	msg.data[5] = time.hour();  	msg.data[6] = time.minute();  	msg.data[7] = time.second(); -	msg.data[8] = _24hMode ? 1 : 0; -	msg.data[9] = _dayMonthOrder ? 1 : 0;  	send(msg);  } @@ -190,6 +185,13 @@ void MetaWatch::ungrabButton(int button)  	ungrabButton(_currentMode, (Button) button);  } +void MetaWatch::updateNotificationCount(Notification::Type type, int count) +{ +	Q_UNUSED(type); +	Q_UNUSED(count); +	// Default implementation does nothing +} +  void MetaWatch::displayIdleScreen()  {  	_currentMode = IdleMode; @@ -294,10 +296,10 @@ void MetaWatch::handleMessage(const Message &msg)  {  	switch (msg.type) {  	case StatusChangeEvent: -		handleStatusChange(msg); +		handleStatusChangeMessage(msg);  		break;  	case ButtonEvent: -		handleButtonEvent(msg); +		handleButtonEventMessage(msg);  		break;  	default:  		qWarning() << "Unknown message of type" << msg.type << "received"; @@ -319,9 +321,9 @@ void MetaWatch::setVibrateMode(bool enable, uint on, uint off, uint cycles)  	send(msg);  } -void MetaWatch::updateLine(Mode mode, const QImage& image, int line) +void MetaWatch::updateLcdLine(Mode mode, const QImage& image, int line)  { -	Message msg(WriteBuffer, QByteArray(13, 0), (1 << 4) | (mode & 0xF)); +	Message msg(WriteLcdBuffer, QByteArray(13, 0), (1 << 4) | (mode & 0xF));  	const char * scanLine = (const char *) image.constScanLine(line);  	msg.data[0] = line; @@ -330,9 +332,9 @@ void MetaWatch::updateLine(Mode mode, const QImage& image, int line)  	send(msg);  } -void MetaWatch::updateLines(Mode mode, const QImage& image, int lineA, int lineB) +void MetaWatch::updateLcdLines(Mode mode, const QImage& image, int lineA, int lineB)  { -	Message msg(WriteBuffer, QByteArray(26, 0), mode & 0xF); +	Message msg(WriteLcdBuffer, QByteArray(26, 0), mode & 0xF);  	const char * scanLine = (const char *) image.constScanLine(lineA);  	msg.data[0] = lineA; @@ -345,7 +347,7 @@ void MetaWatch::updateLines(Mode mode, const QImage& image, int lineA, int lineB  	send(msg);  } -void MetaWatch::updateLines(Mode mode, const QImage& image, const QVector<bool>& lines) +void MetaWatch::updateLcdLines(Mode mode, const QImage& image, const QVector<bool>& lines)  {  	int lineCount = lines.count(true);  	int lineA = -1; @@ -358,18 +360,18 @@ void MetaWatch::updateLines(Mode mode, const QImage& image, const QVector<bool>&  		if (lines[line]) {  			lineCount--;  #if SINGLE_LINE_UPDATE -			updateLine(mode, image, line); +			updateLcdLine(mode, image, line);  			continue;  #endif  			if (lineA >= 0) {  				// We have a pair of lines to send. -				updateLines(mode, image, lineA, line); +				updateLcdLines(mode, image, lineA, line);  				lineA = -1;  			} else if (lineCount > 0) {  				// Still another line to send.  				lineA = line;  			} else { -				updateLine(mode, image, line); +				updateLcdLine(mode, image, line);  				break; // No more lines  			}  		} @@ -378,31 +380,23 @@ void MetaWatch::updateLines(Mode mode, const QImage& image, const QVector<bool>&  } -void MetaWatch::configureWatchMode(Mode mode, int timeout, bool invert) -{ -	Message msg(ConfigureMode, QByteArray(2, 0), mode & 0xF); -	msg.data[0] = timeout; -	msg.data[1] = invert ? 1 : 0; -	send(msg); -} - -void MetaWatch::configureIdleSystemArea(bool entireScreen) +void MetaWatch::configureLcdIdleSystemArea(bool entireScreen)  { -	Message msg(ConfigureIdleBufferSize, QByteArray(26, 0)); +	Message msg(ConfigureLcdIdleBufferSize, QByteArray(26, 0));  	msg.data[0] = entireScreen ? 1 : 0;  	send(msg);  } -void MetaWatch::updateDisplay(Mode mode, bool copy) +void MetaWatch::updateLcdDisplay(Mode mode, bool copy)  { -	Message msg(UpdateDisplay, QByteArray(), +	Message msg(UpdateLcdDisplay, QByteArray(),  				(copy ? 0x10 : 0) | (mode & 0xF));  	send(msg);  } -void MetaWatch::loadTemplate(Mode mode, int templ) +void MetaWatch::loadLcdTemplate(Mode mode, int templ)  { -	Message msg(LoadTemplate, QByteArray(1, templ), mode & 0xF); +	Message msg(LoadLcdTemplate, QByteArray(1, templ), mode & 0xF);  	send(msg);  } @@ -434,13 +428,13 @@ void MetaWatch::disableButton(Mode mode, Button button, ButtonPress press)  	send(msg);  } -void MetaWatch::handleStatusChange(const Message &msg) +void MetaWatch::handleStatusChangeMessage(const Message &msg)  {  	Q_UNUSED(msg);  	qDebug() << "got status change message";  } -void MetaWatch::handleButtonEvent(const Message &msg) +void MetaWatch::handleButtonEventMessage(const Message &msg)  {  	if (!(msg.options & 0x80)) {  		// We didn't configure this button, reject. diff --git a/metawatch/metawatch.h b/metawatch/metawatch.h index 9c4680b..badfa83 100644 --- a/metawatch/metawatch.h +++ b/metawatch/metawatch.h @@ -32,28 +32,33 @@ public:  		GetDeviceTypeResponse = 0x02,  		GetInformationString = 0x03,  		GetInformationStringResponse = 0x04, +		WriteOledBuffer = 0x10, +		ChangeOledMode = 0x12, +		WriteOledScrollBuffer = 0x13,  		AdvanceWatchHands = 0x20,  		SetVibrateMode = 0x23,  		SetRealTimeClock = 0x26,  		GetRealTimeClock = 0x27,  		GetRealTimeClockResponse = 0x28, +		NvalOperation = 0x30, +		NvalOperationResponse = 0x31,  		StatusChangeEvent = 0x33,  		ButtonEvent = 0x34, -		WriteBuffer = 0x40, -		ConfigureMode = 0x41, -		ConfigureIdleBufferSize = 0x42, -		UpdateDisplay = 0x43, -		LoadTemplate = 0x44, +		GeneralPurposePhone = 0x35, +		GeneralPurposeWatch = 0x36, +		WriteLcdBuffer = 0x40, +		ConfigureLcdIdleBufferSize = 0x42, +		UpdateLcdDisplay = 0x43, +		LoadLcdTemplate = 0x44,  		EnableButton = 0x46,  		DisableButton = 0x47, -		ReadButtonConfiguration = 0x48, -		ReadButtonConfigurationResponse = 0x49,  		BatteryConfiguration = 0x53,  		LowBatteryWarning = 0x54,  		LowBatteryBluetoothOff = 0x55,  		ReadBatteryVoltage = 0x56,  		ReadBatteryVoltageResponse = 0x57, -		Accelerometer = 0xea +		ReadLightSensor = 0x58, +		ReadLightSensorResponse = 0x59  	};  	enum Mode { @@ -113,12 +118,9 @@ public:  protected:  	// Some configurable stuff. +	short _notificationTimeout;  	bool _24hMode : 1;  	bool _dayMonthOrder : 1; -	bool _invertedIdle : 1; -	bool _invertedNotifications : 1; -	bool _invertedApplications : 1; -	short _notificationTimeout;  	// Notifications: timers  	QTimer* _idleTimer; @@ -170,22 +172,22 @@ protected:  	void send(const Message& msg);  	void setVibrateMode(bool enable, uint on, uint off, uint cycles); -	void updateLine(Mode mode, const QImage& image, int line); -	void updateLines(Mode mode, const QImage& image, int lineA, int lineB); -	void updateLines(Mode mode, const QImage& image, const QVector<bool>& lines); -	void configureWatchMode(Mode mode, int timeout, bool invert); -	void configureIdleSystemArea(bool entireScreen); -	void updateDisplay(Mode mode, bool copy = true); -	void loadTemplate(Mode mode, int templ); +	void updateLcdLine(Mode mode, const QImage& image, int line); +	void updateLcdLines(Mode mode, const QImage& image, int lineA, int lineB); +	void updateLcdLines(Mode mode, const QImage& image, const QVector<bool>& lines); +	void configureLcdIdleSystemArea(bool entireScreen); +	void updateLcdDisplay(Mode mode, bool copy = true); +	void loadLcdTemplate(Mode mode, int templ);  	void enableButton(Mode mode, Button button, ButtonPress press);  	void disableButton(Mode mode, Button button, ButtonPress press); +	void handleMessage(const Message& msg); +	void handleStatusChangeMessage(const Message& msg); +	void handleButtonEventMessage(const Message& msg); +  	virtual void handleWatchConnected() = 0; -	virtual void handleStatusChange(const Message& msg); -	virtual void handleButtonEvent(const Message& msg);  private slots: -	void handleMessage(const Message& msg);  	void socketConnected();  	void socketDisconnected();  	void socketData(); diff --git a/metawatch/metawatchdigital.cpp b/metawatch/metawatchdigital.cpp index 2a25249..a4bb833 100644 --- a/metawatch/metawatchdigital.cpp +++ b/metawatch/metawatchdigital.cpp @@ -12,8 +12,6 @@ MetaWatchDigital::MetaWatchDigital(const QBluetoothAddress& address, QSettings*  	_image[IdleMode] = baseImage;  	_image[ApplicationMode] = baseImage;  	_image[NotificationMode] = baseImage; - -  }  int MetaWatchDigital::metric(PaintDeviceMetric metric) const @@ -81,14 +79,11 @@ void MetaWatchDigital::displayIdleScreen()  	MetaWatch::displayIdleScreen();  	// Usually, idle screen is kept updated, so we can flip it right away. -	updateDisplay(IdleMode); +	updateLcdDisplay(IdleMode);  }  void MetaWatchDigital::displayNotification(Notification *n)  { -	const bool isCall = n->type() == Notification::CallNotification; -	configureWatchMode(NotificationMode, isCall ? 120 : 10, _invertedNotifications); -  	qDebug() << "display notification" << n->title() << n->body();  	// Render the notification and display it before invoking haptic feedback @@ -101,7 +96,7 @@ void MetaWatchDigital::displayNotification(Notification *n)  void MetaWatchDigital::displayApplication()  {  	qDebug() << "entering application mode"; -	configureWatchMode(ApplicationMode, 250, _invertedApplications); +  	MetaWatch::displayApplication();  } @@ -118,16 +113,16 @@ void MetaWatchDigital::update(Mode mode, const QList<QRect> &rects)  		}  	} -	updateLines(mode, _image[mode], lines); +	updateLcdLines(mode, _image[mode], lines);  	if (mode == _currentMode) { -		updateDisplay(mode); +		updateLcdDisplay(mode);  	}  }  void MetaWatchDigital::clear(Mode mode, bool black)  {  	if (!_connected) return; -	loadTemplate(mode, black ? 1 : 0); +	loadLcdTemplate(mode, black ? 1 : 0);  }  void MetaWatchDigital::renderIdleScreen() @@ -198,16 +193,6 @@ void MetaWatchDigital::renderIdleCounts()  	_paintMode = _currentMode;  } -void MetaWatchDigital::renderNotificationScreen() -{ -	_paintMode = NotificationMode; -	QPainter p(this); - -	p.fillRect(0, 0, screenWidth, screenHeight, Qt::white); - -	_paintMode = _currentMode; -} -  void MetaWatchDigital::renderNotification(Notification *n)  {  	_paintMode = NotificationMode; @@ -301,11 +286,8 @@ QImage MetaWatchDigital::iconForNotification(const Notification *n)  void MetaWatchDigital::handleWatchConnected()  {  	// Configure to show watch-rendered clock in idle screen -	configureIdleSystemArea(false); -	// Follow inverted screen user preference -	configureWatchMode(IdleMode, 0, _invertedIdle); +	configureLcdIdleSystemArea(false); -	// Render the idle screen from zero +	// Render the idle screen assuming previous contents were lost  	renderIdleScreen(); -	renderNotificationScreen();  } diff --git a/metawatch/metawatchdigital.h b/metawatch/metawatchdigital.h index c75fc40..0754242 100644 --- a/metawatch/metawatchdigital.h +++ b/metawatch/metawatchdigital.h @@ -39,7 +39,6 @@ protected:  	void renderIdleWeather();  	void renderIdleCounts(); -	void renderNotificationScreen();  	void renderNotification(Notification *n);  	QImage iconForNotification(const Notification *n);  };  | 
