| 
				
			 | 
			
			
				
				@@ -65,6 +65,7 @@ scale, buffering and interpreting the response, and signaling new measurements. 
			 | 
		
		
	
		
			
			| 
				65
			 | 
			
				65
			 | 
			
			
				
				 #define TypicaScaleInclude 
			 | 
		
		
	
		
			
			| 
				66
			 | 
			
				66
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				67
			 | 
			
				67
			 | 
			
			
				
				 #include "3rdparty/qextserialport/src/qextserialport.h" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				68
			 | 
			
			
				
				+#include "units.h" 
			 | 
		
		
	
		
			
			| 
				68
			 | 
			
				69
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				69
			 | 
			
				70
			 | 
			
			
				
				 class SerialScale : public QextSerialPort 
			 | 
		
		
	
		
			
			| 
				70
			 | 
			
				71
			 | 
			
			
				
				 { 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -89,6 +90,8 @@ a signal to buffer data.. 
			 | 
		
		
	
		
			
			| 
				89
			 | 
			
				90
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				90
			 | 
			
				91
			 | 
			
			
				
				 @(scale.cpp@>= 
			 | 
		
		
	
		
			
			| 
				91
			 | 
			
				92
			 | 
			
			
				
				 #include "scale.h" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				93
			 | 
			
			
				
				+#include <QStringList> 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				94
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				92
			 | 
			
				95
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				93
			 | 
			
				96
			 | 
			
			
				
				 SerialScale::SerialScale(const QString &port) : 
			 | 
		
		
	
		
			
			| 
				94
			 | 
			
				97
			 | 
			
			
				
				 	QextSerialPort(port, QextSerialPort::EventDriven) 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -158,11 +161,11 @@ else if(responseParts[1] == "kg") 
			 | 
		
		
	
		
			
			| 
				158
			 | 
			
				161
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				159
			 | 
			
				162
			 | 
			
			
				
				 else if(responseParts[1] == "g") 
			 | 
		
		
	
		
			
			| 
				160
			 | 
			
				163
			 | 
			
			
				
				 { 
			 | 
		
		
	
		
			
			| 
				161
			 | 
			
				
			 | 
			
			
				
				-	unit = Units::gram; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				164
			 | 
			
			
				
				+	unit = Units::Gram; 
			 | 
		
		
	
		
			
			| 
				162
			 | 
			
				165
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				163
			 | 
			
				166
			 | 
			
			
				
				 else if(responseParts[1] == "oz") 
			 | 
		
		
	
		
			
			| 
				164
			 | 
			
				167
			 | 
			
			
				
				 { 
			 | 
		
		
	
		
			
			| 
				165
			 | 
			
				
			 | 
			
			
				
				-	unit = Units::ounce; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				168
			 | 
			
			
				
				+	unit = Units::Ounce; 
			 | 
		
		
	
		
			
			| 
				166
			 | 
			
				169
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				167
			 | 
			
				170
			 | 
			
			
				
				 emit newMeasurement(weight, unit); 
			 | 
		
		
	
		
			
			| 
				168
			 | 
			
				171
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -176,7 +179,57 @@ void SerialScale::tare() 
			 | 
		
		
	
		
			
			| 
				176
			 | 
			
				179
			 | 
			
			
				
				 	write("!KT\x0D"); 
			 | 
		
		
	
		
			
			| 
				177
			 | 
			
				180
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				178
			 | 
			
				181
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				179
			 | 
			
				
			 | 
			
			
				
				-void SerialScale::weight() 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				182
			 | 
			
			
				
				+void SerialScale::weigh() 
			 | 
		
		
	
		
			
			| 
				180
			 | 
			
				183
			 | 
			
			
				
				 { 
			 | 
		
		
	
		
			
			| 
				181
			 | 
			
				184
			 | 
			
			
				
				 	write("!KP\x0D"); 
			 | 
		
		
	
		
			
			| 
				182
			 | 
			
				185
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				186
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				187
			 | 
			
			
				
				+@ This must be available to the host environment. 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				188
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				189
			 | 
			
			
				
				+@<Function prototypes for scripting@>= 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				190
			 | 
			
			
				
				+QScriptValue constructSerialScale(QScriptContext *context, QScriptEngine *engine); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				191
			 | 
			
			
				
				+void setSerialScaleProperties(QScriptValue value, QScriptEngine *engine); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				192
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				193
			 | 
			
			
				
				+@ These functions are made known to the scripting engine in the usual way. 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				194
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				195
			 | 
			
			
				
				+@<Set up the scripting engine@>= 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				196
			 | 
			
			
				
				+constructor = engine->newFunction(constructSerialScale); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				197
			 | 
			
			
				
				+value = engine->newQMetaObject(&SerialScale::staticMetaObject, constructor); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				198
			 | 
			
			
				
				+engine->globalObject().setProperty("SerialScale", value); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				199
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				200
			 | 
			
			
				
				+@ In order to make this class available to the host environment, we must also 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				201
			 | 
			
			
				
				+include the appropriate header file. 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				202
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				203
			 | 
			
			
				
				+@<Header files to include@>= 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				204
			 | 
			
			
				
				+#include "scale.h" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				205
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				206
			 | 
			
			
				
				+@ Most of the properties of interest should be added automatically, however 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				207
			 | 
			
			
				
				+there are non-slot methods in |QIODevice| that we require. 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				208
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				209
			 | 
			
			
				
				+@<Functions for scripting@>= 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				210
			 | 
			
			
				
				+void setSerialScaleProperties(QScriptValue value, QScriptEngine *engine) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				211
			 | 
			
			
				
				+{ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				212
			 | 
			
			
				
				+	setQIODeviceProperties(value, engine); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				213
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				214
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				215
			 | 
			
			
				
				+@ The script constructor should seem familiar. 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				216
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				217
			 | 
			
			
				
				+@<Functions for scripting@>= 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				218
			 | 
			
			
				
				+QScriptValue constructSerialScale(QScriptContext *context, QScriptEngine *engine) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				219
			 | 
			
			
				
				+{ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				220
			 | 
			
			
				
				+	QScriptValue object; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				221
			 | 
			
			
				
				+	if(context->argumentCount() == 1) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				222
			 | 
			
			
				
				+	{ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				223
			 | 
			
			
				
				+		object = engine->newQObject(new SerialScale(argument<QString>(0, context))); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				224
			 | 
			
			
				
				+		setSerialScaleProperties(object, engine); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				225
			 | 
			
			
				
				+	} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				226
			 | 
			
			
				
				+	else 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				227
			 | 
			
			
				
				+	{ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				228
			 | 
			
			
				
				+		context->throwError("Incorrect number of arguments passed to " 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				229
			 | 
			
			
				
				+		                    "SerialScale. The constructor takes one string " 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				230
			 | 
			
			
				
				+		                    "as an argument specifying a port name."); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				231
			 | 
			
			
				
				+	} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				232
			 | 
			
			
				
				+	return object; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				233
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				234
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				235
			 | 
			
			
				
				+@ While the |SerialScale| class will always  
			 |