|  | @@ -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 
 |