test

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Revision:
9:a7bd5ae66d6d
Parent:
8:32be16b1eaf2
Child:
10:95c1e5a218d5
--- a/main.cpp	Tue Nov 24 03:46:06 2015 +0000
+++ b/main.cpp	Tue Nov 24 09:57:19 2015 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "io.h"
 #include "BLEDevice.h"
+#include "common.h"
 
 // BLE
 #define INTERVAL_500MSEC        (500UL)
@@ -14,7 +15,7 @@
 #define MANUFACTURER_NAME_STRING        "Hacarus" // Manufacturer Name String - shall represent the name of the manufacturer of the device.
 #define MODEL_NUMBER_STRING             "0001" // Model Number String - shall represent the model number that is assigned by the device vendor.
 #define SERIAL_NUMBER_STRING            "000780c0ffeef00d"  // Serial Number String - shall represent the serial number for a particular instance of the device.
-#define FIRMWARE_REVISION_STRING        "v1.00.002@rev0008" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
+#define FIRMWARE_REVISION_STRING        "v1.00.002@rev0009" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
 
 // Weight Scale Service (Original)
 #define UUID_WEIGHT_SCALE_SERVICE       (0x181D)
@@ -45,7 +46,8 @@
 // Properties
 io io;
 Ticker tk;
-float weight = 0;
+uint32_t weight_data;
+float32_t weight = 0.0;
 uint32_t scale = 0;
 int update_counter = 0;
 int push_counter = 0;
@@ -61,7 +63,7 @@
 
 /* Weight Scale Service */
 static const uint8_t UUID_HACARUS_WEIGHT_CHAR[] = {0x00, 0x00, 0x2A, 0x9D, 0x00, 0x01, 0x00, 0x01, 0x00, 'H','a', 'c', 'a', 'r','u', 's'};
-GattCharacteristic  WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight, sizeof(weight), sizeof(weight),
+GattCharacteristic  WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight_data, sizeof(weight_data), sizeof(weight_data),
         GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
 static const uint8_t UUID_HACARUS_SCALE_CHAR[] = {0x00, 0x00, 0x2A, 0x9E, 0x00, 0x01, 0x00, 0x01, 0x00, 'H','a', 'c', 'a', 'r','u', 's'};
 GattCharacteristic  WeightScale (UUID(UUID_HACARUS_SCALE_CHAR), (uint8_t *)&scale, sizeof(scale), sizeof(scale),
@@ -109,6 +111,14 @@
     return false;
 }
 
+uint32_t quick_ieee11073_from_float(float data)
+{
+    uint8_t  exponent = 0xFE; //exponent is -2
+    uint32_t mantissa = (uint32_t)(data*100);
+    
+    return ( ((uint32_t)exponent) << 24) | mantissa;
+}
+
 void ticker_callback()
 {
     switch(led_mode){
@@ -128,16 +138,17 @@
         break;
         case MODE_ON:
             if(!check_joystick()){
-                io.display_value = (uint16_t)(io.get_weight() * 9999.0); // dummy display
+                io.analog_pow(1); // turn analog power on
+                weight = io.get_weight() * 9999.0;
+                io.display_value = (uint16_t)weight; // dummy display
                 if(++update_counter >= 5){
-                    io.analog_pow(1); // turn analog power on
-                    weight = io.get_weight() * 9999.0;
+                    weight_data = quick_ieee11073_from_float(weight);
                     ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
-                                                                    (uint8_t *)&weight,
-                                                                    sizeof(weight));
-                    io.analog_pow(0); // turn analog power off
+                                                                    (uint8_t *)&weight_data,
+                                                                    sizeof(weight_data));
                     update_counter = 0;
-                }   
+                }  
+                io.analog_pow(0); // turn analog power off 
             }else{
                 led_mode = MODE_END;
                 if(ble.getGapState().connected){