james kang / SPI_JS

Dependencies:   MQTT_JS

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPI-js.cpp Source File

SPI-js.cpp

Go to the documentation of this file.
00001 /**
00002  ******************************************************************************
00003  * @file    SPI-js.cpp
00004  * @author  ST
00005  * @version V1.0.0
00006  * @date    25 October 2017
00007  * @brief   Implementation of SPI for Javascript.
00008  ******************************************************************************
00009  * @attention
00010  *
00011  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
00012  *
00013  * Redistribution and use in source and binary forms, with or without modification,
00014  * are permitted provided that the following conditions are met:
00015  *   1. Redistributions of source code must retain the above copyright notice,
00016  *      this list of conditions and the following disclaimer.
00017  *   2. Redistributions in binary form must reproduce the above copyright notice,
00018  *      this list of conditions and the following disclaimer in the documentation
00019  *      and/or other materials provided with the distribution.
00020  *   3. Neither the name of STMicroelectronics nor the names of its contributors
00021  *      may be used to endorse or promote products derived from this software
00022  *      without specific prior written permission.
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00028  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00029  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00032  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  ******************************************************************************
00036  */
00037 
00038 
00039 /* Includes ------------------------------------------------------------------*/
00040 
00041 #include "jerryscript-mbed-util/logging.h"
00042 #include "jerryscript-mbed-library-registry/wrap_tools.h"
00043 
00044 // Load the library that we'll wrap
00045 #include "SPI.h"
00046     
00047 #include "mbed.h"
00048 
00049 /* Class Implementation ------------------------------------------------------*/
00050 
00051 /**
00052  * SPI#destructor
00053  *
00054  * Called if/when the SPI object is GC'ed.
00055  */
00056 void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(SPI) (void *void_ptr) {
00057     delete static_cast<SPI*>(void_ptr);
00058 }
00059 
00060 /**
00061  * Type infomation of the native SPI pointer
00062  *
00063  * Set SPI#destructor as the free callback.
00064  */
00065 static const jerry_object_native_info_t native_obj_type_info = {
00066     .free_cb = NAME_FOR_CLASS_NATIVE_DESTRUCTOR(SPI)
00067 };
00068 
00069 /**
00070  * SPI (native JavaScript constructor)
00071  *
00072  * @param sda mbed pin for SPI data
00073  * @param scl mbed pin for SPI clock
00074  * @returns a JavaScript object representing the SPI bus.
00075  */
00076 DECLARE_CLASS_CONSTRUCTOR(SPI) {
00077     CHECK_ARGUMENT_COUNT(SPI, __constructor, (args_count == 3));
00078     CHECK_ARGUMENT_TYPE_ALWAYS(SPI, __constructor, 0, number);
00079     CHECK_ARGUMENT_TYPE_ALWAYS(SPI, __constructor, 1, number);
00080     CHECK_ARGUMENT_TYPE_ALWAYS(SPI, __constructor, 2, number);
00081 
00082     int mosi = jerry_get_number_value(args[0]);
00083     int miso = jerry_get_number_value(args[1]);
00084     int sclk = jerry_get_number_value(args[2]);
00085 
00086     SPI *native_ptr = new SPI((PinName)mosi, (PinName)miso, (PinName)sclk);
00087     
00088     jerry_value_t js_object = jerry_create_object();
00089     jerry_set_object_native_pointer(js_object, native_ptr, &native_obj_type_info);
00090     
00091     /*
00092     //Future upgrades
00093     ATTACH_CLASS_FUNCTION(js_object, SPI, frequency);
00094     ATTACH_CLASS_FUNCTION(js_object, SPI, read);
00095     ATTACH_CLASS_FUNCTION(js_object, SPI, write);
00096     ATTACH_CLASS_FUNCTION(js_object, SPI, start);
00097     ATTACH_CLASS_FUNCTION(js_object, SPI, stop);
00098     */
00099     
00100     return js_object;
00101 
00102 }