Javascript wrappers for LSM6DSL Sensor library

Dependencies:   LSM6DSL

Dependents:   ST_SENSOR_JS

Committer:
akhtar.syedzeeshan@gmail.com
Date:
Wed Jan 17 10:56:16 2018 +0100
Revision:
6:97726929e01f
Parent:
5:4f29cb91aaef
Code fixes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 1 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 2 ******************************************************************************
akhtar.syedzeeshan@gmail.com 2:ebd484d17a02 3 * @file LSM6DSL_JS-js.cpp
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 4 * @author ST
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 5 * @version V1.0.0
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 6 * @date 9 October 2017
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 7 * @brief Implementation of an LSM6DSL Accelerometer and gyroscope sensor for
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 8 * use with Javascript.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 9 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 10 * @attention
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 11 *
akhtar.syedzeeshan@gmail.com 6:97726929e01f 12 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 13 *
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 14 * Redistribution and use in source and binary forms, with or without modification,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 15 * are permitted provided that the following conditions are met:
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 16 * 1. Redistributions of source code must retain the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 17 * this list of conditions and the following disclaimer.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 19 * this list of conditions and the following disclaimer in the documentation
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 20 * and/or other materials provided with the distribution.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 22 * may be used to endorse or promote products derived from this software
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 23 * without specific prior written permission.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 24 *
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 35 *
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 36 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 37 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 38
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 39
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 40 /* Includes ------------------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 41
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 42 #include "jerryscript-mbed-util/logging.h"
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 43 #include "jerryscript-mbed-library-registry/wrap_tools.h"
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 44
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 45 // Load the library that we'll wrap
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 46 #include "LSM6DSL_JS.h"
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 47
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 48 #include "mbed.h"
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 49
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 50 #ifdef TARGET_SENSOR_TILE
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 51 mbed::Serial pc1((PinName)0x2C, (PinName)0x32);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 52 #define printf(...) pc1.printf(__VA_ARGS__)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 53 #endif
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 54
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 55 /* Class Implementation ------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 56
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 57 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 58 * LSM6DSL_JS#destructor
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 59 * Called if/when the LSM6DSL_JS is GC'ed.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 60 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 61 void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(LSM6DSL_JS)(void *void_ptr) {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 62 delete static_cast<LSM6DSL_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 63 }
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 64
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 65
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 66 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 67 * Type infomation of the native LSM6DSL_JS pointer
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 68 * Set LSM6DSL_JS#destructor as the free callback.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 69 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 70 static const jerry_object_native_info_t native_obj_type_info = {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 71 .free_cb = NAME_FOR_CLASS_NATIVE_DESTRUCTOR(LSM6DSL_JS)
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 72 };
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 73
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 74
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 75 /**
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 76 * LSM6DSL_JS#init_spi (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 77 * @brief Initializes the sensor using SPI interface
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 78 * @param SPI object of helper class which handles the SPI peripheral
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 79 * @param CS pin
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 80 * @param INT1 pin
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 81 * @param INT2 pin
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 82 * @param SPI type
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 83 */
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 84 DECLARE_CLASS_FUNCTION(LSM6DSL_JS, init_spi) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 85 CHECK_ARGUMENT_COUNT(LSM6DSL_JS, init_spi, (args_count == 2 || args_count == 5));
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 86 CHECK_ARGUMENT_TYPE_ALWAYS(LSM6DSL_JS, init_spi, 0, object);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 87 CHECK_ARGUMENT_TYPE_ALWAYS(LSM6DSL_JS, init_spi, 1, number);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 88 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_spi, 2, number, args_count == 5);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 89 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_spi, 3, number, args_count == 5);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 90 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_spi, 4, number, args_count == 5);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 91
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 92 // Unwrap native LSM6DSL_JS object
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 93 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 94 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 95 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 96
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 97 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 98 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 99 (const jerry_char_t *) "Failed to get native LSM6DSL_JS pointer");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 100 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 101
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 102 LSM6DSL_JS *native_ptr = static_cast<LSM6DSL_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 103
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 104 // Unwrap arguments
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 105 void *spi_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 106 const jerry_object_native_info_t *spi_type_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 107 bool spi_has_ptr = jerry_get_object_native_pointer(args[0], &spi_ptr, &spi_type_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 108
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 109 // Check if we have the spi pointer
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 110 if (!spi_has_ptr) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 111 printf("Not a SPI input!");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 112 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 113 (const jerry_char_t *) "Failed to get native DigitalOut pointer");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 114 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 115
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 116 // Cast the argument to C++
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 117 SPI* spi = reinterpret_cast<SPI*>(spi_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 118
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 119 int cs_pin = jerry_get_number_value(args[1]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 120
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 121 // Call the native function
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 122 if(args_count == 2){
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 123 native_ptr->init(*spi, (PinName)cs_pin);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 124 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 125 else if(args_count == 5){
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 126 int int1_pin = jerry_get_number_value(args[2]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 127 int int2_pin = jerry_get_number_value(args[3]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 128 int spi_type = jerry_get_number_value(args[4]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 129
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 130 native_ptr->init(*spi, (PinName)cs_pin, (PinName)int1_pin, (PinName)int2_pin, spi_type);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 131 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 132
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 133 return jerry_create_number(0);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 134 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 135
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 136 /**
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 137 * LSM6DSL_JS#init_i2c (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 138 * @brief Initializes the sensor using I2C interface
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 139 * @param DevI2c object of helper class which handles the DevI2C peripheral
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 140 * @param INT1 pin
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 141 * @param INT2 pin
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 142 * @param Address
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 143 */
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 144 DECLARE_CLASS_FUNCTION(LSM6DSL_JS, init_i2c) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 145 CHECK_ARGUMENT_COUNT(LSM6DSL_JS, init_i2c, (args_count == 1 || args_count == 3 || args_count == 4));
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 146 CHECK_ARGUMENT_TYPE_ALWAYS(LSM6DSL_JS, init_i2c, 0, object);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 147 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_i2c, 1, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 148 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_i2c, 2, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 149 CHECK_ARGUMENT_TYPE_ON_CONDITION(LSM6DSL_JS, init_i2c, 3, number, args_count == 4);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 150
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 151 // Unwrap native LSM6DSL_JS object
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 152 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 153 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 154 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 155
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 156 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 157 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 158 (const jerry_char_t *) "Failed to get native LSM6DSL_JS pointer");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 159 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 160
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 161 LSM6DSL_JS *native_ptr = static_cast<LSM6DSL_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 162
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 163 // Unwrap arguments
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 164 void *i2c_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 165 const jerry_object_native_info_t *i2c_type_ptr;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 166 bool i2c_has_ptr = jerry_get_object_native_pointer(args[0], &i2c_ptr, &i2c_type_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 167
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 168 // Check if we have the i2c pointer
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 169 if (!i2c_has_ptr) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 170 printf("Not a I2C input!");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 171 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 172 (const jerry_char_t *) "Failed to get native DigitalOut pointer");
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 173 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 174
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 175 // Cast the argument to C++
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 176 DevI2C* i2c = reinterpret_cast<DevI2C*>(i2c_ptr);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 177
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 178 // Call the native function
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 179 if(args_count == 1){
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 180 native_ptr->init(*i2c);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 181 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 182 else if(args_count == 3){
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 183 int int1_pin = jerry_get_number_value(args[1]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 184 int int2_pin = jerry_get_number_value(args[2]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 185 native_ptr->init(*i2c, (PinName) int1_pin, (PinName) int2_pin);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 186 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 187 else if(args_count == 4){
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 188 int int1_pin = jerry_get_number_value(args[1]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 189 int int2_pin = jerry_get_number_value(args[2]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 190 int address = jerry_get_number_value(args[3]);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 191 native_ptr->init(*i2c, (PinName) int1_pin, (PinName) int2_pin, (uint8_t) address);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 192 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 193
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 194 return jerry_create_number(0);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 195 }
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 196
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 197 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 198 * LSM6DSL_JS#get_accelerometer_axes (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 199 * @brief Gets the accelerometer axes information
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 200 * @returns Accelerometer axes
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 201 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 202 DECLARE_CLASS_FUNCTION(LSM6DSL_JS, get_accelerometer_axes) {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 203 CHECK_ARGUMENT_COUNT(LSM6DSL_JS, get_accelerometer_axes, (args_count == 0));
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 204
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 205
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 206 // Unwrap native LSM6DSL_JS object
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 207 void *void_ptr;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 208 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 209 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 210
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 211 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 212 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 213 (const jerry_char_t *) "Failed to get native LSM6DSL_JS pointer");
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 214 }
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 215
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 216 LSM6DSL_JS *native_ptr = static_cast<LSM6DSL_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 217
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 218 // Get the result from the C++ API
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 219 char *result = new char[128];
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 220 native_ptr->get_accelerometer_axes_json(result);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 221
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 222 // Cast it back to JavaScript
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 223 jerry_value_t out = jerry_create_string((unsigned char *)result);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 224
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 225 //mbed::Serial pc((PinName)0x2C, (PinName)0x32);
akhtar.syedzeeshan@gmail.com 6:97726929e01f 226 //printf("accele: %s\n", result);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 227
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 228 // Recycle the result from function
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 229 delete result;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 230
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 231 // Return the output
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 232 return out;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 233 }
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 234
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 235
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 236 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 237 * LSM6DSL_JS#get_gyroscope_axes (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 238 * @brief Gets the gyroscope axes information
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 239 * @returns Gyroscope axes
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 240 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 241 DECLARE_CLASS_FUNCTION(LSM6DSL_JS, get_gyroscope_axes) {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 242 CHECK_ARGUMENT_COUNT(LSM6DSL_JS, get_gyroscope_axes, (args_count == 0));
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 243
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 244 // Unwrap native LSM6DSL_JS object
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 245 void *void_ptr;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 246 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 247 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 248
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 249 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 250 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 251 (const jerry_char_t *) "Failed to get native LSM6DSL_JS pointer");
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 252 }
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 253
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 254 LSM6DSL_JS *native_ptr = static_cast<LSM6DSL_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 255
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 256 // Get the result from the C++ API
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 257 char *result = new char[128];
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 258 native_ptr->get_gyroscope_axes_json(result);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 259
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 260 // Cast it back to JavaScript
akhtar.syedzeeshan@gmail.com 1:7e5e76bf3efe 261 jerry_value_t out = jerry_create_string((unsigned char *)result);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 262
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 263 // Recycle the result from function
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 264 delete result;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 265
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 266 // Return the output
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 267 return out;
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 268 }
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 269
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 270
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 271 /**
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 272 * LSM6DSL_JS (native JavaScript constructor)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 273 * @brief Constructor for Javascript wrapper
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 274 * @returns A JavaScript object representing LSM6DSL_JS.
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 275 */
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 276 DECLARE_CLASS_CONSTRUCTOR(LSM6DSL_JS) {
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 277 CHECK_ARGUMENT_COUNT(LSM6DSL_JS, __constructor, args_count == 0);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 278
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 279 // Extract native LSM6DSL_JS pointer (from this object)
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 280 LSM6DSL_JS *native_ptr = new LSM6DSL_JS();
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 281
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 282 jerry_value_t js_object = jerry_create_object();
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 283 jerry_set_object_native_pointer(js_object, native_ptr, &native_obj_type_info);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 284
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 285 // attach methods
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 286 ATTACH_CLASS_FUNCTION(js_object, LSM6DSL_JS, init_spi);
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 287 ATTACH_CLASS_FUNCTION(js_object, LSM6DSL_JS, init_i2c);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 288 ATTACH_CLASS_FUNCTION(js_object, LSM6DSL_JS, get_accelerometer_axes);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 289 ATTACH_CLASS_FUNCTION(js_object, LSM6DSL_JS, get_gyroscope_axes);
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 290
akhtar.syedzeeshan@gmail.com 0:7eb29414734d 291 return js_object;
akhtar.syedzeeshan@gmail.com 5:4f29cb91aaef 292 }