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:
Thu Aug 18 14:46:42 2016 +0300
Parent:
24:dae7123d432a
Parent:
25:b9e3756c9cbb
Commit message:
WIP on cn0391: 86ec328 Improved compatibility with Linux systems

Changed in this revision

examples/CN0391_example/Makefile Show annotated file Show diff for this revision Revisions of this file
examples/CN0391_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.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/CN0391_example/Makefile	Thu Aug 18 14:46:42 2016 +0300
@@ -0,0 +1,97 @@
+# This file was automagically generated by mbed.org. For more information, 
+# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
+
+ifeq ($(OS), Windows_NT)
+  # insert Windows path to arm-none-eabi toolchain
+  GCC_BIN = C:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.2\ 2015q4/bin/
+else
+  # insert Linux path to arm-none-eabi toolchain
+  GCC_BIN = ~/workspace/tools/gcc-arm-none-eabi-5_3-2016q1/bin/
+endif
+
+PROJECT = CN0391-MBED
+ADI_LIBRARIES_PATH = ../../libraries
+MBED_LIBRARIES_PATH = ../../mbed
+OBJECTS = ./main.o $(ADI_LIBRARIES_PATH)/Thermocouple/Thermocouple.o $(ADI_LIBRARIES_PATH)/Thermocouple/Thermocouple_lut.o $(ADI_LIBRARIES_PATH)/AD7124/AD7124.o $(ADI_LIBRARIES_PATH)/CN0391/CN0391.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)/AD7124 -I$(ADI_LIBRARIES_PATH)/Thermocouple -I$(ADI_LIBRARIES_PATH)/AD7124 -I$(ADI_LIBRARIES_PATH)/CN0391 -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/CN0391_example/main.cpp	Thu Aug 18 14:46:42 2016 +0300
@@ -0,0 +1,88 @@
+/**
+*   @file     main.cpp
+*   @brief    Main file for the CN0391-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-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 "Thermocouple.h"
+#include "CN0391.h"
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+
+int main()
+{
+    pc.baud(115200);
+    //Thermocouple *tcarray[4] = {new Thermocouple_Type_E, new Thermocouple_Type_E,new Thermocouple_Type_B,new Thermocouple_Type_B}
+    CN0391 cn0391(D10);
+    pc.printf("Reset the AD7124\r\n");
+    cn0391.reset();
+    wait_ms(500);
+    pc.printf("Init the AD7124\r\n");
+    cn0391.init();
+    wait_ms(500);
+    pc.printf("Done\r\n");
+
+    cn0391.set_thermocouple_type(CN0391::CHANNEL_P1, new Thermocouple_Type_E);
+    cn0391.set_thermocouple_type(CN0391::CHANNEL_P2, new Thermocouple_Type_B);
+    cn0391.set_thermocouple_type(CN0391::CHANNEL_P3, new Thermocouple_Type_J);
+    cn0391.set_thermocouple_type(CN0391::CHANNEL_P4, new Thermocouple_Type_S);
+
+
+
+    pc.printf("Calibration current for channel 1: %f\r\n", cn0391.calibrate(CN0391::CHANNEL_P1));
+    pc.printf("Calibration current for channel 2: %f\r\n", cn0391.calibrate(CN0391::CHANNEL_P2));
+    pc.printf("Calibration current for channel 3: %f\r\n", cn0391.calibrate(CN0391::CHANNEL_P3));
+    pc.printf("Calibration current for channel 4: %f\r\n", cn0391.calibrate(CN0391::CHANNEL_P4));
+    while(1) {
+        pc.printf("Thermocouple temperature channel 1: %f\r\n", cn0391.read_channel(CN0391::CHANNEL_P1));
+        pc.printf("Thermocouple temperature channel 2: %f\r\n", cn0391.read_channel(CN0391::CHANNEL_P2));
+        pc.printf("Thermocouple temperature channel 3: %f\r\n", cn0391.read_channel(CN0391::CHANNEL_P3));
+        pc.printf("Thermocouple temperature channel 4: %f\r\n", cn0391.read_channel(CN0391::CHANNEL_P4));
+
+        pc.printf("\r\n");
+
+        wait_ms(1000);
+    }
+    return 0;
+}
--- a/examples/drvdiag/Makefile	Wed May 18 16:57:57 2016 +0300
+++ b/examples/drvdiag/Makefile	Thu Aug 18 14:46:42 2016 +0300
@@ -13,9 +13,9 @@
 ADI_LIBRARIES_PATH = ../../libraries
 MBED_LIBRARIES_PATH = ../../mbed
 DRIVER_WRAPPER_PATH = ./driver_wrapper
-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
+OBJECTS = ./main.o $(ADI_LIBRARIES_PATH)/ADT7310/ADT7310.o $(ADI_LIBRARIES_PATH)/CN0396/CN0396.o $(DRIVER_WRAPPER_PATH)/CN0396_Diag.o $(DRIVER_WRAPPER_PATH)/CN0397_Diag.o $(DRIVER_WRAPPER_PATH)/CN0398_Diag.o $(ADI_LIBRARIES_PATH)/CN0396/CN0396.o $(ADI_LIBRARIES_PATH)/CN0397/CN0397.o $(ADI_LIBRARIES_PATH)/CN0398/CN0398.o $(ADI_LIBRARIES_PATH)/Thermocouple/Thermocouple.o $(ADI_LIBRARIES_PATH)/Thermocouple/Thermocouple_lut.o $(ADI_LIBRARIES_PATH)/AD7798/AD7798.o $(ADI_LIBRARIES_PATH)/AD7124/AD7124.o $(ADI_LIBRARIES_PATH)/ADXL362/ADXL362.o $(DRIVER_WRAPPER_PATH)/AD7124_Diag.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)/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 
+INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/CN0396 -I$(ADI_LIBRARIES_PATH)/ADT7310 -I$(ADI_LIBRARIES_PATH)/CN0396 -I$(ADI_LIBRARIES_PATH)/CN0397  -I$(ADI_LIBRARIES_PATH)/CN0398 -I$(ADI_LIBRARIES_PATH)/Thermocouple -I$(ADI_LIBRARIES_PATH)/ADXL362 -I$(ADI_LIBRARIES_PATH)/AD7798 -I$(ADI_LIBRARIES_PATH)/AD7124 -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
@@ -45,9 +45,9 @@
 
 
 ifeq ($(DEBUG), 1)
-  CC_FLAGS += -DDEBUG -Og
+  CC_FLAGS += -DDEBUG -g3
 else
-  CC_FLAGS += -DNDEBUG -Og
+  CC_FLAGS += -DDEBUG -g3
 endif
 
 .PHONY: all clean lst size
--- a/examples/drvdiag/config.h	Wed May 18 16:57:57 2016 +0300
+++ b/examples/drvdiag/config.h	Thu Aug 18 14:46:42 2016 +0300
@@ -50,7 +50,11 @@
 //#define AD7790_PRESENT
 //#define AD5270_PRESENT
 //#define CN0357_PRESENT
-#define ADXL362_PRESENT
+//#define ADXL362_PRESENT
+//#define CN0398_PRESENT
+//#define CN0397_PRESENT
+#define CN0396_PRESENT
+//#define AD7124_PRESENT
 #define SPI_LOW_LEVEL
 
 #ifdef AD7791_PRESENT
@@ -83,6 +87,27 @@
 #include "ADXL362_Diag.h"
 #endif
 
+#ifdef AD7124_PRESENT
+#include "AD7124.h"
+#include "AD7124_Diag.h"
+#endif
+
+#ifdef CN0398_PRESENT
+#include "CN0398.h"
+#include "CN0398_Diag.h"
+#endif
+
+
+#ifdef CN0397_PRESENT
+#include "CN0397.h"
+#include "CN0397_Diag.h"
+#endif
+
+#ifdef CN0396_PRESENT
+#include "CN0396.h"
+#include "CN0396_Diag.h"
+#endif
+
 using namespace std;
 //------------------------------------
 // Hyperterminal configuration
@@ -91,7 +116,7 @@
 
 #ifdef SPI_LOW_LEVEL
 //DigitalOut CSA_pin(D8); // cs adc
-DigitalOut CSA_pin(D9); // cs accel
+DigitalOut CSA_pin(D4); // cs accel
 DigitalOut CSR_pin(D6); // cs rdac
 SPI spibus(SPI_MOSI, SPI_MISO, SPI_SCK);
 #endif
@@ -127,3 +152,27 @@
 ADXL362 adxl362(D9);
 ADXL362_Diag adxl362diag(adxl362);
 #endif
+
+
+#ifdef  AD7124_PRESENT
+AD7124 ad7124(D10);
+AD7124_Diag ad7124diag(ad7124);
+#endif
+
+#ifdef CN0398_PRESENT
+CN0398 cn0398(D10);
+CN0398_Diag cn0398diag(cn0398);
+
+#endif
+
+#ifdef CN0397_PRESENT
+CN0397 cn0397(D10);
+CN0397_Diag cn0397diag(cn0397);
+#endif
+
+#ifdef CN0396_PRESENT
+#include "AD5270_Diag.h"
+CN0396 cn0396(D10, D6, D4);
+CN0396_Diag cn0396diag(cn0396);
+AD5270_Diag ad5270diag(cn0396.rdac);
+#endif
--- a/examples/drvdiag/driver_wrapper/AD5270_Diag.h	Wed May 18 16:57:57 2016 +0300
+++ b/examples/drvdiag/driver_wrapper/AD5270_Diag.h	Thu Aug 18 14:46:42 2016 +0300
@@ -72,9 +72,9 @@
 
     void write_wiper_reg(void);
     void read_wiper_reg(void);
-
+    AD5270& dut;
 private:
-    AD5270& dut;
+
 };
 
 
--- a/examples/drvdiag/main.cpp	Wed May 18 16:57:57 2016 +0300
+++ b/examples/drvdiag/main.cpp	Thu Aug 18 14:46:42 2016 +0300
@@ -53,6 +53,7 @@
 #include "config.h"
 
 Serial pc(SERIAL_TX, SERIAL_RX);
+Serial test(D8, D2);
 vector<string> cmdbuffer;
 
 class commands
@@ -65,11 +66,13 @@
     void (*fktPtr)(void);
 };
 
+
 // *INDENT-OFF*
 const vector<commands> cmdlist = {
 		{"nop" ,            0, [](){ }},
+		/*
 		{"echo",commands::VAR, [](){ 	for(auto i = begin(cmdbuffer) + 1, e = end(cmdbuffer); i!=e; ++i) 
-										printf("%s ", i->c_str()); printf("\r\n");}},
+										printf("%s ", i->c_str()); printf("\r\n");}},*/
 
 		{"help",           0 , [](){ 	for(auto command : cmdlist) 
 										pc.printf("%s ",command.cmd_str.c_str()); }},
@@ -159,12 +162,125 @@
 		{"xlfr16", 0, [](){adxl362diag.fifo_read_u16();           }},
 		{"xlfrs",  0, [](){adxl362diag.fifo_scan();               }},
 		{"xlintinit",0,[](){adxl362diag.intinit();}},
-		{"xlawake",0,[](){adxl362diag.checkawake();}
-		},
+		{"xlawake",0,[](){adxl362diag.checkawake();}},
+#endif
+
+
+// UART
+		{"uart" ,     0,   [](){test.putc('\n');}},
+		{"uartecho" ,     1,   [](){test.printf(cmdbuffer[1].c_str());}},
+		{"uartlisten",0 ,  [](){
+			  char buff[100] = {0};
+			    size_t readPosition = 0;
+
+			    // read from console until newline
+			    while(1) {
+			    	buff[readPosition] = test.getc();
+			        if(buff[readPosition] == '\n' || buff[readPosition] == '\r') {
+			        	buff[readPosition] = ' ';
+			            break;
+			        }
+			        readPosition++;
+			    }
+			    readPosition++;
+			    buff[readPosition] = '\0';
+			    //create std::string from char buffer
+
+			pc.printf("%s",buff);}},
+
+#ifdef AD7124_PRESENT
+		{"adrst" ,      0,   [](){ad7124diag.reset();}},
+		{"adrd"  ,    1,   [](){ad7124diag.read_reg();}},
+		{"adrdd"  ,    0,   [](){ad7124diag.read_data();}},
+		{"adrdv"  ,    0,   [](){ad7124diag.read_volt();}},
+		{"adwr"  ,      2,   [](){ad7124diag.write_reg();}},
+		{"adsetup",0,[]() {ad7124diag.setup();pc.printf("setup done\r\n");ad7124diag.mvpInit();pc.printf("init done\r\n");}}
+
+
+
+#endif
+
+#ifdef CN0398_PRESENT
+		{"cnrst" ,      0,   [](){cn0398diag.reset();}},
+		{"cnrd"  ,    1,   [](){cn0398diag.read_reg();}},
+		/*{"cnrdd"  ,    0,   [](){ad7124diag.read_data();}},
+		{"cnrdv"  ,    0,   [](){ad7124diag.read_volt();}},*/
+		{"cnwr"  ,      2,   [](){cn0398diag.write_reg();}},
+		{"cnsetup",0,[]() {cn0398diag.init();pc.printf("init done\r\n");}},
+		{"cnled0",1,[]() {cn0398diag.toggle_output(1,strtol(cmdbuffer[1].c_str(), NULL, 16)); pc.printf("LED1 toggled"); }},
+		{"cnled1",1,[]() {cn0398diag.toggle_output(2,strtol(cmdbuffer[1].c_str(), NULL, 16));pc.printf("LED2 toggled");}},
+		{"cnoffp",0,[]() {cn0398diag.offsetph();pc.printf("OffsetVoltage measured");}},
+		{"cnpcal0",1,[]() {cn0398diag.calibp(0);pc.printf("calibration point 0");}},
+		{"cnpcal1",1,[]() {cn0398diag.calibp(1);pc.printf("calibration point 1");}},
+		{"cnreadp",0,[]() {cn0398diag.readp();pc.printf("calibration point 1");}},
+		{"cnreadm",0,[]() {cn0398diag.readm();pc.printf("calibration point 1");}},
+		{"cnreadt",0,[]() {cn0398diag.readt();pc.printf("Temperature Read");}},
+
+
 
 
 #endif
 
+#ifdef CN0397_PRESENT
+		{"cnrst" ,      0,   [](){cn0397diag.reset();}},
+	/*	{"cnrd"  ,    1,   [](){cn0397diag.read_reg();}},
+		{"cnwr"  ,      2,   [](){cn0397diag.write_reg();}},*/
+		{"cnsetup",0,[]() {cn0397diag.init();pc.printf("init done\r\n");}},
+		{"cnread",0,[]() {cn0397diag.read();pc.printf("calibration point 1");}},
+#endif
+
+#ifdef CN0396_PRESENT
+		{"cntrst" ,      0,   [](){pc.printf("reset temp sensor \r\n");cn0396diag.dut.temp.reset();}},
+		{"cntrds" ,      0,   [](){pc.printf("temp status: %x \r\n",cn0396diag.dut.temp.read_status());}},
+		{"cntrdt" ,      0,   [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_temp());}},
+		{"cntrdc" ,      0,   [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_config());}},
+		{"cntwcf" ,      1,   [](){pc.printf("wrote config: %x \r\n",strtol(cmdbuffer[1].c_str(), NULL, 16));
+									cn0396diag.dut.temp.write_config(strtol(cmdbuffer[1].c_str(), NULL, 16));}},
+		{"cnardi" ,      0,   [](){pc.printf("adid : %x \r\n",cn0396diag.dut.ad.get_register_value(3,1,true));}},
+
+				{"rdwrr" ,       1,   [](){ad5270diag.write_RDAC();}},
+				{"rdrdr" ,       0,   [](){ad5270diag.read_RDAC();}},
+				{"rdwrcmd" ,     2,   [](){ad5270diag.write_cmd();}},
+				{"rdsetz" ,      0,   [](){ad5270diag.set_HiZ();}},
+				{"rd50en",       0,   [](){ad5270diag.enable_50TP_programming();}},
+				{"rd50ds",       0,   [](){ad5270diag.disable_50TP_programming();}},
+				{"rd50st",       0,   [](){ad5270diag.store_50TP();}},
+				{"rd50a" ,       0,   [](){ad5270diag.read_50TP_last_address();}},
+				{"rd50m" ,       1,   [](){ad5270diag.read_50TP_memory();}},
+				{"rdwrc" ,       1,   [](){ad5270diag.write_ctrl_reg();}},
+				{"rdrdc" ,       0,   [](){ad5270diag.read_ctrl_reg();}},
+				{"rdrst" ,       0,   [](){ad5270diag.reset_RDAC();}},
+				{"rdchm" ,       1,   [](){ad5270diag.change_mode();}},
+				{"rdwrw" ,       1,   [](){ad5270diag.write_wiper_reg();}},
+				{"rdrdw" ,       0,   [](){ad5270diag.read_wiper_reg();}},
+				{"rddc" ,       0,   [](){	uint8_t daisy[4]={0x08,0x00,0x08,0x00};
+											ad5270diag.dut.daisy_chain(daisy,4);
+											for(uint8_t i=0;i<4;i++)
+											{
+												pc.printf("%x ",daisy[i]);
+											}
+											pc.printf("\r\n");
+				}
+				},
+		{"trdid",0,[](){uint8_t val = cn0396diag.dut.temp.read_id();
+		pc.printf("%x \r\n",val);}},
+		{"ardid",0,[](){uint8_t val = cn0396diag.dut.ad.get_register_value(AD7798_REG_ID,1);
+						pc.printf("%x \r\n",val);}},
+		{"adrst",0,[](){cn0396diag.dut.ad.reset();pc.printf("reseted ADC \r\n");}},
+		{"cnrst",0,[](){
+						uint8_t daisy1[4]={0x08,0x01,0x08,0x01};
+						cn0396diag.dut.rdac.daisy_chain(daisy1,4);
+						uint8_t daisy2[4]={0,0,0,0};
+						cn0396diag.dut.rdac.daisy_chain(daisy2,4);
+						cn0396diag.dut.ad.reset();
+						cn0396diag.dut.temp.reset();
+		                pc.printf("reseted ADC \r\n");
+		}},
+
+
+
+
+#endif
 };
 // *INDENT-ON*
 
@@ -223,8 +339,17 @@
 int main()
 
 {
+    pc.baud(115200);
+    test.baud(76800);
     // ad7791.frequency(100000);
     pc.printf("\r\n#### DrvDiag ####\r\n");
+    cn0396.ad.frequency(500000);
+    cn0396.rdac.frequency(500000);
+    cn0396.temp.frequency(500000);
+
+    cn0396.csad = true;
+    cn0396.csrdac = true;
+    cn0396.cstemp = true;
 
     while(1) {
         pc.printf("\r\nTX> ");