Javascript wrappers for HTS221 Sensor library

Dependencies:   HTS221

Dependents:   ST_SENSOR_JS

Committer:
akhtar.syedzeeshan@gmail.com
Date:
Tue Oct 31 16:18:15 2017 +0100
Revision:
5:bbe15d3cac27
Parent:
4:6043b9511072
Child:
6:b2c4b0678856
Implemented SPI support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 1 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 2 ******************************************************************************
akhtar.syedzeeshan@gmail.com 2:c8589b137d5a 3 * @file HTS221_JS-js.cpp
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 4 * @author ST
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 5 * @version V1.0.0
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 6 * @date 9 October 2017
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 7 * @brief Implementation of an HTS221 Humidity and Temperature sensor for use
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 8 * with Javascript.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 9 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 10 * @attention
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 11 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 13 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 14 * Redistribution and use in source and binary forms, with or without modification,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 15 * are permitted provided that the following conditions are met:
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 16 * 1. Redistributions of source code must retain the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 17 * this list of conditions and the following disclaimer.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 19 * this list of conditions and the following disclaimer in the documentation
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 20 * and/or other materials provided with the distribution.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 22 * may be used to endorse or promote products derived from this software
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 23 * without specific prior written permission.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 24 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 35 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 36 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 37 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 38
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 39
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 40 /* Includes ------------------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 41
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 42 #include "jerryscript-mbed-util/logging.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 43 #include "jerryscript-mbed-library-registry/wrap_tools.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 44
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 45 // Load the library that we'll wrap
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 46 #include "HTS221_JS.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 47
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 48 #include "mbed.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 49
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 50 /* Class Implementation ------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 51
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 52 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 53 * HTS221_JS#destructor
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 54 * Called if/when the HTS221_JS is GC'ed.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 55 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 56 void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(HTS221_JS)(void *void_ptr) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 57 delete static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 58 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 59
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 60 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 61 * Type infomation of the native HTS221_JS pointer
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 62 * Set HTS221_JS#destructor as the free callback.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 63 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 64 static const jerry_object_native_info_t native_obj_type_info = {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 65 .free_cb = NAME_FOR_CLASS_NATIVE_DESTRUCTOR(HTS221_JS)
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 66 };
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 67
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 68 /**
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 69 * HTS221_JS#init_spi (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 70 * @brief Initializes the sensor using SPI interface
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 71 * @param SPI interface
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 72 * @param CS pin
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 73 * @param DRDY pin
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 74 */
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 75 DECLARE_CLASS_FUNCTION(HTS221_JS, init_spi) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 76 CHECK_ARGUMENT_COUNT(HTS221_JS, init_spi, (args_count == 1 || args_count == 3));
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 77 CHECK_ARGUMENT_TYPE_ALWAYS(HTS221_JS, init_spi, 0, object);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 78 CHECK_ARGUMENT_TYPE_ON_CONDITION(HTS221_JS, init_spi, 1, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 79 CHECK_ARGUMENT_TYPE_ON_CONDITION(HTS221_JS, init_spi, 2, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 80
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 81 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 82 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 83 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 84 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 85
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 86 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 87 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 88 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 89 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 90
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 91 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 92
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 93 // Unwrap arguments
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 94 void *spi_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 95 const jerry_object_native_info_t *spi_type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 96 bool spi_has_ptr = jerry_get_object_native_pointer(args[0], &spi_ptr, &spi_type_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 97
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 98 // Check if we have the spi pointer
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 99 if (!spi_has_ptr) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 100 printf("Not a SPI input!");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 101 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 102 (const jerry_char_t *) "Failed to get native DigitalOut pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 103 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 104
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 105 // Cast the argument to C++
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 106 SPI* spi = reinterpret_cast<SPI*>(spi_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 107
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 108 // Call the native function
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 109 if(args_count == 1){
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 110 native_ptr->init(*spi);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 111 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 112 else if(args_count == 3){
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 113 int cs_pin = jerry_get_number_value(args[1]);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 114 int drdy_pin = jerry_get_number_value(args[2]);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 115 native_ptr->init(*spi, (PinName) cs_pin, (PinName) drdy_pin);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 116 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 117
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 118 return jerry_create_number(0);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 119 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 120
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 121 /**
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 122 * HTS221_JS#init_i2c (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 123 * @brief Initializes the sensor using I2C interface
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 124 * @param I2C interface
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 125 * @param Address
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 126 * @param DRDY pin
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 127 */
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 128 DECLARE_CLASS_FUNCTION(HTS221_JS, init_i2c) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 129 CHECK_ARGUMENT_COUNT(HTS221_JS, init_i2c, (args_count == 1 || args_count == 3));
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 130 CHECK_ARGUMENT_TYPE_ALWAYS(HTS221_JS, init_i2c, 0, object);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 131 CHECK_ARGUMENT_TYPE_ON_CONDITION(HTS221_JS, init_i2c, 1, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 132 CHECK_ARGUMENT_TYPE_ON_CONDITION(HTS221_JS, init_i2c, 2, number, args_count == 3);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 133
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 134 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 135 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 136 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 137 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 138
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 139 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 140 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 141 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 142 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 143
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 144 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 145
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 146 // Unwrap arguments
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 147 void *i2c_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 148 const jerry_object_native_info_t *i2c_type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 149 bool i2c_has_ptr = jerry_get_object_native_pointer(args[0], &i2c_ptr, &i2c_type_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 150
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 151 // Check if we have the i2c pointer
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 152 if (!i2c_has_ptr) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 153 printf("Not a I2C input!");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 154 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 155 (const jerry_char_t *) "Failed to get native DigitalOut pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 156 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 157
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 158 // Cast the argument to C++
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 159 DevI2C* i2c = reinterpret_cast<DevI2C*>(i2c_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 160
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 161 // call the respective function
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 162 if(args_count == 1){
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 163 native_ptr->init(*i2c);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 164 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 165 else if(args_count == 3){
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 166 int address = jerry_get_number_value(args[1]);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 167 int drdy_pin = jerry_get_number_value(args[2]);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 168 native_ptr->init(*i2c, (uint8_t) address, (PinName) drdy_pin);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 169 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 170
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 171 return jerry_create_number(0);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 172 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 173
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 174 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 175 * HTS221_JS#get_temperature (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 176 * @brief Gets the temperature reading
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 177 * @returns Temperature
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 178 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 179 DECLARE_CLASS_FUNCTION(HTS221_JS, get_temperature) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 180 CHECK_ARGUMENT_COUNT(HTS221_JS, get_temperature, (args_count == 0));
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 181
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 182
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 183 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 184 void *void_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 185 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 186 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 187
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 188 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 189 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 190 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 191 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 192
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 193 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 194
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 195 // Get the result from the C++ API
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 196 float result = native_ptr->get_temperature();
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 197 //printf("temp hts221: %s\n", result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 198
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 199 // Cast it back to JavaScript and return
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 200 return jerry_create_number(result);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 201
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 202 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 203
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 204 /**
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 205 * HTS221_JS#get_temperature_string (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 206 * @brief Gets the temperature reading in string form
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 207 * @returns Temperature in string
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 208 */
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 209 DECLARE_CLASS_FUNCTION(HTS221_JS, get_temperature_string) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 210 CHECK_ARGUMENT_COUNT(HTS221_JS, get_temperature_string, (args_count == 0));
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 211
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 212 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 213 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 214 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 215 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 216
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 217 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 218 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 219 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 220 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 221
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 222 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 223
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 224 char * result = new char[128];
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 225 result = native_ptr->get_temperature_string(result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 226
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 227 //pc.printf("Temperature: %s", result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 228
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 229 // Cast it back to JavaScript
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 230 jerry_value_t out = jerry_create_string((unsigned char *)result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 231
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 232 printf("temperature: %s\n", result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 233
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 234 // Recycle the result from function
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 235 delete result;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 236
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 237 // Return the output
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 238 return out;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 239
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 240 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 241 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 242 * HTS221_JS#get_humidity (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 243 * @brief Get the humidity reading
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 244 * @returns Humidity
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 245 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 246 DECLARE_CLASS_FUNCTION(HTS221_JS, get_humidity) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 247 CHECK_ARGUMENT_COUNT(HTS221_JS, get_humidity, (args_count == 0));
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 248
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 249
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 250 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 251 void *void_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 252 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 253 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 254
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 255 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 256 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 257 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 258 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 259
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 260 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 261
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 262 // Get the result from the C++ API
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 263 float result = native_ptr->get_humidity();
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 264 //printf("humidity hts221: %s\n", result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 265
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 266 // Cast it back to JavaScript and return
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 267 return jerry_create_number(result);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 268
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 269 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 270
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 271 /**
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 272 * HTS221_JS#get_humidity_string (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 273 * @brief Get the humidity reading in string form
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 274 * @returns humidity in string
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 275 */
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 276 DECLARE_CLASS_FUNCTION(HTS221_JS, get_humidity_string) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 277 CHECK_ARGUMENT_COUNT(HTS221_JS, get_humidity_string, (args_count == 0));
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 278
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 279
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 280 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 281 void *void_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 282 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 283 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 284
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 285 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 286 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 287 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 288 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 289
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 290 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 291
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 292 char * result = new char[128];
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 293 result = native_ptr->get_humidity_string(result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 294
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 295 // Cast it back to JavaScript
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 296 jerry_value_t out = jerry_create_string((unsigned char *)result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 297
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 298 printf("humidity: %s\n", result);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 299
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 300 // Recycle the result from function
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 301 delete result;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 302
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 303 // Return the output
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 304 return out;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 305 }
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 306
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 307 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 308 * HTS221_JS#led_on (native JavaScript method)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 309 * @brief Sets the LED to 1, for testing purposes
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 310 * @param DigitalOut pin to blink
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 311 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 312 DECLARE_CLASS_FUNCTION(HTS221_JS, led_on) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 313 // Check that we have 1 argument, and that it's an object
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 314 CHECK_ARGUMENT_COUNT(HTS221_JS, led_on, (args_count == 1));
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 315 CHECK_ARGUMENT_TYPE_ALWAYS(HTS221_JS, led_on, 0, object);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 316
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 317 // Unwrap native HTS221_JS object
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 318 void *void_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 319 const jerry_object_native_info_t *type_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 320 bool has_ptr = jerry_get_object_native_pointer(this_obj, &void_ptr, &type_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 321
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 322 if (!has_ptr || type_ptr != &native_obj_type_info) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 323 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 324 (const jerry_char_t *) "Failed to get native HTS221_JS pointer");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 325 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 326
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 327 HTS221_JS *native_ptr = static_cast<HTS221_JS*>(void_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 328
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 329
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 330 // Cast the LED argument
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 331 void *led_void_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 332 const jerry_object_native_info_t *led_type_ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 333 bool led_has_ptr = jerry_get_object_native_pointer(args[0], &led_void_ptr, &led_type_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 334
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 335 if (!led_has_ptr) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 336 printf("Not a DigitalOut input!");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 337 return jerry_create_error(JERRY_ERROR_TYPE,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 338 (const jerry_char_t *) "Failed to get native DigitalOut pointer");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 339 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 340
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 341 DigitalOut *pin_ptr = reinterpret_cast<DigitalOut*>(led_void_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 342
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 343 // Call the function from the C++ API
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 344 native_ptr->led_on(*pin_ptr);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 345
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 346 // Return
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 347 return jerry_create_undefined();
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 348 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 349
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 350
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 351 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 352 * HTS221_JS (native JavaScript constructor)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 353 * @brief Constructor for Javascript wrapper
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 354 * @returns JavaScript object representing HTS221_JS.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 355 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 356 DECLARE_CLASS_CONSTRUCTOR(HTS221_JS) {
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 357 CHECK_ARGUMENT_COUNT(HTS221_JS, __constructor, args_count == 0);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 358 //pc.printf("constructor called!\n");
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 359
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 360 // Extract native HTS221_JS pointer (from this object)
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 361 HTS221_JS *native_ptr = new HTS221_JS();
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 362
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 363 jerry_value_t js_object = jerry_create_object();
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 364 jerry_set_object_native_pointer(js_object, native_ptr, &native_obj_type_info);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 365
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 366 // attach methods
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 367 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, init_spi);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 368 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, init_i2c);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 369 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, get_temperature);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 370 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, get_temperature_string);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 371 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, get_humidity);
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 372 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, get_humidity_string);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 373 ATTACH_CLASS_FUNCTION(js_object, HTS221_JS, led_on);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 374
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 375 return js_object;
akhtar.syedzeeshan@gmail.com 5:bbe15d3cac27 376 }