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:
Wed Apr 20 16:35:44 2016 +0300
Parent:
6:74651acebcc7
Child:
8:6e96c6b3c83f
Commit message:
Added drvdiag tool

Changed in this revision

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 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/driver_wrapper/ad7790_diag.cpp Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/ad7790_diag.h Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/cn0357_diag.cpp Show annotated file Show diff for this revision Revisions of this file
examples/drvdiag/driver_wrapper/cn0357_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/drvdiag/Makefile	Wed Apr 20 16:35:44 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 = drvdiag
+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)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)//AD5270/AD5270.o $(ADI_LIBRARIES_PATH)//cn0357/cn0357.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)/cn0357 -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
+
+############################################################################### 
+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++11 -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)
+
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/config.h	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,47 @@
+
+#define AD7790_PRESENT
+#define AD5270_PRESENT
+#define CN0357_PRESENT
+#define SPI_LOW_LEVEL
+
+#ifdef AD7790_PRESENT
+#include "AD7790.h"
+#include "ad7790_diag.h"
+#endif
+
+#ifdef AD5270_PRESENT
+#include "ad5270.h"
+#include "ad5270_diag.h"
+#endif
+
+#ifdef CN0357_PRESENT
+#include "cn0357.h"
+#include "CN0357_Diag.h"
+#endif
+
+using namespace std;
+//------------------------------------
+// Hyperterminal configuration
+// 9600 bauds, 8-bit data, no parity
+//------------------------------------
+
+#ifdef SPI_LOW_LEVEL
+DigitalOut CSA_pin(D8); // cs adc
+DigitalOut CSR_pin(D6); // cs rdac
+SPI spibus(SPI_MOSI, SPI_MISO, SPI_SCK);
+#endif
+
+#ifdef AD7790_PRESENT
+AD7790 ad7790(1.2, D8);
+AD7790_Diag ad7790diag(ad7790);
+#endif
+
+#ifdef AD5270_PRESENT
+AD5270 ad5270(D6, 20000);
+AD5270_Diag ad5270diag(ad5270);
+#endif
+
+#ifdef  CN0357_PRESENT
+CN0357 cn0357;
+CN0357_Diag cn0357diag(cn0357);
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/ad5270_diag.cpp	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,96 @@
+#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/ad5270_diag.h	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,36 @@
+
+#ifndef AD5270_DIAG_H_
+#define AD5270_DIAG_H_
+#include "ad5270.h"
+
+class AD5270_Diag
+{
+public:
+    AD5270_Diag(AD5270& ad);
+    void enable_50TP_programming(void);
+    void store_50TP(void);
+    void disable_50TP_programming(void);
+
+    void write_RDAC(void);
+    void read_RDAC(void);
+    void write_cmd(void);
+    void set_HiZ(void);
+
+    void read_50TP_last_address(void);
+    void read_50TP_memory(void);
+
+    void write_ctrl_reg(void);
+    void read_ctrl_reg(void);
+
+    void reset_RDAC(void);
+    void change_mode(void);
+
+    void write_wiper_reg(void);
+    void read_wiper_reg(void);
+
+private:
+    AD5270& dut;
+};
+
+
+#endif /* AD5270_DIAG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/ad7790_diag.cpp	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,82 @@
+#include "mbed.h"
+#include <stdio.h>
+#include <vector>
+#include <string>
+#include "AD7790_Diag.h"
+
+extern Serial pc;
+extern vector<string> cmdbuffer;
+
+AD7790_Diag::AD7790_Diag(AD7790& ad) : dut(ad)
+{
+
+}
+
+void AD7790_Diag::init()
+{
+
+}
+void AD7790_Diag::reset()
+{
+    dut.reset();
+    pc.printf("Reseted AD7790");
+}
+
+void AD7790_Diag::write_mode()
+{
+    uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    dut.write_mode_reg(regVal);
+    pc.printf("Wrote mode");
+}
+void AD7790_Diag::read_mode()
+{
+    pc.printf("Mode reg: %x ", dut.read_mode_reg());
+}
+
+void AD7790_Diag::write_filter()
+{
+    uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    dut.write_filter_reg(regVal);
+    pc.printf("Wrote filter");
+}
+void AD7790_Diag::read_filter()
+{
+    pc.printf("Returned: %x ", dut.read_filter_reg());
+}
+void AD7790_Diag::read_data()
+{
+    pc.printf("Data reg: %x ", dut.read_data_reg());
+}
+
+void AD7790_Diag::read_status()
+{
+    pc.printf("Status reg: %x ", dut.read_status_reg());
+}
+
+void AD7790_Diag::read_u16()
+{
+    pc.printf("Data reg: %x ", dut.read_u16());
+}
+void AD7790_Diag::read_voltage()
+{
+    pc.printf("Voltage: %f ", dut.read_voltage());
+}
+void AD7790_Diag::set_continous_mode()
+{
+    uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    dut.set_conversion_mode(static_cast<AD7790::AD7790Mode_t>(regVal));
+    pc.printf("Mode set to %d", regVal);
+}
+void AD7790_Diag::set_reference_voltage()
+{
+    float ref = strtof(cmdbuffer[1].c_str(), NULL);
+    dut.set_reference_voltage(ref);
+    pc.printf("Reference Voltage set to %f", ref);
+}
+
+void AD7790_Diag::set_channel()
+{
+    uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16);
+    dut.set_channel(static_cast<AD7790::AD7790Channel_t>(regVal));
+    pc.printf("Mode set to %d", regVal);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/ad7790_diag.h	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,42 @@
+/*
+ * ad7790.h
+ *
+ *  Created on: Apr 15, 2016
+ *      Author: asuciu
+ */
+
+#ifndef AD7790_DIAG_H_
+#define AD7790_DIAG_H_
+
+#include "AD7790.h"
+
+class AD7790_Diag
+{
+
+public:
+    AD7790_Diag(AD7790& ad);
+    void init(void);
+    void reset(void);
+    void write_mode(void);
+    void write_filter(void);
+    void read_mode(void);
+    void read_filter(void);
+    void read_data(void);
+    void read_status(void);
+    void read_u16(void);
+    void read_voltage(void);
+    void set_continous_mode(void);
+    void set_reference_voltage(void);
+    void set_channel(void);
+
+private:
+    AD7790& dut;
+};
+
+/*
+
+*/
+
+
+
+#endif /* AD7790_DIAG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/cn0357_diag.cpp	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,32 @@
+#include "mbed.h"
+#include <stdio.h>
+#include <vector>
+#include <string>
+#include "CN0357_Diag.h"
+
+extern Serial pc;
+extern vector<string> cmdbuffer;
+
+CN0357_Diag::CN0357_Diag(CN0357& cn) : dut(cn)
+{
+
+}
+void CN0357_Diag::set_RDAC()
+{
+    float res = strtof(cmdbuffer[1].c_str(), NULL);
+    dut.set_RDAC_value(res);
+    pc.printf("Wrote %f", res);
+
+}
+void CN0357_Diag::read_ppm(void)
+{
+    pc.printf("Wrote %f", dut.read_ppm());
+}
+
+void CN0357_Diag::set_sensor_param(void)
+{
+    float range = strtof(cmdbuffer[1].c_str(), NULL);
+    float sens = strtof(cmdbuffer[2].c_str(), NULL);
+    sens = sens * pow(10, -9);
+    pc.printf("Suggested RDAC val: %f ", dut.set_sensor_parameters(range, sens));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/cn0357_diag.h	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,21 @@
+
+#ifndef CN0357_DIAG_H_
+#define CN0357_DIAG_H_
+#include "CN0357.h"
+
+class CN0357_Diag
+{
+public:
+    CN0357_Diag(CN0357& cn);
+
+    void set_RDAC(void);
+    void read_ppm(void);
+    void set_sensor_param(void);
+
+
+private:
+    CN0357& dut;
+};
+
+
+#endif /* AD5270_DIAG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/main.cpp	Wed Apr 20 16:35:44 2016 +0300
@@ -0,0 +1,148 @@
+#include "mbed.h"
+#include "stdio.h"
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "config.h"
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+vector<string> cmdbuffer;
+
+class commands
+{
+public:
+    commands(string str, int p, void (*h)() ) : cmd_str(str), nr_of_param(p), fktPtr(h)	{	}
+    const static int VAR = -1; // variable number of params
+    string cmd_str;
+    int nr_of_param;
+    void (*fktPtr)(void);
+};
+
+// *INDENT-OFF*
+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");}},
+
+		{"help",           0 , [](){ 	for(auto command : cmdlist) 
+										pc.printf("%s ",command.cmd_str.c_str()); }},
+		/* #### SPI ####*/
+#ifdef SPI_LOW_LEVEL
+		{"csa",             0, [](){ 	spibus.format(8, 3);CSA_pin = !CSA_pin;  wait_us(2); 
+									 	pc.printf("CS ADC pin set %s", ((CSA_pin.read()) ? "high" : "low")  ); }},
+		{"csr",             0, [](){ 	spibus.format(8, 1);CSR_pin = !CSR_pin;  wait_us(2); 
+										pc.printf("CS RDAC pin set %s", ((CSR_pin.read()) ? "high" : "low")  );} },
+		{"spi",             1, [](){ 	uint8_t spibyte =  strtol(cmdbuffer[1].c_str(), NULL, 16);
+									    pc.printf("writing 0x%x to SPI", spibyte);
+									    pc.printf("\r\nreturned: 0x%x ", spibus.write(spibyte)); }},
+#endif
+		/* #### AD7790 #### */
+
+#ifdef AD7790_PRESENT
+		{"adrst",        0,   [](){ad7790diag.reset();}},
+		{"adwrm",        1,   [](){ad7790diag.write_mode();}},
+		{"adrdm",        0,   [](){ad7790diag.read_mode();}},
+		{"adwrf",        1,   [](){ad7790diag.write_filter();}},
+		{"adrdf",        0,   [](){ad7790diag.read_filter();}},
+		{"adrdd",        0,   [](){ad7790diag.read_data();}},
+		{"adrds",        0,   [](){ad7790diag.read_status();}},
+		{"adread",       0,   [](){ad7790diag.read_u16();}},
+		{"adreadv",      0,   [](){ad7790diag.read_voltage();}},
+		{"adsetc",       1,   [](){ad7790diag.set_continous_mode();}},
+		{"adsetref",     1,   [](){ad7790diag.set_reference_voltage();}},
+		{"adsetch",      1,   [](){ad7790diag.set_channel();}},
+#endif
+
+#ifdef AD5270_PRESENT
+		{"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();}},
+#endif
+
+#ifdef CN0357_PRESENT
+		{"cnwrdac" ,      1,   [](){cn0357diag.set_RDAC();}},
+		{"cnrppm"  ,      0,   [](){cn0357diag.read_ppm();}},
+		{"cnparam"  ,      2,   [](){cn0357diag.set_sensor_param();}}
+#endif
+
+};
+// *INDENT-ON*
+
+
+
+void read_from_console()
+{
+    char buffer[100] = {0};
+    size_t readPosition = 0;
+
+    // read from console until newline
+    while(1) {
+        buffer[readPosition] = pc.getc();
+        if(buffer[readPosition] == '\n' || buffer[readPosition] == '\r') {
+            buffer[readPosition] = ' ';
+            break;
+        }
+        readPosition++;
+    }
+    readPosition++;
+    buffer[readPosition] = '\0';
+    //create std::string from char buffer
+    string s(buffer);
+
+    // create std::vector of std:string, each string contains parameter
+    size_t pos = 0;
+    string delimiter = " ";
+    string token;
+    while ((pos = s.find(delimiter)) != std::string::npos) {
+        token = s.substr(0, pos);
+        cmdbuffer.push_back(token);
+        s.erase(0, pos + delimiter.length());
+    }
+
+}
+
+void run_command()
+{
+    for(auto i : cmdlist) {
+        if(i.cmd_str == cmdbuffer[0]) {
+            if(static_cast<int>(cmdbuffer.size()) - 1 == i.nr_of_param || i.nr_of_param == commands::VAR) {
+                pc.printf("RX> ");
+                i.fktPtr();
+            } else {
+                pc.printf("RX> ");
+                pc.printf("Command %s expects %d parameters, found %d", i.cmd_str.c_str(), i.nr_of_param, cmdbuffer.size() - 1);
+            }
+            return;
+        }
+    }
+    pc.printf("RX> ");
+    pc.printf("Command %s not found", cmdbuffer[0].c_str());
+
+}
+
+int main()
+{
+
+    pc.printf("\r\n#### DrvDiag ####\r\n");
+    while(1) {
+        pc.printf("\r\nTX> ");
+        read_from_console();
+        run_command();
+        cmdbuffer.clear();
+    }
+
+}
+