A collection of Analog Devices drivers for the mbed platform

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Files at this revision

API Documentation at this revision

Comitter:
Adrian Suciu
Date:
Tue May 17 14:21:17 2016 +0300
Parent:
17:b8356808e8ad
Child:
20:9790e53d6e26
Commit message:
Added ADXL362 driver & reference project

Changed in this revision

examples/adxl362_example/Makefile Show annotated file Show diff for this revision Revisions of this file
examples/adxl362_example/lcd.cpp Show annotated file Show diff for this revision Revisions of this file
examples/adxl362_example/lcd.h Show annotated file Show diff for this revision Revisions of this file
examples/adxl362_example/main.cpp Show annotated file Show diff for this revision Revisions of this file
examples/cn0216_example/main.cpp Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/Makefile Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/config.h Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/AD5270_diag.cpp Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/adxl362_diag.cpp Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/adxl362_diag.h Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/main.cpp Show annotated file Show diff for this revision Revisions of this file
libraries/CN0357/CN0357.cpp Show diff for this revision Revisions of this file
libraries/CN0357/CN0357.h Show diff for this revision Revisions of this file
libraries/adxl362/ADXL362.cpp Show annotated file Show diff for this revision Revisions of this file
libraries/adxl362/ADXL362.h Show annotated file Show diff for this revision Revisions of this file
libraries/cn0357/CN0357.cpp Show annotated file Show diff for this revision Revisions of this file
libraries/cn0357/CN0357.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/Makefile	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,91 @@
+# This file was automagically generated by mbed.org. For more information, 
+# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
+
+GCC_BIN = 
+PROJECT = adxl362-MBED
+ADI_LIBRARIES_PATH = ../../libraries
+MBED_LIBRARIES_PATH = ../../mbed
+OBJECTS = ./main.o ./lcd.o $(ADI_LIBRARIES_PATH)/ADXL362/ADXL362.o 
+# $(ADI_LIBRARIES_PATH)/CN0216/CN0216.o
+SYS_OBJECTS = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ramfunc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/board.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/cmsis_nvic.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/hal_tick.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/mbed_overrides.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/retarget.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/startup_stm32f411xe.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_can.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cec.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cortex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_crc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma2d.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dsi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_eth.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_msp_template.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_gpio.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_irda.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_iwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_lptim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_smartcard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nand.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nor.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pccard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_qspi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rng.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sdram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spdifrx.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_uart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_usart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_wwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fsmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_sdmmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_usb.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/system_stm32f4xx.o 
+INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/adxl362 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM 
+LIBRARY_PATHS = -L$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM 
+LIBRARIES = -lmbed 
+LINKER_SCRIPT = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/STM32F411XE.ld
+
+############################################################################### 
+AS      = $(GCC_BIN)arm-none-eabi-as
+CC      = $(GCC_BIN)arm-none-eabi-gcc
+CPP     = $(GCC_BIN)arm-none-eabi-g++
+LD      = $(GCC_BIN)arm-none-eabi-gcc
+OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy
+OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump
+SIZE    = $(GCC_BIN)arm-none-eabi-size 
+
+ifeq ($(HARDFP),1)
+	FLOAT_ABI = hard
+else
+	FLOAT_ABI = softfp
+endif
+
+
+CPU = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=$(FLOAT_ABI) 
+CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -Wextra -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer -MMD -MP
+CC_SYMBOLS = -DTARGET_RTOS_M4_M7 -DTARGET_FF_ARDUINO -DTOOLCHAIN_GCC_ARM -DTARGET_NUCLEO_F411RE -D__CORTEX_M4 -DTARGET_LIKE_MBED -DTARGET_CORTEX_M -D__FPU_PRESENT=1 -DTARGET_LIKE_CORTEX_M4 -DMBED_BUILD_TIMESTAMP=1458639619.11 -DTARGET_M4 -D__MBED__=1 -DTARGET_STM -DTARGET_STM32F4 -DTARGET_FF_MORPHO -DTOOLCHAIN_GCC -DTARGET_STM32F411RE -DARM_MATH_CM4 
+
+LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main -Wl,-Map=$(PROJECT).map,--cref
+LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
+
+
+ifeq ($(DEBUG), 1)
+  CC_FLAGS += -DDEBUG -O0
+else
+  CC_FLAGS += -DNDEBUG -Os
+endif
+
+.PHONY: all clean lst size
+
+all: $(PROJECT).bin $(PROJECT).hex size
+
+
+clean:
+	rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS)
+
+
+.asm.o:
+	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+.s.o:
+	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+.S.o:
+	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+
+.c.o:
+	$(CC)  $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99   $(INCLUDE_PATHS) -o $@ $<
+
+.cpp.o:
+	$(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 -fno-rtti $(INCLUDE_PATHS) -o $@ $<
+
+
+
+$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS)
+	$(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
+
+
+$(PROJECT).bin: $(PROJECT).elf
+	$(OBJCOPY) -O binary $< $@
+
+$(PROJECT).hex: $(PROJECT).elf
+	@$(OBJCOPY) -O ihex $< $@
+
+$(PROJECT).lst: $(PROJECT).elf
+	@$(OBJDUMP) -Sdh $< > $@
+
+lst: $(PROJECT).lst
+
+size: $(PROJECT).elf
+	$(SIZE) $(PROJECT).elf
+
+DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
+-include $(DEPS)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/lcd.cpp	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,328 @@
+/**
+ ******************************************************************************
+ *   @file     Lcd.c
+ *   @brief    Source file for ST7565R LCD control.
+ *   @author   ADI
+ *   @date     March 2016
+ *
+ *******************************************************************************
+ * Copyright 2015(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Analog Devices, Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *  - The use of this software may or may not infringe the patent rights
+ *    of one or more patent holders.  This license does not release you
+ *    from the requirement that you obtain separate licenses from these
+ *    patent holders to use this software.
+ *  - Use of the software either in source or binary form, must be run
+ *    on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *******************************************************************************
+ **/
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+#include "mbed.h"
+#include "lcd.h"
+
+
+
+Lcd::Lcd(PinName rst_pin, PinName a0_pin, PinName bl_pin,
+         PinName cs_pin, PinName MOSI,
+         PinName MISO, PinName SCK) :
+
+    rst(rst_pin), a0(a0_pin), bl(bl_pin), cs(cs_pin), lcd_spi(MOSI, MISO, SCK)
+{
+    rst = 1;
+}
+
+/**
+ @brief Initialization of LCD screen
+ @return none
+ **/
+
+void Lcd::write_cmd(uint8_t cmd)
+{
+    cs = 0;
+    a0 = 0;
+    lcd_spi.write(cmd);
+    cs = 1;
+}
+
+void Lcd::write_data(uint8_t data)
+{
+    cs = 0;
+    a0 = 1;
+    lcd_spi.write(data);
+    cs = 1;
+}
+
+void Lcd::bl_enable()
+{
+    bl = 1;
+}
+
+void Lcd::bl_disable()
+{
+    bl = 0;
+}
+
+void Lcd::init(void)
+{
+
+    write_cmd(CMD_DISPLAY_OFF);
+    write_cmd(CMD_SET_BIAS_7);
+    write_cmd(CMD_SET_ADC_NORMAL);
+    write_cmd(CMD_SET_COM_REVERSE);
+    write_cmd((CMD_SET_RESISTOR_RATIO | 0x02));
+    write_cmd(CMD_SET_VOLUME_FIRST);
+    write_cmd((CMD_SET_VOLUME_SECOND | 0x04));
+    write_cmd((CMD_SET_POWER_CONTROL | 0x07));
+    fill_pages(0, 8, 0x00);
+
+}
+
+/**
+ @brief Displays a string at the specified position for with 5x7 font size.
+ @return none
+ **/
+void Lcd::display_string(uint8_t ui8row, uint8_t ui8col, int8_t *pi8str)
+{
+    uint8_t ui8x;
+    uint8_t ui8i;
+    uint8_t ui8ch;
+    uint8_t ui8data;
+
+    ui8ch = 0;
+    ui8x = ui8col;
+
+    while ((pi8str[ui8ch] != 0) && (ui8col < LCD_COLUMNS)) {
+        set_cursor(ui8row, ui8x); /* Set cursor position */
+
+        for (ui8i = 0; ui8i < 5; ui8i++) { /* Symbol matrix column loop */
+            ui8data = pui8font5x7[pi8str[ui8ch] - OFFS_ASCII][ui8i];
+
+            write_data(ui8data);
+        }
+
+        ui8x += 6; /* Increase column counter with 6 pixels */
+        ui8ch++; /* Increment counter */
+    }
+    write_cmd(CMD_DISPLAY_ON);
+
+}
+
+/**
+ @brief Displays a symbol (8 x width) at the specified position on the LCD.
+ @param ui8row - row number
+ @param ui8col - column number
+ @param ui8width - symbol width
+ @param pui8symbol - symbol to display
+ @return none
+ **/
+
+void Lcd::display_symbol(uint8_t ui8row, uint8_t ui8col, uint8_t ui8width,
+                         const uint8_t *pui8symbol)
+{
+    uint8_t ui8i;
+    uint8_t ui8data;
+
+    set_cursor(ui8row, ui8col); /* Set cursor position */
+    for (ui8i = 0; ui8i < ui8width; ui8i++) { /* Symbol matrix column loop */
+        ui8data = pui8symbol[ui8i];
+        write_data(ui8data);
+    }
+    write_cmd(CMD_DISPLAY_ON);
+}
+
+/**
+ @brief Fills the selected LCD pages with the data specified.
+ @param ui8start - start element
+ @param ui8num - elements numbers to fill
+ @param ui8Data - data to fill
+ @return none
+ **/
+
+void Lcd::fill_pages(uint8_t ui8start, uint8_t ui8num, uint8_t ui8Data)
+{
+
+    uint8_t ui8p;
+    uint8_t ui8c;
+
+    for (ui8p = ui8start; ui8p < (ui8start + ui8num); ui8p++) {
+        set_cursor(ui8p, 0);
+
+        for (ui8c = 0; ui8c < LCD_COLUMNS; ui8c++) {
+            write_data(ui8Data);
+        }
+    }
+
+    write_cmd(CMD_DISPLAY_ON);
+}
+
+/**
+ @brief Sets the start line of the LCD.
+ @param ui8line - line to start with
+ @return none
+ **/
+
+void Lcd::set_line(uint8_t ui8line)
+{
+
+    uint8_t ui8Cmd;
+    ui8Cmd = CMD_SET_DISP_START_LINE | (ui8line & 0x3F); /* Set start line  */
+    write_cmd(ui8Cmd);
+
+}
+
+
+/**
+ @brief Sets the cursor position at which data will be written.
+ @param ui8PA - page number
+ @param ui8CA - column number
+ @return none
+ **/
+
+void Lcd::set_cursor(uint8_t ui8PA, uint8_t ui8CA)
+{
+    uint8_t ui8Cmd;
+
+    ui8Cmd = 0xB0 | (ui8PA & 0x0F); /* Set page address */
+    write_cmd(ui8Cmd);
+
+    ui8Cmd = ui8CA & 0x0F; /* Set column address LSB CA[3:0] */
+    write_cmd(ui8Cmd);
+
+    ui8Cmd = 0x10 | (ui8CA >> 4); /* Set column address MSB CA[7:4] */
+    write_cmd(ui8Cmd);
+}
+
+
+const uint8_t Lcd::pui8Rec8x8[8] = {
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+};
+const uint8_t Lcd::pui8RecInv8x8[8] = {
+    0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
+};
+
+const uint8_t Lcd::pui8font5x7[96][5] = {
+    {0x00, 0x00, 0x00, 0x00, 0x00},  /*     32  */
+    {0x00, 0x00, 0x4F, 0x00, 0x00},  /*  !  33  */
+    {0x00, 0x07, 0x00, 0x07, 0x00},  /*  "  34  */
+    {0x14, 0x7F, 0x14, 0x7F, 0x14},  /*  #  35  */
+    {0x24, 0x2A, 0x7F, 0x2A, 0x12},  /*  $  36  */
+    {0x23, 0x13, 0x08, 0x64, 0x62},  /*  %  37  */
+    {0x36, 0x49, 0x55, 0x22, 0x50},  /*  &  38  */
+    {0x00, 0x05, 0x03, 0x00, 0x00},  /*  '  39  */
+    {0x00, 0x1C, 0x22, 0x41, 0x00},  /*  (  40  */
+    {0x00, 0x41, 0x22, 0x1C, 0x00},  /*  )  41  */
+    {0x14, 0x08, 0x3E, 0x08, 0x14},  /*  *  42  */
+    {0x08, 0x08, 0x3E, 0x08, 0x08},  /*  +  43  */
+    {0x00, 0x50, 0x30, 0x00, 0x00},  /*  ,  44  */
+    {0x08, 0x08, 0x08, 0x08, 0x08},  /*  -  45  */
+    {0x00, 0x60, 0x60, 0x00, 0x00},  /*  .  46  */
+    {0x20, 0x10, 0x08, 0x04, 0x02},  /*  /  47  */
+    {0x3E, 0x51, 0x49, 0x45, 0x3E},  /*  0  48  */
+    {0x00, 0x42, 0x7F, 0x40, 0x00},  /*  1  49  */
+    {0x42, 0x61, 0x51, 0x49, 0x46},  /*  2  50  */
+    {0x21, 0x41, 0x45, 0x4B, 0x31},  /*  3  51  */
+    {0x18, 0x14, 0x12, 0x7F, 0x10},  /*  4  52  */
+    {0x27, 0x45, 0x45, 0x45, 0x39},  /*  5  53  */
+    {0x3C, 0x4A, 0x49, 0x49, 0x30},  /*  6  54  */
+    {0x01, 0x71, 0x09, 0x05, 0x03},  /*  7  55  */
+    {0x36, 0x49, 0x49, 0x49, 0x36},  /*  8  56  */
+    {0x06, 0x49, 0x49, 0x29, 0x1E},  /*  9  57  */
+    {0x36, 0x36, 0x00, 0x00, 0x00},  /*  :  58  */
+    {0x56, 0x36, 0x00, 0x00, 0x00},  /*  ;  59  */
+    {0x08, 0x14, 0x22, 0x41, 0x00},  /*  <  60  */
+    {0x14, 0x14, 0x14, 0x14, 0x14},  /*  =  61  */
+    {0x00, 0x41, 0x22, 0x14, 0x08},  /*  >  62  */
+    {0x02, 0x01, 0x51, 0x09, 0x06},  /*  ?  63  */
+    {0x30, 0x49, 0x79, 0x41, 0x3E},  /*  @  64  */
+    {0x7E, 0x11, 0x11, 0x11, 0x7E},  /*  A  65  */
+    {0x7F, 0x49, 0x49, 0x49, 0x36},  /*  B  66  */
+    {0x3E, 0x41, 0x41, 0x41, 0x22},  /*  C  67  */
+    {0x7F, 0x41, 0x41, 0x22, 0x1C},  /*  D  68  */
+    {0x7F, 0x49, 0x49, 0x49, 0x41},  /*  E  69  */
+    {0x7F, 0x09, 0x09, 0x09, 0x01},  /*  F  70  */
+    {0x3E, 0x41, 0x49, 0x49, 0x7A},  /*  G  71  */
+    {0x7F, 0x08, 0x08, 0x08, 0x7F},  /*  H  72  */
+    {0x00, 0x41, 0x7F, 0x41, 0x00},  /*  I  73  */
+    {0x20, 0x40, 0x41, 0x3F, 0x01},  /*  J  74  */
+    {0x7F, 0x08, 0x14, 0x22, 0x41},  /*  K  75  */
+    {0x7F, 0x40, 0x40, 0x40, 0x40},  /*  L  76  */
+    {0x7F, 0x02, 0x0C, 0x02, 0x7F},  /*  M  77  */
+    {0x7F, 0x04, 0x08, 0x10, 0x7F},  /*  N  78  */
+    {0x3E, 0x41, 0x41, 0x41, 0x3E},  /*  O  79  */
+    {0x7F, 0x09, 0x09, 0x09, 0x06},  /*  P  80  */
+    {0x3E, 0x41, 0x51, 0x21, 0x5E},  /*  Q  81  */
+    {0x7F, 0x09, 0x19, 0x29, 0x46},  /*  R  82  */
+    {0x46, 0x49, 0x49, 0x49, 0x31},  /*  S  83  */
+    {0x01, 0x01, 0x7F, 0x01, 0x01},  /*  T  84  */
+    {0x3F, 0x40, 0x40, 0x40, 0x3F},  /*  U  85  */
+    {0x1F, 0x20, 0x40, 0x20, 0x1F},  /*  V  86  */
+    {0x3F, 0x40, 0x30, 0x40, 0x3F},  /*  W  87  */
+    {0x63, 0x14, 0x08, 0x14, 0x63},  /*  X  88  */
+    {0x07, 0x08, 0x70, 0x08, 0x07},  /*  Y  89  */
+    {0x61, 0x51, 0x49, 0x45, 0x43},  /*  Z  90  */
+    {0x00, 0x7F, 0x41, 0x41, 0x00},  /*  [  91  */
+    {0x02, 0x04, 0x08, 0x10, 0x20},  /*  \  92  */
+    {0x00, 0x41, 0x41, 0x7F, 0x00},  /*  ]  93  */
+    {0x04, 0x02, 0x01, 0x02, 0x04},  /*  ^  94  */
+    {0x40, 0x40, 0x40, 0x40, 0x40},  /*  _  95  */
+    {0x00, 0x01, 0x02, 0x04, 0x00},  /*  `  96  */
+    {0x20, 0x54, 0x54, 0x54, 0x78},  /*  a  97  */
+    {0x7F, 0x50, 0x48, 0x48, 0x30},  /*  b  98  */
+    {0x38, 0x44, 0x44, 0x44, 0x20},  /*  c  99  */
+    {0x38, 0x44, 0x44, 0x48, 0x7F},  /*  d  100 */
+    {0x38, 0x54, 0x54, 0x54, 0x18},  /*  e  101 */
+    {0x08, 0x7E, 0x09, 0x01, 0x02},  /*  f  102 */
+    {0x0C, 0x52, 0x52, 0x52, 0x3E},  /*  g  103 */
+    {0x7F, 0x08, 0x04, 0x04, 0x78},  /*  h  104 */
+    {0x00, 0x44, 0x7D, 0x40, 0x00},  /*  i  105 */
+    {0x20, 0x40, 0x44, 0x3D, 0x00},  /*  j  106 */
+    {0x7F, 0x10, 0x28, 0x44, 0x00},  /*  k  107 */
+    {0x00, 0x41, 0x7F, 0x40, 0x00},  /*  l  108 */
+    {0x78, 0x04, 0x18, 0x04, 0x78},  /*  m  109 */
+    {0x7C, 0x08, 0x04, 0x04, 0x78},  /*  n  110 */
+    {0x38, 0x44, 0x44, 0x44, 0x38},  /*  o  111 */
+    {0x7C, 0x14, 0x14, 0x14, 0x08},  /*  p  112 */
+    {0x08, 0x14, 0x14, 0x18, 0x7C},  /*  q  113 */
+    {0x7C, 0x08, 0x04, 0x04, 0x08},  /*  r  114 */
+    {0x48, 0x54, 0x54, 0x54, 0x20},  /*  s  115 */
+    {0x04, 0x3F, 0x44, 0x40, 0x20},  /*  t  116 */
+    {0x3C, 0x40, 0x40, 0x20, 0x7C},  /*  u  117 */
+    {0x1C, 0x20, 0x40, 0x20, 0x1C},  /*  v  118 */
+    {0x3C, 0x40, 0x30, 0x40, 0x3C},  /*  w  119 */
+    {0x44, 0x28, 0x10, 0x28, 0x44},  /*  x  120 */
+    {0x0C, 0x50, 0x50, 0x50, 0x3C},  /*  y  121 */
+    {0x44, 0x64, 0x54, 0x4C, 0x44},  /*  z  122 */
+    {0x00, 0x08, 0x36, 0x41, 0x00},  /*  {  123 */
+    {0x00, 0x00, 0x7F, 0x00, 0x00},  /*  |  124 */
+    {0x00, 0x41, 0x36, 0x08, 0x00},  /*  }  125 */
+    {0x0C, 0x02, 0x0C, 0x10, 0x0C},  /*  ~  126 */
+    {0x00, 0x00, 0x00, 0x00, 0x00}  /*     127 */
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/lcd.h	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,138 @@
+/**
+ ******************************************************************************
+ *   @file     Lcd.c
+ *   @brief    Header file for ST7565R LCD control.
+ *   @author   ADI
+ *   @date     March 2016
+ *
+ *******************************************************************************
+ * Copyright 2015(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Analog Devices, Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *  - The use of this software may or may not infringe the patent rights
+ *    of one or more patent holders.  This license does not release you
+ *    from the requirement that you obtain separate licenses from these
+ *    patent holders to use this software.
+ *  - Use of the software either in source or binary form, must be run
+ *    on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *******************************************************************************
+ **/
+#ifndef LCD_H_
+#define LCD_H_
+
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+#include <stdio.h>
+#include "mbed.h"
+
+class Lcd
+{
+public:
+
+    const static uint8_t pui8Rec8x8[8];
+    const static uint8_t pui8RecInv8x8[8];
+    const static uint8_t pui8font5x7[96][5]; ///< Symbol matrix structure: Font (8x14)
+
+    Lcd(PinName rst = D3, PinName a0 = D5, PinName bl = D8, PinName cs = D6,
+        PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK =
+            SPI_SCK);
+    void init(void);
+    void display_string(uint8_t ui8row, uint8_t ui8col, int8_t *pi8str);
+    void display_symbol(uint8_t ui8row, uint8_t ui8col, uint8_t ui8width,
+                        const uint8_t *pui8symbol);
+    void fill_pages(uint8_t ui8start, uint8_t ui8num, uint8_t ui8Data);
+    void set_line(uint8_t ui8line);
+    void set_cursor(uint8_t ui8PA, uint8_t ui8CA);
+    void bl_enable();
+    void bl_disable();
+
+    void write_cmd(uint8_t cmd);
+    void write_data(uint8_t data);
+
+
+    typedef enum {
+        CMD_DISPLAY_OFF = 0xAE,
+        CMD_DISPLAY_ON = 0xAF,
+        CMD_SET_DISP_START_LINE = 0x40,
+        CMD_SET_PAGE = 0xB0,
+        CMD_SET_COLUMN_UPPER = 0x10,
+        CMD_SET_COLUMN_LOWER = 0x00,
+        CMD_SET_ADC_NORMAL = 0xA0,
+        CMD_SET_ADC_REVERSE = 0xA1,
+        CMD_SET_DISP_NORMAL = 0xA6,
+        CMD_SET_DISP_REVERSE = 0xA7,
+        CMD_SET_ALLPTS_NORMAL = 0xA4,
+        CMD_SET_ALLPTS_ON = 0xA5,
+        CMD_SET_BIAS_9 = 0xA2,
+        CMD_SET_BIAS_7 = 0xA3,
+        CMD_RMW = 0xE0,
+        CMD_RMW_CLEAR = 0xEE,
+        CMD_INTERNAL_RESET = 0xE2,
+        CMD_SET_COM_NORMAL = 0xC0,
+        CMD_SET_COM_REVERSE = 0xC8,
+        CMD_SET_POWER_CONTROL = 0x28,
+        CMD_SET_RESISTOR_RATIO = 0x20,
+        CMD_SET_VOLUME_FIRST = 0x81,
+        CMD_SET_VOLUME_SECOND = 0,
+        CMD_SET_STATIC_OFF = 0xAC,
+        CMD_SET_STATIC_ON = 0xAD,
+        CMD_SET_STATIC_REG = 0x0,
+        CMD_SET_BOOSTER_FIRST = 0xF8,
+        CMD_SET_BOOSTER_234 = 0,
+        CMD_SET_BOOSTER_5 = 1,
+        CMD_SET_BOOSTER_6 = 3,
+        CMD_NOP = 0xE3,
+        CMD_TEST = 0xF0,
+    } lcd_commands_t;
+
+    static const uint8_t LCD_COLUMNS = 128u;
+    static const uint8_t LCD_PAGES = 4u;
+    static const uint8_t LCD_LINES = 64u;
+    static const uint8_t UP_X = 112;
+    static const uint8_t LEFT_X = 104;
+    static const uint8_t RIGHT_X = 120;
+    static const uint8_t DOWN_X = 112;
+    static const uint8_t CENTER_X = 112;
+    static const uint8_t ACC_LIMIT = 80;
+    static const uint8_t FONT_Y_SIZE = 8; ///< Font size for Y
+    static const uint8_t OFFS_ASCII = 32; ///< ASCII offset
+
+    static const float ACC_TEMP_BIAS          =   350  ;       ///< Accelerometer temperature bias(in ADC codes) at 25 Deg C
+    static const float ACC_TEMP_SENSITIVITY   =   0.065;       ///< Accelerometer temperature sensitivity  from datasheet (DegC per Code)
+
+private:
+
+    DigitalOut rst, a0, bl, cs;
+    SPI lcd_spi;
+
+
+
+};
+
+#endif /* LCD_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/main.cpp	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,239 @@
+/**
+ *   @file     main.cpp
+ *   @brief    Main file for the ADXL362-example project
+ *   @author   Analog Devices Inc.
+ *
+ * For support please go to:
+ * Github: https://github.com/analogdevicesinc/mbed-adi
+ * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+ * Product: www.analog.com/EVAL-ADXL362-ARDZ
+ * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+ ********************************************************************************
+ * Copyright 2016(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Analog Devices, Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *  - The use of this software may or may not infringe the patent rights
+ *    of one or more patent holders.  This license does not release you
+ *    from the requirement that you obtain separate licenses from these
+ *    patent holders to use this software.
+ *  - Use of the software either in source or binary form, must be run
+ *    on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ********************************************************************************/
+#include "mbed.h"
+#include "ADXL362.h"
+#include "lcd.h"
+
+Serial pc(USBTX, USBRX); ///< Serial interface to the pc
+Lcd lcd;
+ADXL362 adxl362(D9);
+
+static const uint16_t INACT_VAL = 50;
+static const uint16_t INACT_TIMER = 10 * 100;
+static const uint16_t ACT_VAL = 50;
+static const uint8_t ACT_TIMER = 100;
+static const uint16_t SCAN_SENSOR_TIME = 500;
+
+void flush_serial_buffer(void)
+{
+    while (pc.readable())
+        pc.getc();
+    return;
+}
+
+int main()
+{
+    uint8_t ui8s[22];
+    uint8_t ui8xu = 0;
+    uint8_t ui8xd = 0;
+    uint8_t ui8yu = 0;
+    uint8_t ui8yd = 0;
+    uint8_t ui8all = 0;
+
+    lcd.init();
+    adxl362.reset();
+    wait_us(500);
+    adxl362.set_activity_threshold(ACT_VAL);
+    adxl362.set_activity_time(ACT_TIMER / 10);
+
+    adxl362.set_inactivity_threshold(INACT_VAL);
+    adxl362.set_inactivity_time(INACT_TIMER);
+    adxl362.set_act_inact_ctl_reg(0x3f);
+#if(ADXL_INT_SEL == INTACC_PIN_1)
+    adxl362.set_polling_interrupt1_pin(D2, 0x40);
+#elif(ADXL_INT_SEL == INTACC_PIN_2)
+    adxl362.set_polling_interrupt2_pin(D2, 0x40); /* Map the awake status to INT2 pin */
+#endif
+    // interrupt ?
+
+    adxl362.set_mode(ADXL362::MEASUREMENT);
+
+    uint8_t ui8awake = 0;
+
+    /* Infinite loop */
+    while (1) {
+#if(ADXL_INT_SEL == INTACC_PIN_1)
+        if (adxl362.get_int1()) {
+#elif(ADXL_INT_SEL == INTACC_PIN_2)
+            if(adxl362.get_int2()) {
+#endif
+                if (ui8awake == 0) {
+                    ui8awake = 1;
+
+                    /* Set BLLCD pin - turn on LCD backlight */
+                    lcd.bl_enable();
+
+                    lcd.display_string(0, 60, (int8_t *) "[mG]");
+                    lcd.display_string(1, 60, (int8_t *) "[mG]");
+                    lcd.display_string(2, 60, (int8_t *) "[mG]");
+
+#if TEMP_ADC == 1
+                    lcd.display_string(3, 60, (int8_t *)"[ADC]");
+#else
+                    lcd.display_string(3, 60, (int8_t *) "[C]");
+#endif
+                    ui8xu = 0;
+                    ui8xd = 0;
+                    ui8yu = 0;
+                    ui8yd = 0;
+                    ui8all = 0;
+
+                    lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8RecInv8x8);
+                    lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8RecInv8x8);
+                    lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8RecInv8x8);
+                    lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8RecInv8x8);
+                    lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8RecInv8x8);
+                }
+
+            } else {
+                if (ui8awake == 1) {
+                    ui8awake = 0;
+
+                    /* Clear BLLCD pin - turn off LCD backlight */
+                    lcd.bl_disable();
+
+                    /* Clear screen */
+                    lcd.fill_pages(0, 4, 0x00);
+                }
+            }
+
+            if (ui8awake == 1) {
+                wait_ms(100);
+                uint64_t acc = adxl362.scan();
+                int16_t i16SensorX = static_cast<uint16_t>((acc & 0xffff000000000000) >> 48);
+                int16_t i16SensorY = static_cast<uint16_t>((acc & 0x0000ffff00000000) >> 32);
+                int16_t i16SensorZ = static_cast<uint16_t>((acc & 0x00000000ffff0000) >> 16);
+                int16_t i16SensorT = static_cast<uint16_t> (acc & 0x000000000000ffff);
+
+                sprintf((char *) ui8s, "x = % 5d", i16SensorX);
+                lcd.display_string(0, 0, (int8_t *) ui8s);
+
+                sprintf((char *) ui8s, "y = % 5d", i16SensorY);
+                lcd.display_string(1, 0, (int8_t *) ui8s);
+
+                sprintf((char *) ui8s, "z = % 5d", i16SensorZ);
+                lcd.display_string(2, 0, (int8_t *) ui8s);
+
+#if TEMP_ADC == 1
+                sprintf((char *)ui8s, "t = % 5d", i16SensorT);
+                lcd.display_string(3, 0, (int8_t *)ui8s);
+#else
+                float f32temp = ((float) i16SensorT + Lcd::ACC_TEMP_BIAS)
+                                / (1 / Lcd::ACC_TEMP_SENSITIVITY);   // -34.625
+                sprintf((char *) ui8s, "t = % 4.1f", f32temp);
+                lcd.display_string(3, 0, (int8_t *) ui8s);
+#endif
+
+                if (i16SensorY > Lcd::ACC_LIMIT) {
+                    if (ui8xu == 0) {
+                        ui8xu = 1;
+                        lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8Rec8x8);
+                    }
+
+                } else {
+                    if (ui8xu == 1) {
+                        ui8xu = 0;
+                        lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8RecInv8x8);
+                    }
+                }
+
+                if (i16SensorY < -Lcd::ACC_LIMIT) {
+                    if (ui8xd == 0) {
+                        ui8xd = 1;
+                        lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8Rec8x8);
+                    }
+
+                } else {
+                    if (ui8xd == 1) {
+                        ui8xd = 0;
+                        lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8RecInv8x8);
+                    }
+                }
+
+                if (i16SensorX > Lcd::ACC_LIMIT) {
+                    if (ui8yu == 0) {
+                        ui8yu = 1;
+                        lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8Rec8x8);
+                    }
+
+                } else {
+                    if (ui8yu == 1) {
+                        ui8yu = 0;
+                        lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8RecInv8x8);
+                    }
+                }
+
+                if (i16SensorX < -Lcd::ACC_LIMIT) {
+                    if (ui8yd == 0) {
+                        ui8yd = 1;
+                        lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8Rec8x8);
+                    }
+
+                } else {
+                    if (ui8yd == 1) {
+                        ui8yd = 0;
+                        lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8RecInv8x8);
+                    }
+                }
+
+                if ((ui8xu == 0) && (ui8xd == 0) && (ui8yu == 0) && (ui8yd == 0)) {
+                    if (ui8all == 0) {
+                        ui8all = 1;
+                        lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8Rec8x8);
+                    }
+
+                } else {
+                    if (ui8all == 1) {
+                        ui8all = 0;
+                        lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8RecInv8x8);
+                    }
+                }
+            }
+        }
+
+    }
+
--- a/examples/cn0216_example/main.cpp	Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/cn0216_example/main.cpp	Tue May 17 14:21:17 2016 +0300
@@ -47,7 +47,8 @@
 #include "mbed.h"
 #include "CN0216.h"
 
-const float CAL_WEIGHT = (150.0);
+const float CAL_WEIGHT = (500.0);
+
 
 Serial pc(USBTX, USBRX); ///< Serial interface to the pc
 
@@ -57,10 +58,15 @@
     return;
 }
 
-void display_data(uint32_t data, float weight)
+void display_data(uint32_t data, float weight, uint64_t timer)
 {
-    pc.printf("\r\nADC Input Voltage input = %f V", data);           /* Send valid voltage input value */
+    pc.printf("\r\nADC Input Voltage input = %x V", data);           /* Send valid voltage input value */
     pc.printf("\r\nSensor Input Weight = %f grams", weight);         /* Send valid grams value */
+
+
+    /*	pc.printf("%d ",timer);
+    	pc.printf("%x ",data);
+    	pc.printf("%f ",weight);*/
     pc.printf("\r\n");
 }
 
@@ -69,17 +75,18 @@
  * value in PPM
  */
 
-//#define SINGLE_CONVERSION
-#define CONTINOUS_CONVERSION
+#define SINGLE_CONVERSION
+//#define CONTINOUS_CONVERSION
 
 int main()
 {
     /* Main variables */
+    //t.start();
     CN0216 cn0216;
 #ifdef SINGLE_CONVERSION
     cn0216.init(CAL_WEIGHT);
 #elif defined CONTINOUS_CONVERSION
-    cn0216.init(CAL_WEIGHT, 0x00, 0x07);
+    cn0216.init(CAL_WEIGHT, 0x08, 0x07);
 #else
 #error define SINGLE_CONVERSION or CONTINOUS_CONVERSION, but not both
 #endif
@@ -103,13 +110,15 @@
     cn0216.calibrate(CN0216::COMPUTE_UNITS_PER_BIT);
 
     /* Infinite loop */
+    uint64_t timer = 0;
     while (1) {
         wait_ms(1000);
-        {
-            uint32_t data = cn0216.read_u32();
-            float weight    = cn0216.compute_weight(data); //  Convert ADC data to voltage
-            display_data(data, weight); //  Display data thru UART
-        }
+
+        uint32_t data = cn0216.read_u32();
+        float weight    = cn0216.compute_weight(data); //  Convert ADC data to voltage
+        display_data(data, weight, timer); //  Display data thru UART
+
+        timer++;
     }
 
 
--- a/examples/drvdiag/Makefile	Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/drvdiag/Makefile	Tue May 17 14:21:17 2016 +0300
@@ -6,9 +6,9 @@
 ADI_LIBRARIES_PATH = ../../libraries
 MBED_LIBRARIES_PATH = ../../mbed
 DRIVER_WRAPPER_PATH = ./driver_wrapper
-OBJECTS = ./main.o $(DRIVER_WRAPPER_PATH)/cn0357_diag.o $(DRIVER_WRAPPER_PATH)/cn0216_diag.o $(DRIVER_WRAPPER_PATH)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad7791_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)/AD7791/AD7791.o $(ADI_LIBRARIES_PATH)/AD5270/AD5270.o $(ADI_LIBRARIES_PATH)/cn0357/CN0357.o $(ADI_LIBRARIES_PATH)/cn0216/CN0216.o
+OBJECTS = ./main.o $(ADI_LIBRARIES_PATH)/ADXL362/ADXL362.o $(DRIVER_WRAPPER_PATH)/adxl362_diag.o $(DRIVER_WRAPPER_PATH)/cn0357_diag.o $(DRIVER_WRAPPER_PATH)/cn0216_diag.o $(DRIVER_WRAPPER_PATH)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad7791_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)/AD7791/AD7791.o $(ADI_LIBRARIES_PATH)/AD5270/AD5270.o $(ADI_LIBRARIES_PATH)/cn0357/CN0357.o $(ADI_LIBRARIES_PATH)/cn0216/CN0216.o
 SYS_OBJECTS = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ramfunc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/board.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/cmsis_nvic.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/hal_tick.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/mbed_overrides.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/retarget.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/startup_stm32f411xe.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_can.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cec.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cortex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_crc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma2d.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dsi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_eth.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_msp_template.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_gpio.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_irda.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_iwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_lptim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_smartcard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nand.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nor.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pccard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_qspi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rng.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sdram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spdifrx.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_uart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_usart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_wwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fsmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_sdmmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_usb.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/system_stm32f4xx.o 
-INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/ad5270 -I$(ADI_LIBRARIES_PATH)/ad7790 -I$(ADI_LIBRARIES_PATH)/ad7791 -I$(ADI_LIBRARIES_PATH)/cn0357 -I$(ADI_LIBRARIES_PATH)/cn0216 -I$(DRIVER_WRAPPER_PATH) -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM 
+INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/adxl362 -I$(ADI_LIBRARIES_PATH)/ad5270 -I$(ADI_LIBRARIES_PATH)/ad7790 -I$(ADI_LIBRARIES_PATH)/ad7791 -I$(ADI_LIBRARIES_PATH)/cn0357 -I$(ADI_LIBRARIES_PATH)/cn0216 -I$(DRIVER_WRAPPER_PATH) -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM 
 LIBRARY_PATHS = -L$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM 
 LIBRARIES = -lmbed 
 LINKER_SCRIPT = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/STM32F411XE.ld
@@ -38,9 +38,9 @@
 
 
 ifeq ($(DEBUG), 1)
-  CC_FLAGS += -DDEBUG -O0
+  CC_FLAGS += -DDEBUG -Og
 else
-  CC_FLAGS += -DNDEBUG -Os
+  CC_FLAGS += -DNDEBUG -Og
 endif
 
 .PHONY: all clean lst size
--- a/examples/drvdiag/config.h	Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/drvdiag/config.h	Tue May 17 14:21:17 2016 +0300
@@ -45,11 +45,12 @@
 *
 ********************************************************************************/
 
-#define AD7791_PRESENT
-#define CN0216_PRESENT
+//#define AD7791_PRESENT
+//#define CN0216_PRESENT
 //#define AD7790_PRESENT
 //#define AD5270_PRESENT
 //#define CN0357_PRESENT
+#define ADXL362_PRESENT
 #define SPI_LOW_LEVEL
 
 #ifdef AD7791_PRESENT
@@ -77,6 +78,11 @@
 #include "cn0357_diag.h"
 #endif
 
+#ifdef ADXL362_PRESENT
+#include "ADXL362.h"
+#include "adxl362_diag.h"
+#endif
+
 using namespace std;
 //------------------------------------
 // Hyperterminal configuration
@@ -84,7 +90,8 @@
 //------------------------------------
 
 #ifdef SPI_LOW_LEVEL
-DigitalOut CSA_pin(D8); // cs adc
+//DigitalOut CSA_pin(D8); // cs adc
+DigitalOut CSA_pin(D9); // cs accel
 DigitalOut CSR_pin(D6); // cs rdac
 SPI spibus(SPI_MOSI, SPI_MISO, SPI_SCK);
 #endif
@@ -114,3 +121,9 @@
 CN0357 cn0357;
 CN0357_Diag cn0357diag(cn0357);
 #endif
+
+
+#ifdef  ADXL362_PRESENT
+ADXL362 adxl362(D9);
+ADXL362_Diag adxl362diag(adxl362);
+#endif
--- a/examples/drvdiag/driver_wrapper/AD5270_diag.cpp	Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/**
-*   @file     ad5270_diag.cpp
-*   @brief    Source file for the AD5270 wrapper used by the driver diag
-*   @author   Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*  - Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-*  - Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in
-*    the documentation and/or other materials provided with the
-*    distribution.
-*  - Neither the name of Analog Devices, Inc. nor the names of its
-*    contributors may be used to endorse or promote products derived
-*    from this software without specific prior written permission.
-*  - The use of this software may or may not infringe the patent rights
-*    of one or more patent holders.  This license does not release you
-*    from the requirement that you obtain separate licenses from these
-*    patent holders to use this software.
-*  - Use of the software either in source or binary form, must be run
-*    on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#include "mbed.h"
-#include <stdio.h>
-#include <vector>
-#include <string>
-#include "AD5270_diag.h"
-
-extern Serial pc;
-extern vector<string> cmdbuffer;
-
-AD5270_Diag::AD5270_Diag(AD5270& ad) : dut(ad)
-{
-
-}
-void AD5270_Diag::enable_50TP_programming()
-{
-    dut.enable_50TP_programming();
-    pc.printf("Enabled 50TP prog");
-
-}
-void AD5270_Diag::store_50TP()
-{
-    dut.store_50TP();
-    pc.printf("50TP stored");
-}
-void AD5270_Diag::disable_50TP_programming()
-{
-    dut.disable_50TP_programming();
-    pc.printf("Disabled 50TP prog");
-}
-
-void AD5270_Diag::write_RDAC()
-{
-    float res = strtof(cmdbuffer[1].c_str(), NULL);
-    dut.write_RDAC(res);
-    pc.printf("Wrote %f", res);
-}
-void AD5270_Diag::read_RDAC()
-{
-    pc.printf("Read %f", dut.read_RDAC());
-}
-void AD5270_Diag::write_cmd()
-{
-    uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
-    uint8_t regVal = strtol(cmdbuffer[2].c_str(), NULL, 16);
-    pc.printf("Returned %x: ", dut.write_cmd(reg, regVal));
-}
-
-void AD5270_Diag::set_HiZ()
-{
-    pc.printf("SDO set to HiZ");
-    dut.set_SDO_HiZ();
-}
-
-void AD5270_Diag::read_50TP_last_address(void)
-{
-    pc.printf("Returned %x:", dut.read_50TP_last_address());
-}
-void AD5270_Diag::read_50TP_memory(void)
-{
-    uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
-    pc.printf("Returned %x", dut.read_50TP_memory(reg));
-}
-
-void AD5270_Diag::write_ctrl_reg(void)
-{
-    uint8_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
-    dut.write_ctrl_reg(val);
-    pc.printf("Wrote %x to ctrl_reg", val );
-}
-void AD5270_Diag::read_ctrl_reg(void)
-{
-    pc.printf("Read %x from ctrl_reg", dut.read_ctrl_reg());
-}
-
-void AD5270_Diag::reset_RDAC(void)
-{
-    dut.reset_RDAC();
-    pc.printf("Resetted rdac");
-}
-void AD5270_Diag::change_mode(void)
-{
-    uint8_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
-    dut.change_mode(static_cast<AD5270::AD5270Modes_t>(val));
-    pc.printf("Changed mode to %x", val);
-}
-
-void AD5270_Diag::write_wiper_reg(void)
-{
-    uint16_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
-    dut.write_wiper_reg(val);
-    pc.printf("Wrote %x to wiper", val);
-}
-void AD5270_Diag::read_wiper_reg(void)
-{
-    pc.printf("Read %x from wiper", dut.read_wiper_reg());
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/adxl362_diag.cpp	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,148 @@
+/**
+ *   @file     ADXL362_diag.cpp
+ *   @brief    Source file for the ADXL362 wrapper used by the driver diag
+ *   @author   Analog Devices Inc.
+ *
+ * For support please go to:
+ * Github: https://github.com/analogdevicesinc/mbed-adi
+ * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+ * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+ ********************************************************************************
+ * Copyright 2016(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Analog Devices, Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *  - The use of this software may or may not infringe the patent rights
+ *    of one or more patent holders.  This license does not release you
+ *    from the requirement that you obtain separate licenses from these
+ *    patent holders to use this software.
+ *  - Use of the software either in source or binary form, must be run
+ *    on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ********************************************************************************/
+
+#include "mbed.h"
+#include <stdio.h>
+#include <vector>
+#include <string>
+#include "ADXL362.h"
+#include "ADXL362_diag.h"
+
+extern Serial pc;
+extern vector<string> cmdbuffer;
+volatile bool awake;
+
+ADXL362_Diag::ADXL362_Diag(ADXL362& ad) :
+    dut(ad)
+{
+
+}
+
+/** Low level SPI bus comm methods */
+void ADXL362_Diag::reset(void)
+{
+    dut.reset();
+    pc.printf("Reseted ADXL362");
+}
+
+void ADXL362_Diag::write_reg(void)
+{
+    uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    uint8_t data = strtol(cmdbuffer[2].c_str(), NULL, 16);
+    dut.write_reg(static_cast<ADXL362::ADXL362_register_t>(reg), data);
+    pc.printf("Wrote reg");
+}
+
+void ADXL362_Diag::read_reg(void)
+{
+    uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    uint8_t data = dut.read_reg(static_cast<ADXL362::ADXL362_register_t>(reg));
+    pc.printf("Read %x ", data);
+}
+
+void ADXL362_Diag::scan(void)
+{
+    uint64_t data;
+    data = dut.scan();
+    pc.printf("Data: %x", data);
+}
+
+void ADXL362_Diag::read_status(void)
+{
+    uint8_t data = dut.read_status();
+    pc.printf("Status - %x reg", data);
+}
+
+void ADXL362_Diag::write_ctl(void)
+{
+    uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 16);
+
+    dut.set_power_ctl_reg(data);
+    pc.printf("Wrote reg %x", data);
+}
+
+void ADXL362_Diag::write_ftl(void)
+{
+    uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 16);
+
+    dut.set_filter_ctl_reg(data);
+    pc.printf("Wrote reg %x", data);
+}
+
+void ADXL362_Diag::fifo_read_nr_of_entries(void)
+{
+    uint16_t data = dut.fifo_read_nr_of_entries();
+    pc.printf("fifo entries - %d ", data);
+}
+void ADXL362_Diag::fifo_setup(void)
+{
+    uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 10);
+    uint16_t entry = strtol(cmdbuffer[2].c_str(), NULL, 10);
+    dut.fifo_setup(static_cast<bool>(data & 0x04),
+                   static_cast<ADXL362::ADXL362_FIFO_modes_t>(data & 0x03), entry);
+    pc.printf("Wrote reg");
+}
+void ADXL362_Diag::fifo_read_u16(void)
+{
+    uint16_t data = dut.fifo_read_u16();
+    pc.printf("fifo entry - %x ", data);
+}
+void ADXL362_Diag::fifo_scan(void)
+{
+    uint64_t data = dut.fifo_scan();
+    pc.printf("fifo scan - %x ", data);
+}
+
+void rising_adxl362()
+{
+    awake = true;
+}
+void falling_adxl362()
+{
+    awake = false;
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/adxl362_diag.h	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,76 @@
+/**
+*   @file     adxl362_diag.h
+*   @brief    Header file for the ADXL362 wrapper used by the driver diag
+*   @author   Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*  - Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+*  - Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in
+*    the documentation and/or other materials provided with the
+*    distribution.
+*  - Neither the name of Analog Devices, Inc. nor the names of its
+*    contributors may be used to endorse or promote products derived
+*    from this software without specific prior written permission.
+*  - The use of this software may or may not infringe the patent rights
+*    of one or more patent holders.  This license does not release you
+*    from the requirement that you obtain separate licenses from these
+*    patent holders to use this software.
+*  - Use of the software either in source or binary form, must be run
+*    on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+#ifndef ADXL362_DIAG_H_
+#define ADXL362_DIAG_H_
+
+#include "ADXL362.h"
+
+class ADXL362_Diag
+{
+
+public:
+    ADXL362_Diag(ADXL362& ad);
+    /** Low level SPI bus comm methods */
+    void reset(void);
+    void write_reg(void);
+    void read_reg(void);
+    void scan(void);
+    void read_status(void);
+    void write_ctl(void);
+    void write_ftl(void);
+    void fifo_read_nr_of_entries(void);
+    void fifo_setup(void);
+    void fifo_read_u16(void);
+    void fifo_scan(void);
+
+
+private:
+    ADXL362& dut;
+};
+void rising_adxl362();
+void falling_adxl362();
+
+#endif /* ADXL362_DIAG_H_ */
--- a/examples/drvdiag/main.cpp	Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/drvdiag/main.cpp	Tue May 17 14:21:17 2016 +0300
@@ -55,6 +55,12 @@
 Serial pc(SERIAL_TX, SERIAL_RX);
 vector<string> cmdbuffer;
 
+static const uint16_t INACT_VAL = 50;
+static const uint16_t INACT_TIMER = 25 * 10;
+static const uint16_t ACT_VAL = 50;
+static const uint8_t ACT_TIMER = 100;
+static const uint16_t SCAN_SENSOR_TIME = 500;
+
 class commands
 {
 public:
@@ -145,6 +151,54 @@
 		{"cnparam"  ,      2,   [](){cn0357diag.set_sensor_param();}}
 #endif
 
+#ifdef ADXL362_PRESENT
+		{"xlrst" ,      0,   [](){adxl362diag.reset();}},
+		{"xlscan"  ,    0,   [](){adxl362diag.scan();}},
+		{"xlwr"  ,      2,   [](){adxl362diag.write_reg();}},
+		{"xlrd"  ,      1,   [](){adxl362diag.read_reg();}},
+		{"xlstat", 0 , [](){adxl362diag.read_status();}},
+		{"xlctl", 1 , [](){adxl362diag.write_ctl();  }},
+		{"xlftl", 1 , [](){adxl362diag.write_ftl();  }},
+
+		{"xlfrn",  0, [](){adxl362diag.fifo_read_nr_of_entries(); }},
+	    {"xlfset", 2, [](){adxl362diag.fifo_setup();              }},
+		{"xlfr16", 0, [](){adxl362diag.fifo_read_u16();           }},
+		{"xlfrs",  0, [](){adxl362diag.fifo_scan();               }},
+		{"xlintinit",0,[](){
+			 adxl362.reset();
+			 pc.printf("adxl362 reset\r\n");
+			 wait_ms(500);
+			 adxl362.set_activity_threshold(ACT_VAL);
+			 adxl362.set_activity_time(ACT_TIMER / 10);
+
+			 adxl362.set_inactivity_threshold(INACT_VAL);
+			 adxl362.set_inactivity_time(INACT_TIMER);
+			 adxl362.set_act_inact_ctl_reg(0x3f);
+
+			 pc.printf("adxl362 set activity/inactivity\r\n");
+
+			 adxl362.disable_interrupt2();
+			 adxl362.set_interrupt2_pin(D2,0x40,&rising_adxl362,&falling_adxl362);
+			 extern bool awake;
+			 awake = true;
+
+			 pc.printf("adxl362 set interrupt\r\n");
+			 adxl362.enable_interrupt2();
+			 adxl362.set_mode(ADXL362::MEASUREMENT);
+			 pc.printf("adxl362 measurement started\r\n");
+
+		}},
+		{
+			"xlawake",0,[](){
+				extern bool awake;
+				if(awake) pc.printf("awaken");
+				else      pc.printf("asleep");
+			}
+		},
+
+
+#endif
+
 };
 // *INDENT-ON*
 
@@ -203,7 +257,7 @@
 int main()
 
 {
-    ad7791.frequency(100000);
+    // ad7791.frequency(100000);
     pc.printf("\r\n#### DrvDiag ####\r\n");
 
     while(1) {
--- a/libraries/CN0357/CN0357.cpp	Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/**
-*   @file     cn0357.cpp
-*   @brief    Source file for CN0357
-*   @author   Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* Product: www.analog.com/EVAL-CN0357-ARDZ
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*  - Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-*  - Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in
-*    the documentation and/or other materials provided with the
-*    distribution.
-*  - Neither the name of Analog Devices, Inc. nor the names of its
-*    contributors may be used to endorse or promote products derived
-*    from this software without specific prior written permission.
-*  - The use of this software may or may not infringe the patent rights
-*    of one or more patent holders.  This license does not release you
-*    from the requirement that you obtain separate licenses from these
-*    patent holders to use this software.
-*  - Use of the software either in source or binary form, must be run
-*    on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#include "mbed.h"
-#include "AD7790.h"
-#include "AD5270.h"
-#include "CN0357.h"
-
-/**
- * @brief CN0357 constructor
- * @param CSAD7790 - (optional)chip select of the AD7790
- * @param CSAD5270 - (optional)chip select of the AD5270
- * @param MOSI - (optional)pin of the SPI interface
- * @param MISO - (optional)pin of the SPI interface
- * @param SCK  - (optional)pin of the SPI interface
- */
-CN0357::CN0357(PinName CSAD7790, PinName CSAD5270, PinName MOSI, PinName MISO,
-               PinName SCK) :
-    _vref(1.2), _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0),
-    ad7790(_vref, CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK)
-
-{
-}
-
-/**
- * @brief initializes the AD7790 and the AD5270
- * @param range - range of the sensor used (in ppm)
- * @param sensitivity - sensitivity of the sensor (A/ppm)
- * @param jp - (optional)jumper configuration of the CN0357
- * @param mode_val - (optional)if jp is set to InternalADC, configures the mode register of the Internal ADC
- * @param filter_val - (optional)if jp is set to InternalADC, configures the filter register of the Internal ADC
- */
-void CN0357::init(float range, float sensitivity, JumperConfig_t jp, uint8_t mode_val, uint8_t filter_val)
-{
-    ad5270.frequency(500000);
-    ad7790.frequency(500000);
-
-    float resistance = set_sensor_parameters(range, sensitivity);
-
-    if(jp == INTERNAL_AD7790) {
-        _AD7790_init(mode_val, filter_val);
-    }
-    _rdac_init(resistance);
-}
-
-/**
- * @brief initializes the RDAC and sets SDO to HiZ
- * @param resistance - resistance value to initialize the RDAC
- * @return
- */
-void CN0357::_rdac_init(float resistance)
-{
-    /* RDAC initialization*/
-    /* Compute for the nearest RDAC value from given resistance and save data to the structure */
-    set_RDAC_value(resistance);
-    /* Set AD5270 SDO to Hi-Z */
-    ad5270.set_SDO_HiZ();
-}
-
-/**
- * @brief initializes the AD7790
- * @param mode_val -  configures the mode register of the Internal ADC
- * @param filter_val -  configures the filter register of the Internal ADC
- */
-void CN0357::_AD7790_init(uint8_t mode_val, uint8_t filter_val)
-{
-    ad7790.reset();
-    wait_ms(50);
-
-    ad7790.write_mode_reg(mode_val);
-    wait_us(2);
-
-    ad7790.write_filter_reg(filter_val);
-    wait_ms(50);
-}
-
-/**
- * @brief reads the status register of the AD7790
- * @return status register value
- */
-uint8_t CN0357::read_adc_status(void)
-{
-    return ad7790.read_status_reg();
-}
-
-/**
- * @brief reads the ADC and computes the sensor voltage
- * @return sensor voltage
- */
-float CN0357::read_sensor_voltage(void)
-{
-    return ad7790.read_voltage();
-}
-
-/**
- * @brief reads the data register of the AD7790
- * @return data register value
- */
-uint16_t CN0357::read_sensor(void)
-{
-    return ad7790.read_u16();
-}
-
-/**
- * @brief reads and computes the sensor reading in PPM
- * @return value of the sensor reading in PPM
- */
-float CN0357::read_ppm()
-{
-    return calc_ppm(ad7790.read_voltage()); /* Convert voltage to Gas concentration*/
-}
-
-/**
- * @brief computes a value in PPM from a reading received as a param
- * @param adcVoltage - voltage to be converted to PPM
- * @return sensor value in PPM
- */
-float CN0357::calc_ppm(float adcVoltage)
-{
-    float fConcentration = 0;
-    fConcentration = (fabs(adcVoltage) / _RDACvalue) / _sensor_sensitivity;
-    return fConcentration;
-}
-
-/**
- * @brief computes voltage from a 16 bit ADC value received as a parameter
- * @param data - ADC value
- * @return sensor voltage
- */
-float CN0357::data_to_voltage(uint16_t data)
-{
-    return ad7790.data_to_voltage(data);
-}
-
-/**
- * @brief sets a new value for the RDAC
- * @param resistance new value for the resistance
- * @return none
- */
-void CN0357::set_RDAC_value(float resistance)
-{
-    _RDACvalue = ad5270.write_RDAC(resistance);
-}
-
-/**
- * @brief getter method for RDAC value
- * @return value of the RDAC in ohms
- */
-float CN0357::get_RDAC_value()
-{
-    return _RDACvalue;
-}
-
-/**
- * @brief set sensor range and sensitivity
- * sets sensor range, sensitivity
- * returns suggested resistance value for feedback resistor
- * @param range - range of the sensor used (in ppm)
- * @param sensitivity - sensitivity of the sensor (in A/ppm)
- * @return suggested resistance value for feedback resistor
- */
-float CN0357::set_sensor_parameters(float range, float sensitivity)
-{
-    _sensor_sensitivity = static_cast<float>(sensitivity);
-    _sensor_range = range;
-    return (_vref / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
-}
-
-/**
- * @brief getter method for sensor sensitivity
- * @return sensor sensitivity (in A/ppm)
- */
-float CN0357::get_sensor_sensitivity()
-{
-    return _sensor_sensitivity;
-}
-
-/**
- * @brief getter method for sensor range
- * @return sensor range (in ppm)
- */
-float CN0357::get_sensor_range()
-{
-    return _sensor_range;
-}
--- a/libraries/CN0357/CN0357.h	Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/**
-*   @file     cn0357.h
-*   @brief    Header file for CN0357
-*   @author   Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* Product: www.analog.com/EVAL-CN0357-ARDZ
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*  - Redistributions of source code must retain the above copyright
-*    notice, this list of conditions and the following disclaimer.
-*  - Redistributions in binary form must reproduce the above copyright
-*    notice, this list of conditions and the following disclaimer in
-*    the documentation and/or other materials provided with the
-*    distribution.
-*  - Neither the name of Analog Devices, Inc. nor the names of its
-*    contributors may be used to endorse or promote products derived
-*    from this software without specific prior written permission.
-*  - The use of this software may or may not infringe the patent rights
-*    of one or more patent holders.  This license does not release you
-*    from the requirement that you obtain separate licenses from these
-*    patent holders to use this software.
-*  - Use of the software either in source or binary form, must be run
-*    on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#ifndef CN0357_H
-#define CN0357_H
-
-#include "mbed.h"
-#include "AD7790.h"
-#include "AD5270.h"
-
-/**
- * @brief EVAL-CN0357 toxic gas sensor shield
- */
-class CN0357
-{
-public:
-
-private:
-    float _vref;
-    float _sensor_sensitivity;
-    float _sensor_range;
-    float _RDACvalue;
-public:
-    AD7790 ad7790; ///< AD7790 instance - can be used for manual overriding
-    AD5270 ad5270; ///< AD5270 instance - can be used for manual overriding
-
-    /// CN0357 shield jumper configuration
-    typedef enum {
-        INTERNAL_AD7790 = 0, 	///< The shield's AD7790 is used
-        EXTERNAL_ADC			///< Sensor analog output is routed to A1 pin of the shield
-    } JumperConfig_t;
-
-    CN0357(PinName CSAD7790 = D8, PinName CSAD5270 = D6, PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK = SPI_SCK);
-    void init(float range, float sensitivity, JumperConfig_t jp = INTERNAL_AD7790, uint8_t mode_val = _DEFAULT_MODE_VAL, uint8_t filter_val = _DEFAULT_FILTER_VAL);
-
-    uint8_t  read_adc_status(void);
-    uint16_t read_sensor(void);
-    float read_sensor_voltage(void);
-    float data_to_voltage(uint16_t data);
-    float calc_ppm(float adcVoltage);
-    float read_ppm(void);
-
-    void  set_RDAC_value(float resistor_val);
-    float get_RDAC_value(void);
-    float set_sensor_parameters(float range, float sensitivity);
-    float get_sensor_range(void);
-    float get_sensor_sensitivity(void);
-
-private:
-    const static int _RESET = 0xff;
-    const static int _DEFAULT_MODE_VAL = AD7790::MD1 | AD7790::MD0; // POWERDOWN MODE
-    const static int _DEFAULT_FILTER_VAL = AD7790::FS0 | AD7790::FS1 | AD7790::FS2;
-    void _rdac_init(float resistanceValue);
-    void _AD7790_init(uint8_t mode_val, uint8_t filter_val);
-
-};
-
-#endif // CN0357_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/adxl362/ADXL362.cpp	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,352 @@
+#include <stdint.h>
+#include "mbed.h"
+#include "ADXL362.h"
+
+ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
+    adxl362(MOSI, MISO, SCK), cs(CS), int1(NULL), int2(NULL), int1_poll(NC), int2_poll(
+        NC)
+{
+    cs = true; // cs is active low
+    adxl362.format(8, _SPI_MODE);
+    temp_stored_in_fifo = false;
+    int1_act_low = true;
+    int2_act_low = true;
+}
+
+void ADXL362::frequency(int hz)
+{
+    adxl362.frequency(hz);
+}
+
+void ADXL362::reset()
+{
+    adxl362.format(8, _SPI_MODE);
+    cs = false;
+    // Writing Code 0x52 (representing the letter, R, in ASCII or unicode) to this register immediately resets the ADXL362.
+    write_reg(SOFT_RESET, 0x52);
+    cs = true;
+    // A latency of approximately 0.5 ms is required after soft reset.
+}
+
+void ADXL362::write_reg(ADXL362_register_t reg, uint8_t data)
+{
+    adxl362.format(8, _SPI_MODE);
+    cs = false;
+    adxl362.write(WRITE_REG_CMD);
+    adxl362.write(static_cast<uint8_t>(reg));
+    adxl362.write(static_cast<uint8_t>(data));
+    cs = true;
+}
+
+uint8_t ADXL362::read_reg(ADXL362_register_t reg)
+{
+    uint8_t ret_val;
+    adxl362.format(8, _SPI_MODE);
+    cs = false;
+    adxl362.write(READ_REG_CMD);
+    adxl362.write(static_cast<uint8_t>(reg));
+    ret_val = adxl362.write(DUMMY_BYTE);
+    cs = true;
+    return ret_val;
+}
+
+void ADXL362::write_reg_u16(ADXL362_register_t reg, uint16_t data)
+{
+    adxl362.format(8, _SPI_MODE);
+
+    cs = false;
+    adxl362.write(WRITE_REG_CMD);
+    adxl362.write(static_cast<uint8_t>(reg));
+    adxl362.write(static_cast<uint8_t>(data & 0xff));
+    adxl362.write(static_cast<uint8_t>((data & 0xff00) >> 8));
+
+    cs = true;
+}
+uint16_t ADXL362::read_reg_u16(ADXL362_register_t reg)
+{
+    uint16_t ret_val = 0;
+    adxl362.format(8, _SPI_MODE);
+
+    cs = false;
+    adxl362.write(READ_REG_CMD);
+    adxl362.write(static_cast<uint8_t>(reg));
+    ret_val = adxl362.write(DUMMY_BYTE);
+    ret_val = ret_val | (adxl362.write(DUMMY_BYTE) << 8);
+    cs = true;
+
+    return ret_val;
+}
+
+uint64_t ADXL362::scan()
+{
+    uint64_t ret_val = 0;
+    uint16_t x, y, z, t = 0;
+
+    adxl362.format(8, _SPI_MODE);
+    cs = false;
+    adxl362.write(READ_REG_CMD);
+    adxl362.write(static_cast<uint8_t>(XDATA_L));
+
+    x = adxl362.write(DUMMY_BYTE);
+    x = x | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+    y = adxl362.write(DUMMY_BYTE);
+    y = y | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+    z = adxl362.write(DUMMY_BYTE);
+    z = z | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+    t = adxl362.write(DUMMY_BYTE);
+    t = t | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+    // format xxyyzztt
+    ret_val = static_cast<uint64_t>(x) << 48;
+    ret_val |= static_cast<uint64_t>(y) << 32;
+    ret_val |= static_cast<uint64_t>(z) << 16;
+    ret_val |= static_cast<uint64_t>(t);
+    cs = true;
+    return ret_val;
+}
+
+uint8_t ADXL362::scanx_u8()
+{
+    return read_reg(XDATA);
+}
+uint16_t ADXL362::scanx()
+{
+    return read_reg_u16(XDATA_L);
+}
+uint8_t ADXL362::scany_u8()
+{
+    return read_reg(YDATA);
+}
+
+uint16_t ADXL362::scany()
+{
+    return read_reg_u16(YDATA_L);
+}
+uint8_t ADXL362::scanz_u8()
+{
+    return read_reg(ZDATA);
+}
+
+uint16_t ADXL362::scanz()
+{
+    return read_reg_u16(ZDATA_L);
+}
+uint16_t ADXL362::scant()
+{
+    return read_reg_u16(TEMP_L);
+}
+
+void ADXL362::set_mode(ADXL362_modes_t mode)
+{
+    uint8_t reg_val;
+    reg_val = read_reg(POWER_CTL);
+    reg_val = reg_val | static_cast<uint8_t>(mode);
+    write_reg(POWER_CTL, reg_val);
+}
+
+void ADXL362::set_activity_threshold(uint16_t threshold)
+{
+    write_reg_u16(THRESH_ACT_L, threshold);
+}
+void ADXL362::set_activity_time(uint8_t time)
+{
+    write_reg(TIME_ACT, time);
+}
+void ADXL362::set_inactivity_threshold(uint16_t threshold)
+{
+    write_reg_u16(THRESH_INACT_L, threshold);
+}
+void ADXL362::set_inactivity_time(uint16_t time)
+{
+    write_reg_u16(TIME_INACT_L, time);
+}
+
+void ADXL362::set_polling_interrupt1_pin(PinName in, uint8_t data,
+        PinMode pull)
+{
+    if ((data & 0x7F) != 0) {
+        write_reg(INTMAP1, data);
+        int1_poll = DigitalIn(in);
+        int1_poll.mode(pull);
+        if (data & 0x80) {
+            int1_act_low = true;
+        } else {
+            int1_act_low = false;
+        }
+    }
+}
+
+void ADXL362::set_polling_interrupt2_pin(PinName in, uint8_t data,
+        PinMode pull)
+{
+    if ((data & 0x7F) != 0) {
+        write_reg(INTMAP2, data);
+        int2_poll = DigitalIn(in);
+        int2_poll.mode(pull);
+        if (data & 0x80) {
+            int2_act_low = true;
+        } else {
+            int2_act_low = false;
+        }
+    }
+}
+
+bool ADXL362::get_int1()
+{
+    return (int1_poll.read() != int1_act_low);  // boolean XOR
+}
+
+bool ADXL362::get_int2()
+{
+    return (int1_poll.read() != int1_act_low); // boolean XOR
+}
+
+void ADXL362::set_interrupt1_pin(PinName in, uint8_t data,
+                                 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
+{
+    if ((data & 0x7F) != 0) {
+        write_reg(INTMAP1, data);
+        //int1 = InterruptIn(in);
+        delete int1;
+        int1 = new InterruptIn(in);
+        int1->mode(pull);
+        if(callback_falling != NULL) int1->fall(callback_falling);
+        if(callback_rising != NULL) int1->rise(callback_rising);
+        if (data & 0x80) {
+            int1_act_low = true;
+        } else {
+            int1_act_low = false;
+        }
+    }
+}
+void ADXL362::set_interrupt2_pin(PinName in, uint8_t data,
+                                 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
+{
+    if ((data & 0x7F) != 0) {
+        write_reg(INTMAP2, data);
+        delete int2;
+        int2 = new InterruptIn(in);
+        int2->mode(pull);
+        if(callback_falling != NULL) int2->fall(callback_falling);
+        if(callback_rising != NULL) int2->rise(callback_rising);
+        if (data & 0x80) {
+            int2_act_low = true;
+        } else {
+            int2_act_low = false;
+        }
+    }
+}
+
+void ADXL362::enable_interrupt1()
+{
+    int1->enable_irq();
+}
+
+void ADXL362::enable_interrupt2()
+{
+    int2->enable_irq();
+}
+
+void ADXL362::disable_interrupt1()
+{
+    int1->disable_irq();
+}
+
+void ADXL362::disable_interrupt2()
+{
+    int2->disable_irq();
+}
+
+void ADXL362::set_act_inact_ctl_reg(uint8_t data)
+{
+    write_reg(ACT_INACT_CTL, data);
+}
+
+void ADXL362::set_power_ctl_reg(uint8_t data)
+{
+    write_reg(POWER_CTL, data);
+}
+
+void ADXL362::set_filter_ctl_reg(uint8_t data)
+{
+    write_reg(FILTER_CTL, data);
+}
+
+uint8_t ADXL362::read_status()
+{
+    return read_reg(STATUS);
+}
+
+uint16_t ADXL362::fifo_read_nr_of_entries()
+{
+    return read_reg_u16(FIFO_ENTRIES_L);
+}
+
+void ADXL362::fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries)
+{
+    uint8_t fifo_ctl = static_cast<uint8_t>(mode);
+    temp_stored_in_fifo = store_temp;
+
+    fifo_ctl = fifo_ctl | (static_cast<uint8_t>(temp_stored_in_fifo) << 2);
+
+    if (nr_of_entries > 0xff) {
+        fifo_ctl = fifo_ctl | static_cast<uint8_t>(AH);
+    }
+    write_reg(FIFO_CONTROL, fifo_ctl);
+    write_reg(FIFO_SAMPLES, static_cast<uint8_t>(nr_of_entries & 0xff));
+
+}
+
+uint16_t ADXL362::fifo_read_u16()
+{
+    uint16_t ret_val = 0;
+    adxl362.format(8, _SPI_MODE);
+
+    cs = false;
+    adxl362.write(READ_FIFO_CMD);
+    ret_val = adxl362.write(DUMMY_BYTE);
+    ret_val = (ret_val) | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+    cs = true;
+
+    return ret_val;
+}
+
+uint64_t ADXL362::fifo_scan()
+{
+
+    uint64_t ret_val = 0;
+    uint16_t x = 0, y = 0, z = 0, dummy, t = 0, sample_type;
+
+    adxl362.format(8, _SPI_MODE);
+    cs = false;
+    adxl362.write(READ_FIFO_CMD);
+    uint8_t samples = (temp_stored_in_fifo) ? 4 : 3;
+    for(uint8_t i = 0; i < samples; i++) {
+        dummy = adxl362.write(DUMMY_BYTE);
+        dummy = dummy | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+        sample_type = (dummy & 0xc000) >> 14;
+        dummy = dummy & 0x3fff;
+        switch(sample_type) {
+            case 0: // x
+                x = dummy;
+                break;
+            case 1: // y
+                y = dummy;
+                break;
+            case 2: // z
+                z = dummy;
+                break;
+            case 3: // temp
+                t = dummy;
+                break;
+        }
+
+    }
+
+    // format xxyyzztt
+    ret_val = static_cast<uint64_t> (x) << 48;
+    ret_val |= static_cast<uint64_t>(y) << 32;
+    ret_val |= static_cast<uint64_t>(z) << 16;
+    ret_val |= static_cast<uint64_t>(t);
+    cs = true;
+    return ret_val;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/adxl362/ADXL362.h	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,211 @@
+#ifndef ADXL362_H_
+#define ADXL362_H_
+
+#include "mbed.h"
+
+class ADXL362
+{
+public:
+
+    /* Temperature parameters */
+    typedef enum {
+        DEVID_AD = 0x00,
+        DEVID_MST = 0x01,
+        PARTID = 0x02,
+        REVID = 0x03,
+        XDATA = 0x08,
+        YDATA = 0x09,
+        ZDATA = 0x0A,
+        STATUS = 0x0B,
+        FIFO_ENTRIES_L = 0x0C,
+        FIFO_ENTRIES_H = 0x0D,
+        XDATA_L = 0x0E,
+        XDATA_H = 0x0F,
+        YDATA_L = 0x10,
+        YDATA_H = 0x11,
+        ZDATA_L = 0x12,
+        ZDATA_H = 0x13,
+        TEMP_L = 0x14,
+        TEMP_H = 0x15,
+        // Reserved = 0x16;
+        // Reserved = 0x17;
+        SOFT_RESET = 0x1F,
+        THRESH_ACT_L = 0x20,
+        THRESH_ACT_H = 0x21,
+        TIME_ACT = 0x22,
+        THRESH_INACT_L = 0x23,
+        THRESH_INACT_H = 0x24,
+        TIME_INACT_L = 0x25,
+        TIME_INACT_H = 0x26,
+        ACT_INACT_CTL = 0x27,
+        FIFO_CONTROL = 0x28,
+        FIFO_SAMPLES = 0x29,
+        INTMAP1 = 0x2A,
+        INTMAP2 = 0x2B,
+        FILTER_CTL = 0x2C,
+        POWER_CTL = 0x2D,
+        SELF_TEST = 0x2E,
+    } ADXL362_register_t;
+
+    typedef enum {
+        STANDBY = 0x00,
+        MEASUREMENT = 0x02
+    } ADXL362_modes_t;
+
+    typedef enum {
+        ERR_USER_REGS = 0x80,
+        AWAKE = 0x40,
+        INACT = 0x20,
+        ACT = 0x10,
+        FIFO_OVERRUN = 0x08,
+        FIFO_WATERMARK = 0x04,
+        FIFO_READY = 0x02,
+        DATA_READY = 0x01
+    } ADXL362_STATUS_reg_bits_t;
+
+    typedef enum {
+        LINKLOOP1 = 0x20,
+        LINKLOOP0 = 0x10,
+        DEFAULTMODE = 0x00,
+        LINKED_MODE = 0x10,
+        LOOP_MODE = 0x30,
+        INACT_REF = 0x08,
+        INACT_EN = 0x04,
+        ACT_REF = 0x02,
+        ACT_EN = 0x01
+    } ADXL362_ACT_INACT_CTL_reg_bits_t;
+
+    typedef enum {
+        AH = 0x08,
+        FIFO_TEMP = 0x04,
+        FIFO_MODE1 = 0x02,
+        FIFO_MODE = 0x01,
+    } ADXL362_FIFO_CONTROL_reg_bits_t;
+
+    typedef enum {
+        FIFO_DISABLED = 0x00,
+        FIFO_OLDEST = 0x01,
+        FIFO_STREAM = 0x02,
+        FIFO_TRIGGERED = 0x03,
+    } ADXL362_FIFO_modes_t;
+
+    typedef enum {
+        INT_LOW = 0x80,
+        INT_AWAKE = 0x40,
+        INT_INACT = 0x20,
+        INT_ACT = 0x10,
+        INT_FIFO_OVERRUN = 0x08,
+        INT_FIFO_WATERMARK = 0x04,
+        INT_FIFO_READY = 0x02,
+        INT_DATA_READY = 0x01
+    } ADXL362_INTMAP_reg_bits_t;
+
+    typedef enum {
+        RANGE1 = 0x80,
+        RANGE0 = 0x40,
+        RANGE2G = 0x00,
+        RANGE4G = 0x40,
+        RANGE8G = 0x80,
+        HALF_BW = 0x10,
+        EXT_SAMPLE = 0x08,
+        ODR2 = 0x04,
+        ODR1 = 0x02,
+        ODR0 = 0x01,
+        ODR12HZ = 0x00,
+        ODR25HZ = 0x01,
+        ODR50Hz = 0x02,
+        ODR100HZ = 0x03,
+        ODR200Hz = 0x04,
+        ODR400HZ = 0x07
+    } ADXL362_FILTER_CTL_reg_bits_t;
+
+    typedef enum {
+        EXT_CLK = 0x40,
+        LOW_NOISE1 = 0x20,
+        LOW_NOISE0 = 0x10,
+        NORMAL_OPERATION = 0x00,
+        LOW_NOISE = 0x10,
+        ULTRALOW_NOISE = 0x20,
+        WAKEUP = 0x08,
+        AUTOSLEEP = 0x04,
+        MEASURE1 = 0x02,
+        MEASURE0 = 0x01,
+    } ADXL362_POWER_CTL_reg_bits_t;
+
+    /** SPI configuration & constructor */
+    ADXL362(PinName CS = SPI_CS, PinName MOSI = SPI_MOSI, PinName MISO =
+                SPI_MISO, PinName SCK = SPI_SCK);
+    void frequency(int hz);
+
+    /** Low level SPI bus comm methods */
+    void reset(void);
+    void write_reg(ADXL362_register_t reg, uint8_t data);
+    uint8_t read_reg(ADXL362_register_t reg);
+    uint64_t scan();
+
+    void set_power_ctl_reg(uint8_t data);
+    void set_filter_ctl_reg(uint8_t data);
+
+    uint8_t scanx_u8();
+    uint16_t scanx();
+    uint8_t scany_u8();
+    uint16_t scany();
+    uint8_t scanz_u8();
+    uint16_t scanz();
+    uint16_t scant();
+
+    uint8_t read_status();
+    void set_mode(ADXL362_modes_t mode);
+
+    void set_activity_threshold(uint16_t threshold);
+    void set_activity_time(uint8_t time);
+    void set_inactivity_threshold(uint16_t threshold);
+    void set_inactivity_time(uint16_t time);
+    void set_act_inact_ctl_reg(uint8_t data);
+
+    void set_interrupt1_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
+    void set_interrupt2_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
+    void enable_interrupt1();
+    void enable_interrupt2();
+    void disable_interrupt1();
+    void disable_interrupt2();
+
+    void set_polling_interrupt1_pin(PinName in, uint8_t data, PinMode pull = PullNone);
+    void set_polling_interrupt2_pin(PinName in, uint8_t data, PinMode pull = PullNone);
+
+    bool get_int1();
+    bool get_int2();
+
+
+    uint16_t fifo_read_nr_of_entries();
+    void fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries);
+    uint16_t fifo_read_u16();
+    uint64_t fifo_scan();
+
+
+
+
+
+private:
+
+    SPI adxl362;    ///< SPI instance of the AD7791
+    DigitalOut cs; ///< DigitalOut instance for the chipselect of the AD7791
+    uint16_t read_reg_u16(ADXL362_register_t reg);
+    InterruptIn *int1;
+    InterruptIn *int2;
+    DigitalIn int1_poll;
+    DigitalIn int2_poll;
+    bool int1_act_low;
+    bool int2_act_low;
+    bool temp_stored_in_fifo;
+
+    void write_reg_u16(ADXL362_register_t reg, uint16_t data);
+
+    const static uint8_t DUMMY_BYTE = 0xAA;
+    const static uint8_t WRITE_REG_CMD = 0x0A; // write register
+    const static uint8_t READ_REG_CMD = 0x0B; // read register
+    const static uint8_t READ_FIFO_CMD = 0x0D; // read FIFO
+    const static uint8_t _SPI_MODE = 0;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/cn0357/CN0357.cpp	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,229 @@
+/**
+*   @file     cn0357.cpp
+*   @brief    Source file for CN0357
+*   @author   Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* Product: www.analog.com/EVAL-CN0357-ARDZ
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*  - Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+*  - Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in
+*    the documentation and/or other materials provided with the
+*    distribution.
+*  - Neither the name of Analog Devices, Inc. nor the names of its
+*    contributors may be used to endorse or promote products derived
+*    from this software without specific prior written permission.
+*  - The use of this software may or may not infringe the patent rights
+*    of one or more patent holders.  This license does not release you
+*    from the requirement that you obtain separate licenses from these
+*    patent holders to use this software.
+*  - Use of the software either in source or binary form, must be run
+*    on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+
+#include "mbed.h"
+#include "AD7790.h"
+#include "AD5270.h"
+#include "CN0357.h"
+
+/**
+ * @brief CN0357 constructor
+ * @param CSAD7790 - (optional)chip select of the AD7790
+ * @param CSAD5270 - (optional)chip select of the AD5270
+ * @param MOSI - (optional)pin of the SPI interface
+ * @param MISO - (optional)pin of the SPI interface
+ * @param SCK  - (optional)pin of the SPI interface
+ */
+CN0357::CN0357(PinName CSAD7790, PinName CSAD5270, PinName MOSI, PinName MISO,
+               PinName SCK) :
+    _vref(1.2), _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0),
+    ad7790(_vref, CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK)
+
+{
+}
+
+/**
+ * @brief initializes the AD7790 and the AD5270
+ * @param range - range of the sensor used (in ppm)
+ * @param sensitivity - sensitivity of the sensor (A/ppm)
+ * @param jp - (optional)jumper configuration of the CN0357
+ * @param mode_val - (optional)if jp is set to InternalADC, configures the mode register of the Internal ADC
+ * @param filter_val - (optional)if jp is set to InternalADC, configures the filter register of the Internal ADC
+ */
+void CN0357::init(float range, float sensitivity, JumperConfig_t jp, uint8_t mode_val, uint8_t filter_val)
+{
+    ad5270.frequency(500000);
+    ad7790.frequency(500000);
+
+    float resistance = set_sensor_parameters(range, sensitivity);
+
+    if(jp == INTERNAL_AD7790) {
+        _AD7790_init(mode_val, filter_val);
+    }
+    _rdac_init(resistance);
+}
+
+/**
+ * @brief initializes the RDAC and sets SDO to HiZ
+ * @param resistance - resistance value to initialize the RDAC
+ * @return
+ */
+void CN0357::_rdac_init(float resistance)
+{
+    /* RDAC initialization*/
+    /* Compute for the nearest RDAC value from given resistance and save data to the structure */
+    set_RDAC_value(resistance);
+    /* Set AD5270 SDO to Hi-Z */
+    ad5270.set_SDO_HiZ();
+}
+
+/**
+ * @brief initializes the AD7790
+ * @param mode_val -  configures the mode register of the Internal ADC
+ * @param filter_val -  configures the filter register of the Internal ADC
+ */
+void CN0357::_AD7790_init(uint8_t mode_val, uint8_t filter_val)
+{
+    ad7790.reset();
+    wait_ms(50);
+
+    ad7790.write_mode_reg(mode_val);
+    wait_us(2);
+
+    ad7790.write_filter_reg(filter_val);
+    wait_ms(50);
+}
+
+/**
+ * @brief reads the status register of the AD7790
+ * @return status register value
+ */
+uint8_t CN0357::read_adc_status(void)
+{
+    return ad7790.read_status_reg();
+}
+
+/**
+ * @brief reads the ADC and computes the sensor voltage
+ * @return sensor voltage
+ */
+float CN0357::read_sensor_voltage(void)
+{
+    return ad7790.read_voltage();
+}
+
+/**
+ * @brief reads the data register of the AD7790
+ * @return data register value
+ */
+uint16_t CN0357::read_sensor(void)
+{
+    return ad7790.read_u16();
+}
+
+/**
+ * @brief reads and computes the sensor reading in PPM
+ * @return value of the sensor reading in PPM
+ */
+float CN0357::read_ppm()
+{
+    return calc_ppm(ad7790.read_voltage()); /* Convert voltage to Gas concentration*/
+}
+
+/**
+ * @brief computes a value in PPM from a reading received as a param
+ * @param adcVoltage - voltage to be converted to PPM
+ * @return sensor value in PPM
+ */
+float CN0357::calc_ppm(float adcVoltage)
+{
+    float fConcentration = 0;
+    fConcentration = (fabs(adcVoltage) / _RDACvalue) / _sensor_sensitivity;
+    return fConcentration;
+}
+
+/**
+ * @brief computes voltage from a 16 bit ADC value received as a parameter
+ * @param data - ADC value
+ * @return sensor voltage
+ */
+float CN0357::data_to_voltage(uint16_t data)
+{
+    return ad7790.data_to_voltage(data);
+}
+
+/**
+ * @brief sets a new value for the RDAC
+ * @param resistance new value for the resistance
+ * @return none
+ */
+void CN0357::set_RDAC_value(float resistance)
+{
+    _RDACvalue = ad5270.write_RDAC(resistance);
+}
+
+/**
+ * @brief getter method for RDAC value
+ * @return value of the RDAC in ohms
+ */
+float CN0357::get_RDAC_value()
+{
+    return _RDACvalue;
+}
+
+/**
+ * @brief set sensor range and sensitivity
+ * sets sensor range, sensitivity
+ * returns suggested resistance value for feedback resistor
+ * @param range - range of the sensor used (in ppm)
+ * @param sensitivity - sensitivity of the sensor (in A/ppm)
+ * @return suggested resistance value for feedback resistor
+ */
+float CN0357::set_sensor_parameters(float range, float sensitivity)
+{
+    _sensor_sensitivity = static_cast<float>(sensitivity);
+    _sensor_range = range;
+    return (_vref / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
+}
+
+/**
+ * @brief getter method for sensor sensitivity
+ * @return sensor sensitivity (in A/ppm)
+ */
+float CN0357::get_sensor_sensitivity()
+{
+    return _sensor_sensitivity;
+}
+
+/**
+ * @brief getter method for sensor range
+ * @return sensor range (in ppm)
+ */
+float CN0357::get_sensor_range()
+{
+    return _sensor_range;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/cn0357/CN0357.h	Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,102 @@
+/**
+*   @file     cn0357.h
+*   @brief    Header file for CN0357
+*   @author   Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* Product: www.analog.com/EVAL-CN0357-ARDZ
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*  - Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+*  - Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in
+*    the documentation and/or other materials provided with the
+*    distribution.
+*  - Neither the name of Analog Devices, Inc. nor the names of its
+*    contributors may be used to endorse or promote products derived
+*    from this software without specific prior written permission.
+*  - The use of this software may or may not infringe the patent rights
+*    of one or more patent holders.  This license does not release you
+*    from the requirement that you obtain separate licenses from these
+*    patent holders to use this software.
+*  - Use of the software either in source or binary form, must be run
+*    on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+
+#ifndef CN0357_H
+#define CN0357_H
+
+#include "mbed.h"
+#include "AD7790.h"
+#include "AD5270.h"
+
+/**
+ * @brief EVAL-CN0357 toxic gas sensor shield
+ */
+class CN0357
+{
+public:
+
+private:
+    float _vref;
+    float _sensor_sensitivity;
+    float _sensor_range;
+    float _RDACvalue;
+public:
+    AD7790 ad7790; ///< AD7790 instance - can be used for manual overriding
+    AD5270 ad5270; ///< AD5270 instance - can be used for manual overriding
+
+    /// CN0357 shield jumper configuration
+    typedef enum {
+        INTERNAL_AD7790 = 0, 	///< The shield's AD7790 is used
+        EXTERNAL_ADC			///< Sensor analog output is routed to A1 pin of the shield
+    } JumperConfig_t;
+
+    CN0357(PinName CSAD7790 = D8, PinName CSAD5270 = D6, PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK = SPI_SCK);
+    void init(float range, float sensitivity, JumperConfig_t jp = INTERNAL_AD7790, uint8_t mode_val = _DEFAULT_MODE_VAL, uint8_t filter_val = _DEFAULT_FILTER_VAL);
+
+    uint8_t  read_adc_status(void);
+    uint16_t read_sensor(void);
+    float read_sensor_voltage(void);
+    float data_to_voltage(uint16_t data);
+    float calc_ppm(float adcVoltage);
+    float read_ppm(void);
+
+    void  set_RDAC_value(float resistor_val);
+    float get_RDAC_value(void);
+    float set_sensor_parameters(float range, float sensitivity);
+    float get_sensor_range(void);
+    float get_sensor_sensitivity(void);
+
+private:
+    const static int _RESET = 0xff;
+    const static int _DEFAULT_MODE_VAL = AD7790::MD1 | AD7790::MD0; // POWERDOWN MODE
+    const static int _DEFAULT_FILTER_VAL = AD7790::FS0 | AD7790::FS1 | AD7790::FS2;
+    void _rdac_init(float resistanceValue);
+    void _AD7790_init(uint8_t mode_val, uint8_t filter_val);
+
+};
+
+#endif // CN0357_H