this is a sample for mbed(LPC1768)

Revision:
0:3163adfd2cf1
diff -r 000000000000 -r 3163adfd2cf1 serialization_lib/sitewhere.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serialization_lib/sitewhere.c	Thu Nov 19 10:17:55 2015 +0800
@@ -0,0 +1,156 @@
+#include "sitewhere.h"
+#include "double_conversion.h"
+
+// Signals end of stream.
+uint8_t zero = 0;
+
+unsigned int sw_register(char* hardwareId, char* specificationToken, uint8_t* buffer, size_t length, char* originator) {
+	pb_ostream_t stream = pb_ostream_from_buffer(buffer, length);
+
+	SiteWhere_Header header = { };
+	header.command = SiteWhere_Command_REGISTER;
+	if (originator != NULL) {
+		header.has_originator = true;
+		strcpy(header.originator, originator);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Header_fields, &header)) {
+		return 0;
+	}
+
+	SiteWhere_RegisterDevice registerDevice = { };
+	strcpy(registerDevice.hardwareId, hardwareId);
+	strcpy(registerDevice.specificationToken, specificationToken);
+	if (!pb_encode_delimited(&stream, SiteWhere_RegisterDevice_fields, &registerDevice)) {
+		return 0;
+	}
+
+	return stream.bytes_written;
+}
+
+unsigned int sw_acknowledge(char* hardwareId, char* message, uint8_t* buffer, size_t length, char* originator) {
+	pb_ostream_t stream = pb_ostream_from_buffer(buffer, length);
+
+	SiteWhere_Header header = { };
+	header.command = SiteWhere_Command_ACKNOWLEDGE;
+	if (originator != NULL) {
+		header.has_originator = true;
+		strcpy(header.originator, originator);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Header_fields, &header)) {
+		return 0;
+	}
+
+	SiteWhere_Acknowledge ack = { };
+	strcpy(ack.hardwareId, hardwareId);
+	if (message != NULL) {
+		ack.has_message = true;
+		strcpy(ack.message, message);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Acknowledge_fields, &ack)) {
+		return 0;
+	}
+
+	return stream.bytes_written;
+}
+
+unsigned int sw_measurement(char* hardwareId, char* name, float value, int64_t eventDate,
+		uint8_t* buffer, size_t length, char* originator) {
+	pb_ostream_t stream = pb_ostream_from_buffer(buffer, length);
+
+	SiteWhere_Header header = { };
+	header.command = SiteWhere_Command_DEVICEMEASUREMENT;
+	if (originator != NULL) {
+		header.has_originator = true;
+		strcpy(header.originator, originator);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Header_fields, &header)) {
+		return 0;
+	}
+
+	SiteWhere_DeviceMeasurements measurements = { };
+	strcpy(measurements.hardwareId, hardwareId);
+
+	SiteWhere_Measurement measurement = { };
+	strcpy(measurement.measurementId, name);
+	measurement.measurementValue = float_to_double(value);      //there is a problem
+	//measurement.measurementValue = value; 
+	
+	measurements.measurement[0] = measurement;
+	measurements.measurement_count = 1;
+
+	if (eventDate != NULL) {
+		measurements.has_eventDate = true;
+		measurements.eventDate = eventDate;
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_DeviceMeasurements_fields, &measurements)) {
+		return 0;
+	}
+
+	return stream.bytes_written;
+}
+
+unsigned int sw_location(char* hardwareId, float lat, float lon, float ele, int64_t eventDate,
+		uint8_t* buffer, size_t length, char* originator) {
+	pb_ostream_t stream = pb_ostream_from_buffer(buffer, length);
+
+	SiteWhere_Header header = { };
+	header.command = SiteWhere_Command_DEVICELOCATION;
+	if (originator != NULL) {
+		header.has_originator = true;
+		strcpy(header.originator, originator);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Header_fields, &header)) {
+		return 0;
+	}
+
+	SiteWhere_DeviceLocation location = { };
+	strcpy(location.hardwareId, hardwareId);
+	
+	location.latitude = float_to_double(lat);                    //there is a problem
+	location.longitude = float_to_double(lon);
+	location.elevation = float_to_double(ele);
+	//location.latitude = lat;
+	//location.longitude = lon;
+	//location.elevation = ele;
+
+	location.has_elevation = true;
+
+	if (eventDate != NULL) {
+		location.has_eventDate = true;
+		location.eventDate = eventDate;
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_DeviceLocation_fields, &location)) {
+		return 0;
+	}
+
+	return stream.bytes_written;
+}
+
+unsigned int sw_alert(char* hardwareId, char* alertType, char* alertMessage, int64_t eventDate,
+		uint8_t* buffer, size_t length, char* originator) {
+	pb_ostream_t stream = pb_ostream_from_buffer(buffer, length);
+
+	SiteWhere_Header header = { };
+	header.command = SiteWhere_Command_DEVICEALERT;
+	if (originator != NULL) {
+		header.has_originator = true;
+		strcpy(header.originator, originator);
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_Header_fields, &header)) {
+		return 0;
+	}
+
+	SiteWhere_DeviceAlert alert = { };
+	strcpy(alert.hardwareId, hardwareId);
+	strcpy(alert.alertType, alertType);
+	strcpy(alert.alertMessage, alertMessage);
+	if (eventDate != NULL) {
+		alert.has_eventDate = true;
+		alert.eventDate = eventDate;
+	}
+	if (!pb_encode_delimited(&stream, SiteWhere_DeviceAlert_fields, &alert)) {
+		return 0;
+	}
+
+	return stream.bytes_written;
+}